From 7428cacc1b36d0851defdcc80f8ea5e492a83495 Mon Sep 17 00:00:00 2001 From: AndrewShmig <andrewshmig@yandex.ru> Date: Tue, 29 Jul 2014 11:36:39 +0400 Subject: [PATCH] refs #106 --- Project/Project/ASAAppDelegate.m | 3 +- .../VKStorage/VKStorage.m | 368 +++++++++--------- Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m | 13 +- .../UserInterfaceState.xcuserstate | Bin 88001 -> 59347 bytes 4 files changed, 199 insertions(+), 185 deletions(-) diff --git a/Project/Project/ASAAppDelegate.m b/Project/Project/ASAAppDelegate.m index 20c221f..32c4716 100644 --- a/Project/Project/ASAAppDelegate.m +++ b/Project/Project/ASAAppDelegate.m @@ -33,6 +33,7 @@ - (BOOL) application:(UIApplication *)application // permissons:[kVKPermissionsArray componentsSeparatedByString:@","] // webView:self.webView // delegate:self]; + _rm = [[VKRequestManager alloc] initWithDelegate:self]; _rm.startAllRequestsImmediately = NO; @@ -58,7 +59,7 @@ - (void) connector:(VKConnector *)connector NSLog(@"Access token: %@", accessToken); -// _rm = [[VKRequestManager alloc] initWithDelegate:self]; +// _rm = [[VKRequestManager alloc] initWithDelegate:self user:[VKUser currentUser]]; // _rm.startAllRequestsImmediately = NO; // // VKRequest *r = [_rm info:@{@"user_ids": @"christian.burns"}]; diff --git a/Project/Vkontakte-iOS-SDK-LV/VKStorage/VKStorage.m b/Project/Vkontakte-iOS-SDK-LV/VKStorage/VKStorage.m index d4644b9..ef9b153 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKStorage/VKStorage.m +++ b/Project/Vkontakte-iOS-SDK-LV/VKStorage/VKStorage.m @@ -2,26 +2,26 @@ // Created by AndrewShmig on 6/28/13. // // Copyright (c) 2013 Andrew Shmig -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following +// Software is furnished to do so, subject to the following // conditions: -// +// // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // #import "VKStorage.h" @@ -31,7 +31,7 @@ @implementation VKStorage { - NSMutableDictionary *_storageItems; + NSMutableDictionary *_storageItems; } #pragma mark Visible VKStorage methods @@ -39,238 +39,250 @@ @implementation VKStorage - (instancetype)init { - VK_LOG(); - - self = [super init]; - - if (self) { - _storageItems = [[NSMutableDictionary alloc] init]; - } - - return self; + VK_LOG(); + + self = [super init]; + + if (self) { + _storageItems = [[NSMutableDictionary alloc] init]; + } + + return self; } #pragma mark - Shared storage + (instancetype)sharedStorage { - VK_LOG(); - - static VKStorage *sharedStorage; - static dispatch_once_t predicate; - - dispatch_once(&predicate, ^ - { - sharedStorage = [[[self class] alloc] init]; - -// проверим, если kVKStorageCachePath существует, если нет - создадим, -// а параллельно будет создан и kVKStoragePath - NSString *cacheStoragePath = [sharedStorage fullCacheStoragePath]; - - if (![[NSFileManager defaultManager] - fileExistsAtPath:cacheStoragePath]) { - - [[NSFileManager defaultManager] - createDirectoryAtPath:cacheStoragePath - withIntermediateDirectories:YES - attributes:nil - error:nil]; - } - }); - - [sharedStorage loadStorage]; - - return sharedStorage; + VK_LOG(); + + static VKStorage *sharedStorage; + static dispatch_once_t predicate; + + dispatch_once(&predicate, ^ + { + sharedStorage = [[[self class] alloc] init]; + + // проверим, если kVKStorageCachePath существует, если нет - создадим, + // а параллельно будет создан и kVKStoragePath + NSString *cacheStoragePath = [sharedStorage fullCacheStoragePath]; + + if (![[NSFileManager defaultManager] + fileExistsAtPath:cacheStoragePath]) { + + [[NSFileManager defaultManager] + createDirectoryAtPath:cacheStoragePath + withIntermediateDirectories:YES + attributes:nil + error:nil]; + } + }); + + [sharedStorage loadStorage]; + + return sharedStorage; } #pragma mark - Getters - (BOOL)isEmpty { - VK_LOG(); - - return ([_storageItems count] == 0); + VK_LOG(); + + return ([_storageItems count] == 0); } - (NSUInteger)count { - VK_LOG(); - + VK_LOG(); + + // ghost-user не считаем за реального пользователя + if (nil != _storageItems[@0]) { + return [_storageItems count] - 1; + } else { return [_storageItems count]; + } } - (VKStorageItem *)createStorageItemForAccessToken:(VKAccessToken *)token { - VK_LOG(); - - VKStorageItem *storageItem = [[VKStorageItem alloc] - initWithAccessToken:token - mainCacheStoragePath:[self fullCacheStoragePath]]; - - return storageItem; + VK_LOG(); + + VKStorageItem *storageItem = [[VKStorageItem alloc] + initWithAccessToken:token + mainCacheStoragePath:[self fullCacheStoragePath]]; + + return storageItem; } - (NSArray *)storageItems { - VK_LOG(); - - return [_storageItems allValues]; + VK_LOG(); + + // возвращаем из хранилища только реальных пользователей + // без ghost user + NSMutableDictionary *items = [_storageItems copy]; + + if (nil != items[@0]) + items[@0] = nil; + + return [items allValues]; } #pragma mark - Storage manipulation methods - (void)storeItem:(VKStorageItem *)item { - VK_LOG(@"%@", @{ - @"item": item - }); - - if (nil == item || nil == item.accessToken || nil == item.cache) - return; - -// удаляем данные предыдущей записи - [self removeItem:item]; - -// добавляем новые данные - id storageKey = @(item.accessToken.userID); - _storageItems[storageKey] = item; - - [self saveStorage]; + VK_LOG(@"%@", @{ + @"item": item + }); + + if (nil == item || nil == item.accessToken || nil == item.cache) + return; + + // удаляем данные предыдущей записи + [self removeItem:item]; + + // добавляем новые данные + id storageKey = @(item.accessToken.userID); + _storageItems[storageKey] = item; + + [self saveStorage]; } - (void)removeItem:(VKStorageItem *)item { - VK_LOG(@"%@", @{ - @"item": item - }); - - id storageKey = @(item.accessToken.userID); - - [item.cache removeCacheDirectory]; - [_storageItems removeObjectForKey:storageKey]; - - [self saveStorage]; + VK_LOG(@"%@", @{ + @"item": item + }); + + id storageKey = @(item.accessToken.userID); + + [item.cache removeCacheDirectory]; + [_storageItems removeObjectForKey:storageKey]; + + [self saveStorage]; } - (void)clean { - VK_LOG(); - - [_storageItems removeAllObjects]; - [self cleanCachedData]; - - [self saveStorage]; + VK_LOG(); + + [_storageItems removeAllObjects]; + [self cleanCachedData]; + + [self saveStorage]; } - (void)cleanCachedData { - VK_LOG(); - - dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); - - dispatch_async(backgroundQueue, ^ - { - - [[NSFileManager defaultManager] - removeItemAtPath:[self fullCacheStoragePath] - error:nil]; - - [[NSFileManager defaultManager] - createDirectoryAtPath:[self fullCacheStoragePath] - withIntermediateDirectories:YES - attributes:nil - error:nil]; - }); + VK_LOG(); + + dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); + + dispatch_async(backgroundQueue, ^ + { + + [[NSFileManager defaultManager] + removeItemAtPath:[self fullCacheStoragePath] + error:nil]; + + [[NSFileManager defaultManager] + createDirectoryAtPath:[self fullCacheStoragePath] + withIntermediateDirectories:YES + attributes:nil + error:nil]; + }); } - (VKStorageItem *)storageItemForUserID:(NSUInteger)userID { - VK_LOG(@"%@", @{ - @"userID": @(userID) - }); - - id storageKey = @(userID); - return _storageItems[storageKey]; + VK_LOG(@"%@", @{ + @"userID": @(userID) + }); + + id storageKey = @(userID); + return _storageItems[storageKey]; } - (VKStorageItem *)storageItemForUser:(VKUser *)user { - return [self storageItemForUserID:user.accessToken.userID]; + return [self storageItemForUserID:user.accessToken.userID]; } #pragma mark - Storage paths - (NSString *)fullStoragePath { - VK_LOG(); - - NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; - return [cachePath stringByAppendingFormat:@"%@", kVKStoragePath]; + VK_LOG(); + + NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; + return [cachePath stringByAppendingFormat:@"%@", kVKStoragePath]; } - (NSString *)fullCacheStoragePath { - VK_LOG(); - - NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; - return [cachePath stringByAppendingFormat:@"%@", kVKStorageCachePath]; + VK_LOG(); + + NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; + return [cachePath stringByAppendingFormat:@"%@", kVKStorageCachePath]; } #pragma mark - Storage hidden methods - (void)loadStorage { - VK_LOG(); - - NSDictionary *storageDefaults = [[NSUserDefaults standardUserDefaults] - objectForKey:kVKStorageUserDefaultsKey]; - -// хранилище пустое, создаем - if (nil == storageDefaults) { - [[NSUserDefaults standardUserDefaults] - setObject:@{} - forKey:kVKStorageUserDefaultsKey]; - } else { -// загрузка данных из хранилища - NSDictionary *storage = [[NSUserDefaults standardUserDefaults] - objectForKey:kVKStorageUserDefaultsKey]; - - [storage enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) - { - VKAccessToken *token = [NSKeyedUnarchiver unarchiveObjectWithData:obj]; - - VKStorageItem *storageItem = [[VKStorageItem alloc] - initWithAccessToken:token - mainCacheStoragePath:[self fullCacheStoragePath]]; - - _storageItems[@(token.userID)] = storageItem; - }]; - } + VK_LOG(); + + NSDictionary *storageDefaults = [[NSUserDefaults standardUserDefaults] + objectForKey:kVKStorageUserDefaultsKey]; + + // хранилище пустое, создаем + if (nil == storageDefaults) { + [[NSUserDefaults standardUserDefaults] + setObject:@{} + forKey:kVKStorageUserDefaultsKey]; + } else { + // загрузка данных из хранилища + NSDictionary *storage = [[NSUserDefaults standardUserDefaults] + objectForKey:kVKStorageUserDefaultsKey]; + + [storage enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) + { + VKAccessToken *token = [NSKeyedUnarchiver unarchiveObjectWithData:obj]; + + VKStorageItem *storageItem = [[VKStorageItem alloc] + initWithAccessToken:token + mainCacheStoragePath:[self fullCacheStoragePath]]; + + _storageItems[@(token.userID)] = storageItem; + }]; + } } - (void)saveStorage { - VK_LOG(); - -// сохраняем только данные токенов доступов -// данные кэшев мы сможем потом просто восстановить - NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults]; - NSMutableDictionary *newStorage = [[NSMutableDictionary alloc] init]; - - [_storageItems enumerateKeysAndObjectsUsingBlock:^(id key, - id obj, - BOOL *stop) - { - VKAccessToken *token = [(VKStorageItem *) obj accessToken]; - - [newStorage setObject:[NSKeyedArchiver archivedDataWithRootObject:token] - forKey:[NSString stringWithFormat:@"%d", token.userID]]; - }]; - - [myDefaults setObject:newStorage - forKey:kVKStorageUserDefaultsKey]; - - [myDefaults synchronize]; + VK_LOG(); + + // сохраняем только данные токенов доступов + // данные кэшев мы сможем потом просто восстановить + NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *newStorage = [[NSMutableDictionary alloc] init]; + + [_storageItems enumerateKeysAndObjectsUsingBlock:^(id key, + id obj, + BOOL *stop) + { + VKAccessToken *token = [(VKStorageItem *) obj accessToken]; + + [newStorage setObject:[NSKeyedArchiver archivedDataWithRootObject:token] + forKey:[NSString stringWithFormat:@"%d", token.userID]]; + }]; + + [myDefaults setObject:newStorage + forKey:kVKStorageUserDefaultsKey]; + + [myDefaults synchronize]; } @end \ No newline at end of file diff --git a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m index d83bf68..489350e 100644 --- a/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m +++ b/Project/Vkontakte-iOS-SDK-LV/VKUser/VKUser.m @@ -95,22 +95,23 @@ + (instancetype)ghostUser { return _ghostUser; } - // проверим, если призрачный пользователь был ранее создан VKStorageItem *item = [[VKStorage sharedStorage] storageItemForUser:_ghostUser]; + VKStorageItem *storageItem; if (nil == item) { - // пользователь не создан - создаем VKAccessToken *ghostUserAccessToken = [[VKAccessToken alloc] initWithUserID:kGhostUserID accessToken:@""]; // сохраняем токен доступа в хранилище - VKStorageItem *storageItem = [[VKStorage sharedStorage] - createStorageItemForAccessToken:ghostUserAccessToken]; + storageItem = [[VKStorage sharedStorage] + createStorageItemForAccessToken:ghostUserAccessToken]; [[VKStorage sharedStorage] storeItem:storageItem]; - - _ghostUser = [[VKUser alloc] initWithStorageItem:storageItem]; + } else { + storageItem = [[VKStorage sharedStorage] storageItemForUser:kGhostUserID]; } + _ghostUser = [[VKUser alloc] initWithStorageItem:storageItem]; + return _ghostUser; } diff --git a/Vkontakte-iOS-SDK-LV-Workspace.xcworkspace/xcuserdata/new.xcuserdatad/UserInterfaceState.xcuserstate b/Vkontakte-iOS-SDK-LV-Workspace.xcworkspace/xcuserdata/new.xcuserdatad/UserInterfaceState.xcuserstate index 8d2d2ffe7916842466e0582157c6879b26b0eb22..ff80110ad1dba6dbc043fc713ab0b830af8e0687 100644 GIT binary patch delta 15655 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 NZ*2eF@$+2k{{u*Z=&}F+ delta 20917 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