From 18697cef118d02c5938ae351de0d449c6c24551f Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Tue, 31 Aug 2010 11:46:09 -0400 Subject: [PATCH] First round of initial support for Ansel version 2 API. Adds support for indicating which version a server exposes, and fixes api call for the listGalleries call. --- .../ApertureToAnselExportPlugin.h | 7 +- .../ApertureToAnselExportPlugin.m | 11 +- .../ApertureToAnselExportPlugin.nib/designable.nib | 286 +++++++++++++++++---- .../keyedobjects.nib | Bin 31713 -> 33343 bytes ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.h | 3 + ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.m | 45 +++- .../TURAnselKit/TURAnselConstants.h | 3 + .../TURAnselKit/TURAnselConstants.m | 2 + 8 files changed, 284 insertions(+), 73 deletions(-) diff --git a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h index 16ed66b49..3bbf920b2 100644 --- a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h +++ b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h @@ -58,6 +58,7 @@ IBOutlet NSSecureTextField *mServerSheetPassword; IBOutlet NSTextField *mServerSheetServerNickName; IBOutlet NSButton *mMakeNewServerDefault; + IBOutlet NSPopUpButton *mAnselVersion; // Server list IBOutlet NSPanel *serverListPanel; @@ -82,8 +83,6 @@ } - (IBAction) showNewGallery: (id)sender; -- (IBAction) doAddServer: (id)sender; -- (IBAction) doCancelAddServer: (id)sender; - (IBAction) clickServer: (id)sender; - (IBAction) clickViewGallery: (id)sender; - (IBAction) closeGalleryView: (id)sender; @@ -92,4 +91,8 @@ - (IBAction) closeServerList: (id)sender; - (IBAction) removeServer: (id)sender; - (NSWindow *)window; + +// New Server View +- (IBAction) doAddServer: (id)sender; +- (IBAction) doCancelAddServer: (id)sender; @end \ No newline at end of file diff --git a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m index 7212b2283..cef3bb41b 100644 --- a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m +++ b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m @@ -36,6 +36,7 @@ NSString * const TURAnselServerNickKey = @"nickname"; NSString * const TURAnselServerEndpointKey = @"endpoint"; NSString * const TURAnselServerUsernameKey = @"username"; NSString * const TURAnselServerPasswordKey = @"password"; +NSString * const TURAnselServerVersionKey = @"version"; @implementation ApertureToAnselExportPlugin @@ -538,6 +539,7 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn [mServerSheetHostURL stringValue], TURAnselServerEndpointKey, [mServerSheetUsername stringValue], TURAnselServerUsernameKey, [mServerSheetPassword stringValue], TURAnselServerPasswordKey, + [NSNumber numberWithInt: [mAnselVersion indexOfSelectedItem] + 1] , TURAnselServerVersionKey, nil]; [_anselServers addObject: newServer]; [NSApp endSheet: newServerSheet]; @@ -584,6 +586,7 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn [self disconnect]; } _currentServer = [[mServersPopUp selectedItem] representedObject]; + NSLog(@"Current Server: %@", _currentServer); [self doConnect]; } } @@ -755,6 +758,11 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn didEndSelector: nil contextInfo: nil]; + // Populate the version popup + //[mAnselVersion addItemWithTitle:@"1.x"]; + //[mAnselVersion addItemWithTitle:@"2.x"]; + //[mAnselVersion setTitle:@"1.x"]; + // Make sure these are cleared. [mServerSheetHostURL setStringValue: @""]; [mServerSheetUsername setStringValue: @""]; @@ -786,8 +794,9 @@ objectValueForTableColumn:(NSTableColumn *)aTableColumn [_currentServer objectForKey:TURAnselServerEndpointKey], [_currentServer objectForKey:TURAnselServerUsernameKey], [_currentServer objectForKey:TURAnselServerPasswordKey], + [_currentServer objectForKey:TURAnselServerVersionKey], nil] - forKeys: [NSArray arrayWithObjects:@"endpoint", @"username", @"password", nil]]; + forKeys: [NSArray arrayWithObjects:TURAnselServerEndpointKey, TURAnselServerUsernameKey, TURAnselServerPasswordKey, TURAnselServerVersionKey, nil]]; // Create our controller [_anselController autorelease]; _anselController = [[TURAnsel alloc] initWithConnectionParameters:p]; diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib index 69a386acc..c9f3f05a3 100644 --- a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib +++ b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib @@ -2,19 +2,17 @@ 1050 - 10B504 - 732 - 1038.2 - 437.00 + 10F569 + 762 + 1038.29 + 461.00 - 732 + 762 1.1 - - + - com.apple.imagekit.ibplugin @@ -32,7 +30,7 @@ NSApplication - + 268 @@ -115,11 +113,11 @@ 1048576 2147483647 1 - + NSImage NSMenuCheckmark - + NSImage NSMenuMixedState @@ -447,13 +445,12 @@ {528, 309} - NSView 23 2 - {{196, 315}, {455, 195}} + {{196, 280}, {455, 230}} -1543503872 Add Server NSPanel @@ -466,7 +463,7 @@ 268 - {{124, 124}, {311, 22}} + {{124, 159}, {311, 22}} YES @@ -488,7 +485,7 @@ 268 - {{17, 126}, {102, 17}} + {{17, 161}, {102, 17}} YES @@ -504,7 +501,7 @@ 268 - {{124, 92}, {311, 22}} + {{124, 127}, {311, 22}} YES @@ -521,7 +518,7 @@ 268 - {{124, 60}, {311, 22}} + {{124, 95}, {311, 22}} YES @@ -541,7 +538,7 @@ 268 - {{17, 94}, {67, 17}} + {{17, 129}, {67, 17}} YES @@ -557,7 +554,7 @@ 268 - {{17, 62}, {67, 17}} + {{17, 97}, {67, 17}} YES @@ -573,7 +570,7 @@ 268 - {{17, 158}, {102, 17}} + {{17, 193}, {102, 17}} YES @@ -589,7 +586,7 @@ 268 - {{124, 156}, {311, 22}} + {{124, 191}, {311, 22}} YES @@ -643,8 +640,79 @@ 25 + + + 268 + {{17, 69}, {67, 17}} + + YES + + 68288064 + 272630784 + Version + + + + + + + + + 268 + {{121, 63}, {100, 26}} + + YES + + -2076049856 + 2048 + + + 109199615 + 129 + + + 400 + 75 + + + 2.x + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + + + 1.x + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + + 1 + 1 + YES + YES + 2 + + - {455, 195} + {455, 230} {{0, 0}, {1920, 1178}} @@ -668,6 +736,7 @@ 268 {{568, 28}, {96, 28}} + YES 67239424 @@ -696,12 +765,14 @@ 256 {626, 247} + YES 256 {626, 17} + @@ -709,6 +780,7 @@ 256 {{627, 0}, {16, 17}} + @@ -823,6 +895,7 @@ {{1, 17}, {626, 247}} + @@ -833,6 +906,7 @@ 256 {{627, 17}, {15, 247}} + _doScroller: 1 @@ -843,6 +917,7 @@ 256 {{1, 264}, {626, 15}} + 1 _doScroller: @@ -856,6 +931,7 @@ {{1, 0}, {626, 17}} + @@ -865,6 +941,7 @@ {{20, 60}, {643, 280}} + 50 @@ -879,6 +956,7 @@ 268 {{15, 28}, {96, 28}} + YES 67239424 @@ -897,6 +975,7 @@ {679, 358} + {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} @@ -944,7 +1023,7 @@ - 274 + 18 Apple PDF pasteboard type Apple PICT pasteboard type @@ -1028,6 +1107,7 @@ NSTypedFilenamesPboardType:SGI NSTypedFilenamesPboardType:SR2 NSTypedFilenamesPboardType:SRF + NSTypedFilenamesPboardType:SRW NSTypedFilenamesPboardType:TARGA NSTypedFilenamesPboardType:TGA NSTypedFilenamesPboardType:TIF @@ -1090,6 +1170,7 @@ NSTypedFilenamesPboardType:sgi NSTypedFilenamesPboardType:sr2 NSTypedFilenamesPboardType:srf + NSTypedFilenamesPboardType:srw NSTypedFilenamesPboardType:targa NSTypedFilenamesPboardType:tga NSTypedFilenamesPboardType:tif @@ -1158,6 +1239,9 @@ {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} + + ApertureToAnselExportPlugin + @@ -1385,6 +1469,22 @@ 373 + + + mAnselVersion + + + + 422 + + + + anselVersionClick: + + + + 423 + @@ -1442,8 +1542,6 @@ 129 - - @@ -1452,6 +1550,10 @@ + + + + @@ -1922,14 +2024,67 @@ + + 404 + + + + + + + + 405 + + + + + 414 + + + + + 416 + + + + + + + + 417 + + + + + + + + 418 + + + + + + + + + 419 + + + + + 420 + + + com.apple.InterfaceBuilder.CocoaPlugin - {{63, 887}, {455, 195}} + {{529, 852}, {455, 230}} com.apple.InterfaceBuilder.CocoaPlugin - {{63, 887}, {455, 195}} + {{529, 852}, {455, 230}} com.apple.InterfaceBuilder.CocoaPlugin @@ -1993,11 +2148,47 @@ com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{639, 898}, {110, 43}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{531, 790}, {528, 309}} com.apple.InterfaceBuilder.CocoaPlugin @@ -2034,7 +2225,7 @@ - 403 + 423 @@ -2042,6 +2233,7 @@ ApertureToAnselExportPlugin NSObject + id id id id @@ -2049,30 +2241,6 @@ id id id - id - - - IKImageBrowserView - NSButton - NSImageView - NSView - NSComboBox - NSView - NSButton - NSButton - NSTextField - NSSecureTextField - NSTextField - NSTextField - NSPopUpButton - NSWindow - NSWindow - NSPanel - NSTableView - NSView - NSProgressIndicator - NSTextField - NSButton IBProjectSource @@ -2097,6 +2265,7 @@ FirstResponder + NSObject IBUserSource @@ -2106,21 +2275,21 @@ NSObject IBProjectSource - TURAnsel.h + TURAnselKit/TURAnsel.h NSObject IBProjectSource - TURAnselGallery.h + TURAnselKit/TURAnselGallery.h NSObject IBProjectSource - TURAnselGalleryPanelController.h + TURAnselKit/TURAnselGalleryPanelController.h @@ -2774,16 +2943,21 @@ 0 + IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.macosx - + YES ../ApertureToAnselExportPlugin.xcodeproj 3 + + {9, 8} + {7, 2} + diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/keyedobjects.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/keyedobjects.nib index a8efc78148d6ff9563e2ee1f8cdab8d92f5c7992..7c3ca87c62f6c8aec516592620c689ae73c38435 100644 GIT binary patch literal 33343 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 `3+x@HGxc?dwX1quj1eFHT(y4 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 If6om47k~<06951J literal 31713 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 diff --git a/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.h b/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.h index 577d8ed71..03e09a673 100644 --- a/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.h +++ b/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.h @@ -39,6 +39,8 @@ typedef enum { NSString *rpcEndPoint; NSString *username; NSString *password; + NSString *version; + NSMutableArray *galleryList; TURAnselState state; id delegate; @@ -48,6 +50,7 @@ typedef enum { @property (readwrite, retain) NSString *rpcEndPoint; @property (readwrite, retain) NSString *username; @property (readwrite, retain) NSString *password; +@property (readwrite, retain) NSString *version; - (id)initWithConnectionParameters: (NSDictionary *)params; - (void)connect; diff --git a/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.m b/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.m index 79580c480..aa18f5860 100644 --- a/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.m +++ b/ApertureToAnselExportPlugin/TURAnselKit/TURAnsel.m @@ -20,6 +20,7 @@ @synthesize rpcEndPoint; @synthesize username; @synthesize password; +@synthesize version; #pragma mark - #pragma mark init/dealloc @@ -37,6 +38,8 @@ forKey: @"password"]; [self setValue: @"The Ansel Cocoa XML-RPC Client" forKey: @"userAgent"]; + [self setValue: [params objectForKey:@"version"] + forKey: @"version"]; return self; } @@ -49,6 +52,7 @@ [username release]; [password release]; [userAgent release]; + [version release]; [super dealloc]; } @@ -284,20 +288,33 @@ */ - (void)doLogin { - NSArray *params = [[NSArray alloc] initWithObjects: - @"ansel", // Scope - [NSNumber numberWithInt: PERMS_EDIT], // Perms - @"", // No parent - [NSNumber numberWithBool:YES], // allLevels - [NSNumber numberWithInt: 0], // Offset - [NSNumber numberWithInt: 0], // Count - [self valueForKey:@"username"], nil]; // Restrict to user (This should be an option eventually). - - NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, kTURAnselAPIParamPerms, - kTURAnselAPIParamParent, kTURAnselAPIParamAllLevels, - kTURAnselAPIParamOffset, kTURAnselAPIParamCount, - kTURAnselAPIParamUserOnly, nil]; - + NSArray *params; + NSArray *order; + + if (2 == [version intValue]) { + params = [[NSArray alloc] initWithObjects: [[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithInt: PERMS_EDIT], @"perm", + [self valueForKey:@"username"], @"filter", + nil] ,nil]; + order = [[NSArray arrayWithObjects kTURAnselAPIParamSingleParameter, nil]; + } else { + // Assume it's version 1.x + params = [[NSArray alloc] initWithObjects: + @"ansel", // Scope + [NSNumber numberWithInt: PERMS_EDIT], // Perms + @"", // No parent + [NSNumber numberWithBool:YES], // allLevels + [NSNumber numberWithInt: 0], // Offset + [NSNumber numberWithInt: 0], // Count + [self valueForKey:@"username"], nil]; // Restrict to user (This should be an option eventually). + + order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, kTURAnselAPIParamPerms, + kTURAnselAPIParamParent, kTURAnselAPIParamAllLevels, + kTURAnselAPIParamOffset, kTURAnselAPIParamCount, + kTURAnselAPIParamUserOnly, nil]; + } + + NSDictionary *results = [self callRPCMethod: @"images.listGalleries" withParams: params withOrder: order]; diff --git a/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.h b/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.h index 1b6a56b49..7b495cf06 100644 --- a/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.h +++ b/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.h @@ -25,6 +25,9 @@ extern NSString * const kTURAnselAPIParamSetAsDefault; extern NSString * const kTURAnselAPIParamAdditionalData; extern NSString * const kTURAnselAPIParamEncoding; +// Constants specific to Ansel version 2 API parameters. +extern NSString * const kTURAnselAPIParamSingleParameter; + // Constants for the dictionary keys used to describe/create TURAnselGallery extern NSString * const kTURAnselGalleryKeyId; extern NSString * const kTURAnselGalleryKeyName; diff --git a/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.m b/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.m index 74472bb5f..b361ee122 100644 --- a/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.m +++ b/ApertureToAnselExportPlugin/TURAnselKit/TURAnselConstants.m @@ -26,6 +26,8 @@ NSString * const kTURAnselAPIParamSetAsDefault = @"default"; NSString * const kTURAnselAPIParamAdditionalData = @"additionalData"; NSString * const kTURAnselAPIParamEncoding = @"encoding"; +NSString * const kTURAnselAPIParamSingleParameter = @"params"; + // Ansel gallery attribtues. NSString * const kTURAnselGalleryKeyId = @"share_id"; NSString * const kTURAnselGalleryKeyName = @"attribute_name"; -- 2.11.0