forked from sparkle-project/Sparkle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
LKSPluginUpdater.m
140 lines (108 loc) · 3.44 KB
/
LKSPluginUpdater.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//
// LKSPluginUpdater.m
// Sparkle
//
// Created by Scott Little on 3/7/13.
//
//
#import "LKSPluginUpdater.h"
#import "LKSPluginHost.h"
#import "LKSPluginCodeSigningVerifier.h"
#import "SUProbingUpdateDriver.h"
#import "SULog.h"
@interface SUUpdater (Private_Copy)
- (id)initForBundle:(NSBundle *)bundle;
- (void)startUpdateCycle;
- (void)checkForUpdatesWithDriver:(SUUpdateDriver *)updateDriver;
- (BOOL)automaticallyDownloadsUpdates;
- (void)scheduleNextUpdateCheck;
- (void)registerAsObserver;
- (void)unregisterAsObserver;
- (void)updateDriverDidFinish:(NSNotification *)note;
- (NSURL *)parameterizedFeedURL;
-(void) notifyWillShowModalAlert;
-(void) notifyDidShowModalAlert;
@property SUHost *myHost;
@property SUUpdateDriver *myDriver;
@property NSTimer *myCheckTimer;
@end
@implementation LKSPluginUpdater
@synthesize skipPreferenceSaves = _skipPreferenceSaves;
+ (SUUpdater *)updaterForBundle:(NSBundle *)aBundle delegate:(id)aDelegate {
SUUpdater *updater = [self updaterForBundle:aBundle];
[updater setDelegate:aDelegate];
return updater;
}
- (id)initForBundle:(NSBundle *)bundle {
self = [super initForBundle:bundle];
if (self) {
// Redo the security testing to be based on plugins
self.updatingIsSecure = YES;
// Saving-the-developer-from-a-stupid-mistake-check:
BOOL hasPublicDSAKey = [self.myHost publicDSAKey] != nil;
BOOL hostIsCodeSigned = [LKSPluginCodeSigningVerifier hostApplicationIsCodeSigned];
if (!(hasPublicDSAKey || hostIsCodeSigned)) {
self.updatingIsSecure = NO;
}
}
return self;
}
- (void)dealloc {
if ([self.myHost isKindOfClass:[LKSPluginHost class]]) {
((LKSPluginHost *)self.myHost).skipPreferenceSaves = NO;
}
[super dealloc];
}
- (void)checkForUpdateInformation {
if ([self updateInProgress]) { return; }
if (self.myCheckTimer) {
[self.myCheckTimer invalidate];
self.myCheckTimer = nil;
} // UK 2009-03-16 Timer is non-repeating, may have invalidated itself, so we had to retain it.
SUClearLog();
SULog( @"===== %@ =====", [[NSFileManager defaultManager] displayNameAtPath:[self.myHost bundlePath]] );
if ([self.myHost isKindOfClass:[LKSPluginHost class]]) {
((LKSPluginHost *)self.myHost).skipPreferenceSaves = self.skipPreferenceSaves;
}
self.myDriver = [[[SUProbingUpdateDriver alloc] initWithUpdater:self] autorelease];
NSURL *theFeedURL = [self parameterizedFeedURL];
if (theFeedURL) { // Use a NIL URL to cancel quietly.
[self.myDriver checkForUpdatesAtURL:theFeedURL host:self.myHost];
}
else {
[self.myDriver abortUpdate];
}
}
- (void)startUpdateCycle {
}
- (void)updateDriverDidFinish:(NSNotification *)note {
if ([note object] == self.myDriver && [self.myDriver finished]) {
self.myDriver = nil;
if (![[note object] isKindOfClass:NSClassFromString(@"SUProbingUpdateDriver")]) {
[self scheduleNextUpdateCheck];
}
if ([self.myHost isKindOfClass:[LKSPluginHost class]]) {
((LKSPluginHost *)self.myHost).skipPreferenceSaves = NO;
}
}
}
#pragma mark - Accessors
- (SUHost *)myHost {
return [self valueForKey:@"host"];
}
- (void)setMyHost:(SUHost *)host {
[self setValue:host forKey:@"host"];
}
- (SUUpdateDriver *)myDriver {
return [self valueForKey:@"driver"];
}
- (void)setMyDriver:(SUUpdateDriver *)driver {
[self setValue:driver forKey:@"driver"];
}
- (NSTimer *)myCheckTimer {
return [self valueForKey:@"checkTimer"];
}
- (void)setMyCheckTimer:(NSTimer *)checkTimer {
[self setValue:checkTimer forKey:@"checkTimer"];
}
@end