Co-authored-by: Tomek Wójcik <labs@tomekwojcik.pl> Co-committed-by: Tomek Wójcik <labs@tomekwojcik.pl>
77 lines
2.4 KiB
Objective-C
77 lines
2.4 KiB
Objective-C
//
|
|
// ViewController.m
|
|
// Shared (App)
|
|
//
|
|
// Created by Tomek Wójcik on 21/08/2025.
|
|
//
|
|
|
|
#import "ViewController.h"
|
|
|
|
#import <WebKit/WebKit.h>
|
|
|
|
#if TARGET_OS_OSX
|
|
#import <SafariServices/SafariServices.h>
|
|
#endif
|
|
|
|
static NSString * const extensionBundleIdentifier = @"pl.bthlabs.HotPocket.HotPocket.Extension";
|
|
|
|
@interface ViewController () <WKNavigationDelegate, WKScriptMessageHandler>
|
|
|
|
@property (nonatomic) IBOutlet WKWebView *webView;
|
|
|
|
@end
|
|
|
|
@implementation ViewController
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
|
|
_webView.navigationDelegate = self;
|
|
|
|
#if TARGET_OS_IOS
|
|
_webView.scrollView.scrollEnabled = NO;
|
|
#endif
|
|
|
|
[_webView.configuration.userContentController addScriptMessageHandler:self name:@"controller"];
|
|
|
|
[_webView loadFileURL:[NSBundle.mainBundle URLForResource:@"Main" withExtension:@"html"] allowingReadAccessToURL:NSBundle.mainBundle.resourceURL];
|
|
}
|
|
|
|
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
|
|
#if TARGET_OS_IOS
|
|
[webView evaluateJavaScript:@"show('ios')" completionHandler:nil];
|
|
#elif TARGET_OS_OSX
|
|
[webView evaluateJavaScript:@"show('mac')" completionHandler:nil];
|
|
|
|
[SFSafariExtensionManager getStateOfSafariExtensionWithIdentifier:extensionBundleIdentifier completionHandler:^(SFSafariExtensionState *state, NSError *error) {
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
if (!state) {
|
|
// Insert code to inform the user something went wrong.
|
|
return;
|
|
}
|
|
|
|
NSString *isExtensionEnabledAsString = state.isEnabled ? @"true" : @"false";
|
|
if (@available(macOS 13, *))
|
|
[webView evaluateJavaScript:[NSString stringWithFormat:@"show('mac', %@, true)", isExtensionEnabledAsString] completionHandler:nil];
|
|
else
|
|
[webView evaluateJavaScript:[NSString stringWithFormat:@"show('mac', %@, false)", isExtensionEnabledAsString] completionHandler:nil];
|
|
});
|
|
}];
|
|
#endif
|
|
}
|
|
|
|
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
|
|
#if TARGET_OS_OSX
|
|
if (![message.body isEqualToString:@"open-preferences"])
|
|
return;
|
|
|
|
[SFSafariApplication showPreferencesForExtensionWithIdentifier:extensionBundleIdentifier completionHandler:^(NSError *error) {
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
[NSApp terminate:self];
|
|
});
|
|
}];
|
|
#endif
|
|
}
|
|
|
|
@end
|