diff options
Diffstat (limited to 'SwifTools/AutoUpdater/SparkleAutoUpdater.mm')
-rw-r--r-- | SwifTools/AutoUpdater/SparkleAutoUpdater.mm | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/SwifTools/AutoUpdater/SparkleAutoUpdater.mm b/SwifTools/AutoUpdater/SparkleAutoUpdater.mm index c35abc8..0c296ee 100644 --- a/SwifTools/AutoUpdater/SparkleAutoUpdater.mm +++ b/SwifTools/AutoUpdater/SparkleAutoUpdater.mm @@ -1,34 +1,62 @@ +/* + * Copyright (c) 2016 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + #include <SwifTools/AutoUpdater/SparkleAutoUpdater.h> #include <Cocoa/Cocoa.h> #include <Sparkle/Sparkle.h> +#include <SwifTools/AutoUpdater/SparkleAutoUpdaterDelegate.h> +#include <SwifTools/Cocoa/CocoaUtil.h> + namespace Swift { class SparkleAutoUpdater::Private { - public: - SUUpdater* updater; + public: + SUUpdater* updater; + boost::intrusive_ptr<SparkleAutoUpdaterDelegate> delegate; + bool restartToUpdate = false; }; -SparkleAutoUpdater::SparkleAutoUpdater(const std::string& url) { - d = new Private; +SparkleAutoUpdater::SparkleAutoUpdater(const std::string& appcastFeed) : d(new Private()) { + d->updater = [SUUpdater sharedUpdater]; + [d->updater retain]; - d->updater = [SUUpdater sharedUpdater]; - [d->updater retain]; - [d->updater setAutomaticallyChecksForUpdates: true]; + d->delegate = boost::intrusive_ptr<SparkleAutoUpdaterDelegate>([[SparkleAutoUpdaterDelegate alloc] init], false); + [d->delegate.get() setUpdateDownloadFinished: [&](){ + d->restartToUpdate = true; + onSuggestRestartToUserToUpdate(); + }]; + [d->updater setDelegate: d->delegate.get()]; - NSURL* nsurl = [NSURL URLWithString: - [NSString stringWithUTF8String: url.c_str()]]; - [d->updater setFeedURL: nsurl]; + [d->updater setAutomaticallyChecksForUpdates: true]; + // Automatically check for an update after a day. + [d->updater setUpdateCheckInterval: 86400]; + [d->updater setAutomaticallyDownloadsUpdates: true]; + + NSURL* nsurl = [NSURL URLWithString: std2NSString(appcastFeed)]; + [d->updater setFeedURL: nsurl]; } SparkleAutoUpdater::~SparkleAutoUpdater() { - [d->updater release]; - delete d; + [d->updater release]; +} + +void SparkleAutoUpdater::setAppcastFeed(const std::string& appcastFeed) { + NSURL* nsurl = [NSURL URLWithString: std2NSString(appcastFeed)]; + [d->updater setFeedURL: nsurl]; } void SparkleAutoUpdater::checkForUpdates() { - [d->updater checkForUpdatesInBackground]; + [d->updater resetUpdateCycle]; + [d->updater checkForUpdatesInBackground]; +} + +bool SparkleAutoUpdater::recommendRestartToUpdate() { + return d->restartToUpdate; } } |