diff --git a/fileUploader.xcodeproj/project.pbxproj b/fileUploader.xcodeproj/project.pbxproj index cd28549..0c92ef6 100644 --- a/fileUploader.xcodeproj/project.pbxproj +++ b/fileUploader.xcodeproj/project.pbxproj @@ -7,6 +7,19 @@ objects = { /* Begin PBXBuildFile section */ + 3D4679C9196DDABC00B142B5 /* ELCAlbumPickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */; }; + 3D4679CA196DDABC00B142B5 /* ELCAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B6196DDABC00B142B5 /* ELCAsset.m */; }; + 3D4679CB196DDABC00B142B5 /* ELCAssetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */; }; + 3D4679CC196DDABC00B142B5 /* ELCAssetTablePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */; }; + 3D4679CD196DDABC00B142B5 /* ELCImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */; }; + 3D4679CE196DDABC00B142B5 /* ELCAlbumPickerController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */; }; + 3D4679CF196DDABC00B142B5 /* ELCAssetPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */; }; + 3D4679D0196DDABC00B142B5 /* ELCAssetTablePicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */; }; + 3D4679D1196DDABC00B142B5 /* Overlay.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C3196DDABC00B142B5 /* Overlay.png */; }; + 3D4679D2196DDABC00B142B5 /* Overlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */; }; + 3D4679D3196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */; }; + 3D4679D4196DDABC00B142B5 /* ELCImagePickerDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */; }; + 3D4679D6196DDD7000B142B5 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */; }; 6D2FB3AB155819D9006FB7AD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AA155819D9006FB7AD /* UIKit.framework */; }; 6D2FB3AD155819D9006FB7AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AC155819D9006FB7AD /* Foundation.framework */; }; 6D2FB3AF155819D9006FB7AD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AE155819D9006FB7AD /* CoreGraphics.framework */; }; @@ -31,6 +44,28 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 3D4679B3196DDABC00B142B5 /* ELCAlbumPickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAlbumPickerController.h; sourceTree = ""; }; + 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAlbumPickerController.m; sourceTree = ""; }; + 3D4679B5196DDABC00B142B5 /* ELCAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAsset.h; sourceTree = ""; }; + 3D4679B6196DDABC00B142B5 /* ELCAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAsset.m; sourceTree = ""; }; + 3D4679B7196DDABC00B142B5 /* ELCAssetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetCell.h; sourceTree = ""; }; + 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAssetCell.m; sourceTree = ""; }; + 3D4679B9196DDABC00B142B5 /* ELCAssetPickerFilterDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetPickerFilterDelegate.h; sourceTree = ""; }; + 3D4679BA196DDABC00B142B5 /* ELCAssetSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetSelectionDelegate.h; sourceTree = ""; }; + 3D4679BB196DDABC00B142B5 /* ELCAssetTablePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetTablePicker.h; sourceTree = ""; }; + 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAssetTablePicker.m; sourceTree = ""; }; + 3D4679BD196DDABC00B142B5 /* ELCImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerController.h; sourceTree = ""; }; + 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerController.m; sourceTree = ""; }; + 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAlbumPickerController.xib; sourceTree = ""; }; + 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAssetPicker.xib; sourceTree = ""; }; + 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAssetTablePicker.xib; sourceTree = ""; }; + 3D4679C3196DDABC00B142B5 /* Overlay.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Overlay.png; sourceTree = ""; }; + 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Overlay@2x.png"; sourceTree = ""; }; + 3D4679C5196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerDemoAppDelegate.h; sourceTree = ""; }; + 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerDemoAppDelegate.m; sourceTree = ""; }; + 3D4679C7196DDABC00B142B5 /* ELCImagePickerDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerDemoViewController.h; sourceTree = ""; }; + 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerDemoViewController.m; sourceTree = ""; }; + 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; 6D2FB3A6155819D9006FB7AD /* fileUploader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fileUploader.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D2FB3AA155819D9006FB7AD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 6D2FB3AC155819D9006FB7AD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -74,6 +109,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3D4679D6196DDD7000B142B5 /* AssetsLibrary.framework in Frameworks */, 6D2FB3EE15581B2C006FB7AD /* SystemConfiguration.framework in Frameworks */, 6D2FB3EC15581B0B006FB7AD /* CFNetwork.framework in Frameworks */, 6D2FB3EA15581AF0006FB7AD /* Security.framework in Frameworks */, @@ -86,6 +122,51 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3D4679B1196DDABC00B142B5 /* CustomPickerClasses */ = { + isa = PBXGroup; + children = ( + 3D4679B2196DDABC00B142B5 /* ELCImagePicker */, + 3D4679C5196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.h */, + 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */, + 3D4679C7196DDABC00B142B5 /* ELCImagePickerDemoViewController.h */, + 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */, + ); + name = CustomPickerClasses; + path = Classes; + sourceTree = ""; + }; + 3D4679B2196DDABC00B142B5 /* ELCImagePicker */ = { + isa = PBXGroup; + children = ( + 3D4679B3196DDABC00B142B5 /* ELCAlbumPickerController.h */, + 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */, + 3D4679B5196DDABC00B142B5 /* ELCAsset.h */, + 3D4679B6196DDABC00B142B5 /* ELCAsset.m */, + 3D4679B7196DDABC00B142B5 /* ELCAssetCell.h */, + 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */, + 3D4679B9196DDABC00B142B5 /* ELCAssetPickerFilterDelegate.h */, + 3D4679BA196DDABC00B142B5 /* ELCAssetSelectionDelegate.h */, + 3D4679BB196DDABC00B142B5 /* ELCAssetTablePicker.h */, + 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */, + 3D4679BD196DDABC00B142B5 /* ELCImagePickerController.h */, + 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */, + 3D4679BF196DDABC00B142B5 /* Resources */, + ); + path = ELCImagePicker; + sourceTree = ""; + }; + 3D4679BF196DDABC00B142B5 /* Resources */ = { + isa = PBXGroup; + children = ( + 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */, + 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */, + 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */, + 3D4679C3196DDABC00B142B5 /* Overlay.png */, + 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; 6D2FB39B155819D9006FB7AD = { isa = PBXGroup; children = ( @@ -111,6 +192,7 @@ 6D2FB3A9155819D9006FB7AD /* Frameworks */ = { isa = PBXGroup; children = ( + 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */, 6D2FB3AA155819D9006FB7AD /* UIKit.framework */, 6D2FB3AC155819D9006FB7AD /* Foundation.framework */, 6D2FB3AE155819D9006FB7AD /* CoreGraphics.framework */, @@ -128,6 +210,7 @@ 6D2FB40E15582939006FB7AD /* fileUploadEngine.h */, 6D2FB40F15582939006FB7AD /* fileUploadEngine.m */, 6D2FB3C0155819D9006FB7AD /* fileUploadDemoViewController.m */, + 3D4679B1196DDABC00B142B5 /* CustomPickerClasses */, 6D2FB3B1155819D9006FB7AD /* Supporting Files */, ); path = fileUploader; @@ -236,9 +319,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3D4679D0196DDABC00B142B5 /* ELCAssetTablePicker.xib in Resources */, + 3D4679CE196DDABC00B142B5 /* ELCAlbumPickerController.xib in Resources */, + 3D4679D1196DDABC00B142B5 /* Overlay.png in Resources */, 6D2FB3B5155819D9006FB7AD /* InfoPlist.strings in Resources */, 6D2FB3BE155819D9006FB7AD /* MainStoryboard.storyboard in Resources */, + 3D4679D2196DDABC00B142B5 /* Overlay@2x.png in Resources */, 6DAF3F5B166BC6F400CE584A /* Default-568h@2x.png in Resources */, + 3D4679CF196DDABC00B142B5 /* ELCAssetPicker.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -250,17 +338,24 @@ buildActionMask = 2147483647; files = ( 6D2FB3B7155819D9006FB7AD /* main.m in Sources */, + 3D4679CA196DDABC00B142B5 /* ELCAsset.m in Sources */, 6D2FB3BB155819D9006FB7AD /* fileUploadDemoAppDelegate.m in Sources */, 6D2FB3C1155819D9006FB7AD /* fileUploadDemoViewController.m in Sources */, 6D2FB41015582939006FB7AD /* fileUploadEngine.m in Sources */, + 3D4679CB196DDABC00B142B5 /* ELCAssetCell.m in Sources */, 6D2FB42B15596952006FB7AD /* NSDate+RFC1123.m in Sources */, + 3D4679D4196DDABC00B142B5 /* ELCImagePickerDemoViewController.m in Sources */, 6D2FB42C15596952006FB7AD /* NSDictionary+RequestEncoding.m in Sources */, 6D2FB42D15596952006FB7AD /* NSString+MKNetworkKitAdditions.m in Sources */, 6D2FB42E15596952006FB7AD /* UIAlertView+MKNetworkKitAdditions.m in Sources */, + 3D4679CC196DDABC00B142B5 /* ELCAssetTablePicker.m in Sources */, 6D2FB42F15596952006FB7AD /* MKNetworkEngine.m in Sources */, + 3D4679D3196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m in Sources */, + 3D4679C9196DDABC00B142B5 /* ELCAlbumPickerController.m in Sources */, 6D2FB43015596952006FB7AD /* MKNetworkOperation.m in Sources */, 6D2FB43115596952006FB7AD /* Reachability.m in Sources */, 6DAF3F5F166BC73200CE584A /* NSData+MKBase64.m in Sources */, + 3D4679CD196DDABC00B142B5 /* ELCImagePickerController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout b/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout new file mode 100644 index 0000000..cd31086 --- /dev/null +++ b/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + CA0945FB-903C-456F-956C-8783505CCD5C + IDESourceControlProjectName + fileUploader + IDESourceControlProjectOriginsDictionary + + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + https://github.com/dimohamdy/fileUploader.git + + IDESourceControlProjectPath + fileUploader.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + ../.. + + IDESourceControlProjectURL + https://github.com/dimohamdy/fileUploader.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + IDESourceControlWCCName + fileUploader + + + + diff --git a/fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate b/fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..e45e282 Binary files /dev/null and b/fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..8154775 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,39 @@ + + + + + + + + + + + + + diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme new file mode 100644 index 0000000..89a0955 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..60465f2 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + fileUploader.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 6D2FB3A5155819D9006FB7AD + + primary + + + + + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h new file mode 100755 index 0000000..5b864bb --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h @@ -0,0 +1,22 @@ +// +// AlbumPickerController.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import +#import "ELCAssetSelectionDelegate.h" +#import "ELCAssetPickerFilterDelegate.h" + +@interface ELCAlbumPickerController : UITableViewController + +@property (nonatomic, weak) id parent; +@property (nonatomic, strong) NSMutableArray *assetGroups; + +// optional, can be used to filter the assets displayed +@property (nonatomic, weak) id assetPickerFilterDelegate; + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m new file mode 100755 index 0000000..870d05d --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m @@ -0,0 +1,162 @@ +// +// AlbumPickerController.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAlbumPickerController.h" +#import "ELCImagePickerController.h" +#import "ELCAssetTablePicker.h" + +@interface ELCAlbumPickerController () + +@property (nonatomic, strong) ALAssetsLibrary *library; + +@end + +@implementation ELCAlbumPickerController + +//Using auto synthesizers + +#pragma mark - +#pragma mark View lifecycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self.navigationItem setTitle:@"Loading..."]; + + UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self.parent action:@selector(cancelImagePicker)]; + [self.navigationItem setRightBarButtonItem:cancelButton]; + + NSMutableArray *tempArray = [[NSMutableArray alloc] init]; + self.assetGroups = tempArray; + + ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init]; + self.library = assetLibrary; + + // Load Albums into assetGroups + dispatch_async(dispatch_get_main_queue(), ^ + { + @autoreleasepool { + + // Group enumerator Block + void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) + { + if (group == nil) { + return; + } + + // added fix for camera albums order + NSString *sGroupPropertyName = (NSString *)[group valueForProperty:ALAssetsGroupPropertyName]; + NSUInteger nType = [[group valueForProperty:ALAssetsGroupPropertyType] intValue]; + + if ([[sGroupPropertyName lowercaseString] isEqualToString:@"camera roll"] && nType == ALAssetsGroupSavedPhotos) { + [self.assetGroups insertObject:group atIndex:0]; + } + else { + [self.assetGroups addObject:group]; + } + + // Reload albums + [self performSelectorOnMainThread:@selector(reloadTableView) withObject:nil waitUntilDone:YES]; + }; + + // Group Enumerator Failure Block + void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) { + + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Album Error: %@ - %@", [error localizedDescription], [error localizedRecoverySuggestion]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; + [alert show]; + + NSLog(@"A problem occured %@", [error description]); + }; + + // Enumerate Albums + [self.library enumerateGroupsWithTypes:ALAssetsGroupAll + usingBlock:assetGroupEnumerator + failureBlock:assetGroupEnumberatorFailure]; + + } + }); +} + +- (void)reloadTableView +{ + [self.tableView reloadData]; + [self.navigationItem setTitle:@"Select an Album"]; +} + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount +{ + return [self.parent shouldSelectAsset:asset previousCount:previousCount]; +} + +- (void)selectedAssets:(NSArray*)assets +{ + [_parent selectedAssets:assets]; +} + +#pragma mark - +#pragma mark Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Return the number of rows in the section. + return [self.assetGroups count]; +} + + +// Customize the appearance of table view cells. +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + // Get count + ALAssetsGroup *g = (ALAssetsGroup*)[self.assetGroups objectAtIndex:indexPath.row]; + [g setAssetsFilter:[ALAssetsFilter allPhotos]]; + NSInteger gCount = [g numberOfAssets]; + + cell.textLabel.text = [NSString stringWithFormat:@"%@ (%ld)",[g valueForProperty:ALAssetsGroupPropertyName], (long)gCount]; + [cell.imageView setImage:[UIImage imageWithCGImage:[(ALAssetsGroup*)[self.assetGroups objectAtIndex:indexPath.row] posterImage]]]; + [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; + + return cell; +} + +#pragma mark - +#pragma mark Table view delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + ELCAssetTablePicker *picker = [[ELCAssetTablePicker alloc] initWithNibName: nil bundle: nil]; + picker.parent = self; + + picker.assetGroup = [self.assetGroups objectAtIndex:indexPath.row]; + [picker.assetGroup setAssetsFilter:[ALAssetsFilter allPhotos]]; + + picker.assetPickerFilterDelegate = self.assetPickerFilterDelegate; + + [self.navigationController pushViewController:picker animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 57; +} + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAsset.h b/fileUploader/Classes/ELCImagePicker/ELCAsset.h new file mode 100755 index 0000000..ebef368 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAsset.h @@ -0,0 +1,29 @@ +// +// Asset.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import + +@class ELCAsset; + +@protocol ELCAssetDelegate + +@optional +- (void)assetSelected:(ELCAsset *)asset; +- (BOOL)shouldSelectAsset:(ELCAsset *)asset; +@end + + +@interface ELCAsset : NSObject + +@property (nonatomic, strong) ALAsset *asset; +@property (nonatomic, weak) id parent; +@property (nonatomic, assign) BOOL selected; + +- (id)initWithAsset:(ALAsset *)asset; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAsset.m b/fileUploader/Classes/ELCImagePicker/ELCAsset.m new file mode 100755 index 0000000..12413af --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAsset.m @@ -0,0 +1,49 @@ +// +// Asset.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAsset.h" +#import "ELCAssetTablePicker.h" + +@implementation ELCAsset + +//Using auto synthesizers + +- (id)initWithAsset:(ALAsset*)asset +{ + self = [super init]; + if (self) { + self.asset = asset; + _selected = NO; + } + return self; +} + +- (void)toggleSelection +{ + self.selected = !self.selected; +} + +- (void)setSelected:(BOOL)selected +{ + if (selected) { + if ([_parent respondsToSelector:@selector(shouldSelectAsset:)]) { + if (![_parent shouldSelectAsset:self]) { + return; + } + } + } + _selected = selected; + if (selected) { + if (_parent != nil && [_parent respondsToSelector:@selector(assetSelected:)]) { + [_parent assetSelected:self]; + } + } +} + + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h new file mode 100755 index 0000000..b907156 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h @@ -0,0 +1,15 @@ +// +// AssetCell.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import + + +@interface ELCAssetCell : UITableViewCell + +- (void)setAssets:(NSArray *)assets; + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m new file mode 100755 index 0000000..2a6706a --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m @@ -0,0 +1,117 @@ +// +// AssetCell.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAssetCell.h" +#import "ELCAsset.h" + +@interface ELCAssetCell () + +@property (nonatomic, strong) NSArray *rowAssets; +@property (nonatomic, strong) NSMutableArray *imageViewArray; +@property (nonatomic, strong) NSMutableArray *overlayViewArray; + +@end + +@implementation ELCAssetCell + +//Using auto synthesizers + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; + if (self) { + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)]; + [self addGestureRecognizer:tapRecognizer]; + + NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:4]; + self.imageViewArray = mutableArray; + + NSMutableArray *overlayArray = [[NSMutableArray alloc] initWithCapacity:4]; + self.overlayViewArray = overlayArray; + } + return self; +} + +- (void)setAssets:(NSArray *)assets +{ + self.rowAssets = assets; + for (UIImageView *view in _imageViewArray) { + [view removeFromSuperview]; + } + for (UIImageView *view in _overlayViewArray) { + [view removeFromSuperview]; + } + //set up a pointer here so we don't keep calling [UIImage imageNamed:] if creating overlays + UIImage *overlayImage = nil; + for (int i = 0; i < [_rowAssets count]; ++i) { + + ELCAsset *asset = [_rowAssets objectAtIndex:i]; + + if (i < [_imageViewArray count]) { + UIImageView *imageView = [_imageViewArray objectAtIndex:i]; + imageView.image = [UIImage imageWithCGImage:asset.asset.thumbnail]; + } else { + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:asset.asset.thumbnail]]; + [_imageViewArray addObject:imageView]; + } + + if (i < [_overlayViewArray count]) { + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + overlayView.hidden = asset.selected ? NO : YES; + } else { + if (overlayImage == nil) { + overlayImage = [UIImage imageNamed:@"Overlay.png"]; + } + UIImageView *overlayView = [[UIImageView alloc] initWithImage:overlayImage]; + [_overlayViewArray addObject:overlayView]; + overlayView.hidden = asset.selected ? NO : YES; + } + } +} + +- (void)cellTapped:(UITapGestureRecognizer *)tapRecognizer +{ + CGPoint point = [tapRecognizer locationInView:self]; + CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; + CGFloat startX = (self.bounds.size.width - totalWidth) / 2; + + CGRect frame = CGRectMake(startX, 2, 75, 75); + + for (int i = 0; i < [_rowAssets count]; ++i) { + if (CGRectContainsPoint(frame, point)) { + ELCAsset *asset = [_rowAssets objectAtIndex:i]; + asset.selected = !asset.selected; + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + overlayView.hidden = !asset.selected; + break; + } + frame.origin.x = frame.origin.x + frame.size.width + 4; + } +} + +- (void)layoutSubviews +{ + CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; + CGFloat startX = (self.bounds.size.width - totalWidth) / 2; + + CGRect frame = CGRectMake(startX, 2, 75, 75); + + for (int i = 0; i < [_rowAssets count]; ++i) { + UIImageView *imageView = [_imageViewArray objectAtIndex:i]; + [imageView setFrame:frame]; + [self addSubview:imageView]; + + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + [overlayView setFrame:frame]; + [self addSubview:overlayView]; + + frame.origin.x = frame.origin.x + frame.size.width + 4; + } +} + + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h b/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h new file mode 100755 index 0000000..478c256 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h @@ -0,0 +1,12 @@ +// +// ELCAssetPickerFilterDelegate.h + +@class ELCAsset; +@class ELCAssetTablePicker; + +@protocol ELCAssetPickerFilterDelegate + +// respond YES/NO to filter out (not show the asset) +-(BOOL)assetTablePicker:(ELCAssetTablePicker *)picker isAssetFilteredOut:(ELCAsset *)elcAsset; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h b/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h new file mode 100755 index 0000000..47d85d7 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h @@ -0,0 +1,18 @@ +// +// ELCAssetSelectionDelegate.h +// ELCImagePickerDemo +// +// Created by JN on 9/6/12. +// Copyright (c) 2012 ELC Technologies. All rights reserved. +// + +#import + +@class ELCAsset; + +@protocol ELCAssetSelectionDelegate + +- (void)selectedAssets:(NSArray *)assets; +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount; + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h new file mode 100755 index 0000000..8148ef6 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h @@ -0,0 +1,31 @@ +// +// ELCAssetTablePicker.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import +#import "ELCAsset.h" +#import "ELCAssetSelectionDelegate.h" +#import "ELCAssetPickerFilterDelegate.h" + +@interface ELCAssetTablePicker : UITableViewController + +@property (nonatomic, weak) id parent; +@property (nonatomic, strong) ALAssetsGroup *assetGroup; +@property (nonatomic, strong) NSMutableArray *elcAssets; +@property (nonatomic, strong) IBOutlet UILabel *selectedAssetsLabel; +@property (nonatomic, assign) BOOL singleSelection; +@property (nonatomic, assign) BOOL immediateReturn; + +// optional, can be used to filter the assets displayed +@property(nonatomic, weak) id assetPickerFilterDelegate; + +- (int)totalSelectedAssets; +- (void)preparePhotos; + +- (void)doneAction:(id)sender; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m new file mode 100755 index 0000000..f7a5a5a --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m @@ -0,0 +1,217 @@ +// +// ELCAssetTablePicker.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAssetTablePicker.h" +#import "ELCAssetCell.h" +#import "ELCAsset.h" +#import "ELCAlbumPickerController.h" + +@interface ELCAssetTablePicker () + +@property (nonatomic, assign) int columns; + +@end + +@implementation ELCAssetTablePicker + +//Using auto synthesizers + +- (id)init +{ + self = [super init]; + if (self) { + //Sets a reasonable default bigger then 0 for columns + //So that we don't have a divide by 0 scenario + self.columns = 4; + } + return self; +} + +- (void)viewDidLoad +{ + [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; + [self.tableView setAllowsSelection:NO]; + + NSMutableArray *tempArray = [[NSMutableArray alloc] init]; + self.elcAssets = tempArray; + + if (self.immediateReturn) { + + } else { + UIBarButtonItem *doneButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)]; + [self.navigationItem setRightBarButtonItem:doneButtonItem]; + [self.navigationItem setTitle:@"Loading..."]; + } + + [self performSelectorInBackground:@selector(preparePhotos) withObject:nil]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + self.columns = self.view.bounds.size.width / 80; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + return YES; +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation +{ + [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; + self.columns = self.view.bounds.size.width / 80; + [self.tableView reloadData]; +} + +- (void)preparePhotos +{ + @autoreleasepool { + + [self.assetGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { + + if (result == nil) { + return; + } + + ELCAsset *elcAsset = [[ELCAsset alloc] initWithAsset:result]; + [elcAsset setParent:self]; + + BOOL isAssetFiltered = NO; + if (self.assetPickerFilterDelegate && + [self.assetPickerFilterDelegate respondsToSelector:@selector(assetTablePicker:isAssetFilteredOut:)]) + { + isAssetFiltered = [self.assetPickerFilterDelegate assetTablePicker:self isAssetFilteredOut:(ELCAsset*)elcAsset]; + } + + if (!isAssetFiltered) { + [self.elcAssets addObject:elcAsset]; + } + + }]; + + dispatch_sync(dispatch_get_main_queue(), ^{ + [self.tableView reloadData]; + // scroll to bottom + long section = [self numberOfSectionsInTableView:self.tableView] - 1; + long row = [self tableView:self.tableView numberOfRowsInSection:section] - 1; + if (section >= 0 && row >= 0) { + NSIndexPath *ip = [NSIndexPath indexPathForRow:row + inSection:section]; + [self.tableView scrollToRowAtIndexPath:ip + atScrollPosition:UITableViewScrollPositionBottom + animated:NO]; + } + + [self.navigationItem setTitle:self.singleSelection ? @"Pick Photo" : @"Pick Photos"]; + }); + } +} + +- (void)doneAction:(id)sender +{ + NSMutableArray *selectedAssetsImages = [[NSMutableArray alloc] init]; + + for (ELCAsset *elcAsset in self.elcAssets) { + if ([elcAsset selected]) { + [selectedAssetsImages addObject:[elcAsset asset]]; + } + } + [self.parent selectedAssets:selectedAssetsImages]; +} + + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset +{ + NSUInteger selectionCount = 0; + for (ELCAsset *elcAsset in self.elcAssets) { + if (elcAsset.selected) selectionCount++; + } + BOOL shouldSelect = YES; + if ([self.parent respondsToSelector:@selector(shouldSelectAsset:previousCount:)]) { + shouldSelect = [self.parent shouldSelectAsset:asset previousCount:selectionCount]; + } + return shouldSelect; +} + +- (void)assetSelected:(ELCAsset *)asset +{ + if (self.singleSelection) { + + for (ELCAsset *elcAsset in self.elcAssets) { + if (asset != elcAsset) { + elcAsset.selected = NO; + } + } + } + if (self.immediateReturn) { + NSArray *singleAssetArray = @[asset.asset]; + [(NSObject *)self.parent performSelector:@selector(selectedAssets:) withObject:singleAssetArray afterDelay:0]; + } +} + +#pragma mark UITableViewDataSource Delegate Methods + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (self.columns <= 0) { //Sometimes called before we know how many columns we have + self.columns = 4; + } + NSInteger numRows = ceil([self.elcAssets count] / (float)self.columns); + return numRows; +} + +- (NSArray *)assetsForIndexPath:(NSIndexPath *)path +{ + long index = path.row * self.columns; + long length = MIN(self.columns, [self.elcAssets count] - index); + return [self.elcAssets subarrayWithRange:NSMakeRange(index, length)]; +} + +// Customize the appearance of table view cells. +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + ELCAssetCell *cell = (ELCAssetCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + if (cell == nil) { + cell = [[ELCAssetCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + [cell setAssets:[self assetsForIndexPath:indexPath]]; + + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 79; +} + +- (int)totalSelectedAssets +{ + int count = 0; + + for (ELCAsset *asset in self.elcAssets) { + if (asset.selected) { + count++; + } + } + + return count; +} + + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h new file mode 100755 index 0000000..0d1b54e --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h @@ -0,0 +1,48 @@ +// +// ELCImagePickerController.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import +#import "ELCAssetSelectionDelegate.h" + +@class ELCImagePickerController; +@class ELCAlbumPickerController; + +@protocol ELCImagePickerControllerDelegate + +/** + * Called with the picker the images were selected from, as well as an array of dictionary's + * containing keys for ALAssetPropertyLocation, ALAssetPropertyType, + * UIImagePickerControllerOriginalImage, and UIImagePickerControllerReferenceURL. + * @param picker + * @param info An NSArray containing dictionary's with the key UIImagePickerControllerOriginalImage, which is a rotated, and sized for the screen 'default representation' of the image selected. If you want to get the original image, use the UIImagePickerControllerReferenceURL key. + */ +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info; + +/** + * Called when image selection was cancelled, by tapping the 'Cancel' BarButtonItem. + */ +- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker; + +@end + +@interface ELCImagePickerController : UINavigationController + +@property (nonatomic, weak) id imagePickerDelegate; +@property (nonatomic, assign) NSInteger maximumImagesCount; + +/** + * YES if the picker should return the original image, + * or NO for an image suitable for displaying full screen on the device. + */ +@property (nonatomic, assign) BOOL returnsOriginalImage; + +- (id)initImagePicker; +- (void)cancelImagePicker; + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m new file mode 100755 index 0000000..1567e90 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m @@ -0,0 +1,122 @@ +// +// ELCImagePickerController.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerController.h" +#import "ELCAsset.h" +#import "ELCAssetCell.h" +#import "ELCAssetTablePicker.h" +#import "ELCAlbumPickerController.h" +#import + +@implementation ELCImagePickerController + +//Using auto synthesizers + +- (id)initImagePicker +{ + ELCAlbumPickerController *albumPicker = [[ELCAlbumPickerController alloc] initWithStyle:UITableViewStylePlain]; + + self = [super initWithRootViewController:albumPicker]; + if (self) { + self.maximumImagesCount = 4; + [albumPicker setParent:self]; + } + return self; +} + +- (id)initWithRootViewController:(UIViewController *)rootViewController +{ + self = [super initWithRootViewController:rootViewController]; + if (self) { + self.maximumImagesCount = 4; + } + return self; +} + +- (void)cancelImagePicker +{ + if ([_imagePickerDelegate respondsToSelector:@selector(elcImagePickerControllerDidCancel:)]) { + [_imagePickerDelegate performSelector:@selector(elcImagePickerControllerDidCancel:) withObject:self]; + } +} + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount +{ + BOOL shouldSelect = previousCount < self.maximumImagesCount; + if (!shouldSelect) { + NSString *title = [NSString stringWithFormat:NSLocalizedString(@"Only %d photos please!", nil), self.maximumImagesCount]; + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"You can only send %d photos at a time.", nil), self.maximumImagesCount]; + [[[UIAlertView alloc] initWithTitle:title + message:message + delegate:nil + cancelButtonTitle:nil + otherButtonTitles:NSLocalizedString(@"Okay", nil), nil] show]; + } + return shouldSelect; +} + +- (void)selectedAssets:(NSArray *)assets +{ + NSMutableArray *returnArray = [[NSMutableArray alloc] init]; + + for(ALAsset *asset in assets) { + id obj = [asset valueForProperty:ALAssetPropertyType]; + if (!obj) { + continue; + } + NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; + + CLLocation* wgs84Location = [asset valueForProperty:ALAssetPropertyLocation]; + if (wgs84Location) { + [workingDictionary setObject:wgs84Location forKey:ALAssetPropertyLocation]; + } + + [workingDictionary setObject:obj forKey:UIImagePickerControllerMediaType]; + + //This method returns nil for assets from a shared photo stream that are not yet available locally. If the asset becomes available in the future, an ALAssetsLibraryChangedNotification notification is posted. + ALAssetRepresentation *assetRep = [asset defaultRepresentation]; + + if(assetRep != nil) { + CGImageRef imgRef = nil; + //defaultRepresentation returns image as it appears in photo picker, rotated and sized, + //so use UIImageOrientationUp when creating our image below. + UIImageOrientation orientation = UIImageOrientationUp; + + if (_returnsOriginalImage) { + imgRef = [assetRep fullResolutionImage]; + orientation = [assetRep orientation]; + } else { + imgRef = [assetRep fullScreenImage]; + } + UIImage *img = [UIImage imageWithCGImage:imgRef + scale:1.0f + orientation:orientation]; + [workingDictionary setObject:img forKey:UIImagePickerControllerOriginalImage]; + [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:UIImagePickerControllerReferenceURL]; + + [returnArray addObject:workingDictionary]; + } + + } + if (_imagePickerDelegate != nil && [_imagePickerDelegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) { + [_imagePickerDelegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:returnArray]; + } else { + [self popToRootViewControllerAnimated:NO]; + } +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return YES; + } else { + return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } +} + +@end diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib new file mode 100755 index 0000000..4170520 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib @@ -0,0 +1,374 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {320, 416} + + + 3 + MQA + + NO + YES + NO + + + NO + + IBCocoaTouchFramework + NO + 1 + 0 + YES + 44 + 22 + 22 + + + + + YES + + + view + + + + 5 + + + + dataSource + + + + 6 + + + + delegate + + + + 7 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 4.IBEditorWindowLastContentRect + 4.IBPluginDependency + + + YES + AlbumPickerController + UIResponder + {{329, 504}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 7 + + + + YES + + AlbumPickerController + UITableViewController + + IBProjectSource + Classes/AlbumPickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib new file mode 100755 index 0000000..5d5e2b5 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib @@ -0,0 +1,435 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 268 + {320, 416} + + + 1 + MSAxIDEAA + + YES + YES + IBCocoaTouchFramework + + + {320, 416} + + + 3 + MQA + + 2 + + + + + NO + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 3 + + + + scrollview + + + + 7 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + YES + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + + + YES + AssetPicker + UIResponder + {{575, 376}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAw88AAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 15 + + + + YES + + AssetPicker + UIViewController + + dismiss: + id + + + dismiss: + + dismiss: + id + + + + YES + + YES + parent + scrollview + selectedAssetsLabel + + + YES + id + UIScrollView + UILabel + + + + YES + + YES + parent + scrollview + selectedAssetsLabel + + + YES + + parent + id + + + scrollview + UIScrollView + + + selectedAssetsLabel + UILabel + + + + + IBProjectSource + Classes/ELCImagePickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib new file mode 100755 index 0000000..e59456c --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib @@ -0,0 +1,422 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {320, 436} + + + 3 + MQA + + YES + + NO + + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + + YES + + + view + + + + 3 + + + + dataSource + + + + 4 + + + + delegate + + + + 5 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + + + YES + AssetTablePicker + UIResponder + {{0, 526}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 5 + + + + YES + + AssetTablePicker + UITableViewController + + dismiss: + id + + + dismiss: + + dismiss: + id + + + + YES + + YES + parent + selectedAssetsLabel + + + YES + id + UILabel + + + + YES + + YES + parent + selectedAssetsLabel + + + YES + + parent + id + + + selectedAssetsLabel + UILabel + + + + + IBProjectSource + Classes/ELCImagePickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/Overlay.png b/fileUploader/Classes/ELCImagePicker/Resources/Overlay.png new file mode 100755 index 0000000..a86f47f Binary files /dev/null and b/fileUploader/Classes/ELCImagePicker/Resources/Overlay.png differ diff --git a/fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png b/fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png new file mode 100755 index 0000000..a6fd78c Binary files /dev/null and b/fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png differ diff --git a/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h new file mode 100755 index 0000000..9f14d5c --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h @@ -0,0 +1,19 @@ +// +// ELCImagePickerDemoAppDelegate.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import + +@class ELCImagePickerDemoViewController; + +@interface ELCImagePickerDemoAppDelegate : NSObject + +@property (nonatomic, strong) IBOutlet UIWindow *window; +@property (nonatomic, strong) IBOutlet ELCImagePickerDemoViewController *viewController; + +@end + diff --git a/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m new file mode 100755 index 0000000..5069e9c --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m @@ -0,0 +1,84 @@ +// +// ELCImagePickerDemoAppDelegate.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerDemoAppDelegate.h" +#import "ELCImagePickerDemoViewController.h" + +@implementation ELCImagePickerDemoAppDelegate + +//Using generated synthesizers + +#pragma mark - +#pragma mark Application lifecycle + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + // Override point for customization after application launch. + + self.window.rootViewController = _viewController; + [self.window makeKeyAndVisible]; + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application +{ + /* + Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + */ +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + /* + Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + If your application supports background execution, called instead of applicationWillTerminate: when the user quits. + */ +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + /* + Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. + */ +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + /* + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + */ +} + + +- (void)applicationWillTerminate:(UIApplication *)application +{ + /* + Called when the application is about to terminate. + See also applicationDidEnterBackground:. + */ +} + + +#pragma mark - +#pragma mark Memory management + +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application +{ + /* + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. + */ +} + + +@end diff --git a/fileUploader/Classes/ELCImagePickerDemoViewController.h b/fileUploader/Classes/ELCImagePickerDemoViewController.h new file mode 100755 index 0000000..fa4f1eb --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoViewController.h @@ -0,0 +1,25 @@ +// +// ELCImagePickerDemoViewController.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import +#import "ELCImagePickerController.h" + +@interface ELCImagePickerDemoViewController : UIViewController + +@property (nonatomic, strong) IBOutlet UIScrollView *scrollView; +@property (nonatomic, copy) NSArray *chosenImages; + +// the default picker controller +- (IBAction)launchController; + +// a special picker controller that limits itself to a single album, and lets the user +// pick just one image from that album. +- (IBAction)launchSpecialController; + +@end + diff --git a/fileUploader/Classes/ELCImagePickerDemoViewController.m b/fileUploader/Classes/ELCImagePickerDemoViewController.m new file mode 100755 index 0000000..174f1f1 --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoViewController.m @@ -0,0 +1,128 @@ +// +// ELCImagePickerDemoViewController.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerDemoAppDelegate.h" +#import "ELCImagePickerDemoViewController.h" +#import "ELCImagePickerController.h" +#import "ELCAlbumPickerController.h" +#import "ELCAssetTablePicker.h" + +@interface ELCImagePickerDemoViewController () + +@property (nonatomic, strong) ALAssetsLibrary *specialLibrary; + +@end + +@implementation ELCImagePickerDemoViewController + +//Using generated synthesizers + +- (IBAction)launchController +{ + ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initImagePicker]; + elcPicker.maximumImagesCount = 4; + elcPicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + elcPicker.imagePickerDelegate = self; + + [self presentViewController:elcPicker animated:YES completion:nil]; + +} + +- (IBAction)launchSpecialController +{ + ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; + self.specialLibrary = library; + NSMutableArray *groups = [NSMutableArray array]; + [_specialLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { + if (group) { + [groups addObject:group]; + } else { + // this is the end + [self displayPickerForGroup:[groups objectAtIndex:0]]; + } + } failureBlock:^(NSError *error) { + self.chosenImages = nil; + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Album Error: %@ - %@", [error localizedDescription], [error localizedRecoverySuggestion]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; + [alert show]; + + NSLog(@"A problem occured %@", [error description]); + // an error here means that the asset groups were inaccessable. + // Maybe the user or system preferences refused access. + }]; +} + +- (void)displayPickerForGroup:(ALAssetsGroup *)group +{ + ELCAssetTablePicker *tablePicker = [[ELCAssetTablePicker alloc] initWithStyle:UITableViewStylePlain]; + tablePicker.singleSelection = YES; + tablePicker.immediateReturn = YES; + + ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initWithRootViewController:tablePicker]; + elcPicker.maximumImagesCount = 1; + elcPicker.imagePickerDelegate = self; + elcPicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + tablePicker.parent = elcPicker; + + // Move me + tablePicker.assetGroup = group; + [tablePicker.assetGroup setAssetsFilter:[ALAssetsFilter allAssets]]; + + [self presentViewController:elcPicker animated:YES completion:nil]; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return YES; + } else { + return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } +} + +#pragma mark ELCImagePickerControllerDelegate Methods + +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info +{ + [self dismissViewControllerAnimated:YES completion:nil]; + + for (UIView *v in [_scrollView subviews]) { + [v removeFromSuperview]; + } + + CGRect workingFrame = _scrollView.frame; + workingFrame.origin.x = 0; + + NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]]; + + for (NSDictionary *dict in info) { + + UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage]; + [images addObject:image]; + + UIImageView *imageview = [[UIImageView alloc] initWithImage:image]; + [imageview setContentMode:UIViewContentModeScaleAspectFit]; + imageview.frame = workingFrame; + + [_scrollView addSubview:imageview]; + + workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width; + } + + self.chosenImages = images; + + [_scrollView setPagingEnabled:YES]; + [_scrollView setContentSize:CGSizeMake(workingFrame.origin.x, workingFrame.size.height)]; +} + +- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker +{ + [self dismissViewControllerAnimated:YES completion:nil]; +} + + +@end diff --git a/fileUploader/fileUploadDemoViewController.h b/fileUploader/fileUploadDemoViewController.h index d16247d..bd061f6 100644 --- a/fileUploader/fileUploadDemoViewController.h +++ b/fileUploader/fileUploadDemoViewController.h @@ -8,8 +8,9 @@ #import #import "fileUploadEngine.h" - -@interface fileUploadDemoViewController : UIViewController +#import "ELCAssetSelectionDelegate.h" +#import "ELCImagePickerController.h" +@interface fileUploadDemoViewController : UIViewController @property (strong, nonatomic) fileUploadEngine *flUploadEngine; @property (strong, nonatomic) MKNetworkOperation *flOperation; diff --git a/fileUploader/fileUploadDemoViewController.m b/fileUploader/fileUploadDemoViewController.m index 26ae371..5a61ee5 100644 --- a/fileUploader/fileUploadDemoViewController.m +++ b/fileUploader/fileUploadDemoViewController.m @@ -7,12 +7,14 @@ // #import "fileUploadDemoViewController.h" - +#import "ELCImagePickerController.h" @interface fileUploadDemoViewController () @end -@implementation fileUploadDemoViewController +@implementation fileUploadDemoViewController{ + ELCImagePickerController *imagePicker; +} @synthesize flUploadEngine = _flUploadEngine; @synthesize flOperation = _flOperation; @@ -21,12 +23,18 @@ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. + // Create the image picker + imagePicker = [[ELCImagePickerController alloc] initImagePicker]; + imagePicker.maximumImagesCount = 4; //Set the maximum number of images to select, defaults to 4 + imagePicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + imagePicker.imagePickerDelegate = self; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. + } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation @@ -73,11 +81,12 @@ - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)b case 1: { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { - UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; - imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - imagePicker.delegate = self; - imagePicker.allowsEditing = NO; - [self presentModalViewController:imagePicker animated:YES]; +// UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; +// imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; +// imagePicker.delegate = self; +// imagePicker.allowsEditing = NO; +// [self presentModalViewController:imagePicker animated:YES]; + [self presentViewController:imagePicker animated:YES completion:nil]; } else { UIAlertView *alert; @@ -91,7 +100,43 @@ - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)b } } } +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info{ + [self dismissModalViewControllerAnimated:YES]; + for (NSDictionary*dic in info) { + [self uploadImageUsingDicInfo:dic]; + } + +} +-(void)uploadImageUsingDicInfo:(NSDictionary*)dicInfo{ + NSData *image = UIImageJPEGRepresentation([dicInfo objectForKey:UIImagePickerControllerOriginalImage], 0.1); + + self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:@"posttestserver.com" customHeaderFields:nil]; + + NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys: + @"testApp", @"appID", + nil]; + self.flOperation = [self.flUploadEngine postDataToServer:postParams path:@"/post.php"]; + [self.flOperation addData:image forKey:@"userfl" mimeType:@"image/jpeg" fileName:@"upload.jpg"]; + + [self.flOperation addCompletionHandler:^(MKNetworkOperation* operation) { + NSLog(@"%@", [operation responseString]); + /* + This is where you handle a successful 200 response + */ + } + errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { + NSLog(@"%@", error); + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" + message:[error localizedDescription] + delegate:nil + cancelButtonTitle:@"Dismiss" + otherButtonTitles:nil]; + [alert show]; + }]; + + [self.flUploadEngine enqueueOperation:self.flOperation ]; +} - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissModalViewControllerAnimated:YES];