summaryrefslogtreecommitdiffstats
path: root/ui/macosx/sparkle_bridge.m
diff options
context:
space:
mode:
Diffstat (limited to 'ui/macosx/sparkle_bridge.m')
-rw-r--r--ui/macosx/sparkle_bridge.m55
1 files changed, 55 insertions, 0 deletions
diff --git a/ui/macosx/sparkle_bridge.m b/ui/macosx/sparkle_bridge.m
new file mode 100644
index 00000000..7a6509ad
--- /dev/null
+++ b/ui/macosx/sparkle_bridge.m
@@ -0,0 +1,55 @@
+/* sparkle_bridge.m
+ *
+ * C wrapper for the Sparkle API
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include <ui/macosx/sparkle_bridge.h>
+
+#import <Cocoa/Cocoa.h>
+
+#import <Sparkle.h>
+
+// https://sparkle-project.org/documentation/customization/
+// Sparkle stores its state in ~/Library/Preferences/org.wireshark.Wireshark.plist.
+// You can check its log output via `log stream | grep -i sparkle`.
+
+// The Sparkle 1 UI provided a sharedUpdater singleton, which is deprecated
+// in Sparkle 2:
+// https://sparkle-project.org/documentation/upgrading/
+// Create our own singleton which uses the updated API.
+// https://sparkle-project.org/documentation/programmatic-setup/
+
+@interface SparkleBridge : NSObject
++ (SPUStandardUpdaterController *)sharedStandardUpdaterController;
+@end
+
+@implementation SparkleBridge
+
++ (SPUStandardUpdaterController *)sharedStandardUpdaterController {
+ static SPUStandardUpdaterController *sharedStandardUpdaterController_ = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ sharedStandardUpdaterController_ = [[SPUStandardUpdaterController alloc] initWithUpdaterDelegate: nil userDriverDelegate: nil];
+ });
+ return sharedStandardUpdaterController_;
+}
+
+@end
+
+void sparkle_software_update_init(const char *url, bool enabled, int interval)
+{
+ [[[SparkleBridge sharedStandardUpdaterController] updater] setAutomaticallyChecksForUpdates: enabled];
+ [[[SparkleBridge sharedStandardUpdaterController] updater] setUpdateCheckInterval: interval];
+ [[[SparkleBridge sharedStandardUpdaterController] updater] setFeedURL: [NSURL URLWithString: [[NSString alloc] initWithUTF8String: url] ]];
+}
+
+void sparkle_software_update_check(void)
+{
+ [[SparkleBridge sharedStandardUpdaterController] checkForUpdates: [[NSApplication sharedApplication] delegate]];
+}