From b1337f11ca45b519a2983bf32417769059359be1 Mon Sep 17 00:00:00 2001 From: Robert McGovern Date: Mon, 31 May 2021 22:31:45 +0100 Subject: [PATCH] Some cleanup + behaviour improvements - code smell Code smell atm, duplicated code, needs improvement Will now appear on status bar if unarchiving a file, disappear on completion Now shows preferences window when in hide in dock mode (if opening app without a file) Currently wont close the app if in hidedock mode and user closes the window. -- Not sure about this behaviour. Should probably close Will unarchive files if the app is already open (loose testing works, but needs proper testing) --- QuietUnrarAppDelegate.m | 101 ++++++++++++++++++++++------------------ README.md | 6 ++- 2 files changed, 59 insertions(+), 48 deletions(-) diff --git a/QuietUnrarAppDelegate.m b/QuietUnrarAppDelegate.m index d26095c..e4e3776 100644 --- a/QuietUnrarAppDelegate.m +++ b/QuietUnrarAppDelegate.m @@ -30,6 +30,8 @@ @synthesize window, passwordView, passwordField, preferencesWindowController, unarchiver, userDefaults, statusBarItem, arrayOfFilesToProcess; +BOOL appRunning = NO; + - (void) applicationWillFinishLaunching:(NSNotification *)notification { NSLog(@"applicationWillFinishLaunching"); // The following is used to determine is the left or right shift keys were depressed @@ -40,6 +42,10 @@ NSLog(@"Shift or Right Shift"); userDefaults = [TDNUserDefaults sharedInstance]; + + if (userDefaults.hideDock) { + [self hideDockIcon:TRUE]; + } } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { @@ -48,36 +54,34 @@ [self requestUserPermissionForNotifications]; if (arrayOfFilesToProcess == nil || arrayOfFilesToProcess.count == 0) { - if (userDefaults.hideDock) { - [self hideDockIcon:TRUE]; - } - preferencesWindowController = [[TDNPreferencesWindowController alloc] init]; preferencesWindowController.quietUnrar = self; - [preferencesWindowController showWindow:nil]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self->preferencesWindowController.window makeKeyAndOrderFront:self]; + [NSApp activateIgnoringOtherApps:YES]; + }); + + appRunning = YES; } else { unarchiver = [[TDNUnarchiver alloc] init]; unarchiver.quietUnrar = self; - [self requestUserPermissionForNotifications]; - - if (userDefaults.hideDock) { - [self hideDockIcon:TRUE]; - } - - for (NSString * filename in arrayOfFilesToProcess) { - BOOL extracted = [unarchiver extractArchiveWithFilename:filename]; - if (extracted) { - // post notification based on user preference - if (userDefaults.showNotification && userDefaults.notificationsAllowed) { // if show notification + permission granted ... - [self postNotificationUncompressedFile:filename]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + for (NSString * filename in self->arrayOfFilesToProcess) { + BOOL extracted = [self->unarchiver extractArchiveWithFilename:filename]; + if (extracted) { + // post notification based on user preference + if (self->userDefaults.showNotification && self->userDefaults.notificationsAllowed) { // if show notification + permission granted ... + [self postNotificationUncompressedFile:filename]; + // maybe don't want to spam lots of notifications if unarchiving a lot of archives + } } } - } - [[NSApplication sharedApplication] terminate:self]; + [[NSApplication sharedApplication] terminate:self]; + }); } } @@ -98,32 +102,40 @@ arrayOfFilesToProcess = arrayOfFilenames; -// unarchiver = [[TDNUnarchiver alloc] init]; -// unarchiver.quietUnrar = self; -// -// userDefaults = [TDNUserDefaults sharedInstance]; -// -// [self requestUserPermissionForNotifications]; -// -// if (userDefaults.hideDock) { -// [self hideDockIcon:TRUE]; -// } -// -// for (NSString * filename in arrayOfFilenames) { -// BOOL extracted = [unarchiver extractArchiveWithFilename:filename]; -// if (extracted) { -// // post notification based on user preference -// if (userDefaults.showNotification && userDefaults.notificationsAllowed) { // if show notification + permission granted ... -// [self postNotificationUncompressedFile:filename]; -// } -// } -// } -// -// [[NSApplication sharedApplication] terminate:self]; + if (appRunning) { + if (!unarchiver) { + unarchiver = [[TDNUnarchiver alloc] init]; + unarchiver.quietUnrar = self; + } + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ + for (NSString * filename in self->arrayOfFilesToProcess) { + BOOL extracted = [self->unarchiver extractArchiveWithFilename:filename]; + if (extracted) { + // post notification based on user preference + if (self->userDefaults.showNotification && self->userDefaults.notificationsAllowed) { // if show notification + permission granted ... + [self postNotificationUncompressedFile:filename]; + // maybe don't want to spam lots of notifications if unarchiving a lot of archives + } + } + } + }); + } +} + +- (BOOL)application:(id)sender openFileWithoutUI:(NSString *)filename { + NSLog(@"called openFileWithoutUI %@", filename); + return YES; } - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { - return YES; + // Possibly not the behaviour wanted + if (userDefaults.hideDock) { + NSLog(@"applicationShouldTerminateAfterLastWindowClosed -- NO"); + return NO; + } else { + NSLog(@"applicationShouldTerminateAfterLastWindowClosed -- YES"); + return YES; + } } #pragma mark UI Methods @@ -193,12 +205,9 @@ - (void) hideDockIcon: (BOOL) hide { BOOL result; if (hide) { - NSLog(@"Setting Policy to Accesosry"); + NSLog(@"Setting Policy to Accessory"); result = [NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory]; - NSLog(@"Result of setting ActivationPolicy %d", result); - - NSLog(@"%@", [[[NSApplication sharedApplication]delegate] description]); [self showStatusBarItem:TRUE]; } else { NSLog(@"Setting Policy to Regular"); diff --git a/README.md b/README.md index d59de92..cdb2541 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ Original was written in 2009 as a little thing for me, and now its getting some ## TO DO -* Store preferences in User Defaults (or mac equvalent) +* ✅ Store preferences in User Defaults * ✅ Move code handling un archiving into seperate class -* add model code for preferences +* ✅add model code for preferences * add support for 7zip https://github.com/OlehKulykov/PLzmaSDK * Investigate metal warning, something to ignore? * Add testing @@ -18,6 +18,8 @@ Original was written in 2009 as a little thing for me, and now its getting some * if keeping my extractRARArchiveWithFilename method rather than unrarkit, swap to using the wide text process method * reduce menu to only essential - preferences + quit * about box with thanks & liecense info +* post notification on finishing +* what to do if app open and user unarchives a file? (apart from not make the preferences window front and central) ### Metal Warning