From 20560f6233f04fa5110412f6e06161e73f5ef46b Mon Sep 17 00:00:00 2001 From: Bilal Hussain Date: Sat, 5 Jul 2014 19:39:39 +0100 Subject: [PATCH] Regex replace on audio files metadata --- Changelog.md | 1 + Classes/Main/MainController.h | 2 ++ Classes/Main/MainController.m | 56 ++++++++++++++++++++++++++++++++++- Classes/Main/MainMenu.xib | 25 +++++++++------- 4 files changed, 73 insertions(+), 11 deletions(-) diff --git a/Changelog.md b/Changelog.md index 4105494..e81cf07 100644 --- a/Changelog.md +++ b/Changelog.md @@ -13,6 +13,7 @@ Version 1.8 * Artist to composer. * Composer to artist. * Save last custom format. +* Regex replace on audio files metadata. ### Improvements ### * Improvements to the auto taggering gui. diff --git a/Classes/Main/MainController.h b/Classes/Main/MainController.h index c1a4021..8f02c63 100644 --- a/Classes/Main/MainController.h +++ b/Classes/Main/MainController.h @@ -38,7 +38,9 @@ IBOutlet NSMenu *whitespaceMenu; IBOutlet NSMenu *deleteMenu; IBOutlet NSMenu *swapMenu; + IBOutlet NSMenu *regexMenu; + IBOutlet NSSplitView *splitView; IBOutlet NSView *leftSplitView; diff --git a/Classes/Main/MainController.m b/Classes/Main/MainController.m index 4995181..bef568e 100644 --- a/Classes/Main/MainController.m +++ b/Classes/Main/MainController.m @@ -35,7 +35,7 @@ static const NSArray *tagMenuValues; static const NSArray *deleteMenuValues; static const NSArray *swapMenuValues; - +static const NSArray *regexMenuValues; @implementation FileSystemNode (QLPreviewItem) @@ -802,6 +802,55 @@ - (IBAction)artistToComposer:(id)sender }]; } + +- (IBAction)regexReplace:(id)sender +{ + NSTextField *regex = [[NSTextField alloc] initWithFrame:NSMakeRect(90, 30, 200, 22)]; + NSTextField *lregex = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 30, 90, 22)]; + [lregex setStringValue:@"Regex:"]; + [lregex setBezeled:NO]; + [lregex setDrawsBackground:NO]; + [lregex setEditable:NO]; + [lregex setSelectable:NO]; + + NSTextField *replace = [[NSTextField alloc] initWithFrame:NSMakeRect(90, 0, 200, 22)]; + NSTextField *lreplace = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90, 22)]; + [lreplace setStringValue:@"Replacement:"]; + [lreplace setBezeled:NO]; + [lreplace setDrawsBackground:NO]; + [lreplace setEditable:NO]; + [lreplace setSelectable:NO]; + + + + NSAlert *alert = [NSAlert new]; + NSView* tmpView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 300, 60)]; + [tmpView addSubview:lregex]; + [tmpView addSubview:regex]; + [tmpView addSubview:lreplace]; + [tmpView addSubview:replace]; + + [alert addButtonWithTitle:@"Replace"]; + [alert addButtonWithTitle:@"Cancel"]; + [alert setMessageText:@"Regex replace"]; + [alert setInformativeText:@"Replace the substring matching Regex: with Replacement:. Using $1, etc for matched groups"]; + [alert setAccessoryView:tmpView]; + [alert setAlertStyle:NSWarningAlertStyle]; + + [alert beginSheetModalForWindow:[self window] completionHandler:^(NSModalResponse returnCode) { + if (returnCode == NSAlertFirstButtonReturn){ + [self performBlockOnTags:sender tagNames:tagMenuValues block:^id (id value, NSString *tagName, Tags *tags) { + NSString *s = value; + return [s stringByReplacingOccurrencesOfRegex:[regex stringValue] withString:[replace stringValue]]; + }]; + + } + }]; + + +} + + - (IBAction)performBlockOnTags:(id)sender tagNames:(const NSArray*)tagNames block:(id (^)(id value, NSString *tagName, Tags *tags ))block @@ -1211,6 +1260,7 @@ - (void) initTagManipulationSubMenus makeMenu(tagMenuValues, whitespaceMenu, @selector(trimWhitespace:)); makeMenu(deleteMenuValues, deleteMenu, @selector(deleteTag:)); makeMenu(swapMenuValues, swapMenu, @selector(swapFirstAndLastName:)); + makeMenu(regexMenuValues, regexMenu, @selector(regexReplace:)); NSMenuItem *item = [swapMenu itemAtIndex:0]; [item setKeyEquivalent:@"p"]; @@ -1273,6 +1323,10 @@ + (void)initialize tagMenuValues = [[NSArray alloc ] initWithObjects: @"title", @"album", @"artist",@"albumArtist", @"composer", @"genre", nil]; + + regexMenuValues = [[NSArray alloc ] initWithObjects: + @"title", @"album", @"artist",@"albumArtist", @"composer", @"genre", + nil]; deleteMenuValues = [[NSArray alloc ] initWithObjects: @"title", @"album", @"artist",@"albumArtist", @"composer", @"genre", @"cover", @"comment", @"url", diff --git a/Classes/Main/MainMenu.xib b/Classes/Main/MainMenu.xib index 0f40667..88ec8c4 100644 --- a/Classes/Main/MainMenu.xib +++ b/Classes/Main/MainMenu.xib @@ -466,19 +466,24 @@ - + - + - - + + - + + + + + + @@ -1043,11 +1048,11 @@ - + - + @@ -1697,11 +1702,11 @@ - + - + @@ -1811,10 +1816,10 @@ - +