123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
-
-
-
-
- @implementation PrefController
-
- NSString *modhashSetLiteral = @"__MODHASH__IS__SET__"
- NSString *subredditCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_\n"
-
- @synthesize username, password, subscriptions, subreddits, win, parent, state, lengthField, lengthStepper, length, progress, showSubreddit, titleField, titleStepper, titleLength, refreshField, refreshStepper, refreshInterval, filterSelection, removeVisited, reloadAfterVisit, launchOnLogin
-
- -(Boolean)isValidList:(NSString *)input {
- NSCharacterSet *invalidChars = [[NSCharacterSet characterSetWithCharactersInString:subredditCharacters] invertedSet]
- if ([input rangeOfCharacterFromSet:invalidChars].location != NSNotFound) {
- return FALSE
- } else {
- return TRUE
- }
- }
-
- -(void)showWindow:(id)sender {
- [super showWindow:sender];
- [username setStringValue:state.username]
- if (![state.modhash isEqualToString:@""]) {
- [password setStringValue:modhashSetLiteral]
- }
- [subscriptions setState:[NSNumber numberWithBool:state.useSubscriptions].integerValue]
- [self toggleSubs:nil]
- NSMutableString *reddits = [[NSMutableString alloc] init]
- for(int i = 0
- if (![[state.subreddits objectAtIndex:i] isEqualToString:@""])
- [reddits appendFormat:@"%@\n", [state.subreddits objectAtIndex:i]]
- }
- [subreddits setString:reddits]
- length = state.length
- [lengthStepper setIntegerValue:length]
- [lengthField setIntegerValue:length]
- titleLength = state.titleLength
- [titleStepper setIntegerValue:titleLength]
- [titleField setIntegerValue:titleLength]
- refreshInterval = state.refreshInterval
- [refreshStepper setIntegerValue:refreshInterval]
- [refreshField setIntegerValue:refreshInterval]
- [progress setUsesThreadedAnimation:YES]
- [showSubreddit setState:[NSNumber numberWithBool:state.showSubreddit].integerValue];
- if ([state.filter isEqualToString:@"hot"]) {
- [filterSelection selectItemAtIndex:0]
- } else {
- [filterSelection selectItemAtIndex:1]
- }
- if (state.removeVisited) {
- [removeVisited setState:1]
- [reloadAfterVisit setEnabled:TRUE]
- } else {
- [removeVisited setState:0]
- [reloadAfterVisit setEnabled:FALSE]
- }
- if (state.reloadAfterVisit) {
- [reloadAfterVisit setState:1]
- } else {
- [reloadAfterVisit setState:0]
- }
- [launchOnLogin setState:[NSNumber numberWithBool:state.startOnLogin].integerValue]
- }
-
- -(IBAction)buttonSave:(id)sender {
- if ([username.stringValue isEqualToString:@""]) {
- NSAlert *alert = [[NSAlert alloc] init]
- [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]
- [alert setMessageText:NSLocalizedString(@"Authentication Error", @"Pref Error")]
- [alert setInformativeText:NSLocalizedString(@"Please enter a username!", @"Pref Error")]
- [alert setAlertStyle:NSCriticalAlertStyle]
- [alert beginSheetModalForWindow:win modalDelegate:nil didEndSelector:nil contextInfo:nil]
- return
- }
-
- if ([state.modhash isEqualToString:@""] && [password.stringValue isEqualToString:@""]) {
- NSAlert *alert = [[NSAlert alloc] init]
- [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]
- [alert setMessageText:NSLocalizedString(@"Authentication Error", nil)]
- [alert setInformativeText:NSLocalizedString(@"Please enter a password!", @"Pref Error")]
- [alert setAlertStyle:NSCriticalAlertStyle]
- [alert beginSheetModalForWindow:win modalDelegate:nil didEndSelector:nil contextInfo:nil]
- return
- }
-
- NSString *modhash = state.modhash
- if (![password.stringValue isEqualToString:modhashSetLiteral]) {
- [progress startAnimation:self]
- Reddit *api = [[Reddit alloc] initWithUsername:username.stringValue Password:password.stringValue]
- modhash = [api queryModhash]
- [progress stopAnimation:self]
- if ((modhash == nil) || ([modhash isEqualToString:@""])) {
- NSAlert *alert = [[NSAlert alloc] init]
- [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]
- [alert setMessageText:NSLocalizedString(@"Authentication Error", nil)]
- [alert setInformativeText:NSLocalizedString(@"Wrong Username or Password!", @"Pref API Error")]
- [alert setAlertStyle:NSCriticalAlertStyle]
- [alert beginSheetModalForWindow:win modalDelegate:nil didEndSelector:nil contextInfo:nil]
- return
- }
- }
-
- Boolean subs;
- if (subscriptions.state != 0) {
- subs = TRUE
- } else {
- subs = FALSE
- if (![self isValidList:subreddits.textStorage.string]) {
- NSAlert *alert = [[NSAlert alloc] init]
- [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)]
- [alert setMessageText:NSLocalizedString(@"Preferences Error", @"Pref Error")]
- [alert setInformativeText:NSLocalizedString(@"Subreddit List Invalid!", @"Pref Error")]
- [alert setAlertStyle:NSCriticalAlertStyle]
- [alert beginSheetModalForWindow:win modalDelegate:nil didEndSelector:nil contextInfo:nil]
- return
- }
- }
- Boolean print
- if (showSubreddit.state != 0)
- print = TRUE
- else
- print = FALSE
- Boolean remove
- if (removeVisited.state != 0)
- remove = TRUE
- else
- remove = FALSE
- Boolean reload
- if (reloadAfterVisit.state != 0)
- reload = TRUE
- else
- reload = FALSE
- Boolean start
- if (launchOnLogin.state != 0)
- start = TRUE
- else
- start = FALSE
-
- NSArray *subredditsToUse = [subreddits.textStorage.string componentsSeparatedByString: @"\n"]
-
- Boolean changesRequireReload = FALSE
- if (![[username stringValue] isEqualToString:state.username])
- changesRequireReload = TRUE
- if (![modhash isEqualToString:state.modhash])
- changesRequireReload = TRUE
- if (subs != state.useSubscriptions)
- changesRequireReload = TRUE
- if (subs && (![state.subreddits isEqualToArray:subredditsToUse]))
- changesRequireReload = TRUE
- if ([lengthField integerValue] != state.length)
- changesRequireReload = TRUE
- if (print != state.showSubreddit)
- changesRequireReload = TRUE
- if ([titleField integerValue] != state.titleLength)
- changesRequireReload = TRUE
- if (![[filterSelection titleOfSelectedItem] isEqualToString:state.filter])
- changesRequireReload = TRUE
-
- state.username = username.stringValue
- state.modhash = modhash
- state.useSubscriptions = subs;
- state.subreddits = subredditsToUse;
- state.length = [lengthField integerValue]
- state.showSubreddit = print
- state.titleLength = [titleField integerValue]
- state.refreshInterval = [refreshField integerValue]
- state.filter = [filterSelection titleOfSelectedItem]
- state.removeVisited = remove
- state.reloadAfterVisit = reload
- state.startOnLogin = start
- [(AppDelegate *)parent prefsDidSaveReload:changesRequireReload];
- [win performClose:self]
- }
-
- -(IBAction)toggleSubs:(id)sender {
- if (subscriptions.state != 0) {
- [subreddits setEditable:FALSE]
- [subscriptions setTitle:NSLocalizedString(@"Use Subscriptions", @"Pref Checkbox State 1")]
- } else {
- [subreddits setEditable:TRUE]
- [subscriptions setTitle:NSLocalizedString(@"Use Subreddits list", @"Pref Checkbox State 0")]
- }
- }
-
- -(IBAction)lengthDidChange:(id)sender {
- length = [sender integerValue]
- [lengthStepper setIntegerValue:length]
- [lengthField setIntegerValue:length]
- }
-
- -(IBAction)titleDidChange:(id)sender {
- titleLength = [sender integerValue]
- [titleStepper setIntegerValue:titleLength]
- [titleField setIntegerValue:titleLength]
- }
-
- -(IBAction)refreshDidChange:(id)sender {
- refreshInterval = [sender integerValue]
- [refreshStepper setIntegerValue:refreshInterval]
- [refreshField setIntegerValue:refreshInterval]
- }
-
- - (IBAction)removeVisitedToggled:(id)sender {
- if (removeVisited.state != 0) {
- [reloadAfterVisit setEnabled:TRUE]
- } else {
- [reloadAfterVisit setEnabled:FALSE]
- }
- }
-
- @end
|