From 7cf1049f3b73ab34eeb3c249e7a1e79f9cc63952 Mon Sep 17 00:00:00 2001 From: David Sinclair Date: Tue, 22 Dec 2015 22:01:56 -0800 Subject: [PATCH] iOS: tweaked #755 (sharing extension) --- clients/ios/NewsBlur_Prefix.pch | 2 +- clients/ios/Share Extension/Info.plist | 11 ++- .../ios/Share Extension/ShareViewController.m | 92 ++++++++++++++----- 3 files changed, 77 insertions(+), 28 deletions(-) diff --git a/clients/ios/NewsBlur_Prefix.pch b/clients/ios/NewsBlur_Prefix.pch index a4ca7592d..b739d6220 100644 --- a/clients/ios/NewsBlur_Prefix.pch +++ b/clients/ios/NewsBlur_Prefix.pch @@ -8,7 +8,7 @@ #import //#define DEBUG 1 -//#define PROD_DEBUG 1 +#define PROD_DEBUG 1 #ifdef DEBUG #define BACKGROUND_REFRESH_SECONDS -5 diff --git a/clients/ios/Share Extension/Info.plist b/clients/ios/Share Extension/Info.plist index b9616ddbc..bf61c04a7 100644 --- a/clients/ios/Share Extension/Info.plist +++ b/clients/ios/Share Extension/Info.plist @@ -31,8 +31,15 @@ NSExtensionAttributes NSExtensionActivationRule - TRUEPREDICATE - + + NSExtensionActivationSupportsWebURLWithMaxCount + 1 + NSExtensionActivationSupportsText + 1 + + NSExtensionActivationUsesStrictMatching + 1 + NSExtensionMainStoryboard MainInterface NSExtensionPointIdentifier diff --git a/clients/ios/Share Extension/ShareViewController.m b/clients/ios/Share Extension/ShareViewController.m index 293935ca0..9dec5885d 100644 --- a/clients/ios/Share Extension/ShareViewController.m +++ b/clients/ios/Share Extension/ShareViewController.m @@ -18,7 +18,7 @@ - (BOOL)isContentValid { for (NSExtensionItem *item in self.extensionContext.inputItems) { for (NSItemProvider *itemProvider in item.attachments) { - return [itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]; + return [itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL] || [itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeText]; } } @@ -26,36 +26,78 @@ } - (void)didSelectPost { + NSItemProvider *itemProvider = [self providerWithURL]; + + if (itemProvider) { + [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *item, NSError * _Null_unspecified error) { + if (item) { + [self sendURL:item orText:nil]; + [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; + } + }]; + } else { + itemProvider = [self providerWithText]; + + if (itemProvider) { + [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeText options:nil completionHandler:^(NSString *item, NSError * _Null_unspecified error) { + if (item) { + [self sendURL:nil orText:item]; + [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; + } + }]; + } + } +} + +- (NSItemProvider *)providerWithURL { for (NSExtensionItem *extensionItem in self.extensionContext.inputItems) { for (NSItemProvider *itemProvider in extensionItem.attachments) { if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) { - [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *item, NSError * _Null_unspecified error) { - if (item) { - NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.newsblur.NewsBlur-Group"]; - NSString *host = [defaults objectForKey:@"share:host"]; - NSString *token = [defaults objectForKey:@"share:token"]; - NSCharacterSet *characterSet = [NSCharacterSet URLQueryAllowedCharacterSet]; - NSString *encodedURL = [item.absoluteString stringByAddingPercentEncodingWithAllowedCharacters:characterSet]; - NSString *encodedComments = [self.contentText stringByAddingPercentEncodingWithAllowedCharacters:characterSet]; -// NSInteger time = [[NSDate date] timeIntervalSince1970]; - NSURLSession *mySession = [self configureMySession]; - // NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/add_site_load_script/%@/?url=%@&time=%@&comments=%@", host, token, encodedURL, @(time), encodedComments]]; - // NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/share_story/%@", host, token]]; - NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/share_story", host]]; - NSLog(@"Host: %@; secret token: %@; url: %@", host, token, url); - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; - [request setHTTPMethod:@"POST"]; - NSString *postBody = [NSString stringWithFormat:@"story_url=%@&comments=%@", encodedURL, encodedComments]; - [request setHTTPBody:[postBody dataUsingEncoding:NSUTF8StringEncoding]]; - NSURLSessionTask *myTask = [mySession dataTaskWithRequest:request]; - [myTask resume]; - - [self.extensionContext completeRequestReturningItems:@[] completionHandler:nil]; - } - }]; + return itemProvider; } } } + + return nil; +} + +- (NSItemProvider *)providerWithText { + for (NSExtensionItem *extensionItem in self.extensionContext.inputItems) { + for (NSItemProvider *itemProvider in extensionItem.attachments) { + if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeText]) { + return itemProvider; + } + } + } + + return nil; +} + +- (void)sendURL:(NSURL *)url orText:(NSString *)text { + NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.newsblur.NewsBlur-Group"]; + NSString *host = [defaults objectForKey:@"share:host"]; +// NSString *token = [defaults objectForKey:@"share:token"]; + NSString *comments = self.contentText; + + if (text && [comments isEqualToString:text]) { + comments = @""; + } + + NSCharacterSet *characterSet = [NSCharacterSet URLQueryAllowedCharacterSet]; + NSString *encodedURL = url ? [url.absoluteString stringByAddingPercentEncodingWithAllowedCharacters:characterSet] : @""; + NSString *encodedContent = text ? [text stringByAddingPercentEncodingWithAllowedCharacters:characterSet] : @""; + NSString *encodedComments = [comments stringByAddingPercentEncodingWithAllowedCharacters:characterSet]; + // NSInteger time = [[NSDate date] timeIntervalSince1970]; + NSURLSession *mySession = [self configureMySession]; + // NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/add_site_load_script/%@/?url=%@&time=%@&comments=%@", host, token, encodedURL, @(time), encodedComments]]; + // NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/share_story/%@", host, token]]; + NSURL *requestURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://%@/api/share_story", host]]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestURL]; + request.HTTPMethod = @"POST"; + NSString *postBody = [NSString stringWithFormat:@"story_url=%@&title=&content=%@&comments=%@", encodedURL, encodedContent, encodedComments]; + request.HTTPBody = [postBody dataUsingEncoding:NSUTF8StringEncoding]; + NSURLSessionTask *myTask = [mySession dataTaskWithRequest:request]; + [myTask resume]; } - (NSURLSession *)configureMySession {