127 lines
3.6 KiB
Objective-C
127 lines
3.6 KiB
Objective-C
//
|
|
// 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
|