forked from mipstian/catch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCTCDefaults.m
179 lines (141 loc) · 7.07 KB
/
CTCDefaults.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#import "CTCDefaults.h"
#import "CTCLoginItems.h"
#import "CTCFileUtils.h"
// Check feed every 10 minutes
NSTimeInterval const kCTCDefaultsFeedUpdateInterval = 60 * 10;
NSString * const kCTCDefaultsApplicationWebsiteURL = @"http://github.com/mipstian/catch";
NSString * const kCTCDefaultsApplicationBugReportURL = @"https://github.com/mipstian/catch/issues/new?labels=bug";
NSString * const kCTCDefaultsApplicationFeatureRequestURL = @"https://github.com/mipstian/catch/issues/new?labels=enhancement";
NSString * const kCTCDefaultsApplicationHelpURL = @"https://github.com/mipstian/catch/wiki/Configuration";
NSString * const kCTCDefaultsServiceURL = @"http://showrss.info/";
NSString * const kCTCDefaultsServiceFeedURLPrefix = @"http://showrss.info/rss.php?";
// NSUserDefaults keys
NSString * const kCTCDefaultsFeedURLKey = @"feedURL";
NSString * const kCTCDefaultsOnlyUpdateBetweenKey = @"onlyUpdateBetween";
NSString * const kCTCDefaultsUpdateFromKey = @"updateFrom";
NSString * const kCTCDefaultsUpdateToKey = @"updateTo";
NSString * const kCTCDefaultsTorrentsSavePathKey = @"savePath";
NSString * const kCTCDefaultsShouldOrganizeTorrents = @"organizeTorrents";
NSString * const kCTCDefaultsShouldOpenTorrentsAutomatically = @"openAutomatically";
NSString * const kCTCDefaultsDownloadedFilesKey = @"downloadedFiles"; // Deprecated
NSString * const kCTCDefaultsDownloadHistoryKey = @"history";
NSString * const kCTCDefaultsOpenAtLoginKey = @"openAtLogin";
@implementation CTCDefaults
+ (void)setDefaultDefaults {
// Create two dummy times (dates actually), just to have some value set
NSDateComponents *comps = NSDateComponents.new;
comps.hour = 24;
comps.minute = 0;
NSCalendar *calendar = NSCalendar.currentCalendar;
NSDate *dateFrom = [calendar dateFromComponents:comps];
comps.hour = 8;
NSDate *dateTo = [calendar dateFromComponents:comps];
// Use user's Downloads directory as a default, fallback on home
NSString *defaultDownloadsDirectory = CTCFileUtils.userDownloadsDirectory ?: CTCFileUtils.userHomeDirectory;
NSLog(@"Default downloads directory is %@", defaultDownloadsDirectory);
// Set smart default defaults
NSDictionary *appDefaults = @{kCTCDefaultsFeedURLKey: @"",
kCTCDefaultsOnlyUpdateBetweenKey: @NO,
kCTCDefaultsUpdateFromKey: dateFrom,
kCTCDefaultsUpdateToKey: dateTo,
kCTCDefaultsTorrentsSavePathKey: defaultDownloadsDirectory,
kCTCDefaultsShouldOrganizeTorrents: @NO,
kCTCDefaultsShouldOpenTorrentsAutomatically: @YES,
kCTCDefaultsOpenAtLoginKey: @YES};
[NSUserDefaults.standardUserDefaults registerDefaults:appDefaults];
// Migrate the downloads history format. Change old array of strings to new dictionary format
NSArray *downloadedFiles = [NSUserDefaults.standardUserDefaults arrayForKey:kCTCDefaultsDownloadedFilesKey];
NSArray *history = self.downloadHistory;
if (downloadedFiles && !history) {
NSLog(@"Migrating download history to new format.");
NSMutableArray *newDownloadedFiles = NSMutableArray.array;
for (NSString *url in downloadedFiles) {
NSString *fileName = [CTCFileUtils computeFilenameFromURL:[NSURL URLWithString:url]];
[newDownloadedFiles addObject:@{@"title": fileName,
@"url": url}];
}
self.downloadHistory = newDownloadedFiles;
[NSUserDefaults.standardUserDefaults removeObjectForKey:kCTCDefaultsDownloadedFilesKey];
}
// If history was never set or migrated, init it to empty array
if (!downloadedFiles && !history) {
self.downloadHistory = @[];
}
// Register as a login item if needed
[self refreshLoginItemStatus];
}
+ (void)save {
[NSUserDefaults.standardUserDefaults synchronize];
}
+ (void)refreshLoginItemStatus {
[CTCLoginItems toggleRegisteredAsLoginItem:[NSUserDefaults.standardUserDefaults boolForKey:kCTCDefaultsOpenAtLoginKey]];
}
+ (BOOL)isFeedURLValid {
NSString *feedURL = CTCDefaults.feedURL;
if (![feedURL hasPrefix:kCTCDefaultsServiceFeedURLPrefix]) {
// The URL should start with the prefix!
NSLog(@"Feed URL (%@) does not start with expected prefix (%@)", feedURL, kCTCDefaultsServiceFeedURLPrefix);
return NO;
}
if ([feedURL rangeOfString:@"namespaces"].location == NSNotFound) {
// The URL should have the namespaces parameter set
NSLog(@"Feed URL does not have namespaces enabled");
return NO;
}
return YES;
}
+ (BOOL)isTorrentsSavePathValid {
NSString *torrentFolder = self.torrentsSavePath;
if (!torrentFolder) return NO;
BOOL isDirectory = NO;
BOOL fileExists = [NSFileManager.defaultManager fileExistsAtPath:torrentFolder
isDirectory:&isDirectory];
if (!fileExists) return NO;
if (!isDirectory) return NO;
BOOL isDirectoryWritable = [NSFileManager.defaultManager
isWritableFileAtPath:torrentFolder];
if (!isDirectoryWritable) return NO;
return YES;
}
+ (BOOL)isConfigurationValid {
return self.isTorrentsSavePathValid && self.isFeedURLValid;
}
+ (NSString *)infoStringForKey:(NSString *)key {
return [NSBundle.mainBundle objectForInfoDictionaryKey:key];
}
+ (NSString *)appName{
return [self infoStringForKey:@"CFBundleDisplayName"];
}
+ (NSString *)appVersion {
return [self infoStringForKey:@"CFBundleShortVersionString"];
}
+ (NSString *)feedURL {
NSString *rawFeedURL = [NSUserDefaults.standardUserDefaults stringForKey:kCTCDefaultsFeedURLKey];
return rawFeedURL ? [rawFeedURL stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet] : @"";
}
+ (BOOL)areTimeRestrictionsEnabled {
return [NSUserDefaults.standardUserDefaults boolForKey:kCTCDefaultsOnlyUpdateBetweenKey];
}
+ (NSDate *)fromDateForTimeRestrictions {
return (NSDate *)[NSUserDefaults.standardUserDefaults objectForKey:kCTCDefaultsUpdateFromKey];
}
+ (NSDate *)toDateForTimeRestrictions {
return (NSDate *)[NSUserDefaults.standardUserDefaults objectForKey:kCTCDefaultsUpdateToKey];
}
+ (BOOL)shouldOrganizeTorrentsInFolders {
return [NSUserDefaults.standardUserDefaults boolForKey:kCTCDefaultsShouldOrganizeTorrents];
}
+ (BOOL)shouldOpenTorrentsAutomatically {
return [NSUserDefaults.standardUserDefaults boolForKey:kCTCDefaultsShouldOpenTorrentsAutomatically];
}
+ (NSString *)torrentsSavePath {
return [NSUserDefaults.standardUserDefaults stringForKey:kCTCDefaultsTorrentsSavePathKey].stringByStandardizingPath;
}
+ (NSArray *)downloadHistory {
return [NSUserDefaults.standardUserDefaults arrayForKey:kCTCDefaultsDownloadHistoryKey];
}
+ (void)setDownloadHistory:(NSArray *)downloadHistory {
[NSUserDefaults.standardUserDefaults setObject:downloadHistory
forKey:kCTCDefaultsDownloadHistoryKey];
}
@end