root / Classes / OpenStackAppDelegate.m @ 72744ed1
History | View | Annotate | Download (14.5 kB)
1 | 700184fb | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 700184fb | Miltiadis Vasilakis | // OpenStackAppDelegate.m |
3 | 700184fb | Miltiadis Vasilakis | // OpenStack |
4 | 700184fb | Miltiadis Vasilakis | // |
5 | 700184fb | Miltiadis Vasilakis | // Created by Mike Mayo on 9/30/10. |
6 | 700184fb | Miltiadis Vasilakis | // The OpenStack project is provided under the Apache 2.0 license. |
7 | 700184fb | Miltiadis Vasilakis | // |
8 | 700184fb | Miltiadis Vasilakis | |
9 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAppDelegate.h" |
10 | 700184fb | Miltiadis Vasilakis | #import "RootViewController.h" |
11 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
12 | 700184fb | Miltiadis Vasilakis | #import "Keychain.h" |
13 | 700184fb | Miltiadis Vasilakis | |
14 | 700184fb | Miltiadis Vasilakis | #import "JSON.h" |
15 | 700184fb | Miltiadis Vasilakis | #import "Server.h" |
16 | 700184fb | Miltiadis Vasilakis | #import "Archiver.h" |
17 | 700184fb | Miltiadis Vasilakis | #import "Provider.h" |
18 | 700184fb | Miltiadis Vasilakis | #import "Image.h" |
19 | 700184fb | Miltiadis Vasilakis | |
20 | 700184fb | Miltiadis Vasilakis | #import "SettingsPluginHandler.h" |
21 | 700184fb | Miltiadis Vasilakis | #import "AddServerPluginHandler.h" |
22 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
23 | 700184fb | Miltiadis Vasilakis | |
24 | 700184fb | Miltiadis Vasilakis | #import "RSSFeedViewController.h" |
25 | d6b38316 | Miltiadis Vasilakis | #import "PithosImageViewController.h" |
26 | 700184fb | Miltiadis Vasilakis | |
27 | 700184fb | Miltiadis Vasilakis | #import "RootViewController.h" |
28 | 700184fb | Miltiadis Vasilakis | #import "PasscodeViewController.h" |
29 | 700184fb | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
30 | 700184fb | Miltiadis Vasilakis | #import "HTNotifier.h" |
31 | 700184fb | Miltiadis Vasilakis | #import "Analytics.h" |
32 | 07592312 | Miltiadis Vasilakis | #import "ProvidersViewController.h" |
33 | 700184fb | Miltiadis Vasilakis | |
34 | 700184fb | Miltiadis Vasilakis | @implementation OpenStackAppDelegate |
35 | 700184fb | Miltiadis Vasilakis | |
36 | 700184fb | Miltiadis Vasilakis | @synthesize window; |
37 | 700184fb | Miltiadis Vasilakis | @synthesize navigationController; |
38 | 700184fb | Miltiadis Vasilakis | @synthesize splitViewController; |
39 | 700184fb | Miltiadis Vasilakis | @synthesize masterNavigationController; |
40 | 700184fb | Miltiadis Vasilakis | @synthesize barButtonItem; |
41 | 700184fb | Miltiadis Vasilakis | @synthesize rootViewController; |
42 | 64929bae | Miltiadis Vasilakis | @synthesize cachedObjectsDictionary; |
43 | 64929bae | Miltiadis Vasilakis | @synthesize cacheDictionaryFilePath; |
44 | 64929bae | Miltiadis Vasilakis | @synthesize cacheDirectoryPath; |
45 | 700184fb | Miltiadis Vasilakis | |
46 | 700184fb | Miltiadis Vasilakis | - (void)loadSettingsDefaults { |
47 | 700184fb | Miltiadis Vasilakis | |
48 | 700184fb | Miltiadis Vasilakis | // if settings haven't been set up yet, let's go ahead and set some sensible defaults |
49 | 700184fb | Miltiadis Vasilakis | |
50 | 700184fb | Miltiadis Vasilakis | // passcode settings are ALL sensitive, so they will all go in the keychain |
51 | 700184fb | Miltiadis Vasilakis | if (![Keychain getStringForKey:@"passcode_lock_passcode_on"]) { |
52 | 700184fb | Miltiadis Vasilakis | [Keychain setString:@"NO" forKey:@"passcode_lock_passcode_on"]; |
53 | 700184fb | Miltiadis Vasilakis | } |
54 | 700184fb | Miltiadis Vasilakis | |
55 | 700184fb | Miltiadis Vasilakis | if (![Keychain getStringForKey:@"passcode_lock_simple_passcode_on"]) { |
56 | 700184fb | Miltiadis Vasilakis | [Keychain setString:@"YES" forKey:@"passcode_lock_simple_passcode_on"]; |
57 | 700184fb | Miltiadis Vasilakis | } |
58 | 700184fb | Miltiadis Vasilakis | |
59 | 700184fb | Miltiadis Vasilakis | if (![Keychain getStringForKey:@"passcode_lock_erase_data_on"]) { |
60 | 700184fb | Miltiadis Vasilakis | [Keychain setString:@"NO" forKey:@"passcode_lock_erase_data_on"]; |
61 | 700184fb | Miltiadis Vasilakis | } |
62 | 700184fb | Miltiadis Vasilakis | |
63 | 64929bae | Miltiadis Vasilakis | userDefaults = [[NSUserDefaults standardUserDefaults] retain]; |
64 | 700184fb | Miltiadis Vasilakis | |
65 | 64929bae | Miltiadis Vasilakis | if (![userDefaults stringForKey:@"api_logging_level"]) { |
66 | 64929bae | Miltiadis Vasilakis | [userDefaults setValue:@"all" forKey:@"api_logging_level"]; |
67 | 700184fb | Miltiadis Vasilakis | } |
68 | 45f2fce6 | Miltiadis Vasilakis | |
69 | 64929bae | Miltiadis Vasilakis | self.cachedObjectsDictionary = [userDefaults objectForKey:@"cachedObjectsDictionary"]; |
70 | 64929bae | Miltiadis Vasilakis | if (!cachedObjectsDictionary) { |
71 | 64929bae | Miltiadis Vasilakis | self.cachedObjectsDictionary = [NSMutableDictionary dictionary]; |
72 | 64929bae | Miltiadis Vasilakis | [userDefaults setValue:cachedObjectsDictionary forKey:@"cachedObjectsDictionary"]; |
73 | 64929bae | Miltiadis Vasilakis | } |
74 | 45f2fce6 | Miltiadis Vasilakis | |
75 | 64929bae | Miltiadis Vasilakis | [userDefaults synchronize]; |
76 | 700184fb | Miltiadis Vasilakis | |
77 | 700184fb | Miltiadis Vasilakis | } |
78 | 700184fb | Miltiadis Vasilakis | |
79 | 700184fb | Miltiadis Vasilakis | - (void)presentAndRelease:(NSTimer *)timer { |
80 | 700184fb | Miltiadis Vasilakis | UIViewController *vc = [timer.userInfo objectForKey:@"vc"]; |
81 | 700184fb | Miltiadis Vasilakis | [[self.navigationController topViewController] presentModalViewControllerWithNavigation:vc animated:NO]; |
82 | 700184fb | Miltiadis Vasilakis | [vc release]; |
83 | 700184fb | Miltiadis Vasilakis | } |
84 | 700184fb | Miltiadis Vasilakis | |
85 | 700184fb | Miltiadis Vasilakis | - (void)showPasscodeLock { |
86 | 700184fb | Miltiadis Vasilakis | if ([[Keychain getStringForKey:@"passcode_lock_passcode_on"] isEqualToString:@"YES"]) { |
87 | 700184fb | Miltiadis Vasilakis | PasscodeViewController *vc = [[PasscodeViewController alloc] initWithNibName:@"PasscodeViewController" bundle:nil]; |
88 | 700184fb | Miltiadis Vasilakis | vc.mode = kModeEnterPasscode; |
89 | 700184fb | Miltiadis Vasilakis | //vc.rootViewController = self; |
90 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
91 | 700184fb | Miltiadis Vasilakis | vc.modalPresentationStyle = UIModalPresentationFullScreen; |
92 | 700184fb | Miltiadis Vasilakis | } |
93 | 700184fb | Miltiadis Vasilakis | |
94 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
95 | 700184fb | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
96 | 700184fb | Miltiadis Vasilakis | for (UIViewController *svc in app.splitViewController.viewControllers) { |
97 | 700184fb | Miltiadis Vasilakis | svc.view.alpha = 0.0; |
98 | 700184fb | Miltiadis Vasilakis | } |
99 | 700184fb | Miltiadis Vasilakis | |
100 | 700184fb | Miltiadis Vasilakis | // for some reason, this needs to be delayed |
101 | 700184fb | Miltiadis Vasilakis | [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(presentAndRelease:) userInfo:[NSDictionary dictionaryWithObject:vc forKey:@"vc"] repeats:NO]; |
102 | 700184fb | Miltiadis Vasilakis | |
103 | 700184fb | Miltiadis Vasilakis | } else { |
104 | 700184fb | Miltiadis Vasilakis | [[self.navigationController topViewController] presentModalViewControllerWithNavigation:vc animated:NO]; |
105 | 700184fb | Miltiadis Vasilakis | [vc release]; |
106 | 700184fb | Miltiadis Vasilakis | } |
107 | 700184fb | Miltiadis Vasilakis | } |
108 | 700184fb | Miltiadis Vasilakis | } |
109 | 700184fb | Miltiadis Vasilakis | |
110 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
111 | 700184fb | Miltiadis Vasilakis | #pragma mark Application lifecycle |
112 | 700184fb | Miltiadis Vasilakis | |
113 | 700184fb | Miltiadis Vasilakis | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
114 | 700184fb | Miltiadis Vasilakis | // Override point for customization after application launch. |
115 | 2989bee3 | Miltiadis Vasilakis | // [self setupDependencies]; |
116 | 700184fb | Miltiadis Vasilakis | |
117 | 700184fb | Miltiadis Vasilakis | [self loadSettingsDefaults]; |
118 | 700184fb | Miltiadis Vasilakis | |
119 | 700184fb | Miltiadis Vasilakis | rootViewController = [navigationController.viewControllers objectAtIndex:0]; |
120 | 7db1712d | Miltiadis Vasilakis | OpenStackAppDelegate <UINavigationControllerDelegate> *delegate = (OpenStackAppDelegate <UINavigationControllerDelegate> *)self; |
121 | 700184fb | Miltiadis Vasilakis | navigationController.delegate = delegate; |
122 | 700184fb | Miltiadis Vasilakis | |
123 | 700184fb | Miltiadis Vasilakis | // Add the navigation controller's view to the window and display. |
124 | 700184fb | Miltiadis Vasilakis | if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { |
125 | 700184fb | Miltiadis Vasilakis | |
126 | 45f2fce6 | Miltiadis Vasilakis | /*RSSFeedViewController *vc = [[RSSFeedViewController alloc] initWithNibName:@"RSSFeedViewController" bundle:nil]; |
127 | 45f2fce6 | Miltiadis Vasilakis | vc.feed = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Cloud Servers Status", @"feed://status.rackspacecloud.com/cloudservers/rss.xml", kCloudServersIcon, nil] forKeys:[NSArray arrayWithObjects:@"name", @"url", @"logo", nil]];*/ |
128 | 700184fb | Miltiadis Vasilakis | |
129 | 45f2fce6 | Miltiadis Vasilakis | PithosImageViewController *vc = [[PithosImageViewController alloc] initWithNibName:@"PithosImageViewController" bundle:nil]; |
130 | 700184fb | Miltiadis Vasilakis | self.masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease]; |
131 | 700184fb | Miltiadis Vasilakis | self.masterNavigationController.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; |
132 | 700184fb | Miltiadis Vasilakis | self.masterNavigationController.navigationBar.translucent = self.navigationController.navigationBar.translucent; |
133 | 700184fb | Miltiadis Vasilakis | self.masterNavigationController.navigationBar.opaque = self.navigationController.navigationBar.opaque; |
134 | 700184fb | Miltiadis Vasilakis | self.masterNavigationController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle; |
135 | 700184fb | Miltiadis Vasilakis | |
136 | 700184fb | Miltiadis Vasilakis | self.splitViewController.delegate = [navigationController.viewControllers objectAtIndex:0]; |
137 | 700184fb | Miltiadis Vasilakis | self.splitViewController.viewControllers = [NSArray arrayWithObjects:self.navigationController, self.masterNavigationController, nil]; |
138 | 700184fb | Miltiadis Vasilakis | |
139 | 700184fb | Miltiadis Vasilakis | [window addSubview:splitViewController.view]; |
140 | 700184fb | Miltiadis Vasilakis | [window makeKeyAndVisible]; |
141 | 700184fb | Miltiadis Vasilakis | [vc release]; |
142 | 700184fb | Miltiadis Vasilakis | } else { |
143 | 45f2fce6 | Miltiadis Vasilakis | |
144 | 700184fb | Miltiadis Vasilakis | [window addSubview:navigationController.view]; |
145 | 700184fb | Miltiadis Vasilakis | [window makeKeyAndVisible]; |
146 | 700184fb | Miltiadis Vasilakis | } |
147 | 45f2fce6 | Miltiadis Vasilakis | |
148 | 700184fb | Miltiadis Vasilakis | serviceUnavailableObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"serviceUnavailable" object:nil |
149 | 700184fb | Miltiadis Vasilakis | queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification* notification) |
150 | 700184fb | Miltiadis Vasilakis | { |
151 | 700184fb | Miltiadis Vasilakis | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Service Unavailable" message:@"The API is currently unavailable. Please try again later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; |
152 | 700184fb | Miltiadis Vasilakis | [alert show]; |
153 | 700184fb | Miltiadis Vasilakis | [alert release]; |
154 | 700184fb | Miltiadis Vasilakis | [[NSNotificationCenter defaultCenter] removeObserver:serviceUnavailableObserver]; |
155 | 700184fb | Miltiadis Vasilakis | }]; |
156 | 64929bae | Miltiadis Vasilakis | |
157 | 64929bae | Miltiadis Vasilakis | NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); |
158 | 64929bae | Miltiadis Vasilakis | self.cacheDirectoryPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"DownloadedFiles"]; |
159 | 64929bae | Miltiadis Vasilakis | NSFileManager *fileManager = [NSFileManager defaultManager]; |
160 | 64929bae | Miltiadis Vasilakis | NSError *error = nil; |
161 | 64929bae | Miltiadis Vasilakis | [fileManager createDirectoryAtPath:cacheDirectoryPath withIntermediateDirectories:YES attributes:nil error:&error]; |
162 | 64929bae | Miltiadis Vasilakis | if (error) { |
163 | 64929bae | Miltiadis Vasilakis | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" |
164 | 64929bae | Miltiadis Vasilakis | message:[NSString stringWithFormat:@"Error in creating cache directory\n%@",error.localizedDescription] |
165 | 64929bae | Miltiadis Vasilakis | delegate:nil |
166 | 64929bae | Miltiadis Vasilakis | cancelButtonTitle:@"OK" otherButtonTitles:nil]; |
167 | 64929bae | Miltiadis Vasilakis | [alert show]; |
168 | 64929bae | Miltiadis Vasilakis | [alert release]; |
169 | 64929bae | Miltiadis Vasilakis | } |
170 | 64929bae | Miltiadis Vasilakis | |
171 | 700184fb | Miltiadis Vasilakis | return YES; |
172 | 700184fb | Miltiadis Vasilakis | } |
173 | 700184fb | Miltiadis Vasilakis | |
174 | f14ddbf9 | Miltiadis Vasilakis | //- (void) setupDependencies { |
175 | f14ddbf9 | Miltiadis Vasilakis | //#if TARGET_OS_EMBEDDED |
176 | f14ddbf9 | Miltiadis Vasilakis | // |
177 | f14ddbf9 | Miltiadis Vasilakis | // NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Constants" ofType:@"plist"]; |
178 | f14ddbf9 | Miltiadis Vasilakis | // |
179 | f14ddbf9 | Miltiadis Vasilakis | // if ([[NSFileManager defaultManager] fileExistsAtPath:path]){ |
180 | f14ddbf9 | Miltiadis Vasilakis | // |
181 | f14ddbf9 | Miltiadis Vasilakis | // NSDictionary *constants = [NSDictionary dictionaryWithContentsOfFile:path]; |
182 | f14ddbf9 | Miltiadis Vasilakis | // |
183 | f14ddbf9 | Miltiadis Vasilakis | // [HTNotifier startNotifierWithAPIKey:[constants objectForKey:@"HOPTOAD_ACCOUNT_KEY"] |
184 | f14ddbf9 | Miltiadis Vasilakis | // environmentName:HTNotifierAppStoreEnvironment]; |
185 | f14ddbf9 | Miltiadis Vasilakis | // [[GANTracker sharedTracker] startTrackerWithAccountID:[constants objectForKey:@"ANALYTICS_ACCOUNT_KEY"] dispatchPeriod:10 delegate:nil]; |
186 | f14ddbf9 | Miltiadis Vasilakis | // |
187 | f14ddbf9 | Miltiadis Vasilakis | // // track the app version |
188 | f14ddbf9 | Miltiadis Vasilakis | // NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; |
189 | f14ddbf9 | Miltiadis Vasilakis | // [[GANTracker sharedTracker] setCustomVariableAtIndex:1 name:@"app_version" value:version withError:nil]; |
190 | f14ddbf9 | Miltiadis Vasilakis | // |
191 | f14ddbf9 | Miltiadis Vasilakis | // DispatchAnalytics(); |
192 | f14ddbf9 | Miltiadis Vasilakis | // |
193 | f14ddbf9 | Miltiadis Vasilakis | // } else { |
194 | f14ddbf9 | Miltiadis Vasilakis | // [HTNotifier startNotifierWithAPIKey:@"HOPTOAD_ACCOUNT_KEY" environmentName:HTNotifierAppStoreEnvironment]; |
195 | f14ddbf9 | Miltiadis Vasilakis | // [[GANTracker sharedTracker] startTrackerWithAccountID:@"ANALYTICS_ACCOUNT_KEY" dispatchPeriod:10 delegate:nil]; |
196 | f14ddbf9 | Miltiadis Vasilakis | // } |
197 | f14ddbf9 | Miltiadis Vasilakis | // |
198 | f14ddbf9 | Miltiadis Vasilakis | //#endif |
199 | f14ddbf9 | Miltiadis Vasilakis | //} |
200 | 700184fb | Miltiadis Vasilakis | |
201 | 700184fb | Miltiadis Vasilakis | |
202 | 700184fb | Miltiadis Vasilakis | - (void)applicationWillResignActive:(UIApplication *)application { |
203 | 700184fb | Miltiadis Vasilakis | |
204 | 700184fb | Miltiadis Vasilakis | // DispatchAnalytics(); |
205 | 700184fb | Miltiadis Vasilakis | } |
206 | 700184fb | Miltiadis Vasilakis | |
207 | 700184fb | Miltiadis Vasilakis | |
208 | 700184fb | Miltiadis Vasilakis | - (void)applicationDidEnterBackground:(UIApplication *)application { |
209 | 700184fb | Miltiadis Vasilakis | /* |
210 | 700184fb | Miltiadis Vasilakis | 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. |
211 | 700184fb | Miltiadis Vasilakis | If your application supports background execution, called instead of applicationWillTerminate: when the user quits. |
212 | 700184fb | Miltiadis Vasilakis | */ |
213 | 700184fb | Miltiadis Vasilakis | } |
214 | 700184fb | Miltiadis Vasilakis | |
215 | 700184fb | Miltiadis Vasilakis | |
216 | 700184fb | Miltiadis Vasilakis | - (void)applicationWillEnterForeground:(UIApplication *)application { |
217 | 700184fb | Miltiadis Vasilakis | /* |
218 | 700184fb | Miltiadis Vasilakis | 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. |
219 | 700184fb | Miltiadis Vasilakis | */ |
220 | 700184fb | Miltiadis Vasilakis | } |
221 | 700184fb | Miltiadis Vasilakis | |
222 | 700184fb | Miltiadis Vasilakis | |
223 | 700184fb | Miltiadis Vasilakis | - (void)applicationDidBecomeActive:(UIApplication *)application { |
224 | 64929bae | Miltiadis Vasilakis | |
225 | 64929bae | Miltiadis Vasilakis | /* |
226 | 64929bae | Miltiadis Vasilakis | 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. |
227 | 64929bae | Miltiadis Vasilakis | */ |
228 | 64929bae | Miltiadis Vasilakis | [userDefaults setBool:NO forKey:@"already_failed_on_connection"]; |
229 | 64929bae | Miltiadis Vasilakis | [userDefaults synchronize]; |
230 | 700184fb | Miltiadis Vasilakis | |
231 | 700184fb | Miltiadis Vasilakis | [self showPasscodeLock]; |
232 | 700184fb | Miltiadis Vasilakis | //DispatchAnalytics(); |
233 | 700184fb | Miltiadis Vasilakis | } |
234 | 700184fb | Miltiadis Vasilakis | |
235 | 700184fb | Miltiadis Vasilakis | |
236 | 700184fb | Miltiadis Vasilakis | - (void)applicationWillTerminate:(UIApplication *)application { |
237 | 700184fb | Miltiadis Vasilakis | /* |
238 | 700184fb | Miltiadis Vasilakis | Called when the application is about to terminate. |
239 | 700184fb | Miltiadis Vasilakis | See also applicationDidEnterBackground:. |
240 | 700184fb | Miltiadis Vasilakis | */ |
241 | 700184fb | Miltiadis Vasilakis | // TODO: perhaps this is a good place to release all the stuff allocated in |
242 | 700184fb | Miltiadis Vasilakis | // +(void)initialize methods all over the place |
243 | 700184fb | Miltiadis Vasilakis | // [[SettingsPluginHandler plugins] release]; |
244 | 700184fb | Miltiadis Vasilakis | // [[AddServerPluginHandler plugins] release]; |
245 | 700184fb | Miltiadis Vasilakis | // [[OpenStackAccount accounts] release]; |
246 | 700184fb | Miltiadis Vasilakis | } |
247 | 700184fb | Miltiadis Vasilakis | |
248 | 700184fb | Miltiadis Vasilakis | - (void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ |
249 | 700184fb | Miltiadis Vasilakis | |
250 | 700184fb | Miltiadis Vasilakis | TrackViewController(viewController); |
251 | 700184fb | Miltiadis Vasilakis | } |
252 | 700184fb | Miltiadis Vasilakis | |
253 | 07592312 | Miltiadis Vasilakis | - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { |
254 | 3a8071d4 | Miltiadis Vasilakis | if (!url) |
255 | 07592312 | Miltiadis Vasilakis | return NO; |
256 | 07592312 | Miltiadis Vasilakis | |
257 | 07592312 | Miltiadis Vasilakis | NSString *host = [url host]; |
258 | 07592312 | Miltiadis Vasilakis | NSString *query = [url query]; |
259 | 07592312 | Miltiadis Vasilakis | |
260 | 2989bee3 | Miltiadis Vasilakis | if ([host hasPrefix:@"login"] && query) { |
261 | 07592312 | Miltiadis Vasilakis | // user= |
262 | 07592312 | Miltiadis Vasilakis | NSString *authUser; |
263 | 07592312 | Miltiadis Vasilakis | NSRange userRange = [query rangeOfString:@"user=" options:NSCaseInsensitiveSearch]; |
264 | 07592312 | Miltiadis Vasilakis | if (userRange.length == 0) |
265 | 07592312 | Miltiadis Vasilakis | // XXX maybe show an error message? |
266 | 07592312 | Miltiadis Vasilakis | return NO; |
267 | 07592312 | Miltiadis Vasilakis | NSUInteger authUserStartLocation = userRange.location + userRange.length; |
268 | 07592312 | Miltiadis Vasilakis | NSRange userEndRange = [query rangeOfString:@"-" options:NSCaseInsensitiveSearch |
269 | 07592312 | Miltiadis Vasilakis | range:NSMakeRange(authUserStartLocation, [query length] - authUserStartLocation)]; |
270 | 07592312 | Miltiadis Vasilakis | if (userEndRange.length) { |
271 | 07592312 | Miltiadis Vasilakis | authUser = [[query substringWithRange:NSMakeRange(authUserStartLocation, userEndRange.location - authUserStartLocation)] |
272 | 07592312 | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
273 | 07592312 | Miltiadis Vasilakis | } else { |
274 | 07592312 | Miltiadis Vasilakis | authUser = [[query substringFromIndex:authUserStartLocation] |
275 | 07592312 | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
276 | 07592312 | Miltiadis Vasilakis | } |
277 | 07592312 | Miltiadis Vasilakis | // token= |
278 | 07592312 | Miltiadis Vasilakis | NSString *authToken; |
279 | 07592312 | Miltiadis Vasilakis | NSRange tokenRange = [query rangeOfString:@"token=" options:NSCaseInsensitiveSearch]; |
280 | 07592312 | Miltiadis Vasilakis | if (tokenRange.length == 0) |
281 | 07592312 | Miltiadis Vasilakis | // XXX maybe show an error message? |
282 | 07592312 | Miltiadis Vasilakis | return NO; |
283 | 07592312 | Miltiadis Vasilakis | NSUInteger authTokenStartLocation = tokenRange.location + tokenRange.length; |
284 | 07592312 | Miltiadis Vasilakis | NSRange tokenEndRange = [query rangeOfString:@"&" options:NSCaseInsensitiveSearch |
285 | 07592312 | Miltiadis Vasilakis | range:NSMakeRange(authTokenStartLocation, [query length] - authTokenStartLocation)]; |
286 | 07592312 | Miltiadis Vasilakis | if (tokenEndRange.length) { |
287 | 07592312 | Miltiadis Vasilakis | authToken = [[query substringWithRange:NSMakeRange(authTokenStartLocation, tokenEndRange.location - authTokenStartLocation)] |
288 | 07592312 | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
289 | 07592312 | Miltiadis Vasilakis | } else { |
290 | 07592312 | Miltiadis Vasilakis | authToken = [[query substringFromIndex:authTokenStartLocation] |
291 | 07592312 | Miltiadis Vasilakis | stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
292 | 07592312 | Miltiadis Vasilakis | } |
293 | 07592312 | Miltiadis Vasilakis | |
294 | 3a8071d4 | Miltiadis Vasilakis | if (authToken || authUser) { |
295 | 3a8071d4 | Miltiadis Vasilakis | UIViewController *vc = nil; |
296 | 3a8071d4 | Miltiadis Vasilakis | if (([navigationController.visibleViewController class] == [AccountDetailsViewController class]) || |
297 | 3a8071d4 | Miltiadis Vasilakis | ([navigationController.visibleViewController class] == [AccountSettingsViewController class])) |
298 | 3a8071d4 | Miltiadis Vasilakis | vc = navigationController.visibleViewController; |
299 | 3a8071d4 | Miltiadis Vasilakis | else if (([masterNavigationController.visibleViewController class] == [AccountDetailsViewController class]) || |
300 | 3a8071d4 | Miltiadis Vasilakis | ([masterNavigationController.visibleViewController class] == [AccountSettingsViewController class])) |
301 | 3a8071d4 | Miltiadis Vasilakis | vc = masterNavigationController.visibleViewController; |
302 | 3a8071d4 | Miltiadis Vasilakis | if (vc) { |
303 | 3a8071d4 | Miltiadis Vasilakis | if (authToken) |
304 | 3a8071d4 | Miltiadis Vasilakis | [vc setValue:authToken forKey:@"apiKey"]; |
305 | 3a8071d4 | Miltiadis Vasilakis | if (authUser) |
306 | 3a8071d4 | Miltiadis Vasilakis | [vc setValue:authUser forKey:@"userName"]; |
307 | 3a8071d4 | Miltiadis Vasilakis | [((UITableViewController *)vc).tableView reloadData]; |
308 | 3a8071d4 | Miltiadis Vasilakis | } |
309 | 07592312 | Miltiadis Vasilakis | } |
310 | 07592312 | Miltiadis Vasilakis | } |
311 | 07592312 | Miltiadis Vasilakis | // XXX else maybe show an error message? |
312 | 07592312 | Miltiadis Vasilakis | return YES; |
313 | 07592312 | Miltiadis Vasilakis | } |
314 | 07592312 | Miltiadis Vasilakis | |
315 | 64929bae | Miltiadis Vasilakis | #pragma mark - persistence |
316 | 64929bae | Miltiadis Vasilakis | |
317 | 64929bae | Miltiadis Vasilakis | - (void)saveCacheDictionary { |
318 | 64929bae | Miltiadis Vasilakis | [userDefaults setObject:cachedObjectsDictionary forKey:@"cachedObjectsDictionary"]; |
319 | 64929bae | Miltiadis Vasilakis | [userDefaults synchronize]; |
320 | 64929bae | Miltiadis Vasilakis | } |
321 | 64929bae | Miltiadis Vasilakis | |
322 | 700184fb | Miltiadis Vasilakis | |
323 | 700184fb | Miltiadis Vasilakis | #pragma mark - |
324 | 700184fb | Miltiadis Vasilakis | #pragma mark Memory management |
325 | 700184fb | Miltiadis Vasilakis | |
326 | 700184fb | Miltiadis Vasilakis | - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { |
327 | 700184fb | Miltiadis Vasilakis | /* |
328 | 700184fb | Miltiadis Vasilakis | Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. |
329 | 700184fb | Miltiadis Vasilakis | */ |
330 | 700184fb | Miltiadis Vasilakis | } |
331 | 700184fb | Miltiadis Vasilakis | |
332 | 700184fb | Miltiadis Vasilakis | |
333 | 700184fb | Miltiadis Vasilakis | - (void)dealloc { |
334 | 700184fb | Miltiadis Vasilakis | [navigationController release]; |
335 | 700184fb | Miltiadis Vasilakis | [splitViewController release]; |
336 | 700184fb | Miltiadis Vasilakis | [masterNavigationController release]; |
337 | 700184fb | Miltiadis Vasilakis | [barButtonItem release]; |
338 | 700184fb | Miltiadis Vasilakis | [rootViewController release]; |
339 | 700184fb | Miltiadis Vasilakis | [window release]; |
340 | 64929bae | Miltiadis Vasilakis | [cachedObjectsDictionary release]; |
341 | 64929bae | Miltiadis Vasilakis | [userDefaults release]; |
342 | 700184fb | Miltiadis Vasilakis | [super dealloc]; |
343 | 700184fb | Miltiadis Vasilakis | } |
344 | 700184fb | Miltiadis Vasilakis | |
345 | 700184fb | Miltiadis Vasilakis | |
346 | 700184fb | Miltiadis Vasilakis | @end |