You've already forked hotpocket
BTHLABS-58: Share Extension in Apple Apps
This commit is contained in:
128
services/apple/macOS (Share Extension)/ShareViewController.m
Normal file
128
services/apple/macOS (Share Extension)/ShareViewController.m
Normal file
@@ -0,0 +1,128 @@
|
||||
//
|
||||
// ShareViewController.m
|
||||
// macOS (Share Extension)
|
||||
//
|
||||
// Created by Tomek Wójcik on 22/09/2025.
|
||||
//
|
||||
|
||||
#import "ShareViewController.h"
|
||||
|
||||
#import "HPAPI.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.savingViewHidden = YES;
|
||||
|
||||
if (result.error != nil) {
|
||||
#ifdef DEBUG
|
||||
NSLog(@"-[ShareViewController resolveLinkAndSave] saveError=`%@`", result.error);
|
||||
#endif
|
||||
self.errorViewHidden = NO;
|
||||
} else {
|
||||
self.doneViewHidden = NO;
|
||||
}
|
||||
});
|
||||
}];
|
||||
|
||||
if (callResult == NO) {
|
||||
self.savingViewHidden = YES;
|
||||
self.errorViewHidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)resolveLinkAndSave {
|
||||
HPShareExtensionHelper *helper = [[HPShareExtensionHelper alloc] initWithContext:self.extensionContext];
|
||||
[helper processItems:^(NSURL *url) {
|
||||
if (url == nil) {
|
||||
self.savingViewHidden = YES;
|
||||
self.unprocessableEntityViewHidden = NO;
|
||||
} else {
|
||||
[self saveURL:url];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation ShareViewController
|
||||
|
||||
#pragma mark - View lifecycle
|
||||
|
||||
-(NSString *)nibName {
|
||||
return @"ShareViewController";
|
||||
}
|
||||
|
||||
-(void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
self.savingViewHidden = NO;
|
||||
self.needsSetupViewHidden = YES;
|
||||
self.doneViewHidden = YES;
|
||||
self.errorViewHidden = YES;
|
||||
self.unprocessableEntityViewHidden = YES;
|
||||
|
||||
NSBundle *mainBundle = [NSBundle mainBundle];
|
||||
self.uname = [NSString stringWithFormat:@"HotPocket v%@ (%@)", [mainBundle.infoDictionary valueForKey:@"CFBundleShortVersionString"], [mainBundle.infoDictionary valueForKey:@"CFBundleVersion"]];
|
||||
|
||||
self.api = [[HPAPI alloc] init];
|
||||
if (self.api.rpcClient.hasCredentials == YES) {
|
||||
self.savingViewHidden = NO;
|
||||
self.needsSetupViewHidden = YES;
|
||||
} else {
|
||||
self.savingViewHidden = YES;
|
||||
self.needsSetupViewHidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)viewWillAppear {
|
||||
[super viewWillAppear];
|
||||
[self.progressIndicator startAnimation:self];
|
||||
}
|
||||
|
||||
-(void)viewDidAppear {
|
||||
[super viewDidAppear];
|
||||
|
||||
[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.savingViewHidden = YES;
|
||||
self.needsSetupViewHidden = NO;
|
||||
} else {
|
||||
[self resolveLinkAndSave];
|
||||
}
|
||||
});
|
||||
}];
|
||||
}
|
||||
|
||||
-(void)viewDidDisappear {
|
||||
[super viewDidDisappear];
|
||||
[self.progressIndicator stopAnimation:self];
|
||||
}
|
||||
|
||||
#pragma mark - Actions
|
||||
|
||||
-(IBAction)close:(id)sender {
|
||||
NSExtensionItem *outputItem = [[NSExtensionItem alloc] init];
|
||||
|
||||
NSArray *outputItems = @[outputItem];
|
||||
[self.extensionContext completeRequestReturningItems:outputItems completionHandler:nil];
|
||||
}
|
||||
|
||||
-(IBAction)cancel:(id)sender {
|
||||
NSError *cancelError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil];
|
||||
[self.extensionContext cancelRequestWithError:cancelError];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user