From c78276aeeb4a3a57b7fbd948efbbdae0fbcbdbb9 Mon Sep 17 00:00:00 2001 From: Robert McGovern Date: Mon, 24 May 2021 10:24:32 +0100 Subject: [PATCH] Minor tidy ups. Ran through converters for Modern Objective-C and ARC. Removed couple of depreciated warnings. --- QuietUnrar.xcodeproj/project.pbxproj | 2 + QuietUnrarAppDelegate.h | 12 ++-- QuietUnrarAppDelegate.m | 82 ++++++++++++++-------------- libunrar/dll.hpp | 2 +- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/QuietUnrar.xcodeproj/project.pbxproj b/QuietUnrar.xcodeproj/project.pbxproj index 3e2dda8..5f908c0 100644 --- a/QuietUnrar.xcodeproj/project.pbxproj +++ b/QuietUnrar.xcodeproj/project.pbxproj @@ -521,6 +521,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "-"; COPY_PHASE_STRIP = NO; @@ -551,6 +552,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CODE_SIGN_IDENTITY = "-"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; diff --git a/QuietUnrarAppDelegate.h b/QuietUnrarAppDelegate.h index 5d72040..a931470 100644 --- a/QuietUnrarAppDelegate.h +++ b/QuietUnrarAppDelegate.h @@ -24,15 +24,15 @@ enum #define BUF_LEN 64000 @interface QuietUnrarAppDelegate : NSObject { - NSWindow *window; - NSView *passwordView; + NSWindow *__weak window; + NSView *__weak passwordView; - NSSecureTextField * passwordField; + NSSecureTextField * __weak passwordField; } -@property (assign) IBOutlet NSWindow *window; -@property (assign) IBOutlet NSView *passwordView; -@property (assign) IBOutlet NSSecureTextField * passwordField; +@property (weak) IBOutlet NSWindow *window; +@property (weak) IBOutlet NSView *passwordView; +@property (weak) IBOutlet NSSecureTextField * passwordField; - (BOOL) extractRarWith:(NSString *) filename; - (BOOL) shouldFileBeReplaced:(NSString *) filename; diff --git a/QuietUnrarAppDelegate.m b/QuietUnrarAppDelegate.m index bb0393d..7780c9c 100644 --- a/QuietUnrarAppDelegate.m +++ b/QuietUnrarAppDelegate.m @@ -23,11 +23,11 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM // mode will either be // RAR_VOL_NOTIFY that just notifies us that the volume has changed // RAR_VOL_ASK indicates that a volume is needed and the library is asking for it. -// +// // in both case volumeName is that name of the volume (for instance .r00) // // Note in the event of a volume being missing, there is no way to indicate to the -// library that you have found it. You would need to block the copy, let the user find the +// library that you have found it. You would need to block the copy, let the user find the // volume, copy it to where the other volumes are and unblock to let the library // continue processing int changeVolume(char * volumeName, int mode) { @@ -66,7 +66,7 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM KeyMap map; GetKeys(map); if (KEYMAP_GET(map, kVKC_Shift) || KEYMAP_GET(map, kVKC_rShift)) - NSLog(@"Shift or Right Shift"); + NSLog(@"Shift or Right Shift"); } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { @@ -77,9 +77,9 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM // Call one at a time for each file selected when app is run - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename { //NSLog(@"openFile: %@", filename); - + [self extractRarWith:filename]; - + // Always return YES even if there is an error to avoid dialog indicating unable to // handle files of type RAR if the archive is corrupt or part of it is missing return YES; @@ -87,12 +87,12 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM - (void)application:(NSApplication *)theApplication openFiles:(NSArray *) arrayOfFilenames { // NSLog(@"openFiles: %@", arrayOfFilenames); - + for (NSString * filename in arrayOfFilenames) { BOOL extracted = [self extractRarWith:filename]; if (extracted) { //[GrowlApplicationBridge setGrowlDelegate:@""]; - + // [GrowlApplicationBridge // notifyWithTitle:@"QuietUnrar: Extraction Complete" // description:[NSString stringWithFormat:@"The archive %@ was successfully extracted", filename] @@ -105,53 +105,52 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM } } -#pragma mark "Main" +#pragma mark "Main" - (BOOL) extractRarWith:(NSString *) filename { - quietUnrar = (void *) self; char commentBuffer[BUF_LEN]; BOOL extractionSuccessful = YES; struct RARHeaderData headerData; NSString * lastExtractedFilename = @""; NSString * currentFilename; - + //Determine the folder we should extract the archive to. This by default //is the / NSString * folderToExtractTo = [filename stringByDeletingPathExtension]; - + // Open the Archive for extraction, we set the open result to 3 so we can see it has changed char * filenameCString = (char *)[filename cStringUsingEncoding:NSISOLatin1StringEncoding]; - struct RAROpenArchiveData arcData = { filenameCString, RAR_OM_EXTRACT, 3, &commentBuffer[0], BUF_LEN, 0, 0}; + struct RAROpenArchiveData arcData = { filenameCString, RAR_OM_EXTRACT, 3, &commentBuffer[0], BUF_LEN, 0, 0}; HANDLE archive = RAROpenArchive(&arcData); //NSLog(@"Opening Archive %s with result %d", filenameCString, arcData.OpenResult); - + // set call backs for if password needed or need to change volume RARSetChangeVolProc(archive, &changeVolume); RARSetCallback(archive, &callbackFunction, (LPARAM)archive); - + while (RARReadHeader(archive, &headerData) != ERAR_END_ARCHIVE) { //NSLog(@"Attempting to extract %s to %@", headerData.FileName, folderToExtractTo); - + int processResult = 0; BOOL extractFile = YES; BOOL isDir; currentFilename = [NSString stringWithCString:(const char *) headerData.FileName encoding:NSISOLatin1StringEncoding]; - + NSFileManager * fileManager = [NSFileManager defaultManager]; - + if ([fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@/%s", folderToExtractTo, headerData.FileName] isDirectory:&isDir] ) { // If we have already processed the file once and the user has told us to skip // don't ask them again, even though we've changed volumes. Otherwise // ask the user what to do. - if ([lastExtractedFilename isEqualToString:currentFilename] || + if ([lastExtractedFilename isEqualToString:currentFilename] || isDir || ![self shouldFileBeReplaced:currentFilename]) { extractFile = NO; } } - + // NSLog(@"Last filename %@, currentFilename %@, equality %d", lastExtractedFilename, currentFilename, [lastExtractedFilename isEqualToString:currentFilename]); - + if (extractFile) { //NSLog(@"...Extracting"); processResult = RARProcessFile(archive, RAR_EXTRACT, (char *) [folderToExtractTo cStringUsingEncoding:NSISOLatin1StringEncoding], NULL); @@ -161,18 +160,18 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM // Curious behavior by the lib, you have SKIP a file number of times (4 in my test example) before // it is skipped. However if you extract it is only processed once. } - + if (processResult != 0) { NSLog(@"Error: Process Result was %d", processResult); extractionSuccessful = NO; break; // DISPLAY ERROR DIALOG, ALERT THE USER } - + lastExtractedFilename = currentFilename; } - + RARCloseArchive(archive); //NSLog(@"Closing Archive %s with result %d", filenameCString, closeResult); @@ -183,21 +182,20 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM // returns YES or NO - (BOOL) shouldFileBeReplaced:(NSString *) filename { BOOL result = NO; - + NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"Overwrite"]; NSButton * skipButton = [alert addButtonWithTitle:@"Skip"]; [skipButton setKeyEquivalent:@"\e"]; [alert setMessageText:[NSString stringWithFormat:@"Overwrite %@?", filename]]; - [alert setInformativeText:[NSString stringWithFormat:@"The file already exists. Do you wish to extract it again, overwriting the original file?", filename]]; - [alert setAlertStyle:NSWarningAlertStyle]; - + [alert setInformativeText:[NSString stringWithFormat:@"The file %@ already exists. Do you wish to extract it again, overwriting the original file?", filename]]; + [alert setAlertStyle:NSAlertStyleWarning]; + if ([alert runModal] == NSAlertFirstButtonReturn) { result = YES; } - - [alert release]; - + + return result; } @@ -207,37 +205,37 @@ int callbackFunction(UINT message, LPARAM userData, LPARAM parameterOne, LPARAM [alert addButtonWithTitle:@"OK"]; [alert setMessageText:[NSString stringWithFormat:@"Archive part %s is missing.", volume]]; [alert setInformativeText:@"Unable to extract all files from RAR archive as part of it is missing"]; - [alert setAlertStyle:NSCriticalAlertStyle]; - + [alert setAlertStyle:NSAlertStyleCritical]; + [alert runModal]; - [alert release]; } // Creates a dialog with a custom view with a NSSecureTextField which is displayed // to the user so they can provide a password. Returns the entered password or nil - (NSString *) requestArchivePassword { if (!passwordView) { - [NSBundle loadNibNamed:@"PasswordView" owner:self]; + + NSBundle* bundle = [NSBundle bundleForClass:[self class]]; + + [bundle loadNibNamed:@"PasswordView" owner:self topLevelObjects: nil]; } - + NSString * password = nil; - + NSAlert *alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"OK"]; [alert addButtonWithTitle:@"Cancel"]; [alert setMessageText:@"Archive Requires a password"]; [alert setInformativeText:@"To extract the contents of this archive a password is required."]; [alert setAccessoryView:passwordView]; - [alert setAlertStyle:NSWarningAlertStyle]; - + [alert setAlertStyle:NSAlertStyleWarning]; + if ([alert runModal] == NSAlertFirstButtonReturn) { password = [passwordField stringValue]; - [password autorelease]; } - - [alert release]; - + + return password; } diff --git a/libunrar/dll.hpp b/libunrar/dll.hpp index c785ff1..ee4ca68 100644 --- a/libunrar/dll.hpp +++ b/libunrar/dll.hpp @@ -178,7 +178,7 @@ void PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserD void PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc); void PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc); void PASCAL RARSetPassword(HANDLE hArcData,char *Password); -int PASCAL RARGetDllVersion(); +int PASCAL RARGetDllVersion(void); #ifdef __cplusplus }