10 #import "GTMHTTPFetcher.h" 11 #import "GTLDriveFile.h" 12 #import "GTMSessionFetcherService.h" 30 NSMutableArray *localDriveListeners;
38 self.service = [[GTLRDriveService alloc] init];
40 localDriveListeners = [[NSMutableArray alloc] initWithCapacity:10];
48 - (void) addDriveListener: (
id<Z5GoogleDriveListener>)ear
51 [localDriveListeners addObject:ear];
53 - (void) removeDriveListener: (
id<Z5GoogleDriveListener>)ear
55 [localDriveListeners removeObject:ear];
57 - (void) connectToLogin
63 #pragma mark - Z5GoogleLoginListener 71 self.service.authorizer = nil;
75 - (NSString *)signedInUsername {
112 -(void) listRootFor:(
id<V7GoogDriveAPIProtocol>)reqstor
114 GTLRServiceTicket *rootListTicket = [
self listRoot];
116 NSDictionary<NSString *,id> *extraTicketProps = [rootListTicket ticketProperties];
117 NSString *rootFetchKey = [extraTicketProps objectForKey:@"query-stage"];
118 NSLog(
@"Z5GoogleDriveController.viewDidLoad: rootFetechKey: %@", rootFetchKey);
119 [requestLine setObject:reqstor forKey:rootFetchKey];
123 - (GTLRServiceTicket *)listRoot {
126 remoteDataController] driveController];
127 GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
128 query.fields =
@"nextPageToken, files(id, name)";
129 query.pageSize = 100;
130 query.q =
@"name = 'NutritionJournal'";
132 NSMutableDictionary<NSString *,id> *extraTicketProps = [[NSMutableDictionary alloc] init];
133 [extraTicketProps setObject:@"chase-root" forKey:@"query-stage"];
134 [query.executionParameters setTicketProperties:extraTicketProps];
136 NSLog(
@"Z5GoogleDriveController.listRoot: authorizer: %@", driveController.
service.authorizer);
138 GTLRServiceTicket *queryTicket = [driveController.service executeQuery:query
140 didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
145 - (void) listJournalRootFor:(
id<V7GoogDriveAPIProtocol>)reqstor
147 GTLRServiceTicket *rootListTicket = [
self listJournalRoot:journalRootId];
149 NSDictionary<NSString *,id> *extraTicketProps = [rootListTicket ticketProperties];
150 NSString *journalRootFetchKey = [extraTicketProps objectForKey:@"query-stage"];
151 NSLog(
@"Z5GoogleDriveController.viewDidLoad: rootFetechKey: %@", journalRootFetchKey);
152 [requestLine setObject:reqstor forKey:journalRootFetchKey];
154 - (GTLRServiceTicket *)listJournalRoot:(NSString *)journalRootId {
156 NSLog(
@"Z5GoogleDriveController.listJournalRoot");
159 GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
160 query.fields =
@" nextPageToken, files(id, name, mimeType)";
161 query.pageSize = 100;
162 query.q = [NSString stringWithFormat:@"'%@' in parents and mimeType = 'application/vnd.google-apps.folder'",
165 NSMutableDictionary<NSString *,id> *extraTicketProps = [[NSMutableDictionary alloc] init];
166 [extraTicketProps setObject:@"chase-journal-root" forKey:@"query-stage"];
167 [query.executionParameters setTicketProperties:extraTicketProps];
169 NSLog(
@"Z5GoogleDriveController.listJournalRoot: authorizer: %@", driveController.
service.authorizer);
171 GTLRServiceTicket *queryTicket = [driveController.service
174 didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
181 - (NSArray *)listJournalItemRoot:(NSArray<GTLRDrive_File *> *)itemFiles
183 NSLog(
@"Z5GoogleDriveController.listJournalItemRoot: input file count: %lu", (
unsigned long)[itemFiles count]);
185 NSMutableArray * ret = [[NSMutableArray alloc] init];
186 for (GTLRDrive_File *file in itemFiles) {
187 NSLog(
@"Z5GoogleDriveController.listJournalItemRoot: mimeType %@", file.mimeType);
189 [ret addObject:[file name]];
191 if ([file.mimeType isEqualToString:
@"application/vnd.google-apps.folder"]) {
199 - (void) listJournaItemPartRoot:(NSString *)journalItemPartRootId for:(
id<V7GoogDriveAPIProtocol>) requestor
203 NSDictionary<NSString *,id> *extraTicketProps = [rootListTicket ticketProperties];
204 NSString *journalItemPartRootFetchKey = [extraTicketProps objectForKey:@"query-stage"];
205 NSLog(
@"Z5GoogleDriveController.listJournaItemPartRootFor: journalItemPartRootFetchKey: %@", journalItemPartRootFetchKey);
206 [requestLine setObject:requestor forKey:journalItemPartRootFetchKey];
208 - (GTLRServiceTicket *)listJournaItemPartRoot:(NSString *)journalItemPartRootId {
210 NSLog(
@"Z5GoogleDriveController.listJournaItemPartRoot");
213 GTLRDriveQuery_FilesList *query = [GTLRDriveQuery_FilesList query];
214 query.fields =
@"nextPageToken, files(id, name)";
215 query.pageSize = 100;
216 query.q = [NSString stringWithFormat:@"'%@' in parents", journalItemPartRootId];
218 NSMutableDictionary<NSString *,id> *extraTicketProps = [[NSMutableDictionary alloc] init];
219 [extraTicketProps setObject:@"chase-journal-item-part-root" forKey:@"query-stage"];
220 [query.executionParameters setTicketProperties:extraTicketProps];
224 GTLRServiceTicket *queryTicket = [driveController.service executeQuery:query
226 didFinishSelector:@selector(displayResultWithTicket:finishedWithObject:error:)];
232 - (void)displayResultWithTicket:(GTLRServiceTicket *)ticket
233 finishedWithObject:(GTLRDrive_FileList *)result
234 error:(NSError *)error {
236 NSDictionary<NSString *,id> *extraTicketProps = [ticket ticketProperties];
237 NSString *queryFetchKey = [extraTicketProps objectForKey:@"query-stage"];
240 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket: key: %@ count: %lu",
241 queryFetchKey, [result.files count]);
243 if ([queryFetchKey isEqualToString:
@"chase-root"]) {
245 for (GTLRDrive_File *file in result.files) {
248 id<V7GoogDriveAPIProtocol> reqstor = [requestLine objectForKey:queryFetchKey];
250 }
else if ([queryFetchKey isEqualToString:
@"chase-journal-root"]) {
251 id<V7GoogDriveAPIProtocol> reqstor = [requestLine objectForKey:queryFetchKey];
252 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket: JournalRoot");
256 NSMutableArray *filesToRequestor = [[NSMutableArray alloc] init];
257 for (GTLRDrive_File *file in result.files) {
258 NSLog(
@"V7GoogDriveViewController.resultStage: mime %@ name: %@ identifier: %@", file.mimeType, file.name, file.identifier);
259 NSDictionary *fileInfo = [[NSDictionary alloc] initWithObjectsAndKeys:file.name, @"filename", file.identifier, @"fileidentifier", nil];
260 [filesToRequestor addObject:fileInfo];
264 if ([file.mimeType isEqualToString:
@"application/vnd.google-apps.folder"]) {
265 NSLog(
@"V7GoogDriveViewController.resultStage: Folder in Journal-Root, request parts");
271 [reqstor resultStage:qJournalRoot returnedFiles:filesToRequestor];
273 }
else if ([queryFetchKey isEqualToString:
@"chase-journal-item-root"]) {
274 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket: JournalItemRoot: #files: %ld", [result.files count]);
276 NSString *journalItemRoot = [result.files lastObject].identifier;
277 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket: journalItemRoot: %@", journalItemRoot);
280 [mDriveAPIDelegate resultStage:kOblateSpheroid returnedFiles:result.files];
281 }
else if ([queryFetchKey isEqualToString:
@"chase-journal-item-part-root"]) {
282 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket: JournalItemPartRoot");
283 [mDriveAPIDelegate resultStage:qJournalPartRoot returnedFiles:result.files];
286 [mDriveAPIDelegate ticketCompleted:ticket];
289 NSMutableString *errMessage = [[NSMutableString alloc] init];
290 [errMessage appendFormat:@"Error getting presentation data: %@\n", error.localizedDescription];
292 NSLog(
@"Z5GoogleDriveController.displayResultWithTicket:: Error: %@", error.localizedDescription);
303 - (void) createFolder:(NSString *) newFolderName inFolder:(NSObject *) parent
307 NSLog(
@"Z5GoogleDriveController.createFolder: user: %@ new folder name: %@", [loginControl username], newFolderName);
308 if (nil!=[loginControl username]) {
310 GTLRDrive_File *metadata = [GTLRDrive_File object];
311 metadata.name = newFolderName;
312 metadata.mimeType =
@"application/vnd.google-apps.folder";
313 GTLRDriveQuery_FilesCreate *query =
314 [GTLRDriveQuery_FilesCreate queryWithObject:metadata
315 uploadParameters:nil];
316 query.fields =
@"id";
317 [_service executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
318 GTLRDrive_File *file,
321 NSLog(@"Z5GoogleDriveController.createFolder: File ID %@", file.identifier);
323 NSLog(@"Z5GoogleDriveController.createFolder: An error occurred: %@", error);
327 NSLog(
@"Z5GoogleDriveController.createFolder: not logged in");
334 NSData *fileData = [[NSFileManager defaultManager] contentsAtPath:@"files/photo.jpg"];
335 NSString *folderId =
@"0BwwA4oUTeiV1UVNwOHItT0xfa2M";
337 GTLRDrive_File *metadata = [GTLRDrive_File object];
338 metadata.name =
@"photo.jpg";
339 metadata.parents = [NSArray arrayWithObject:folderId];
341 GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileData MIMEType:@"image/jpeg"];
342 uploadParameters.shouldUploadWithSingleRequest = TRUE;
343 GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata
344 uploadParameters:uploadParameters];
345 query.fields =
@"id";
346 [_service executeQuery:query completionHandler:^(GTLRServiceTicket *ticket,
347 GTLRDrive_File *file,
350 NSLog(@"Z5GoogleDriveController.uploadFile: File ID %@", file.identifier);
352 NSLog(@"Z5GoogleDriveController.uploadFile: An error occurred: %@", error);
357 - (void) downloadFile: (GTLDriveFile *)file withDelegate:(
id<Z5RemoteDataFetchProtocol>) delegate
361 __block NSString *driveFileTitle = [file title];
362 __block NSString *driveFileId = [file identifier];
363 GTMSessionFetcher *fetcher = [_service.fetcherService fetcherWithURLString:file.downloadUrl];
365 [fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
371 [delegate showDataFetch:data fromFile:driveFileTitle withGoogleId:driveFileId];
374 NSLog(@"RemoteDate.downloadFile: An error occurred: %@", error);
380 - (void) logFilesList:(NSArray<GTLRDrive_File *> *)fileArr
383 NSMutableString *output = [[NSMutableString alloc] init];
384 if (fileArr.count > 0) {
385 [output appendString:@"Files:\n"];
387 for (GTLRDrive_File *file in fileArr) {
388 [output appendFormat:@"%@ (%@)\n", file.name, file.identifier];
392 [output appendString:@"No files found."];
394 NSLog(
@"V7GoogleDriveViewController.logFilesList: %@", output);
GTLRDriveService * service
void logFilesList:(NSArray< GTLRDrive_File *> *fileArr)
void addLoginListener:(id< Z5GoogleLoginListener > ear)
void listJournaItemPartRoot:for:(NSString *journalItemPartRootId, [for] id< V7GoogDriveAPIProtocol > requestor)
instancetype sharedInstance()
id< GTMFetcherAuthorizationProtocol > fetcherAuthorizer()
NSMutableDictionary * requestLine
GTLRServiceTicket * listRoot()
void listJournalRootFor:(id< V7GoogDriveAPIProtocol > reqstor)
id< V7GoogDriveAPIProtocol > mDriveAPIDelegate
void createFolder:inFolder:(NSString *newFolderName, [inFolder] NSObject *parent)
GTLRServiceTicket * listJournaItemPartRoot:(NSString *journalItemPartRootId)
Singleton interface to both core and remote data sources.
GIDGoogleUser * currentUser
GIDSignIn * sharedInstance()
GIDAuthentication * authentication
GTLRServiceTicket * listJournalRoot:(NSString *journalRootId)