You've already forked hotpocket
BTHLABS-58: Share Extension in Apple Apps
This commit is contained in:
126
services/apple/iOS (Share Extension)/ShareViewController.m
Normal file
126
services/apple/iOS (Share Extension)/ShareViewController.m
Normal file
@@ -0,0 +1,126 @@
|
||||
//
|
||||
// ShareViewController.m
|
||||
// iOS (Share Extension)
|
||||
//
|
||||
// Created by Tomek Wójcik on 25/09/2025.
|
||||
//
|
||||
|
||||
#import <UniformTypeIdentifiers/UniformTypeIdentifiers.h>
|
||||
|
||||
#import "ShareViewController.h"
|
||||
|
||||
#import "HPAPI.h"
|
||||
#import "HPCredentialsHelper.h"
|
||||
#import "HPShareExtensionHelper.h"
|
||||
|
||||
@implementation ShareViewController (ShareViewControllerPrivate)
|
||||
|
||||
#pragma mark - Private interface
|
||||
|
||||
-(void)saveURL:(NSURL *)url {
|
||||
#ifdef DEBUG
|
||||
NSLog(@"-[ShareViewController save:] url=`%@`", url);
|
||||
#endif
|
||||
BOOL callResult = [self.api save:url completionHandler:^(NSString * _Nullable callId, HPRPCCallResult * _Nullable result) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
self.savingView.hidden = YES;
|
||||
|
||||
if (result.error != nil) {
|
||||
#ifdef DEBUG
|
||||
NSLog(@"-[ShareViewController resolveLinkAndSave] saveError=`%@`", result.error);
|
||||
#endif
|
||||
self.errorView.hidden = NO;
|
||||
} else {
|
||||
self.doneView.hidden = NO;
|
||||
}
|
||||
});
|
||||
}];
|
||||
|
||||
if (callResult == NO) {
|
||||
self.savingView.hidden = YES;
|
||||
self.errorView.hidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)resolveLinkAndSave {
|
||||
HPShareExtensionHelper *helper = [[HPShareExtensionHelper alloc] initWithContext:self.extensionContext];
|
||||
[helper processItems:^(NSURL *url) {
|
||||
if (url == nil) {
|
||||
self.savingView.hidden = YES;
|
||||
self.unprocessableEntityView.hidden = NO;
|
||||
} else {
|
||||
[self saveURL:url];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation ShareViewController
|
||||
|
||||
#pragma mark - View lifecycle
|
||||
|
||||
-(void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.savingView.hidden = NO;
|
||||
self.needsSetupView.hidden = YES;
|
||||
self.doneView.hidden = YES;
|
||||
self.errorView.hidden = YES;
|
||||
self.unprocessableEntityView.hidden = YES;
|
||||
|
||||
NSBundle *mainBundle = [NSBundle mainBundle];
|
||||
self.unameLabel.text = [NSString stringWithFormat:@"HotPocket v%@ (%@)", [mainBundle.infoDictionary valueForKey:@"CFBundleShortVersionString"], [mainBundle.infoDictionary valueForKey:@"CFBundleVersion"]];
|
||||
|
||||
self.api = [[HPAPI alloc] init];
|
||||
if (self.api.rpcClient.hasCredentials == YES) {
|
||||
self.savingView.hidden = NO;
|
||||
self.needsSetupView.hidden = YES;
|
||||
} else {
|
||||
self.savingView.hidden = YES;
|
||||
self.needsSetupView.hidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
[self.progressIndicator startAnimating];
|
||||
}
|
||||
|
||||
-(void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
[self.progressIndicator stopAnimating];
|
||||
}
|
||||
|
||||
-(void)viewDidAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
[self.api checkAuth:^(BOOL authValid, NSError *error, NSString *callId) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (authValid == NO) {
|
||||
#ifdef DEBUG
|
||||
NSLog(@"-[ShareViewController viewDidAppear:] checkAuthError=`%@`", error);
|
||||
#endif
|
||||
self.savingView.hidden = YES;
|
||||
self.needsSetupView.hidden = NO;
|
||||
} else {
|
||||
[self resolveLinkAndSave];
|
||||
}
|
||||
});
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Actions
|
||||
|
||||
-(IBAction)doCancel:(id)sender {
|
||||
NSError *cancelError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil];
|
||||
[self.extensionContext cancelRequestWithError:cancelError];
|
||||
}
|
||||
|
||||
-(IBAction)doClose:(id)sender {
|
||||
NSExtensionItem *outputItem = [[NSExtensionItem alloc] init];
|
||||
|
||||
NSArray *outputItems = @[outputItem];
|
||||
[self.extensionContext completeRequestReturningItems:outputItems completionHandler:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user