From d217528748d44d8bad260085b8134494a1daded0 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 24 Apr 2014 12:28:35 -0500 Subject: [PATCH] upgraded to AFNetworking 2.2.3, updated README.md --- EWCacheManager.xcodeproj/project.pbxproj | 4 -- .../UserInterfaceState.xcuserstate | Bin 46489 -> 13546 bytes EWCacheManager/EWCacheManager.h | 28 +++++++----- EWCacheManager/EWCacheManager.m | 40 +++++++++--------- README.md | 11 +++-- 5 files changed, 44 insertions(+), 39 deletions(-) diff --git a/EWCacheManager.xcodeproj/project.pbxproj b/EWCacheManager.xcodeproj/project.pbxproj index 86aa680..7006a1e 100644 --- a/EWCacheManager.xcodeproj/project.pbxproj +++ b/EWCacheManager.xcodeproj/project.pbxproj @@ -26,7 +26,6 @@ 075FAE881862546C00248796 /* EWCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 075FAE871862546C00248796 /* EWCacheManager.m */; }; 075FAE8F1862546C00248796 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075FAE8E1862546C00248796 /* XCTest.framework */; }; 075FAE901862546C00248796 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075FAE801862546C00248796 /* Foundation.framework */; }; - 075FAE921862546C00248796 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075FAE911862546C00248796 /* UIKit.framework */; }; 075FAE951862546C00248796 /* libEWCacheManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 075FAE7D1862546C00248796 /* libEWCacheManager.a */; }; 075FAE9B1862546C00248796 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 075FAE991862546C00248796 /* InfoPlist.strings */; }; 075FAE9D1862546C00248796 /* EWCacheManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 075FAE9C1862546C00248796 /* EWCacheManagerTests.m */; }; @@ -65,7 +64,6 @@ 075FAE871862546C00248796 /* EWCacheManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EWCacheManager.m; sourceTree = ""; }; 075FAE8D1862546C00248796 /* EWCacheManagerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EWCacheManagerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 075FAE8E1862546C00248796 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 075FAE911862546C00248796 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 075FAE981862546C00248796 /* EWCacheManagerTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "EWCacheManagerTests-Info.plist"; sourceTree = ""; }; 075FAE9A1862546C00248796 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 075FAE9C1862546C00248796 /* EWCacheManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EWCacheManagerTests.m; sourceTree = ""; }; @@ -93,7 +91,6 @@ files = ( 075FAE951862546C00248796 /* libEWCacheManager.a in Frameworks */, 075FAE8F1862546C00248796 /* XCTest.framework in Frameworks */, - 075FAE921862546C00248796 /* UIKit.framework in Frameworks */, 075FAE901862546C00248796 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -129,7 +126,6 @@ 07B6CC241862552300EB1FA7 /* SystemConfiguration.framework */, 075FAE801862546C00248796 /* Foundation.framework */, 075FAE8E1862546C00248796 /* XCTest.framework */, - 075FAE911862546C00248796 /* UIKit.framework */, 3630EA26D21847648CD89AFD /* libPods.a */, ); name = Frameworks; diff --git a/EWCacheManager.xcodeproj/project.xcworkspace/xcuserdata/eric.xcuserdatad/UserInterfaceState.xcuserstate b/EWCacheManager.xcodeproj/project.xcworkspace/xcuserdata/eric.xcuserdatad/UserInterfaceState.xcuserstate index 3e8cc74f3cfc1f9178f97f8c75d021928c074cae..dbfdbcd6edd31a3be2e4515de28eae06012326ec 100644 GIT binary patch literal 13546 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 literal 46489 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 Electric Wizardry, LLC @@ -32,8 +32,8 @@ #import -@class AFHTTPClient; @class AFHTTPRequestOperation; +@class AFHTTPRequestOperationManager; @class EWCacheManager; @protocol EWCacheManagerDelegate @@ -58,7 +58,7 @@ @property(nonatomic, weak) id delegate; -@property(nonatomic, strong) AFHTTPClient *downloadClient; +@property(nonatomic, strong) AFHTTPRequestOperationManager *downloadClient; @property(nonatomic, strong) NSURL *baseURL; @property(readonly) float fileProgress; @@ -109,21 +109,27 @@ - (void)deleteFileInCache:(NSString *)filename; /** - * Description + * Initiates a download request with the specified request and filename, + * executing success() and failure() as appropriate, if defined. * - * @param request request description - * @param filename filename description - * @param success success description + * @param request The URL request to make. + * @param filename The filename where the data should be downloaded. + * @param success The block to execute upon sucessfully downloading the + * requested file. + * @param failure The block to execute upon failure (lost connection, data + * corruption, IO error, etc). */ - (void)downloadFileWithRequest:(NSURLRequest *)request filename:(NSString *)filename success:(void (^)(AFHTTPRequestOperation *operation, - id responseObject))success; + id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, + NSError *error))failure; /** - * Description + * Returns the name of the file currently being downloaded. * - * @return return value description + * @return The filename. */ - (NSString *)nameOfFileCurrentlyDownloading; diff --git a/EWCacheManager/EWCacheManager.m b/EWCacheManager/EWCacheManager.m index 02f0aea..c29aa1b 100644 --- a/EWCacheManager/EWCacheManager.m +++ b/EWCacheManager/EWCacheManager.m @@ -3,7 +3,7 @@ File: EWCacheManager.m Version: 1.1 Created: 2013-12-06 - Updated: 2014-03-14 + Updated: 2014-04-24 Author: Eric Bailey Electric Wizardry, LLC @@ -31,11 +31,11 @@ this software and associated documentation files (the "Software"), to deal in */ #import "EWCacheManager.h" -#import +#import #import -#import "NSFileManager+DirectoryLocations.h" @implementation EWCacheManager +@synthesize baseURL = _baseURL; @synthesize fileProgress = _fileProgress; @synthesize queueProgress = _queueProgress; @@ -48,7 +48,8 @@ + (id)sharedManager { - (id)init { if (self = [super init]) { - path = [[NSFileManager defaultManager] applicationSupportDirectory]; + path = [NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; _fileProgress = 0.0f; _requestedFilesCount = 0; @@ -59,7 +60,9 @@ - (id)init { - (void)downloadFileWithRequest:(NSURLRequest *)request filename:(NSString *)filename success:(void (^)(AFHTTPRequestOperation *operation, - id responseObject))success { + id responseObject))success + failure:(void (^)(AFHTTPRequestOperation *operation, + NSError *error))failure { dispatch_async(dispatch_get_main_queue(), ^{ self.requestedFilesCount++; AFHTTPRequestOperation *operation = @@ -95,7 +98,7 @@ - (void)downloadFileWithRequest:(NSURLRequest *)request error:error]; }]; - [self.downloadClient enqueueHTTPRequestOperation:operation]; + [self.downloadClient.operationQueue addOperation:operation]; }); } @@ -137,29 +140,24 @@ - (void)setRequestedFilesCount:(NSUInteger)requestedFilesCount { _requestedFilesCount = requestedFilesCount; } -@synthesize baseURL = _baseURL; -- (void)setBaseURL:(NSURL *)baseURL { - _baseURL = baseURL; - - _downloadClient = [[AFHTTPClient alloc] initWithBaseURL:_baseURL]; - [_downloadClient registerHTTPOperationClass:[AFHTTPRequestOperation class]]; - [_downloadClient.operationQueue setMaxConcurrentOperationCount:1]; -} - @synthesize downloadClient = _downloadClient; -- (AFHTTPClient *)downloadClient { +- (AFHTTPRequestOperationManager *)downloadClient { NSAssert(_baseURL, @"No base URL set."); + if (!_downloadClient) { + _downloadClient = + [[AFHTTPRequestOperationManager alloc] initWithBaseURL:_baseURL]; + [_downloadClient.operationQueue setMaxConcurrentOperationCount:1]; + } + return _downloadClient; } @synthesize requestedFilesCount = _requestedFilesCount; - (NSUInteger)requestedFilesCount { - if (self.downloadClient.operationQueue.operationCount > 0) { - return _requestedFilesCount; - } - - return 0; + return (self.downloadClient.operationQueue.operationCount > 0) + ? _requestedFilesCount + : 0; } - (NSString *)nameOfFileCurrentlyDownloading { diff --git a/README.md b/README.md index 550b5d4..2daaa7d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,16 @@ EWCacheManager ============= -EWCacheManager is a singleton class for convenient cache management, using [AFNetworking](https://github.com/AFNetworking/AFNetworking) for HTTP request management. I ([@yurrriq](https://github.com/yurrriq)) mostly created this for my own use, and to get famililar with the process of writing documentation for Objective-C classes. +EWCacheManager is a singleton class for convenient cache management, using [AFNetworking](https://github.com/AFNetworking/AFNetworking) for HTTP request management. I ([@yurrriq](https://github.com/yurrriq)) mostly created this for my own use, and to get famililar with the process of [writing documentation for Objective-C classes](http://nshipster.com/documentation/). # Documentation [EWCacheManager Class Reference](http://electric-wizardry.com/Classes/EWCacheManager.html) +# Dependencies +
+[pod](https://github.com/CocoaPods/CocoaPods) '[AFNetworking](https://github.com/AFNetworking/AFNetworking)', '~> [2.2.3](https://github.com/AFNetworking/AFNetworking/releases/tag/2.2.3)'
+
+ # Thanks - [@AFNetworking](https://github.com/AFNetworking) for [AFNetworking](https://github.com/AFNetworking/AFNetworking), a delightful networking library - [@mattt](https://github.com/mattt) for [NSFileManager+DirectoryLocations](http://www.cocoawithlove.com/2010/05/finding-or-creating-application-support.html), a category for convenient application support directory handling @@ -13,9 +18,9 @@ EWCacheManager is a singleton class for convenient cache management, using [AFNe - [@onevcat](https://github.com/onevcat) for [VVDocumenter-Xcode](https://github.com/onevcat/VVDocumenter-Xcode), an Xcode plugin that generates Javadoc style documetation templates by typing `///` # License -[EWCacheManager](https://github.com/electricwizardry/cache-manager/) is licensed under The MIT License (MIT). +[EWCacheManager](https://github.com/electricwizardry/cache-manager/) is licensed under [The MIT License (MIT)](http://opensource.org/licenses/MIT). -Copyright (c) 2014 Electric Wizardry, LLC +Copyright (c) 2014 [Electric Wizardry, LLC](https://github.com/ElectricWizardry/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal