diff --git a/App/English.lproj/MainMenu.xib b/App/English.lproj/MainMenu.xib index e583d15b..92901da3 100644 --- a/App/English.lproj/MainMenu.xib +++ b/App/English.lproj/MainMenu.xib @@ -2,34 +2,29 @@ 1050 - 10D573 - 740 - 1038.29 - 460.00 + 10K549 + 851 + 1038.36 + 461.00 com.apple.InterfaceBuilder.CocoaPlugin - 740 + 851 YES - - + + + - YES com.apple.InterfaceBuilder.CocoaPlugin - YES - - YES - - - YES - + PluginDependencyRecalculationVersion + YES @@ -1515,7 +1510,7 @@ info - + 256 YES @@ -2393,6 +2388,29 @@ 2322 + + YES + + YES + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {402, 14} @@ -2567,6 +2585,29 @@ 2322 + + YES + + YES + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {402, 14} @@ -2706,6 +2747,7 @@ {{10, 33}, {449, 502}} + Info @@ -3295,9 +3337,11 @@ NaN - + YES - + + YES + YES @@ -3410,7 +3454,7 @@ NaN - + @@ -4111,7 +4155,7 @@ chapters - + 256 YES @@ -4370,20 +4414,19 @@ {{10, 33}, {449, 502}} - Chapters - + 0 YES YES - + @@ -12556,6 +12599,8 @@ 1810.IBPluginDependency 1819.IBPluginDependency 1821.IBPluginDependency + 1827.IBPluginDependency + 1828.IBPluginDependency 1833.IBEditorWindowLastContentRect 1833.IBPluginDependency 1834.IBPluginDependency @@ -12759,11 +12804,13 @@ 567.IBPluginDependency 568.IBPluginDependency 569.IBPluginDependency + 569.IBViewBoundsToFrameTransform 57.IBEditorWindowLastContentRect 57.IBPluginDependency 57.ImportedFromIB2 57.editorWindowContentRectSynchronizationRect 570.IBPluginDependency + 571.CustomClassName 571.IBPluginDependency 576.IBPluginDependency 577.IBPluginDependency @@ -12779,6 +12826,7 @@ 591.IBPluginDependency 592.IBPluginDependency 593.IBPluginDependency + 594.CustomClassName 594.IBPluginDependency 597.IBPluginDependency 598.IBPluginDependency @@ -13147,6 +13195,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{62, 762}, {149, 83}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -13357,11 +13407,15 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + P4AAAL+AAABDXgAAw9IAAA + {{450, 385}, {229, 203}} com.apple.InterfaceBuilder.CocoaPlugin {{23, 794}, {245, 183}} com.apple.InterfaceBuilder.CocoaPlugin + MZYearDateFormatter com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -13377,6 +13431,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + MZDateFormatter com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -13650,6 +13705,135 @@ id + + YES + + YES + applySearchEntry: + openDocument: + reportIssue: + revertChanges: + searchForImages: + segmentClicked: + selectNextFile: + selectNextResult: + selectPreviousFile: + selectPreviousResult: + sendFeedback: + showAdvancedTab: + showChapterTab: + showHomepage: + showImageEditor: + showInfoTab: + showIssues: + showPreferences: + showPresets: + showReleaseNotes: + showSortTab: + showVideoTab: + startSearch: + viewLog: + + + YES + + applySearchEntry: + id + + + openDocument: + id + + + reportIssue: + id + + + revertChanges: + id + + + searchForImages: + id + + + segmentClicked: + id + + + selectNextFile: + id + + + selectNextResult: + id + + + selectPreviousFile: + id + + + selectPreviousResult: + id + + + sendFeedback: + id + + + showAdvancedTab: + id + + + showChapterTab: + id + + + showHomepage: + id + + + showImageEditor: + id + + + showInfoTab: + id + + + showIssues: + id + + + showPreferences: + id + + + showPresets: + id + + + showReleaseNotes: + id + + + showSortTab: + id + + + showVideoTab: + id + + + startSearch: + id + + + viewLog: + id + + + YES @@ -13676,7 +13860,7 @@ YES ChapterEditor - NSDateFormatter + MZYearDateFormatter NSNumberFormatter NSArrayController NSSegmentedControl @@ -13695,6 +13879,105 @@ NSWindow + + YES + + YES + chapterEditor + dateFormatter + episodeFormatter + filesController + filesSegmentControl + imageView + loadingIndicator + longDescription + purchaseDateFormatter + resizeController + searchController + searchField + searchIndicator + seasonFormatter + shortDescription + tabView + undoController + window + + + YES + + chapterEditor + ChapterEditor + + + dateFormatter + MZYearDateFormatter + + + episodeFormatter + NSNumberFormatter + + + filesController + NSArrayController + + + filesSegmentControl + NSSegmentedControl + + + imageView + NSImageView + + + loadingIndicator + NSProgressIndicator + + + longDescription + NSTextView + + + purchaseDateFormatter + NSDateFormatter + + + resizeController + ResizeController + + + searchController + NSArrayController + + + searchField + NSSearchField + + + searchIndicator + NSProgressIndicator + + + seasonFormatter + NSNumberFormatter + + + shortDescription + NSTextView + + + tabView + NSTabView + + + undoController + FilesUndoController + + + window + NSWindow + + + IBProjectSource App/src/AppController.h @@ -13718,6 +14001,30 @@ FilesUndoController + + YES + + YES + filesController + slider + undoController + + + YES + + filesController + NSArrayController + + + slider + NSSlider + + + undoController + FilesUndoController + + + IBProjectSource App/src/ChapterEditor.h @@ -13747,6 +14054,45 @@ id + + YES + + YES + copy: + paste: + toggleDurationColumn: + toggleNameColumn: + toggleNoColumn: + toggleStartColumn: + + + YES + + copy: + id + + + paste: + id + + + toggleDurationColumn: + id + + + toggleNameColumn: + id + + + toggleNoColumn: + id + + + toggleStartColumn: + id + + + YES @@ -13760,6 +14106,25 @@ NSArrayController + + YES + + YES + editor + filesController + + + YES + + editor + ChapterEditor + + + filesController + NSArrayController + + + IBProjectSource App/src/ChaptersTableView.h @@ -13783,6 +14148,30 @@ id + + YES + + YES + copy: + delete: + paste: + + + YES + + copy: + id + + + delete: + id + + + paste: + id + + + YES @@ -13796,6 +14185,25 @@ FilesUndoController + + YES + + YES + filesController + undoController + + + YES + + filesController + NSArrayController + + + undoController + FilesUndoController + + + IBProjectSource App/src/FilesTableView.h @@ -13808,6 +14216,13 @@ filesController NSArrayController + + filesController + + filesController + NSArrayController + + IBProjectSource App/src/FilesUndoController.h @@ -13820,6 +14235,13 @@ copy: id + + copy: + + copy: + id + + IBProjectSource Externals/google-toolbox-for-mac/AppKit/GTMLargeTypeWindow.h @@ -13833,6 +14255,14 @@ App/src/GenreDataSource.h + + MZDateFormatter + NSDateFormatter + + IBProjectSource + App/src/MZDateFormatter.h + + MZMetaLoader NSObject @@ -13871,11 +14301,26 @@ removeCompleted: id + + removeCompleted: + + removeCompleted: + id + + IBProjectSource App/src/MZWriteQueue.h + + MZYearDateFormatter + NSFormatter + + IBProjectSource + App/src/MZYearDateFormatter.h + + MetaEditPanel NSSplitView @@ -13883,6 +14328,13 @@ undoController FilesUndoController + + undoController + + undoController + FilesUndoController + + IBProjectSource App/src/MetaEditPanel.h @@ -13984,6 +14436,13 @@ retryLoad: id + + retryLoad: + + retryLoad: + id + + YES @@ -14003,6 +14462,40 @@ NSButton + + YES + + YES + filesController + indicator + picture + posterView + retryButton + + + YES + + filesController + NSArrayController + + + indicator + NSProgressIndicator + + + picture + id + + + posterView + PosterView + + + retryButton + NSButton + + + IBProjectSource App/src/PictureEditor.h @@ -14024,6 +14517,25 @@ NSButton + + YES + + YES + indicator + retryButton + + + YES + + indicator + NSProgressIndicator + + + retryButton + NSButton + + + IBProjectSource App/src/PosterView.h @@ -14047,6 +14559,30 @@ id + + YES + + YES + addToQueue: + showQueue: + startStopEncoding: + + + YES + + addToQueue: + id + + + showQueue: + id + + + startStopEncoding: + id + + + YES @@ -14064,6 +14600,35 @@ NSToolbarItem + + YES + + YES + filesController + mainWindow + menuItem + playBtn + + + YES + + filesController + NSArrayController + + + mainWindow + NSWindow + + + menuItem + NSMenuItem + + + playBtn + NSToolbarItem + + + IBProjectSource App/src/QueueController.h @@ -14097,6 +14662,55 @@ NSPopUpButton + + YES + + YES + filesController + menuAU + menuCA + menuDE + menuIE + menuNZ + menuUK + ratingButton + + + YES + + filesController + NSArrayController + + + menuAU + NSMenu + + + menuCA + NSMenu + + + menuDE + NSMenu + + + menuIE + NSMenu + + + menuNZ + NSMenu + + + menuUK + NSMenu + + + ratingButton + NSPopUpButton + + + IBProjectSource App/src/RatingMenuHandler.h @@ -14122,6 +14736,35 @@ NSTabView + + YES + + YES + filesBox + searchBox + splitView + tabView + + + YES + + filesBox + NSBox + + + searchBox + NSBox + + + splitView + NSSplitView + + + tabView + NSTabView + + + IBProjectSource App/src/ResizeController.h @@ -14134,6 +14777,13 @@ searchController NSArrayController + + searchController + + searchController + NSArrayController + + IBProjectSource App/src/SearchTableView.h @@ -15128,6 +15778,65 @@ id + + YES + + YES + goBack: + goForward: + goToFirstPage: + goToLastPage: + goToNextPage: + goToPreviousPage: + selectAll: + takeBackgroundColorFrom: + zoomIn: + zoomOut: + + + YES + + goBack: + id + + + goForward: + id + + + goToFirstPage: + id + + + goToLastPage: + id + + + goToNextPage: + id + + + goToPreviousPage: + id + + + selectAll: + id + + + takeBackgroundColorFrom: + id + + + zoomIn: + id + + + zoomOut: + id + + + @@ -15148,6 +15857,30 @@ id + + YES + + YES + play: + start: + stop: + + + YES + + play: + id + + + start: + id + + + stop: + id + + + IBFrameworkSource QuartzComposer.framework/Headers/QCView.h @@ -15160,15 +15893,30 @@ checkForUpdates: id + + checkForUpdates: + + checkForUpdates: + id + + delegate id + + delegate + + delegate + id + + 0 + IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx @@ -15184,5 +15932,36 @@ YES ../../MetaZ.xcodeproj 3 + + YES + + YES + AddToQueue + NSAddTemplate + NSMenuCheckmark + NSMenuMixedState + NSPreferencesGeneral + NSRemoveTemplate + NSSwitch + NSToolbarCustomizeToolbarItemImage + Play + Queue + presets + + + YES + {32, 32} + {8, 8} + {9, 8} + {7, 2} + {32, 32} + {8, 8} + {15, 15} + {32, 32} + {32, 32} + {32, 32} + {25, 25} + + diff --git a/App/Info.plist b/App/Info.plist index 77d1c202..33ecd38b 100644 --- a/App/Info.plist +++ b/App/Info.plist @@ -128,7 +128,7 @@ CFBundleGetInfoString Copyright 2009 Brian Olsen & Nigel Graham CFBundleIconFile - + MetaZ.icns CFBundleIdentifier org.maven-group.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion @@ -172,43 +172,40 @@ UTTypeConformsTo - com.apple.plugin + public.movie - UTTypeDescription - MetaZ Plugin - UTTypeIconFile - /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/KEXT.icns UTTypeIdentifier - org.maven-group.${PRODUCT_NAME:identifier}.plugin + org.maven-group.mpeg4-video + UTTypeDescription + The Other MPEG-4 Video UTTypeTagSpecification + com.apple.ostype + + M4V + public.filename-extension - mzplugin + m4v - - UTImportedTypeDeclarations - UTTypeConformsTo - public.movie + com.apple.plugin UTTypeDescription - protected MPEG-4 movie + MetaZ Plugin + UTTypeIconFile + /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/KEXT.icns UTTypeIdentifier - com.apple.protected-mpeg-4-video + org.maven-group.${PRODUCT_NAME:identifier}.plugin UTTypeTagSpecification - com.apple.ostype - - M4V - public.filename-extension - m4v + mzplugin diff --git a/App/resources/MetaZ.icns b/App/resources/MetaZ.icns new file mode 100644 index 00000000..82d7eb82 Binary files /dev/null and b/App/resources/MetaZ.icns differ diff --git a/App/resources/metaz.png b/App/resources/metaz.png new file mode 100644 index 00000000..b9a45f05 Binary files /dev/null and b/App/resources/metaz.png differ diff --git a/App/src/AppController.h b/App/src/AppController.h index 3bf0bebc..f96d8771 100644 --- a/App/src/AppController.h +++ b/App/src/AppController.h @@ -16,13 +16,14 @@ #import "SearchProfile.h" #import "ChapterEditor.h" #import "MZFileNameTextStorage.h" +#import "MZYearDateFormatter.h" @interface AppController : NSObject { NSWindow* window; NSTabView *tabView; NSNumberFormatter* episodeFormatter; NSNumberFormatter* seasonFormatter; - NSDateFormatter* dateFormatter; + MZYearDateFormatter* dateFormatter; NSDateFormatter* purchaseDateFormatter; NSSegmentedControl* filesSegmentControl; NSArrayController* filesController; @@ -52,7 +53,7 @@ @property (nonatomic, retain) IBOutlet NSTabView *tabView; @property (nonatomic, retain) IBOutlet NSNumberFormatter* episodeFormatter; @property (nonatomic, retain) IBOutlet NSNumberFormatter* seasonFormatter; -@property (nonatomic, retain) IBOutlet NSDateFormatter* dateFormatter; +@property (nonatomic, retain) IBOutlet MZYearDateFormatter* dateFormatter; @property (nonatomic, retain) IBOutlet NSDateFormatter* purchaseDateFormatter; @property (nonatomic, retain) IBOutlet NSSegmentedControl* filesSegmentControl; @property (nonatomic, retain) IBOutlet NSArrayController* filesController; diff --git a/App/src/AppController.m b/App/src/AppController.m index f3be5035..f96097de 100644 --- a/App/src/AppController.m +++ b/App/src/AppController.m @@ -36,6 +36,7 @@ - (void)registerUndoName:(NSUndoManager *)manager; NSDictionary* tags = [dict objectForKey:(NSString*)kUTTypeTagSpecificationKey]; NSArray* extensions = [tags objectForKey:(NSString*)kUTTagClassFilenameExtension]; [ret addObjectsFromArray:extensions]; + [dict release]; } return ret; } @@ -281,9 +282,11 @@ - (void)updateSearchMenu } [searchField setStringValue:mainValue]; - [[MZMetaSearcher sharedSearcher] clearResults]; if([[NSUserDefaults standardUserDefaults] boolForKey:@"autoSearch"]) + { + //[[MZMetaSearcher sharedSearcher] clearResults]; [self startSearch:searchField]; + } } - (void)registerUndoName:(NSUndoManager *)manager @@ -351,22 +354,27 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N #pragma mark - actions - (IBAction)showAdvancedTab:(id)sender { + [window makeKeyAndOrderFront:sender]; [tabView selectTabViewItemWithIdentifier:@"advanced"]; } - (IBAction)showChapterTab:(id)sender { + [window makeKeyAndOrderFront:sender]; [tabView selectTabViewItemWithIdentifier:@"chapters"]; } - (IBAction)showInfoTab:(id)sender { + [window makeKeyAndOrderFront:sender]; [tabView selectTabViewItemWithIdentifier:@"info"]; } - (IBAction)showSortTab:(id)sender { + [window makeKeyAndOrderFront:sender]; [tabView selectTabViewItemWithIdentifier:@"sorting"]; } - (IBAction)showVideoTab:(id)sender { + [window makeKeyAndOrderFront:sender]; [tabView selectTabViewItemWithIdentifier:@"video"]; } @@ -540,10 +548,10 @@ - (IBAction)showPreferences:(id)sender - (IBAction)openDocument:(id)sender { NSArray *fileTypes = [[MZMetaLoader sharedLoader] types]; - NSArray* utis = MZUTIFilenameExtension(fileTypes); - for(NSString* uti in utis) + NSArray* extensions = MZUTIFilenameExtension(fileTypes); + for(NSString* ext in extensions) { - MZLoggerDebug(@"Found UTI %@", uti); + MZLoggerDebug(@"Found extention %@", ext); } NSOpenPanel *oPanel = [NSOpenPanel openPanel]; @@ -552,7 +560,7 @@ - (IBAction)openDocument:(id)sender { [oPanel setCanChooseDirectories:NO]; [oPanel beginSheetForDirectory: nil file: nil - types: fileTypes + types: extensions modalForWindow: window modalDelegate: self didEndSelector: @selector(openPanelDidEnd:returnCode:contextInfo:) @@ -893,13 +901,15 @@ - (void)textDidChange:(NSNotification *)aNotification #pragma mark - as application delegate -- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename +- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename { + [window makeKeyAndOrderFront:sender]; return [[MZMetaLoader sharedLoader] loadFromFile:filename]; } - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames { + [window makeKeyAndOrderFront:sender]; if([[MZMetaLoader sharedLoader] loadFromFiles: filenames]) [sender replyToOpenOrPrint:NSApplicationDelegateReplySuccess]; else diff --git a/App/src/ChapterEditor.m b/App/src/ChapterEditor.m index b2141f3c..dadeb35c 100644 --- a/App/src/ChapterEditor.m +++ b/App/src/ChapterEditor.m @@ -173,7 +173,7 @@ - (void)makeEditorChapters NSUInteger editsLen = [editorChapters count]; NSMutableArray* nextEdits = [NSMutableArray array]; NSInteger newSlide = -slide; - NSInteger newSlideMin = slideMin; + NSInteger newSlideMin; // = slideMin; if(self.chaptersChanged) { newSlideMin = 0; diff --git a/App/src/MGCollectionView.m b/App/src/MGCollectionView.m index f905ed63..ccc1c017 100644 --- a/App/src/MGCollectionView.m +++ b/App/src/MGCollectionView.m @@ -85,7 +85,7 @@ - (MGCollectionViewItem *)newItemForRepresentedObject:(id)object MGCollectionViewItem* ret = [itemPrototype copy]; [ret _setItemOwnerView:self]; ret.representedObject = object; - return [ret autorelease]; + return ret; } - (void)animationDidEnd:(NSAnimation *)animation @@ -228,7 +228,7 @@ - (void)_computeTargetItemsByRegenerating:(BOOL)regenerate item = [_targetItems objectAtIndex:[[dict objectForKey:[NSNumber numberWithUnsignedInt:i]] unsignedIntValue]]; } else // Not Found = New Item { - item = [self newItemForRepresentedObject:object]; + item = [[self newItemForRepresentedObject:object] autorelease]; } NSRect oldFrame = item.view.frame; diff --git a/App/src/MZDateFormatter.h b/App/src/MZDateFormatter.h new file mode 100644 index 00000000..f9be99e5 --- /dev/null +++ b/App/src/MZDateFormatter.h @@ -0,0 +1,15 @@ +// +// MZDateFormatter.h +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import + + +@interface MZDateFormatter : NSDateFormatter { +} + +@end diff --git a/App/src/MZDateFormatter.m b/App/src/MZDateFormatter.m new file mode 100644 index 00000000..e03dff0d --- /dev/null +++ b/App/src/MZDateFormatter.m @@ -0,0 +1,43 @@ +// +// MZDateFormatter.m +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import "MZDateFormatter.h" + + +@implementation MZDateFormatter + +- (NSDate *)dateFromString:(NSString *)string; +{ + return [super dateFromString:string]; +} + +- (NSString *)stringFromDate:(NSDate *)date; +{ + return [super stringFromDate:date]; +} + + +- (BOOL)isPartialStringValid:(NSString **)partialStringPtr proposedSelectedRange:(NSRangePointer)proposedSelRangePtr originalString:(NSString *)origString originalSelectedRange:(NSRange)origSelRange errorDescription:(NSString **)error; +{ + BOOL ret = [super isPartialStringValid:partialStringPtr proposedSelectedRange:proposedSelRangePtr originalString:origString originalSelectedRange:origSelRange errorDescription:error]; + return ret; +} + +- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error; +{ + if(!string || [string length]==0) + { + if(obj) + *obj = nil; + return YES; + } + BOOL ret = [super getObjectValue:obj forString:string errorDescription:error]; + return ret; +} + +@end diff --git a/App/src/MZYearDateFormatter.h b/App/src/MZYearDateFormatter.h new file mode 100644 index 00000000..d76dfd40 --- /dev/null +++ b/App/src/MZYearDateFormatter.h @@ -0,0 +1,125 @@ +// +// MZYearDateFormatter.h +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import +#import "MZDateFormatter.h" + +@interface MZYearDateFormatter : NSFormatter { + NSDateFormatter* dateFormatter; +} +-(id)init; + +#pragma mark NSCoder + +-(id)initWithCoder:(NSCoder *)aDecoder; +- (void)encodeWithCoder:(NSCoder *)aCoder; + +#pragma mark NSDateFormatter + +- (NSString *)dateFormat; + +#if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED + +- (NSDateFormatterStyle)dateStyle; +- (void)setDateStyle:(NSDateFormatterStyle)style; + +- (NSDateFormatterStyle)timeStyle; +- (void)setTimeStyle:(NSDateFormatterStyle)style; + +- (NSLocale *)locale; +- (void)setLocale:(NSLocale *)locale; + +- (BOOL)generatesCalendarDates; +- (void)setGeneratesCalendarDates:(BOOL)b; + +- (NSDateFormatterBehavior)formatterBehavior; +- (void)setFormatterBehavior:(NSDateFormatterBehavior)behavior; + +- (void)setDateFormat:(NSString *)string; + +- (NSTimeZone *)timeZone; +- (void)setTimeZone:(NSTimeZone *)tz; + +- (NSCalendar *)calendar; +- (void)setCalendar:(NSCalendar *)calendar; + +- (BOOL)isLenient; +- (void)setLenient:(BOOL)b; + +- (NSDate *)twoDigitStartDate; +- (void)setTwoDigitStartDate:(NSDate *)date; + +- (NSDate *)defaultDate; +- (void)setDefaultDate:(NSDate *)date; + +- (NSArray *)eraSymbols; +- (void)setEraSymbols:(NSArray *)array; + +- (NSArray *)monthSymbols; +- (void)setMonthSymbols:(NSArray *)array; + +- (NSArray *)shortMonthSymbols; +- (void)setShortMonthSymbols:(NSArray *)array; + +- (NSArray *)weekdaySymbols; +- (void)setWeekdaySymbols:(NSArray *)array; + +- (NSArray *)shortWeekdaySymbols; +- (void)setShortWeekdaySymbols:(NSArray *)array; + +- (NSString *)AMSymbol; +- (void)setAMSymbol:(NSString *)string; + +- (NSString *)PMSymbol; +- (void)setPMSymbol:(NSString *)string; + +#endif + +- (NSArray *)longEraSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setLongEraSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)veryShortMonthSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setVeryShortMonthSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)standaloneMonthSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setStandaloneMonthSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)shortStandaloneMonthSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setShortStandaloneMonthSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)veryShortStandaloneMonthSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setVeryShortStandaloneMonthSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)veryShortWeekdaySymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setVeryShortWeekdaySymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)standaloneWeekdaySymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setStandaloneWeekdaySymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)shortStandaloneWeekdaySymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setShortStandaloneWeekdaySymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)veryShortStandaloneWeekdaySymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setVeryShortStandaloneWeekdaySymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)quarterSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setQuarterSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)shortQuarterSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setShortQuarterSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)standaloneQuarterSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setStandaloneQuarterSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSArray *)shortStandaloneQuarterSymbols AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setShortStandaloneQuarterSymbols:(NSArray *)array AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +- (NSDate *)gregorianStartDate AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; +- (void)setGregorianStartDate:(NSDate *)date AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER; + +@end diff --git a/App/src/MZYearDateFormatter.m b/App/src/MZYearDateFormatter.m new file mode 100644 index 00000000..0d52d292 --- /dev/null +++ b/App/src/MZYearDateFormatter.m @@ -0,0 +1,412 @@ +// +// MZYearDateFormatter.m +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import "MZYearDateFormatter.h" + + +@implementation MZYearDateFormatter + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super init]; + if(self) { + dateFormatter = [[NSDateFormatter alloc] initWithCoder:aDecoder]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)aCoder +{ + [dateFormatter encodeWithCoder:aCoder]; +} + + +- (id)init; +{ + self = [super init]; + if(self) { + dateFormatter = [[NSDateFormatter alloc] init]; + } + return self; +} + +- (void)dealloc +{ + [dateFormatter release]; + [super dealloc]; +} + +- (NSString *)stringForObjectValue:(id)obj; +{ + if([obj isKindOfClass:[NSNumber class]]) + return [obj stringValue]; + NSString* ret = [dateFormatter stringForObjectValue:obj]; + return ret; +} + +- (NSAttributedString *)attributedStringForObjectValue:(id)obj withDefaultAttributes:(NSDictionary *)attrs; +{ + return nil; +} + +- (NSString *)editingStringForObjectValue:(id)obj; +{ + return [self stringForObjectValue:obj]; + NSString* ret = [dateFormatter editingStringForObjectValue:obj]; + return ret; +} + + +- (BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error; +{ + if(!string || [string length]==0) + { + if(obj) + *obj = nil; + return YES; + } + + if([string mz_allInCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]) + { + if(obj) + *obj = [NSNumber numberWithInt:[string intValue]]; + return YES; + } + return [dateFormatter getObjectValue:obj forString:string errorDescription:error]; +} + +#pragma mark NSDateFormatter + +- (NSString *)dateFormat; +{ + return [dateFormatter dateFormat]; +} + +#if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED + +- (NSDateFormatterStyle)dateStyle; +{ + return [dateFormatter dateStyle]; +} + +- (void)setDateStyle:(NSDateFormatterStyle)style; +{ + [dateFormatter setDateStyle:style]; +} + +- (NSDateFormatterStyle)timeStyle; +{ + return [dateFormatter timeStyle]; +} + +- (void)setTimeStyle:(NSDateFormatterStyle)style; +{ + [dateFormatter setTimeStyle:style]; +} + +- (NSLocale *)locale; +{ + return [dateFormatter locale]; +} + +- (void)setLocale:(NSLocale *)locale; +{ + [dateFormatter setLocale:locale]; +} + +- (BOOL)generatesCalendarDates; +{ + return [dateFormatter generatesCalendarDates]; +} + +- (void)setGeneratesCalendarDates:(BOOL)b; +{ + [dateFormatter setGeneratesCalendarDates:b]; +} + +- (NSDateFormatterBehavior)formatterBehavior; +{ + return [dateFormatter formatterBehavior]; +} + +- (void)setFormatterBehavior:(NSDateFormatterBehavior)behavior; +{ + [dateFormatter setFormatterBehavior:behavior]; +} + +- (void)setDateFormat:(NSString *)string; +{ + [dateFormatter setDateFormat:string]; +} + +- (NSTimeZone *)timeZone; +{ + return [dateFormatter timeZone]; +} + +- (void)setTimeZone:(NSTimeZone *)tz; +{ + [dateFormatter setTimeZone:tz]; +} + +- (NSCalendar *)calendar; +{ + return [dateFormatter calendar]; +} + +- (void)setCalendar:(NSCalendar *)calendar; +{ + [dateFormatter setCalendar:calendar]; +} + +- (BOOL)isLenient; +{ + return [dateFormatter isLenient]; +} + +- (void)setLenient:(BOOL)b; +{ + [dateFormatter setLenient:b]; +} + +- (NSDate *)twoDigitStartDate; +{ + return [dateFormatter twoDigitStartDate]; +} + +- (void)setTwoDigitStartDate:(NSDate *)date; +{ + [dateFormatter setTwoDigitStartDate:date]; +} + +- (NSDate *)defaultDate; +{ + return [dateFormatter defaultDate]; +} + +- (void)setDefaultDate:(NSDate *)date; +{ + [dateFormatter setDefaultDate:date]; +} + +- (NSArray *)eraSymbols; +{ + return [dateFormatter eraSymbols]; +} + +- (void)setEraSymbols:(NSArray *)array; +{ + [dateFormatter setEraSymbols:array]; +} + +- (NSArray *)monthSymbols; +{ + return [dateFormatter monthSymbols]; +} + +- (void)setMonthSymbols:(NSArray *)array; +{ + [dateFormatter setMonthSymbols:array]; +} + +- (NSArray *)shortMonthSymbols; +{ + return [dateFormatter shortMonthSymbols]; +} + +- (void)setShortMonthSymbols:(NSArray *)array; +{ + [dateFormatter setShortMonthSymbols:array]; +} + +- (NSArray *)weekdaySymbols; +{ + return [dateFormatter weekdaySymbols]; +} + +- (void)setWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setWeekdaySymbols:array]; +} + +- (NSArray *)shortWeekdaySymbols; +{ + return [dateFormatter shortWeekdaySymbols]; +} + +- (void)setShortWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setShortWeekdaySymbols:array]; +} + +- (NSString *)AMSymbol; +{ + return [dateFormatter AMSymbol]; +} + +- (void)setAMSymbol:(NSString *)string; +{ + [dateFormatter setAMSymbol:string]; +} + +- (NSString *)PMSymbol; +{ + return [dateFormatter PMSymbol]; +} + +- (void)setPMSymbol:(NSString *)string; +{ + [dateFormatter setPMSymbol:string]; +} + +#endif + +#if MAC_OS_X_VERSION_10_5 <= MAC_OS_X_VERSION_MAX_ALLOWED + +- (NSArray *)longEraSymbols; +{ + return [dateFormatter longEraSymbols]; +} + +- (void)setLongEraSymbols:(NSArray *)array; +{ + [dateFormatter setLongEraSymbols:array]; +} + +- (NSArray *)veryShortMonthSymbols; +{ + return [dateFormatter veryShortMonthSymbols]; +} + +- (void)setVeryShortMonthSymbols:(NSArray *)array; +{ + [dateFormatter setVeryShortMonthSymbols:array]; +} + +- (NSArray *)standaloneMonthSymbols; +{ + return [dateFormatter standaloneMonthSymbols]; +} + +- (void)setStandaloneMonthSymbols:(NSArray *)array; +{ + [dateFormatter setStandaloneMonthSymbols:array]; +} + +- (NSArray *)shortStandaloneMonthSymbols; +{ + return [dateFormatter shortStandaloneMonthSymbols]; +} + +- (void)setShortStandaloneMonthSymbols:(NSArray *)array; +{ + [dateFormatter setShortStandaloneMonthSymbols:array]; +} + +- (NSArray *)veryShortStandaloneMonthSymbols; +{ + return [dateFormatter veryShortStandaloneMonthSymbols]; +} + +- (void)setVeryShortStandaloneMonthSymbols:(NSArray *)array; +{ + [dateFormatter setVeryShortStandaloneMonthSymbols:array]; +} + +- (NSArray *)veryShortWeekdaySymbols; +{ + return [dateFormatter veryShortWeekdaySymbols]; +} + +- (void)setVeryShortWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setVeryShortWeekdaySymbols:array]; +} + +- (NSArray *)standaloneWeekdaySymbols; +{ + return [dateFormatter standaloneWeekdaySymbols]; +} + +- (void)setStandaloneWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setStandaloneWeekdaySymbols:array]; +} + +- (NSArray *)shortStandaloneWeekdaySymbols; +{ + return [dateFormatter shortStandaloneWeekdaySymbols]; +} + +- (void)setShortStandaloneWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setShortStandaloneWeekdaySymbols:array]; +} + +- (NSArray *)veryShortStandaloneWeekdaySymbols; +{ + return [dateFormatter veryShortStandaloneWeekdaySymbols]; +} + +- (void)setVeryShortStandaloneWeekdaySymbols:(NSArray *)array; +{ + [dateFormatter setVeryShortStandaloneWeekdaySymbols:array]; +} + +- (NSArray *)quarterSymbols; +{ + return [dateFormatter quarterSymbols]; +} + +- (void)setQuarterSymbols:(NSArray *)array; +{ + [dateFormatter setQuarterSymbols:array]; +} + +- (NSArray *)shortQuarterSymbols; +{ + return [dateFormatter shortQuarterSymbols]; +} + +- (void)setShortQuarterSymbols:(NSArray *)array; +{ + [dateFormatter setShortQuarterSymbols:array]; +} + +- (NSArray *)standaloneQuarterSymbols; +{ + return [dateFormatter standaloneQuarterSymbols]; +} + +- (void)setStandaloneQuarterSymbols:(NSArray *)array; +{ + [dateFormatter setStandaloneQuarterSymbols:array]; +} + +- (NSArray *)shortStandaloneQuarterSymbols; +{ + return [dateFormatter shortStandaloneQuarterSymbols]; +} + +- (void)setShortStandaloneQuarterSymbols:(NSArray *)array; +{ + [dateFormatter setShortStandaloneQuarterSymbols:array]; +} + +- (NSDate *)gregorianStartDate; +{ + return [dateFormatter gregorianStartDate]; +} + +- (void)setGregorianStartDate:(NSDate *)date; +{ + [dateFormatter setGregorianStartDate:date]; +} +#endif + +@end diff --git a/App/src/QueueController.m b/App/src/QueueController.m index 35cc3052..6c9a25c3 100644 --- a/App/src/QueueController.m +++ b/App/src/QueueController.m @@ -145,9 +145,9 @@ - (void)updateUI NSProgressIndicator* progressBar = [[[mainWindow contentView] subviews] objectAtIndex:2]; RunStatus status = [writeQueue status]; - NSString* playLabel; - NSString* playImage; - NSString* menuLabel; + NSString* playLabel = nil; + NSString* playImage = nil; + NSString* menuLabel = nil; switch (status) { case QueueStopped: diff --git a/App/src/RatingMenuHandler.m b/App/src/RatingMenuHandler.m index 7e195334..d9185438 100644 --- a/App/src/RatingMenuHandler.m +++ b/App/src/RatingMenuHandler.m @@ -147,37 +147,37 @@ - (void)makeMenu { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuUK itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } if([d boolForKey:@"ratingDE"]) { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuDE itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } if([d boolForKey:@"ratingIE"]) { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuIE itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } if([d boolForKey:@"ratingCA"]) { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuCA itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } if([d boolForKey:@"ratingAU"]) { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuAU itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } if([d boolForKey:@"ratingNZ"]) { [menu addItem:[NSMenuItem separatorItem]]; for(NSMenuItem* item in [menuNZ itemArray]) - [menu addItem:[item copy]]; + [menu addItem:[[item copy] autorelease]]; } } diff --git a/App/src/Resources.m b/App/src/Resources.m index 886b0820..763e060b 100644 --- a/App/src/Resources.m +++ b/App/src/Resources.m @@ -12,4 +12,4 @@ NSString* const MZFadedIconError = @"faded_cow_error"; NSString* const MZFadedIconFatalError = @"faded_cow_fatal"; NSString* const MZFadedIconMultiple = @"faded_cow_multiple"; -NSString* const MZSmallIcon = @"CowHead"; +NSString* const MZSmallIcon = @"metaz"; diff --git a/Credits.html b/Credits.html index e24df532..993fefd5 100644 --- a/Credits.html +++ b/Credits.html @@ -17,6 +17,7 @@ + diff --git a/Framework/src/MZPluginController.m b/Framework/src/MZPluginController.m index 4443124a..359d4ed3 100644 --- a/Framework/src/MZPluginController.m +++ b/Framework/src/MZPluginController.m @@ -350,10 +350,14 @@ - (MZPlugin *)pluginWithPath:(NSString *)path - (id)dataProviderForPath:(NSString *)path { - NSString* uti = [[NSWorkspace sharedWorkspace] typeOfFile:path error:NULL]; - if(!uti) - return nil; - return [self dataProviderForType:uti]; + NSArray* types = (NSArray*)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, (CFStringRef)[path pathExtension], kUTTypeMovie); + for(NSString* uti in types) + { + id ret = [self dataProviderForType:uti]; + if(ret) + return ret; + } + return nil; } - (NSArray *)dataProviderTypes diff --git a/Framework/src/MZPriorObserverFix.m b/Framework/src/MZPriorObserverFix.m index 826a5bdf..1af6d802 100644 --- a/Framework/src/MZPriorObserverFix.m +++ b/Framework/src/MZPriorObserverFix.m @@ -76,10 +76,11 @@ - (void)addObserver:(NSObject *)observer if(oldValue == NSMultipleValuesMarker) { NSString* newPrefix = [key stringByAppendingString:@"."]; - if(prefix) + if(!prefix) + /* { newPrefix = [prefix stringByAppendingString:newPrefix]; - } else + } else*/ oldValue = [MZPriorObserverFix fixWithOther:other prefix:newPrefix]; } if(oldValue) @@ -148,11 +149,12 @@ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(N { //newValue = [other valueForKey:key]; NSString* newPrefix = [key stringByAppendingString:@"."]; - if(prefix) + if(!prefix) + /* { newPrefix = [prefix stringByAppendingString:newPrefix]; } - else + else*/ newValue = [MZPriorObserverFix fixWithOther:other prefix:newPrefix]; } if(newValue) diff --git a/Framework/src/MZRESTWrapper.m b/Framework/src/MZRESTWrapper.m index 9af4f4c4..0c582611 100644 --- a/Framework/src/MZRESTWrapper.m +++ b/Framework/src/MZRESTWrapper.m @@ -290,9 +290,9 @@ - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallen NSInteger count = [challenge previousFailureCount]; if (count == 0) { - NSURLCredential* credential = [[NSURLCredential credentialWithUser:username + NSURLCredential* credential = [NSURLCredential credentialWithUser:username password:password - persistence:NSURLCredentialPersistenceNone] autorelease]; + persistence:NSURLCredentialPersistenceNone]; [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; } diff --git a/Framework/src/MZTag.h b/Framework/src/MZTag.h index 6f97ccc3..dd76b719 100644 --- a/Framework/src/MZTag.h +++ b/Framework/src/MZTag.h @@ -55,6 +55,11 @@ @end +@interface MZYearDateTag : MZTag {} + +@end + + @interface MZIntegerTag : MZTag {} @end diff --git a/Framework/src/MZTag.m b/Framework/src/MZTag.m index 2bca4403..c695dfab 100644 --- a/Framework/src/MZTag.m +++ b/Framework/src/MZTag.m @@ -11,6 +11,7 @@ #import #import #import +#import @interface MZVideoTypeTagClass : MZEnumTag { @@ -43,7 +44,7 @@ + (void)initialize [self registerTag:[MZStringTag tagWithIdentifier:MZPictureTagIdent]]; [self registerTag:[MZStringTag tagWithIdentifier:MZTitleTagIdent]]; [self registerTag:[MZStringTag tagWithIdentifier:MZArtistTagIdent]]; - [self registerTag:[MZDateTag tagWithIdentifier:MZDateTagIdent]]; + [self registerTag:[MZYearDateTag tagWithIdentifier:MZDateTagIdent]]; [self registerTag:[MZRatingTag tag]]; [self registerTag:[MZStringTag tagWithIdentifier:MZGenreTagIdent]]; [self registerTag:[MZStringTag tagWithIdentifier:MZAlbumTagIdent]]; @@ -385,6 +386,48 @@ - (NSString *)stringForObject:(id)obj @end +@implementation MZYearDateTag + +- (NSCell *)editorCell +{ + return [[[NSTextFieldCell alloc] initTextCell:@""] autorelease]; +} + +- (id)convertValueToObject:(void*)buffer +{ + id* str = (id*)buffer; + return *str; +} + +- (void)convertObject:(id)obj toValue:(void*)buffer +{ + id* str = (id*)buffer; + *str = obj; +} + +- (id)objectFromString:(NSString *)str +{ + if(!str || [str length]==0) + return nil; + + if([str mz_allInCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]) + return [NSNumber numberWithInt:[str intValue]]; + return [NSDate dateWithUTCString:str]; +} + +- (NSString *)stringForObject:(id)obj +{ + if(!obj || obj == [NSNull null]) + return @""; + if([obj isKindOfClass:[NSNumber class]]) + return [obj stringValue]; + NSDate* date = obj; + return [date utcTimestamp]; +} + +@end + + @implementation MZIntegerTag - (NSCell *)editorCell diff --git a/Framework/src/MZTaskOperation.h b/Framework/src/MZTaskOperation.h index 6c55af2f..5cbe23b7 100644 --- a/Framework/src/MZTaskOperation.h +++ b/Framework/src/MZTaskOperation.h @@ -31,6 +31,7 @@ - (void)cancel; +- (void)setupStandardInput; - (void)setupStandardOutput; - (void)setupStandardError; - (void)releaseStandardOutput; diff --git a/Framework/src/MZTaskOperation.m b/Framework/src/MZTaskOperation.m index 1b025c11..668369f1 100644 --- a/Framework/src/MZTaskOperation.m +++ b/Framework/src/MZTaskOperation.m @@ -116,6 +116,7 @@ - (void)startOnMainThread name:NSTaskDidTerminateNotification object:task]; + [self setupStandardInput]; [self setupStandardOutput]; [self setupStandardError]; MZLoggerDebug(@"Launch %@ %@", @@ -124,6 +125,11 @@ - (void)startOnMainThread [task launch]; } +- (void)setupStandardInput +{ + [self setStandardInput:[NSPipe pipe]]; +} + - (void)setupStandardOutput { [self setStandardOutput:[NSPipe pipe]]; diff --git a/Framework/src/MZTimedTextItem.m b/Framework/src/MZTimedTextItem.m index de67b794..37c523ff 100644 --- a/Framework/src/MZTimedTextItem.m +++ b/Framework/src/MZTimedTextItem.m @@ -236,8 +236,8 @@ - (id)initWithStart:(MZTimeCode *)aStart duration:(MZTimeCode *)aDuration text:( self = [super init]; if(self) { - start = [aStart retain]; - duration = [aDuration retain]; + start = [aStart copy]; + duration = [aDuration copy]; text = [fixText(aText) retain]; } return self; @@ -287,9 +287,9 @@ - (void)encodeWithCoder:(NSCoder *)encoder - (id)copyWithZone:(NSZone *)zone { return [[MZTimedTextItem allocWithZone:zone] - initWithStart:[start copyWithZone:zone] - duration:[duration copyWithZone:zone] - text:[text copyWithZone:zone]]; + initWithStart:start + duration:duration + text:text]; } #pragma mark - NSMutableCopying implementation @@ -308,7 +308,9 @@ @implementation MZMutableTimedTextItem - (void)setText:(NSString *)aText { - text = [fixText(aText) retain]; + NSString* newText = fixText(aText); + [text release]; + text = [newText retain]; } @end diff --git a/Framework/src/MetaEdits.m b/Framework/src/MetaEdits.m index a7c2a909..fe75d503 100644 --- a/Framework/src/MetaEdits.m +++ b/Framework/src/MetaEdits.m @@ -313,6 +313,8 @@ -(id)handleDataForMethod:(NSString *)aMethod withKey:(NSString *)aKey ofType:(NS BOOL ret = [self getterChangedForKey:aKey]; return [NSNumber numberWithBool:ret]; } + //if(aType == 1) // Get value + return [self getterValueForKey:aKey]; } -(void)handleSetData:(id)value forMethod:(NSString *)aMethod withKey:(NSString *)aKey ofType:(NSUInteger)aType diff --git a/Framework/src/MetaZKit.h b/Framework/src/MetaZKit.h index bada7219..211507fe 100644 --- a/Framework/src/MetaZKit.h +++ b/Framework/src/MetaZKit.h @@ -40,6 +40,7 @@ #import #import #import +#import #import #import diff --git a/Framework/src/NSString+MZAllInCharacterSet.h b/Framework/src/NSString+MZAllInCharacterSet.h new file mode 100644 index 00000000..279c5531 --- /dev/null +++ b/Framework/src/NSString+MZAllInCharacterSet.h @@ -0,0 +1,16 @@ +// +// NSString+MZAllInCharacterSet.h +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import + + +@interface NSString (MZAllInCharacterSet) + +- (BOOL)mz_allInCharacterSet:(NSCharacterSet *)set; + +@end diff --git a/Framework/src/NSString+MZAllInCharacterSet.m b/Framework/src/NSString+MZAllInCharacterSet.m new file mode 100644 index 00000000..f2411ebe --- /dev/null +++ b/Framework/src/NSString+MZAllInCharacterSet.m @@ -0,0 +1,26 @@ +// +// NSString+MZAllInCharacterSet.m +// MetaZ +// +// Created by Brian Olsen on 08/08/11. +// Copyright 2011 Maven-Group. All rights reserved. +// + +#import "NSString+MZAllInCharacterSet.h" + + +@implementation NSString (MZAllInCharacterSet) + +- (BOOL)mz_allInCharacterSet:(NSCharacterSet *)set; +{ + int length = [self length]; + for(NSUInteger i=0; i)th MZ_R_Rating, MZ_PG_Rating, -1 }; - NSArray* ratingNames = [[NSArray alloc] initWithObjects: + NSArray* ratingNames = [[[NSArray alloc] initWithObjects: @"NR (Not Rated)", @"PG-13 (Parental Guidance Suggested)", @"X (Mature Audiences Only)", @"G (General Audience)", @"R (Restricted)", @"PG (Parental Guidance Suggested)", - nil]; + nil] autorelease]; int ratingsCount; for(ratingsCount=0; ratingsCount<[ratingNames count]+5 && ratings[ratingsCount] > -1;ratingsCount++); NSLog(@"Ratings %d %d", [ratingNames count], ratingsCount); diff --git a/Plugins/AtomicParsley/resources/mp4chaps b/Plugins/AtomicParsley/resources/mp4chaps index efb218a6..de463817 100755 Binary files a/Plugins/AtomicParsley/resources/mp4chaps and b/Plugins/AtomicParsley/resources/mp4chaps differ diff --git a/Plugins/AtomicParsley/resources/mp4v2-trunk-r479-custom-chaps.patch b/Plugins/AtomicParsley/resources/mp4v2-trunk-r479-custom-chaps.patch new file mode 100644 index 00000000..938fb6c2 --- /dev/null +++ b/Plugins/AtomicParsley/resources/mp4v2-trunk-r479-custom-chaps.patch @@ -0,0 +1,102 @@ +--- util/mp4chaps_old.cpp 2011-08-04 23:54:34.000000000 +0200 ++++ util/mp4chaps.cpp 2011-08-05 00:03:45.000000000 +0200 +@@ -140,8 +140,8 @@ + _actionGroup.add( 'l', false, "list", false, LC_CHP_LIST, "list available chapters" ); + _actionGroup.add( 'c', false, "convert", false, LC_CHP_CONVERT, "convert available chapters" ); + _actionGroup.add( 'e', true, "every", true, LC_CHP_EVERY, "create chapters every NUM seconds", "NUM" ); +- _actionGroup.add( 'x', false, "export", false, LC_CHP_EXPORT, "export chapters to mp4file.chapters.txt", "TXT" ); +- _actionGroup.add( 'i', false, "import", false, LC_CHP_IMPORT, "import chapters from mp4file.chapters.txt", "TXT" ); ++ _actionGroup.add( 'x', false, "export", true, LC_CHP_EXPORT, "export chapters to mp4file.chapters.txt", "TXT" ); ++ _actionGroup.add( 'i', false, "import", true, LC_CHP_IMPORT, "import chapters from mp4file.chapters.txt", "TXT" ); + _actionGroup.add( 'r', false, "remove", false, LC_CHP_REMOVE, "remove all chapters" ); + _groups.push_back( &_actionGroup ); + +@@ -170,6 +170,18 @@ + return herrf( "unable to open for read: %s\n", job.file.c_str() ); + } + ++ uint64_t movie_duration = MP4ConvertFromMovieDuration(job.fileHandle, MP4GetDuration(job.fileHandle), MP4_MSECS_TIME_SCALE); ++ Timecode file_duration(movie_duration, MP4_MSECS_TIME_SCALE); ++ file_duration.setFormat(Timecode::DECIMAL); ++ ++ MP4Duration the_file_duration = MP4GetDuration(job.fileHandle); ++ uint32_t time_scale = MP4GetTimeScale(job.fileHandle); ++ uint64_t movie_duration3 = the_file_duration/(time_scale/1000); ++ uint64_t movie_duration2 = MP4ConvertFromMovieDuration(job.fileHandle, the_file_duration, time_scale); ++ ++ ostringstream report; ++ report << "Duration " << file_duration.svalue << endl; ++ + MP4Chapter_t * chapters = 0; + uint32_t chapterCount = 0; + +@@ -177,22 +189,28 @@ + MP4ChapterType chtp = MP4GetChapters(job.fileHandle, &chapters, &chapterCount, _ChapterType); + if (0 == chapterCount) + { ++ report << "File \"" << job.file.c_str() << " does not contain chapters of type " ++ << getChapterTypeName( _ChapterType ).c_str() << endl; ++ verbose1f( "%s", report.str().c_str() ); ++ /* + verbose1f( "File \"%s\" does not contain chapters of type %s\n", job.file.c_str(), + getChapterTypeName( _ChapterType ).c_str() ); ++ */ + return SUCCESS; + } + + // start output (more or less like mp4box does) +- ostringstream report; + report << getChapterTypeName( chtp ) << ' ' << "Chapters of " << '"' << job.file << '"' << endl; + + Timecode duration(0, CHAPTERTIMESCALE); + duration.setFormat( Timecode::DECIMAL ); + for (uint32_t i = 0; i < chapterCount; ++i) + { ++ Timecode dur(chapters[i].duration, CHAPTERTIMESCALE); ++ dur.setFormat( Timecode::DECIMAL ); + // print the infos + report << '\t' << "Chapter #" << setw( 3 ) << setfill( '0' ) << i+1 +- << " - " << duration.svalue << " - " << '"' << chapters[i].title << '"' << endl; ++ << " - " << duration.svalue << " - " << dur.svalue << " - " << '"' << chapters[i].title << '"' << endl; + + // add the duration of this chapter to the sum (is the start time of the next chapter) + duration += Timecode(chapters[i].duration, CHAPTERTIMESCALE); +@@ -595,7 +613,7 @@ + MP4ChapterType chtp = MP4DeleteChapters( job.fileHandle, _ChapterType ); + if( MP4ChapterTypeNone == chtp ) + { +- return FAILURE; ++ return SUCCESS; + } + + fixQtScale( job.fileHandle ); +@@ -677,13 +695,12 @@ + + case LC_CHP_EXPORT: + _action = &ChapterUtility::actionExport; +- /* currently not supported since the chapters of n input files would be written to one chapter file ++ /* currently not supported since the chapters of n input files would be written to one chapter file */ + _ChapterFile = prog::optarg; + if( _ChapterFile.empty() ) + { + return herrf( "invalid TXT file: empty-string\n" ); + } +- */ + break; + + case 'i': +@@ -692,13 +709,12 @@ + + case LC_CHP_IMPORT: + _action = &ChapterUtility::actionImport; +- /* currently not supported since the chapters of n input files would be read from one chapter file ++ /* currently not supported since the chapters of n input files would be read from one chapter file */ + _ChapterFile = prog::optarg; + if( _ChapterFile.empty() ) + { + return herrf( "invalid TXT file: empty-string\n" ); + } +- */ + break; + + case 'c': diff --git a/Plugins/AtomicParsley/src/APDataProvider.m b/Plugins/AtomicParsley/src/APDataProvider.m index 2ca236e1..0c23301d 100644 --- a/Plugins/AtomicParsley/src/APDataProvider.m +++ b/Plugins/AtomicParsley/src/APDataProvider.m @@ -107,7 +107,7 @@ - (id)init writes = [[NSMutableArray alloc] init]; types = [[NSArray alloc] initWithObjects: @"public.mpeg-4", @"com.apple.quicktime-movie", - @"com.apple.protected-mpeg-4-video", nil]; + @"org.maven-group.mpeg4-video", nil]; tags = [[MZTag allKnownTags] retain]; NSArray* readmapkeys = [NSArray arrayWithObjects: @"©nam", @"©ART", @"©day", @@ -903,7 +903,6 @@ void sortTags(NSMutableArray* args, NSDictionary* changes, NSString* tag, NSStri NSString* value = @""; if(numberLen > 0 || countLen > 0) { - NSString* value; if(numberLen > 0 && countLen > 0) value = [NSString stringWithFormat:@"%@/%@", number, count]; else if(numberLen > 0) @@ -1037,7 +1036,7 @@ void sortTags(NSMutableArray* args, NSDictionary* changes, NSString* tag, NSStri NSData* xmlData = [NSPropertyListSerialization dataFromPropertyList:dict format:NSPropertyListXMLFormat_v1_0 errorDescription:NULL]; - NSString* movi = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]; + NSString* movi = [[[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding] autorelease]; [args addObject:movi]; } else { diff --git a/Plugins/TagChimp/src/TCSearch.m b/Plugins/TagChimp/src/TCSearch.m index df7fc4c1..8cca07ef 100644 --- a/Plugins/TagChimp/src/TCSearch.m +++ b/Plugins/TagChimp/src/TCSearch.m @@ -186,30 +186,33 @@ - (void)wrapper:(MZRESTWrapper *)theWrapper didRetrieveData:(NSData *)data NSInteger releaseYear = [[item stringForXPath:@"movieTags/info/releaseDateY" error:NULL] integerValue]; if(releaseYear > 0) { - NSDateComponents *comps = [[NSDateComponents alloc] init]; - [comps setYear:releaseYear]; - NSInteger releaseMonth = [[item stringForXPath:@"movieTags/info/releaseDateM" error:NULL] integerValue]; if(releaseMonth > 0) + { + NSDateComponents *comps = [[NSDateComponents alloc] init]; + [comps setYear:releaseYear]; [comps setMonth:releaseMonth]; - NSInteger releaseDay = [[item stringForXPath:@"movieTags/info/releaseDateD" error:NULL] integerValue]; - if(releaseDay > 0) - [comps setDay:releaseDay]; + NSInteger releaseDay = [[item stringForXPath:@"movieTags/info/releaseDateD" error:NULL] integerValue]; + if(releaseDay > 0) + [comps setDay:releaseDay]; - NSCalendar *gregorian = [[NSCalendar alloc] + NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; - NSDate *date = [gregorian dateFromComponents:comps]; - [dict setObject:date forKey:MZDateTagIdent]; - [comps release]; - [gregorian release]; + NSDate *date = [gregorian dateFromComponents:comps]; + [dict setObject:date forKey:MZDateTagIdent]; + [comps release]; + [gregorian release]; + } else { + [dict setObject:[NSNumber numberWithInteger:releaseYear] forKey:MZDateTagIdent]; + } } else { NSString* release = [item stringForXPath:@"movieTags/info/releaseDate" error:NULL]; if( release && [release length] > 0 ) { - NSDate* date = [NSDate dateWithUTCString:release]; + id date = [NSDate dateWithUTCString:release]; if(!date) { NSDateFormatter* format = [[[NSDateFormatter alloc] init] autorelease]; @@ -222,11 +225,9 @@ - (void)wrapper:(MZRESTWrapper *)theWrapper didRetrieveData:(NSData *)data format.dateFormat = @"yyyy-MM"; date = [format dateFromString:release]; } - if(!date) + if(!date && [release mz_allInCharacterSet:[NSCharacterSet decimalDigitCharacterSet]]) { - NSDateFormatter* format = [[[NSDateFormatter alloc] init] autorelease]; - format.dateFormat = @"yyyy"; - date = [format dateFromString:release]; + date = [NSNumber numberWithInt:[release intValue]]; } if(!date) { diff --git a/Plugins/TagChimp/src/TCSearchProvider.m b/Plugins/TagChimp/src/TCSearchProvider.m index aed334e1..5a700398 100644 --- a/Plugins/TagChimp/src/TCSearchProvider.m +++ b/Plugins/TagChimp/src/TCSearchProvider.m @@ -85,7 +85,7 @@ - (BOOL)searchWithData:(NSDictionary *)data delegate:(id)delegate queue:(NSOperationQueue *)queue; { - NSURL* searchURL = [NSURL URLWithString:@"https://www.tagchimp.com/ape/search.php"]; + NSURL* searchURL = [NSURL URLWithString:@"https://tagchimp.com/ape/search.php"]; NSMutableDictionary* params = [NSMutableDictionary dictionary]; [params setObject:@"8363185134824C8CD908AA" forKey:@"token"]; [params setObject:@"search" forKey:@"type"]; diff --git a/Plugins/TheTVDB/src/TheTVDBPlugin.h b/Plugins/TheTVDB/src/TheTVDBPlugin.h index 23ff2395..7919cf83 100644 --- a/Plugins/TheTVDB/src/TheTVDBPlugin.h +++ b/Plugins/TheTVDB/src/TheTVDBPlugin.h @@ -9,7 +9,9 @@ #import #import -#define EpisodeQueryTagIdent @"episodeQuery" +#define TVDBEpisodeIdTagIdent @"tvdbEpisodeId" +#define TVDBSeasonIdTagIdent @"tvdbSeasonId" +#define TVDBSeriesIdTagIdent @"tvdbSeriesId" @interface TheTVDBPlugin : MZPlugin { diff --git a/Plugins/TheTVDB/src/TheTVDBPlugin.m b/Plugins/TheTVDB/src/TheTVDBPlugin.m index b37bb401..471120fc 100644 --- a/Plugins/TheTVDB/src/TheTVDBPlugin.m +++ b/Plugins/TheTVDB/src/TheTVDBPlugin.m @@ -31,7 +31,9 @@ - (void)dealloc - (void)didLoad { - [MZTag registerTag:[MZStringTag tagWithIdentifier:EpisodeQueryTagIdent]]; + [MZTag registerTag:[MZStringTag tagWithIdentifier:TVDBEpisodeIdTagIdent]]; + [MZTag registerTag:[MZStringTag tagWithIdentifier:TVDBSeasonIdTagIdent]]; + [MZTag registerTag:[MZStringTag tagWithIdentifier:TVDBSeriesIdTagIdent]]; [super didLoad]; } diff --git a/Plugins/TheTVDB/src/TheTVDBSearch.m b/Plugins/TheTVDB/src/TheTVDBSearch.m index 537aea51..0bae0f51 100644 --- a/Plugins/TheTVDB/src/TheTVDBSearch.m +++ b/Plugins/TheTVDB/src/TheTVDBSearch.m @@ -231,11 +231,11 @@ - (NSDictionary *)parse NSMutableDictionary* ret = [NSMutableDictionary dictionaryWithDictionary:series.data]; + [ret setObject:[NSNumber numberWithUnsignedInt:[series series]] forKey:TVDBSeriesIdTagIdent]; NSString* seasonId = [doc stringForXPath:@"/Data/Episode/seasonid" error:NULL]; + [ret setObject:seasonId forKey:TVDBSeasonIdTagIdent]; NSString* episodeId = [doc stringForXPath:@"/Data/Episode/id" error:NULL]; - NSString* query = [NSString stringWithFormat:@"seriesid=%d&seasonid=%@&id=%@", - series, seasonId, episodeId]; - [ret setObject:query forKey:EpisodeQueryTagIdent]; + [ret setObject:episodeId forKey:TVDBEpisodeIdTagIdent]; NSString* title = [doc stringForXPath:@"/Data/Episode/EpisodeName" error:NULL]; if(title && [title length] > 0) diff --git a/Plugins/TheTVDB/src/TheTVDBSearchProvider.m b/Plugins/TheTVDB/src/TheTVDBSearchProvider.m index d60de8f8..c138dd44 100644 --- a/Plugins/TheTVDB/src/TheTVDBSearchProvider.m +++ b/Plugins/TheTVDB/src/TheTVDBSearchProvider.m @@ -52,7 +52,11 @@ - (NSMenu *)menuForResult:(MZSearchResult *)result if(!menu) { menu = [[NSMenu alloc] initWithTitle:@"TheTVDB"]; - NSMenuItem* item = [menu addItemWithTitle:@"View in Browser" action:@selector(view:) keyEquivalent:@""]; + NSMenuItem* item = [menu addItemWithTitle:@"View episode in Browser" action:@selector(view:) keyEquivalent:@""]; + [item setTarget:self]; + item = [menu addItemWithTitle:@"View season in Browser" action:@selector(viewSeason:) keyEquivalent:@""]; + [item setTarget:self]; + item = [menu addItemWithTitle:@"View series in Browser" action:@selector(viewSeries:) keyEquivalent:@""]; [item setTarget:self]; } for(NSMenuItem* item in [menu itemArray]) @@ -60,18 +64,58 @@ - (NSMenu *)menuForResult:(MZSearchResult *)result return menu; } +/* +- (BOOL)validateUserInterfaceItem:(id < NSValidatedUserInterfaceItem >)anItem +{ + SEL action = [anItem action]; + if(action == @selector(imdb:)) + { + return + } + return action == @selector(view:); +} +*/ + - (void)view:(id)sender { MZSearchResult* result = [sender representedObject]; - NSString* query = [result valueForKey:EpisodeQueryTagIdent]; + NSNumber* series = [result valueForKey:TVDBSeriesIdTagIdent]; + NSString* season = [result valueForKey:TVDBSeasonIdTagIdent]; + NSString* episode = [result valueForKey:TVDBEpisodeIdTagIdent]; + + NSString* str = [[NSString stringWithFormat: + @"http://thetvdb.com/?tab=episode&seriesid=%d&seasonid=%@&id=%@", + [series unsignedIntValue], season, episode] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSURL* url = [NSURL URLWithString:str]; + [[NSWorkspace sharedWorkspace] openURL:url]; +} + +- (void)viewSeason:(id)sender +{ + MZSearchResult* result = [sender representedObject]; + NSNumber* series = [result valueForKey:TVDBSeriesIdTagIdent]; + NSString* season = [result valueForKey:TVDBSeasonIdTagIdent]; + + NSString* str = [[NSString stringWithFormat: + @"http://thetvdb.com/?tab=season&seriesid=%d&seasonid=%@", + [series unsignedIntValue], season] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSURL* url = [NSURL URLWithString:str]; + [[NSWorkspace sharedWorkspace] openURL:url]; +} + +- (void)viewSeries:(id)sender +{ + MZSearchResult* result = [sender representedObject]; + NSNumber* series = [result valueForKey:TVDBSeriesIdTagIdent]; NSString* str = [[NSString stringWithFormat: - @"http://thetvdb.com/?tab=episode&%@", - query] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + @"http://thetvdb.com/?tab=series&id=%d", + [series unsignedIntValue]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL* url = [NSURL URLWithString:str]; [[NSWorkspace sharedWorkspace] openURL:url]; } + - (BOOL)searchWithData:(NSDictionary *)data delegate:(id)delegate queue:(NSOperationQueue *)queue;
programmingBrian Olsen
Nigel Graham
iconThomas Jakobi
UI design additionsNigel Graham
Søren Lisberg
update frameworkAndy Matuschak
various pieces of codeAdrian Kosmaczewski
Marc Liyanage
Olivier Gay