@@ -2,42 +2,74 @@ import Logger
22import Preferences
33import Sparkle
44
5- public final class UpdateChecker {
5+ public protocol UpdateCheckerProtocol {
6+ func checkForUpdates( )
7+ func getAutomaticallyChecksForUpdates( ) -> Bool
8+ func setAutomaticallyChecksForUpdates( _ value: Bool )
9+ }
10+
11+ public protocol UpdateCheckerDelegate : AnyObject {
12+ func prepareForRelaunch( finish: @escaping ( ) -> Void )
13+ }
14+
15+ public final class NoopUpdateChecker : UpdateCheckerProtocol {
16+ public init ( ) { }
17+ public func checkForUpdates( ) { }
18+ public func getAutomaticallyChecksForUpdates( ) -> Bool { false }
19+ public func setAutomaticallyChecksForUpdates( _ value: Bool ) { }
20+ }
21+
22+ public final class UpdateChecker : UpdateCheckerProtocol {
623 let updater : SPUUpdater
7- let hostBundleFound : Bool
824 let delegate = UpdaterDelegate ( )
925
10- public init ( hostBundle: Bundle ? ) {
11- if hostBundle == nil {
12- hostBundleFound = false
13- Logger . updateChecker. error ( " Host bundle not found " )
14- } else {
15- hostBundleFound = true
16- }
26+ public init ( hostBundle: Bundle , checkerDelegate: UpdateCheckerDelegate ) {
1727 updater = SPUUpdater (
18- hostBundle: hostBundle ?? Bundle . main ,
28+ hostBundle: hostBundle,
1929 applicationBundle: Bundle . main,
20- userDriver: SPUStandardUserDriver ( hostBundle: hostBundle ?? Bundle . main , delegate: nil ) ,
30+ userDriver: SPUStandardUserDriver ( hostBundle: hostBundle, delegate: nil ) ,
2131 delegate: delegate
2232 )
33+ delegate. updateCheckerDelegate = checkerDelegate
2334 do {
2435 try updater. start ( )
2536 } catch {
2637 Logger . updateChecker. error ( error. localizedDescription)
2738 }
2839 }
2940
41+ public convenience init ? ( hostBundle: Bundle ? , checkerDelegate: UpdateCheckerDelegate ) {
42+ guard let hostBundle = hostBundle else { return nil }
43+ self . init ( hostBundle: hostBundle, checkerDelegate: checkerDelegate)
44+ }
45+
3046 public func checkForUpdates( ) {
3147 updater. checkForUpdates ( )
3248 }
3349
34- public var automaticallyChecksForUpdates : Bool {
35- get { updater. automaticallyChecksForUpdates }
36- set { updater. automaticallyChecksForUpdates = newValue }
50+ public func getAutomaticallyChecksForUpdates( ) -> Bool {
51+ updater. automaticallyChecksForUpdates
52+ }
53+
54+ public func setAutomaticallyChecksForUpdates( _ value: Bool ) {
55+ updater. automaticallyChecksForUpdates = value
3756 }
3857}
3958
4059class UpdaterDelegate : NSObject , SPUUpdaterDelegate {
60+ weak var updateCheckerDelegate : UpdateCheckerDelegate ?
61+
62+ func updater(
63+ _ updater: SPUUpdater ,
64+ shouldPostponeRelaunchForUpdate item: SUAppcastItem ,
65+ untilInvokingBlock installHandler: @escaping ( ) -> Void ) -> Bool {
66+ if let updateCheckerDelegate {
67+ updateCheckerDelegate. prepareForRelaunch ( finish: installHandler)
68+ return true
69+ }
70+ return false
71+ }
72+
4173 func allowedChannels( for updater: SPUUpdater ) -> Set < String > {
4274 if UserDefaults . shared. value ( for: \. installPrereleases) {
4375 Set ( [ " prerelease " ] )
0 commit comments