From 103b7fb670a9fff6359f780a47d29474c9981574 Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Tue, 22 Sep 2009 14:40:51 -0400 Subject: [PATCH] Clean up, use constants where possible, organize header files, better error messages --- ApertureToAnselExportPlugin/AnselGalleryViewItem.h | 17 +- ApertureToAnselExportPlugin/AnselGalleryViewItem.m | 24 +- .../ApertureToAnselExportPlugin.h | 1 + .../ApertureToAnselExportPlugin.m | 2 +- .../project.pbxproj | 8 + .../ApertureToAnselExportPlugin.nib/classes.nib | 101 - .../ApertureToAnselExportPlugin.nib/designable.nib | 2789 ++++++++++++++++++++ .../ApertureToAnselExportPlugin.nib/info.nib | 22 - .../keyedobjects.nib | Bin 26932 -> 31713 bytes ApertureToAnselExportPlugin/TURAnsel.h | 15 +- ApertureToAnselExportPlugin/TURAnsel.m | 78 +- ApertureToAnselExportPlugin/TURAnselConstants.h | 33 + ApertureToAnselExportPlugin/TURAnselConstants.m | 34 + ApertureToAnselExportPlugin/TURAnselGallery.h | 27 +- ApertureToAnselExportPlugin/TURAnselGallery.m | 65 +- .../TURAnselGalleryPanelController.h | 25 +- .../TURAnselGalleryPanelController.m | 100 +- ApertureToAnselExportPlugin/TURAnselKit.h | 4 + 18 files changed, 3054 insertions(+), 291 deletions(-) delete mode 100644 ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/classes.nib create mode 100644 ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib delete mode 100644 ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/info.nib create mode 100644 ApertureToAnselExportPlugin/TURAnselConstants.h create mode 100644 ApertureToAnselExportPlugin/TURAnselConstants.m create mode 100644 ApertureToAnselExportPlugin/TURAnselKit.h diff --git a/ApertureToAnselExportPlugin/AnselGalleryViewItem.h b/ApertureToAnselExportPlugin/AnselGalleryViewItem.h index 068c07f07..41ba61d68 100644 --- a/ApertureToAnselExportPlugin/AnselGalleryViewItem.h +++ b/ApertureToAnselExportPlugin/AnselGalleryViewItem.h @@ -1,10 +1,12 @@ -// -// AnselGalleryViewItem.h -// iPhoto2Ansel -// -// Created by Michael Rubinsky on 5/7/09. -// Copyright 2009 __MyCompanyName__. All rights reserved. -// +/** + * AnselGalleryViewItem + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @implements IKImageBrowserItem + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import #import @@ -31,4 +33,3 @@ - (NSString *)imageSubtitle; @end - diff --git a/ApertureToAnselExportPlugin/AnselGalleryViewItem.m b/ApertureToAnselExportPlugin/AnselGalleryViewItem.m index c2911d52e..a27b41b5c 100644 --- a/ApertureToAnselExportPlugin/AnselGalleryViewItem.m +++ b/ApertureToAnselExportPlugin/AnselGalleryViewItem.m @@ -1,13 +1,15 @@ -// -// AnselGalleryViewItem.m -// iPhoto2Ansel -// -// Implementation of the IKImageBrowserItem protocol - -// Created by Michael Rubinsky on 5/7/09. -// Copyright 2009 __MyCompanyName__. All rights reserved. -// - +/** + * AnselGalleryViewItem.m + * + * Implements the IKImageBrowserItem protocol for displaying images from a + * remote Ansel gallery in an IKImageBrowser. + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @implements IKImageBrowserItem + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import "AnselGalleryViewItem.h" @implementation AnselGalleryViewItem @@ -25,7 +27,6 @@ imageDate = [theDate retain]; return self; } - - (void)dealloc { [image release]; @@ -59,7 +60,6 @@ NSLog(@"imageTitle: %@", imageTitle); return imageTitle; } - - (NSString *)imageSubtitle { NSLog(@"imageSubtitle: %@", [imageDate description]); diff --git a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h index 96955aa18..e1277d2f2 100644 --- a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h +++ b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.h @@ -13,6 +13,7 @@ #import "ApertureExportPlugIn.h" @class TURAnsel, TURAnselGallery; + @interface ApertureToAnselExportPlugin : NSObject { // The cached API Manager object, as passed to the -initWithAPIManager: method. diff --git a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m index 26dfea0b3..ad4c0d818 100644 --- a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m +++ b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.m @@ -414,7 +414,7 @@ NSString * const TURAnselServerPasswordKey = @"password"; //@TODO - need to add a flag to indicate if we have a UI or not - (void)TURAnselHadError: (NSError *)error { - NSLog(@"TURAnselHadError"); + NSLog(@"TURAnselHadError: %@", error); // Stop the spinner [spinner stopAnimation: self]; [mServersPopUp setEnabled: true]; diff --git a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.xcodeproj/project.pbxproj b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.xcodeproj/project.pbxproj index 13a4efe7a..2c7190e31 100644 --- a/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.xcodeproj/project.pbxproj +++ b/ApertureToAnselExportPlugin/ApertureToAnselExportPlugin.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; + B070DA551069387B00C0E3FC /* TURAnselConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B070DA541069387B00C0E3FC /* TURAnselConstants.m */; }; B0AE23391049F7770096565B /* TURAnselGalleryPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = B0AE23361049F7770096565B /* TURAnselGalleryPanelController.m */; }; B0AE23411049F7A20096565B /* AnselGalleryPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = B0AE233D1049F7A20096565B /* AnselGalleryPanel.nib */; }; B0D311D01049A7DE006B06C6 /* TURAnsel.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D311CB1049A7DE006B06C6 /* TURAnsel.m */; }; @@ -45,6 +46,9 @@ 287924B90DAEB2A20074992A /* ApertureSDKCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApertureSDKCommon.h; sourceTree = ""; }; 32DBCF630370AF2F00C91783 /* ApertureToAnselExportPlugin_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApertureToAnselExportPlugin_Prefix.pch; sourceTree = ""; }; 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B070DA531069387B00C0E3FC /* TURAnselConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TURAnselConstants.h; sourceTree = ""; }; + B070DA541069387B00C0E3FC /* TURAnselConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TURAnselConstants.m; sourceTree = ""; }; + B070DA5A1069391F00C0E3FC /* TURAnselKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TURAnselKit.h; sourceTree = ""; }; B0AE23351049F7770096565B /* TURAnselGalleryPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TURAnselGalleryPanelController.h; sourceTree = ""; }; B0AE23361049F7770096565B /* TURAnselGalleryPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TURAnselGalleryPanelController.m; sourceTree = ""; }; B0AE233E1049F7A20096565B /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/AnselGalleryPanel.nib; sourceTree = ""; }; @@ -187,6 +191,9 @@ B0D311CA1049A7DE006B06C6 /* TURAnsel.h */, B0D311CC1049A7DE006B06C6 /* TURAnselGallery.h */, B0D311CD1049A7DE006B06C6 /* TURAnselGallery.m */, + B070DA531069387B00C0E3FC /* TURAnselConstants.h */, + B070DA541069387B00C0E3FC /* TURAnselConstants.m */, + B070DA5A1069391F00C0E3FC /* TURAnselKit.h */, ); name = AnselToolkit; sourceTree = ""; @@ -265,6 +272,7 @@ B0DEA058104D7012001D1509 /* AnselGalleryViewItem.m in Sources */, B0DD64D2106738DB00085661 /* NSStringAdditions.m in Sources */, B0DD64E31067391E00085661 /* NSDataAdditions.m in Sources */, + B070DA551069387B00C0E3FC /* TURAnselConstants.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/classes.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/classes.nib deleted file mode 100644 index b342825c7..000000000 --- a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/classes.nib +++ /dev/null @@ -1,101 +0,0 @@ - - - - - IBClasses - - - CLASS - FirstResponder - LANGUAGE - ObjC - SUPERCLASS - NSObject - - - CLASS - NSObject - LANGUAGE - ObjC - - - ACTIONS - - clickCancelConnect - id - clickServer - id - clickViewGallery - id - closeGalleryView - id - closeServerList - id - doAddServer - id - doCancelAddServer - id - removeServer - id - showNewGallery - id - - CLASS - ApertureToAnselExportPlugin - LANGUAGE - ObjC - OUTLETS - - anselController - id - browserView - IKImageBrowserView - closeGalleryView - NSButton - defaultImageView - NSImageView - firstView - NSView - galleryCombo - NSComboBox - lastView - NSView - mMakeNewServerDefault - NSButton - mNewGalleryButton - NSButton - mServerSheetHostURL - NSTextField - mServerSheetPassword - NSSecureTextField - mServerSheetServerNickName - NSTextField - mServerSheetUsername - NSTextField - mServersPopUp - NSPopUpButton - mviewGallerySheet - NSWindow - newServerSheet - NSWindow - serverListPanel - NSPanel - serverTable - NSTableView - settingsView - NSView - spinner - NSProgressIndicator - statusLabel - NSTextField - viewGallery - NSButton - - SUPERCLASS - NSObject - - - IBVersion - 1 - - diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib new file mode 100644 index 000000000..69a386acc --- /dev/null +++ b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/designable.nib @@ -0,0 +1,2789 @@ + + + + 1050 + 10B504 + 732 + 1038.2 + 437.00 + + 732 + 1.1 + + + + + + + + + com.apple.imagekit.ibplugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + ApertureToAnselExportPlugin + + + FirstResponder + + + NSApplication + + + + 268 + + + + 256 + + + + 256 + + + + 268 + + + + 256 + + + + 268 + {{27, 225}, {81, 17}} + + YES + + 68288064 + 272630784 + Server + + LucidaGrande + 12 + 16 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{76, 220}, {382, 26}} + + YES + + -2076049856 + 2048 + + LucidaGrande + 13 + 1044 + + + 109199615 + 129 + + + 400 + 75 + + + (None) + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + OtherViews + + + + + 1 + YES + YES + 2 + + + + + 268 + {{77, 187}, {117, 17}} + + YES + + 68288064 + 272761856 + Not Logged In + + LucidaGrande + 11 + 3100 + + + + + + + + + 1292 + + {{439, 187}, {16, 16}} + + 28938 + 16 + 100 + + + + 268 + {{27, 191}, {43, 16}} + + YES + + 68288064 + 272630784 + Status + + + + + + + + + 268 + {{135, 139}, {92, 32}} + + YES + + 67239424 + 134479872 + Create New + + LucidaGrande + 9 + 3614 + + + -2038284033 + 129 + + LucidaGrande + 9 + 16 + + + + 200 + 25 + + + + + 268 + {{18, 117}, {211, 26}} + + YES + + 611450433 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 5 + YES + YES + YES + + + + + 274 + {15, 0} + + + YES + + + + 12 + 10 + 1000 + + 75628032 + 0 + + + + 3 + MC4zMzMzMzI5OQA + + + + + 338820672 + 1024 + + + YES + + 6 + System + controlBackgroundColor + + + + + 3 + YES + + + + 3 + 2 + + + 6 + System + gridColor + + 3 + MC41AA + + + 19 + tableViewAction: + -767524864 + + + 1 + 15 + 0 + YES + 0 + + + + + + + 268 + {{15, 147}, {103, 16}} + + YES + + 68288064 + 272630784 + Gallery + + + + + + + + + 268 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{244, 24}, {214, 142}} + + YES + + 130560 + 33554432 + 0 + 0 + 1 + YES + + YES + + + + 268 + {{13, 89}, {96, 28}} + + YES + + 604110336 + 134348800 + View Gallery + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{14, 176}, {459, 5}} + + {0, 0} + + 67239424 + 0 + Box + + + + 3 + MCAwLjgwMDAwMDAxAA + + + 3 + 2 + 0 + NO + + + {{1, 1}, {487, 256}} + + + + {{7, 9}, {489, 258}} + + {0, 0} + + 67239424 + 0 + + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 0 + NO + + + {{2, 2}, {510, 271}} + + + + {{17, 16}, {514, 275}} + + {0, 0} + + 67239424 + 0 + + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 3 + 0 + 0 + NO + YES + + + {528, 309} + + NSView + + + 23 + 2 + {{196, 315}, {455, 195}} + -1543503872 + Add Server + NSPanel + + {1.79769e+308, 1.79769e+308} + + + 256 + + + + 268 + {{124, 124}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + 6 + System + textColor + + + + + + + 268 + {{17, 126}, {102, 17}} + + YES + + 68288064 + 272630784 + Path to rpc.php + + + + + + + + + 268 + {{124, 92}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{124, 60}, {311, 22}} + + YES + + 343014976 + 272630784 + + + + YES + + + + NSAllRomanInputSourcesLocaleIdentifier + + + + + + 268 + {{17, 94}, {67, 17}} + + YES + + 68288064 + 272630784 + Username + + + + + + + + + 268 + {{17, 62}, {67, 17}} + + YES + + 68288064 + 272630784 + Password + + + + + + + + + 268 + {{17, 158}, {102, 17}} + + YES + + 68288064 + 272630784 + Nickname + + + + + + + + + 268 + {{124, 156}, {311, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + + + + + + 268 + {{345, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Save + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{244, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Cancel + + + -2038284033 + 129 + + + 200 + 25 + + + + {455, 195} + + + {{0, 0}, {1920, 1178}} + {1.79769e+308, 1.79769e+308} + + + 23 + 2 + {{196, 152}, {679, 358}} + -1543503872 + Servers + NSPanel + + {1.79769e+308, 1.79769e+308} + + + 256 + + + + 268 + {{568, 28}, {96, 28}} + + YES + + 67239424 + 134348800 + Done + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + + + + 2304 + + + + 256 + {626, 247} + + YES + + + 256 + {626, 17} + + + + + + 256 + {{627, 0}, {16, 17}} + + + + + nickname + 101 + 40 + 1000 + + 75628096 + 2048 + Server Name + + + 3 + MC4zMzMzMzI5OQA + + + 6 + System + headerTextColor + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + username + 141 + 40 + 1000 + + 75628096 + 2048 + Login Name + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + endpoint + 375 + 10 + 3.4028230607370965e+38 + + 75628096 + 2048 + URL + + + 6 + System + headerColor + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + + 17 + -700448768 + + + 4 + 15 + 0 + YES + 0 + + + {{1, 17}, {626, 247}} + + + + + 4 + + + + 256 + {{627, 17}, {15, 247}} + + + _doScroller: + 1 + 0.1947367936372757 + + + + 256 + {{1, 264}, {626, 15}} + + 1 + + _doScroller: + 0.9984050989151001 + + + + 2304 + + + + {{1, 0}, {626, 17}} + + + + + 4 + + + + {{20, 60}, {643, 280}} + + + 50 + + + + + + QSAAAEEgAABBmAAAQZgAAA + + + + 268 + {{15, 28}, {96, 28}} + + YES + + 67239424 + 134348800 + Remove + + + -2038284033 + 129 + + + 200 + 25 + + + + {679, 358} + + + {{0, 0}, {1920, 1178}} + {1.79769e+308, 1.79769e+308} + + + 23 + 2 + {{196, 183}, {480, 327}} + -1543503872 + Window + NSPanel + + {1.79769e+308, 1.79769e+308} + + + 256 + + + + 268 + {{370, 12}, {96, 32}} + + YES + + 67239424 + 134217728 + Close + + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + + + + 2304 + + + + 274 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + NSFilenamesPboardType + NSTypedFilenamesPboardType:'.SGI' + NSTypedFilenamesPboardType:'8BPS' + NSTypedFilenamesPboardType:'BMP ' + NSTypedFilenamesPboardType:'BMPf' + NSTypedFilenamesPboardType:'EPSF' + NSTypedFilenamesPboardType:'FPix' + NSTypedFilenamesPboardType:'GIFf' + NSTypedFilenamesPboardType:'ICO ' + NSTypedFilenamesPboardType:'JPEG' + NSTypedFilenamesPboardType:'PDF ' + NSTypedFilenamesPboardType:'PICT' + NSTypedFilenamesPboardType:'PNGf' + NSTypedFilenamesPboardType:'PNTG' + NSTypedFilenamesPboardType:'TIFF' + NSTypedFilenamesPboardType:'TPIC' + NSTypedFilenamesPboardType:'icns' + NSTypedFilenamesPboardType:'jp2 ' + NSTypedFilenamesPboardType:'qtif' + NSTypedFilenamesPboardType:3FR + NSTypedFilenamesPboardType:3fr + NSTypedFilenamesPboardType:ARW + NSTypedFilenamesPboardType:BMP + NSTypedFilenamesPboardType:CR2 + NSTypedFilenamesPboardType:CRW + NSTypedFilenamesPboardType:CUR + NSTypedFilenamesPboardType:DCR + NSTypedFilenamesPboardType:DNG + NSTypedFilenamesPboardType:EFX + NSTypedFilenamesPboardType:EPI + NSTypedFilenamesPboardType:EPS + NSTypedFilenamesPboardType:EPSF + NSTypedFilenamesPboardType:EPSI + NSTypedFilenamesPboardType:ERF + NSTypedFilenamesPboardType:EXR + NSTypedFilenamesPboardType:FAX + NSTypedFilenamesPboardType:FFF + NSTypedFilenamesPboardType:FPIX + NSTypedFilenamesPboardType:FPX + NSTypedFilenamesPboardType:G3 + NSTypedFilenamesPboardType:GIF + NSTypedFilenamesPboardType:HDR + NSTypedFilenamesPboardType:ICNS + NSTypedFilenamesPboardType:ICO + NSTypedFilenamesPboardType:JFAX + NSTypedFilenamesPboardType:JFX + NSTypedFilenamesPboardType:JP2 + NSTypedFilenamesPboardType:JPE + NSTypedFilenamesPboardType:JPEG + NSTypedFilenamesPboardType:JPF + NSTypedFilenamesPboardType:JPG + NSTypedFilenamesPboardType:MAC + NSTypedFilenamesPboardType:MOS + NSTypedFilenamesPboardType:MRW + NSTypedFilenamesPboardType:NEF + NSTypedFilenamesPboardType:NRW + NSTypedFilenamesPboardType:ORF + NSTypedFilenamesPboardType:PCT + NSTypedFilenamesPboardType:PDF + NSTypedFilenamesPboardType:PEF + NSTypedFilenamesPboardType:PIC + NSTypedFilenamesPboardType:PICT + NSTypedFilenamesPboardType:PNG + NSTypedFilenamesPboardType:PNT + NSTypedFilenamesPboardType:PNTG + NSTypedFilenamesPboardType:PS + NSTypedFilenamesPboardType:PSD + NSTypedFilenamesPboardType:PWL + NSTypedFilenamesPboardType:QTI + NSTypedFilenamesPboardType:QTIF + NSTypedFilenamesPboardType:RAF + NSTypedFilenamesPboardType:RAW + NSTypedFilenamesPboardType:RGB + NSTypedFilenamesPboardType:RW2 + NSTypedFilenamesPboardType:RWL + NSTypedFilenamesPboardType:SGI + NSTypedFilenamesPboardType:SR2 + NSTypedFilenamesPboardType:SRF + NSTypedFilenamesPboardType:TARGA + NSTypedFilenamesPboardType:TGA + NSTypedFilenamesPboardType:TIF + NSTypedFilenamesPboardType:TIFF + NSTypedFilenamesPboardType:XBM + NSTypedFilenamesPboardType:arw + NSTypedFilenamesPboardType:bmp + NSTypedFilenamesPboardType:cr2 + NSTypedFilenamesPboardType:crw + NSTypedFilenamesPboardType:cur + NSTypedFilenamesPboardType:dcr + NSTypedFilenamesPboardType:dng + NSTypedFilenamesPboardType:efx + NSTypedFilenamesPboardType:epi + NSTypedFilenamesPboardType:eps + NSTypedFilenamesPboardType:epsf + NSTypedFilenamesPboardType:epsi + NSTypedFilenamesPboardType:erf + NSTypedFilenamesPboardType:exr + NSTypedFilenamesPboardType:fax + NSTypedFilenamesPboardType:fff + NSTypedFilenamesPboardType:fpix + NSTypedFilenamesPboardType:fpx + NSTypedFilenamesPboardType:g3 + NSTypedFilenamesPboardType:gif + NSTypedFilenamesPboardType:hdr + NSTypedFilenamesPboardType:icns + NSTypedFilenamesPboardType:ico + NSTypedFilenamesPboardType:jfax + NSTypedFilenamesPboardType:jfx + NSTypedFilenamesPboardType:jp2 + NSTypedFilenamesPboardType:jpe + NSTypedFilenamesPboardType:jpeg + NSTypedFilenamesPboardType:jpf + NSTypedFilenamesPboardType:jpg + NSTypedFilenamesPboardType:mac + NSTypedFilenamesPboardType:mos + NSTypedFilenamesPboardType:mrw + NSTypedFilenamesPboardType:nef + NSTypedFilenamesPboardType:nrw + NSTypedFilenamesPboardType:orf + NSTypedFilenamesPboardType:pct + NSTypedFilenamesPboardType:pdf + NSTypedFilenamesPboardType:pef + NSTypedFilenamesPboardType:pic + NSTypedFilenamesPboardType:pict + NSTypedFilenamesPboardType:png + NSTypedFilenamesPboardType:pnt + NSTypedFilenamesPboardType:pntg + NSTypedFilenamesPboardType:ps + NSTypedFilenamesPboardType:psd + NSTypedFilenamesPboardType:pwl + NSTypedFilenamesPboardType:qti + NSTypedFilenamesPboardType:qtif + NSTypedFilenamesPboardType:raf + NSTypedFilenamesPboardType:raw + NSTypedFilenamesPboardType:rgb + NSTypedFilenamesPboardType:rw2 + NSTypedFilenamesPboardType:rwl + NSTypedFilenamesPboardType:sgi + NSTypedFilenamesPboardType:sr2 + NSTypedFilenamesPboardType:srf + NSTypedFilenamesPboardType:targa + NSTypedFilenamesPboardType:tga + NSTypedFilenamesPboardType:tif + NSTypedFilenamesPboardType:tiff + NSTypedFilenamesPboardType:xbm + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {423, 251} + + NO + YES + YES + YES + YES + NO + NO + YES + 100 + 100 + + + + + {{1, 1}, {423, 251}} + + + + + 6 + + + + 256 + {{424, 1}, {15, 251}} + + + _doScroller: + 1 + 0.96363627910614014 + + + + 256 + {{1, 252}, {423, 15}} + + 1 + + _doScroller: + 0.50602412223815918 + + + {{20, 60}, {440, 268}} + + + 50 + + + + QSAAAEEgAABCzQAAQvAAAA + + + {480, 327} + + + {{0, 0}, {1920, 1178}} + {1.79769e+308, 1.79769e+308} + + + + + + + settingsView + + + + 102 + + + + galleryCombo + + + + 120 + + + + mNewGalleryButton + + + + 123 + + + + mServersPopUp + + + + 124 + + + + spinner + + + + 125 + + + + statusLabel + + + + 126 + + + + defaultImageView + + + + 127 + + + + mServerSheetHostURL + + + + 179 + + + + mServerSheetPassword + + + + 180 + + + + mServerSheetServerNickName + + + + 181 + + + + mServerSheetUsername + + + + 182 + + + + newServerSheet + + + + 183 + + + + serverListPanel + + + + 184 + + + + serverTable + + + + 185 + + + + doAddServer: + + + + 224 + + + + doCancelAddServer: + + + + 225 + + + + clickViewGallery: + + + + 228 + + + + closeServerList: + + + + 229 + + + + removeServer: + + + + 230 + + + + clickServer: + + + + 231 + + + + viewGallery + + + + 269 + + + + showNewGallery: + + + + 270 + + + + mviewGallerySheet + + + + 271 + + + + closeGalleryView + + + + 335 + + + + closeGalleryView: + + + + 336 + + + + dataSource + + + + 337 + + + + browserView + + + + 339 + + + + dataSource + + + + 373 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 61 + + + + + + Settings View + + + 62 + + + + + + + + 128 + + + + + + Panel (Add Server) + + + 129 + + + + + + + + + + + + + + + + + 131 + + + + + + + + 132 + + + + + + + + 133 + + + + + + + + 134 + + + + + + + + 135 + + + + + + + + 136 + + + + + + + + 137 + + + + + + + + 138 + + + + + + + + 139 + + + + + + + + 140 + + + + + + + + 152 + + + + + + Panel (Servers) + + + 153 + + + + + + + + + + 155 + + + + + + + + 156 + + + + + + + + 157 + + + + + + + + + + + 159 + + + + + + + + + + 162 + + + + + + + + 167 + + + + + 163 + + + + + + + + 166 + + + + + 164 + + + + + + + + 165 + + + + + 171 + + + + + + GalleryView + + + 172 + + + + + + + + + 173 + + + + + + + + + + 176 + + + + + 174 + + + + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 396 + + + + + 397 + + + + + 398 + + + + + 399 + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 63 + + + + + + + + + + + + + + + + + + 93 + + + + + + + + 382 + + + + + 94 + + + + + + + + 383 + + + + + + + + 96 + + + + + + + + 97 + + + + + 91 + + + + + + + + 380 + + + + + 90 + + + + + 92 + + + + + + + + 381 + + + + + 66 + + + + + + + + 375 + + + + + 72 + + + + + + + + 378 + + + + + 71 + + + + + + + + 377 + + + + + 70 + + + + + + + + 376 + + + + + 73 + + + + + + + + 379 + + + + + 303 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + {{63, 887}, {455, 195}} + com.apple.InterfaceBuilder.CocoaPlugin + {{63, 887}, {455, 195}} + + 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 + + {{531, 793}, {679, 358}} + com.apple.InterfaceBuilder.CocoaPlugin + {{531, 793}, {679, 358}} + + 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 + + {{531, 801}, {480, 327}} + com.apple.InterfaceBuilder.CocoaPlugin + {{531, 801}, {480, 327}} + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.imagekit.ibplugin + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + + {{531, 790}, {528, 309}} + 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 + + + + + + + 403 + + + + + ApertureToAnselExportPlugin + NSObject + + id + id + id + id + 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 + ApertureToAnselExportPlugin.h + + + + ApertureToAnselExportPlugin + NSObject + + clickCancelConnect: + id + + + anselController + id + + + IBUserSource + + + + + FirstResponder + + IBUserSource + + + + + NSObject + + IBProjectSource + TURAnsel.h + + + + NSObject + + IBProjectSource + TURAnselGallery.h + + + + NSObject + + IBProjectSource + TURAnselGalleryPanelController.h + + + + NSObject + + IBUserSource + + + + + + + IKImageBrowserView + NSView + + id + id + id + NSScroller + NSScroller + + + IBFrameworkSource + ImageKit.framework/Headers/IKImageBrowserView.h + + + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSBox + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSBox.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSComboBox + NSTextField + + IBFrameworkSource + AppKit.framework/Headers/NSComboBox.h + + + + NSComboBoxCell + NSTextFieldCell + + IBFrameworkSource + AppKit.framework/Headers/NSComboBoxCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSImageCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSImageCell.h + + + + NSImageView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSImageView.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMenuItemCell + NSButtonCell + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItemCell.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + ImageKit.framework/Headers/IKSaveOptions.h + + + + NSObject + + IBFrameworkSource + ImageKit.framework/Headers/ImageKitDeprecated.h + + + + NSObject + + IBFrameworkSource + PDFKit.framework/Headers/PDFDocument.h + + + + NSObject + + IBFrameworkSource + PDFKit.framework/Headers/PDFView.h + + + + NSObject + + IBFrameworkSource + PluginManager.framework/Headers/PROAPIAccessing.h + + + + NSObject + + IBFrameworkSource + QuartzComposer.framework/Headers/QCCompositionParameterView.h + + + + NSObject + + IBFrameworkSource + QuartzComposer.framework/Headers/QCCompositionPickerView.h + + + + NSObject + + IBFrameworkSource + QuartzFilters.framework/Headers/QuartzFilterManager.h + + + + NSObject + + IBFrameworkSource + QuickLookUI.framework/Headers/QLPreviewPanel.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSPopUpButton + NSButton + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButton.h + + + + NSPopUpButtonCell + NSMenuItemCell + + IBFrameworkSource + AppKit.framework/Headers/NSPopUpButtonCell.h + + + + NSProgressIndicator + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSProgressIndicator.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSScrollView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSScrollView.h + + + + NSScroller + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSScroller.h + + + + NSSecureTextField + NSTextField + + IBFrameworkSource + AppKit.framework/Headers/NSSecureTextField.h + + + + NSSecureTextFieldCell + NSTextFieldCell + + + + NSTableColumn + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableColumn.h + + + + NSTableHeaderView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSTableHeaderView.h + + + + NSTableView + NSControl + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + + 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + ../ApertureToAnselExportPlugin.xcodeproj + 3 + + diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/info.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/info.nib deleted file mode 100644 index 35717405d..000000000 --- a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/info.nib +++ /dev/null @@ -1,22 +0,0 @@ - - - - - IBFramework Version - 672 - IBLastKnownRelativeProjectPath - ../ApertureToAnselExportPlugin.xcodeproj - IBOldestOS - 5 - IBOpenObjects - - 157 - 176 - 63 - - IBSystem Version - 9L30 - targetFramework - IBCocoaFramework - - diff --git a/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/keyedobjects.nib b/ApertureToAnselExportPlugin/English.lproj/ApertureToAnselExportPlugin.nib/keyedobjects.nib index 2a54fd6f39058aac626a7904a4d824b63da18f62..a8efc78148d6ff9563e2ee1f8cdab8d92f5c7992 100644 GIT binary patch literal 31713 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 literal 26932 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 + */ #import @class TURAnselGallery; diff --git a/ApertureToAnselExportPlugin/TURAnsel.m b/ApertureToAnselExportPlugin/TURAnsel.m index 75373ecdb..56ad2f77d 100644 --- a/ApertureToAnselExportPlugin/TURAnsel.m +++ b/ApertureToAnselExportPlugin/TURAnsel.m @@ -1,14 +1,15 @@ -// -// TURAnsel.m -// AnselCocoaToolkit -// -// Created by Michael Rubinsky on 10/31/08. -// Copyright 2008 Michael Rubinsky -// - +/** + * TURAnsel.m + * + * Main class for interacting with a remote Ansel server. + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import -#import "TURAnsel.h" -#import "TURAnselGallery.h" +#import "TURAnselKit.h" @interface TURAnsel (PrivateAPI) - (void)doLogin; @@ -21,7 +22,7 @@ @synthesize password; #pragma mark - -#pragma mark init +#pragma mark init/dealloc - (id)initWithConnectionParameters: (NSDictionary *)params { [super init]; @@ -50,14 +51,13 @@ [userAgent release]; [super dealloc]; } + #pragma mark - #pragma mark Actions - - (void)connect { [self doLogin]; } - - (void) cancel { state = TURAnselStateCancelled; @@ -73,21 +73,21 @@ - (NSDictionary *)createNewGallery: (NSDictionary *)params { NSArray *apiparams = [NSArray arrayWithObjects: @"ansel", params, nil]; - NSArray *order = [NSArray arrayWithObjects:@"scope", @"galleryparams", nil]; + NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, kTURAnselAPIParamGaleryParams, nil]; NSDictionary *response = [self callRPCMethod: @"images.createGallery" withParams: apiparams withOrder: order]; if (response) { - NSNumber *gallery_id = [response objectForKey: (NSString *)kWSMethodInvocationResult]; NSDictionary *results = [NSDictionary dictionaryWithObjectsAndKeys: - gallery_id, @"share_id", - [params valueForKey: @"name"], @"attribute_name", - @"", @"attribute_desc", - [NSNumber numberWithInt: 0], @"attribute_images", - [NSNumber numberWithInt: 0], @"attribute_default", nil]; + gallery_id, kTURAnselGalleryKeyId, + [params valueForKey: @"name"], kTURAnselGalleryKeyName, + @"", kTURAnselGalleryKeyDescription, + [NSNumber numberWithInt: 0], kTURAnselGalleryKeyImages, + [NSNumber numberWithInt: 0], kTURAnselGalleryKeyDefaultImage, nil]; + TURAnselGallery *newGallery = [[TURAnselGallery alloc] initWithObject: results controller: self]; [galleryList addObject: newGallery]; @@ -166,17 +166,30 @@ CFRelease(request); // Check out the results if (WSMethodResultIsFault((CFDictionaryRef) result)) { - NSNumber *faultCode = [result objectForKey: (NSString *)kWSFaultCode]; - NSString *faultString = [result objectForKey: (NSString *)kWSFaultString]; - NSLog(@"faultCode: %@ faultString: %@", faultCode, faultString); - if ([[self delegate] respondsToSelector: @selector(TURAnselHadError:)]) { - NSError *error = [NSError errorWithDomain:@"TURAnsel" - code:[faultCode intValue] - userInfo:[NSDictionary dictionaryWithObjectsAndKeys: faultString, @"message", nil]]; + NSError *error; + + CFHTTPMessageRef response = (CFHTTPMessageRef)[result objectForKey:(id)kWSHTTPResponseMessage]; + int resStatusCode = CFHTTPMessageGetResponseStatusCode(response); + NSString *resStatusLine = (NSString *)CFHTTPMessageCopyResponseStatusLine(response); + if (resStatusCode == 401) { + error = [NSError errorWithDomain: @"TURAnsel" + code: resStatusCode + userInfo: [NSDictionary dictionaryWithObjectsAndKeys: resStatusLine, @"NSLocalizedDescriptionKey", nil]]; + } else { + NSNumber *faultCode = [result objectForKey: (NSString *)kWSFaultCode]; + NSString *faultString = [result objectForKey: (NSString *)kWSFaultString]; + NSLog(@"faultCode: %@ faultString: %@", faultCode, faultString); + error = [NSError errorWithDomain: @"TURAnsel" + code: [faultCode intValue] + userInfo: [NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat: @"%@, %@", resStatusLine, faultString], @"NSLocalizedDescriptionKey", nil]]; + - [[self delegate] TURAnselHadError:error]; + } + if ([[self delegate] respondsToSelector: @selector(TURAnselHadError:)]) { + [[self delegate] TURAnselHadError: error]; } + [resStatusLine release]; [result autorelease]; return nil; } @@ -269,7 +282,11 @@ [NSNumber numberWithInt: 0], // Count [self valueForKey:@"username"], nil]; // Restrict to user (This should be an option eventually). - NSArray *order = [NSArray arrayWithObjects: @"scope", @"perms", @"parent", @"levels", @"offset", @"count", @"useronly", nil]; + NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, kTURAnselAPIParamPerms, + kTURAnselAPIParamParent, kTURAnselAPIParamAllLevels, + kTURAnselAPIParamOffset, kTURAnselAPIParamCount, + kTURAnselAPIParamUserOnly, nil]; + NSDictionary *results = [self callRPCMethod: @"images.listGalleries" withParams: params withOrder: order]; @@ -295,5 +312,4 @@ [params release]; } - -@end +@end \ No newline at end of file diff --git a/ApertureToAnselExportPlugin/TURAnselConstants.h b/ApertureToAnselExportPlugin/TURAnselConstants.h new file mode 100644 index 000000000..ef64dc77a --- /dev/null +++ b/ApertureToAnselExportPlugin/TURAnselConstants.h @@ -0,0 +1,33 @@ +/** + * TURAnselConstants + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ + +// Constants for the API parameter names. +extern NSString * const kTURAnselAPIParamScope; +extern NSString * const kTURAnselAPIParamGaleryParams; +extern NSString * const kTURAnselAPIParamPerms; +extern NSString * const kTURAnselAPIParamParent; +extern NSString * const kTURAnselAPIParamAllLevels; +extern NSString * const kTURAnselAPIParamOffset; +extern NSString * const kTURAnselAPIParamCount; +extern NSString * const kTURAnselAPIParamUserOnly; +extern NSString * const kTURAnselAPIParamImageId; +extern NSString * const kTURAnselAPIParamGalleryId; +extern NSString * const kTURAnselAPIParamThumbnailStyle; +extern NSString * const kTURAnselAPIParamFullPath; +extern NSString * const kTURAnselAPIParamImageData; +extern NSString * const kTURAnselAPIParamSetAsDefault; +extern NSString * const kTURAnselAPIParamAdditionalData; +extern NSString * const kTURAnselAPIParamEncoding; + +// Constants for the dictionary keys used to describe/create TURAnselGallery +extern NSString * const kTURAnselGalleryKeyId; +extern NSString * const kTURAnselGalleryKeyName; +extern NSString * const kTURAnselGalleryKeyDescription; +extern NSString * const kTURAnselGalleryKeyImages; +extern NSString * const kTURAnselGalleryKeyDefaultImage; diff --git a/ApertureToAnselExportPlugin/TURAnselConstants.m b/ApertureToAnselExportPlugin/TURAnselConstants.m new file mode 100644 index 000000000..74472bb5f --- /dev/null +++ b/ApertureToAnselExportPlugin/TURAnselConstants.m @@ -0,0 +1,34 @@ +// +// TURAnselConstants.m +// ApertureToAnselExportPlugin +// +// Created by Michael Rubinsky on 9/22/09. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import "TURAnselConstants.h" + +// Constants for the API parameter names. +NSString * const kTURAnselAPIParamScope = @"scope"; +NSString * const kTURAnselAPIParamGaleryParams = @"galleryParams"; +NSString * const kTURAnselAPIParamPerms = @"perms"; +NSString * const kTURAnselAPIParamParent = @"parent"; +NSString * const kTURAnselAPIParamAllLevels = @"allLevels"; +NSString * const kTURAnselAPIParamOffset = @"offset"; +NSString * const kTURAnselAPIParamCount = @"count"; +NSString * const kTURAnselAPIParamUserOnly = @"userOnly"; +NSString * const kTURAnselAPIParamImageId = @"imageId"; +NSString * const kTURAnselAPIParamGalleryId = @"galleryId"; +NSString * const kTURAnselAPIParamThumbnailStyle = @"thumbnailStyle"; +NSString * const kTURAnselAPIParamFullPath = @"fullPath"; +NSString * const kTURAnselAPIParamImageData = @"imageData"; +NSString * const kTURAnselAPIParamSetAsDefault = @"default"; +NSString * const kTURAnselAPIParamAdditionalData = @"additionalData"; +NSString * const kTURAnselAPIParamEncoding = @"encoding"; + +// Ansel gallery attribtues. +NSString * const kTURAnselGalleryKeyId = @"share_id"; +NSString * const kTURAnselGalleryKeyName = @"attribute_name"; +NSString * const kTURAnselGalleryKeyDescription = @"attribute_desc"; +NSString * const kTURAnselGalleryKeyImages = @"attribute_images"; +NSString * const kTURAnselGalleryKeyDefaultImage = @"attribute_default"; \ No newline at end of file diff --git a/ApertureToAnselExportPlugin/TURAnselGallery.h b/ApertureToAnselExportPlugin/TURAnselGallery.h index 7c6933b9b..5eff4e79b 100644 --- a/ApertureToAnselExportPlugin/TURAnselGallery.h +++ b/ApertureToAnselExportPlugin/TURAnselGallery.h @@ -1,19 +1,13 @@ -// -// TURAnselGallery.h -// -// Class to wrap Ansel Gallery. -// -// Created by Michael Rubinsky on 10/21/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// - +/** + * TURAnselGallery + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import -@class TURAnsel, NSURL, XMLRPCResponse; - -typedef enum { - TURAnselGalleryStateReady = 0, - TURAnselGalleryStateBusy -} TURAnselGalleryState; +@class TURAnsel, NSURL; @interface NSObject (TURAnselGalleryDelegate) - (void)TURAnselGalleryDidUploadImage: (id *)gallery; @@ -28,7 +22,6 @@ typedef enum { NSString *galleryName; NSString *galleryDescription; TURAnsel *anselController; - TURAnselGalleryState state; id delegate; } @property (readonly) NSString *galleryName; @@ -45,7 +38,5 @@ typedef enum { - (NSURL *)galleryKeyImageURL; - (id)listImages; - (int)galleryId; -- (TURAnselGalleryState) state; -- (void)setState: (TURAnselGalleryState)theState; - (void)setAnselController:(TURAnsel *)newController; @end \ No newline at end of file diff --git a/ApertureToAnselExportPlugin/TURAnselGallery.m b/ApertureToAnselExportPlugin/TURAnselGallery.m index cd3c87350..9397b107d 100644 --- a/ApertureToAnselExportPlugin/TURAnselGallery.m +++ b/ApertureToAnselExportPlugin/TURAnselGallery.m @@ -1,13 +1,13 @@ -// -// TURAnselGallery.m -// Class wraps an Ansel Gallery -// -// Created by Michael Rubinsky on 10/21/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// +/** + * TURAnselGallery.m + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import -#import "TURAnsel.h" -#import "TURAnselGallery.h" +#import "TURAnselKit.h" @interface TURAnselGallery (PrivateAPI) - (void)doUpload: (NSDictionary *)imageParams; @@ -21,28 +21,26 @@ @synthesize galleryKeyImage; #pragma mark - -#pragma mark init - +#pragma mark init/dealloc /** * Init a gallery object */ - (id)initWithObject:(id)galleryData controller:(TURAnsel *)controller { [super init]; - [self setValue: [galleryData valueForKey:@"share_id"] + [self setValue: [galleryData valueForKey: kTURAnselGalleryKeyId] forKey: @"galleryId"]; - [self setValue:[galleryData valueForKey:@"attribute_desc"] + [self setValue:[galleryData valueForKey: kTURAnselGalleryKeyDescription] forKey:@"galleryDescription"]; - [self setValue:[galleryData valueForKey:@"attribute_name"] + [self setValue:[galleryData valueForKey: kTURAnselGalleryKeyName] forKey:@"galleryName"]; - [self setValue: [galleryData valueForKey:@"attribute_images"] + [self setValue: [galleryData valueForKey: kTURAnselGalleryKeyImages] forKey:@"galleryImageCount"]; - [self setValue: [galleryData valueForKey:@"attribute_default"] + [self setValue: [galleryData valueForKey: kTURAnselGalleryKeyDefaultImage] forKey:@"galleryKeyImage"]; [self setAnselController: controller]; return self; } - - (void)dealloc { NSLog(@"TURAnselGallery dealloc called on Gallery %@", self); @@ -81,7 +79,12 @@ @"thumb", // Thumbnail type [NSNumber numberWithBool:YES], // Full path nil]; - NSArray *order = [NSArray arrayWithObjects: @"scope", @"image_id", @"thumbnail", @"path", nil]; + + NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, + kTURAnselAPIParamImageId, + kTURAnselAPIParamThumbnailStyle, + kTURAnselAPIParamFullPath, nil]; + NSDictionary *response = [anselController callRPCMethod: @"images.getImageUrl" withParams: params withOrder: order]; @@ -96,7 +99,6 @@ return nil; } - } /** @@ -113,7 +115,12 @@ @"thumb", // Thumbnail [NSNumber numberWithBool:YES], // Full path nil]; - NSArray *order = [NSArray arrayWithObjects: @"scope", @"gallery_id", @"perms", @"thumnail", @"path", nil]; + NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, + kTURAnselAPIParamGalleryId, + kTURAnselAPIParamPerms, + kTURAnselAPIParamThumbnailStyle, + kTURAnselAPIParamFullPath, nil]; + NSDictionary *response = [anselController callRPCMethod: @"images.listImages" withParams: params withOrder: order]; @@ -144,6 +151,7 @@ { return _galleryId; } + - (void)setGalleryId:(int)id { _galleryId = id; @@ -153,20 +161,12 @@ { return delegate; } + - (void)setDelegate: (id)newDelegate { delegate = newDelegate; } -- (TURAnselGalleryState)state -{ - return state; -} -- (void)setState: (TURAnselGalleryState)theState -{ - state = theState; -} - - (void)setAnselController: (TURAnsel *)newController { [anselController autorelease]; @@ -191,7 +191,12 @@ @"", // Additional gallery data to set? @"base64", // Image data encoding nil]; - NSArray *order = [NSArray arrayWithObjects: @"scope", @"gallery_id", @"data", @"default", @"additional_data", @"encoding", nil]; + NSArray *order = [NSArray arrayWithObjects: kTURAnselAPIParamScope, + kTURAnselAPIParamGalleryId, + kTURAnselAPIParamImageData, + kTURAnselAPIParamSetAsDefault, + kTURAnselAPIParamAdditionalData, + kTURAnselAPIParamEncoding, nil]; // Send the request up to the controller NSDictionary *result = [anselController callRPCMethod: @"images.saveImage" diff --git a/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.h b/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.h index 9e2f612b2..b0a8f2e66 100644 --- a/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.h +++ b/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.h @@ -1,13 +1,13 @@ -// -// TURAnselGalleryPanelController.h -// iPhoto2Ansel -// -// Created by Michael Rubinsky on 12/7/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// - +/** + * TURAnselGalleryPanelController + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import -#import "TURAnsel.h" +#import "TURAnselKit.h" @interface NSObject (TURAnselGalleryPaneControllerDelegate) -(void)TURAnselGalleryPanelDidAddGallery; @@ -20,9 +20,10 @@ IBOutlet NSTextField *galleryDescTextField; IBOutlet NSPanel *newGallerySheet; - TURAnsel *anselController; - NSWindow *controllerWindow; - id delegate; + // Instance members + TURAnsel *_anselController; + NSWindow *_controllerWindow; + id _delegate; } // Actions diff --git a/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.m b/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.m index baff799ba..09aa6c5ae 100644 --- a/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.m +++ b/ApertureToAnselExportPlugin/TURAnselGalleryPanelController.m @@ -1,15 +1,49 @@ -// -// TURAnselGalleryPanelController.m -// iPhoto2Ansel -// -// Created by Michael Rubinsky on 12/7/08. -// Copyright 2008 __MyCompanyName__. All rights reserved. -// - +/** + * TURAnselGalleryPanelController.m + * + * Controller for handling the form that creates new remote Ansel galleries. + * + * Copyright 2009 The Horde Project (http://www.horde.org) + * + * @license http://opensource.org/licenses/bsd-license.php + * @author Michael J. Rubinsky + */ #import "TURAnselGalleryPanelController.h" @implementation TURAnselGalleryPanelController +#pragma mark - +#pragma mark init/dealloc +-(id)initWithController: (TURAnsel *)theController +{ + [super init]; + _anselController = [theController retain]; + [NSBundle loadNibNamed: @"AnselGalleryPanel" + owner: self]; + + return self; +} +- (id)initWithController: (TURAnsel *)theController + withGalleryName: (NSString *)galleryName +{ + + [super init]; + _anselController = [theController retain]; + [NSBundle loadNibNamed: @"AnselGalleryPanel" + owner: self]; + + [galleryNameTextField setStringValue: galleryName]; + + return self; +} +- (void)dealloc +{ + [_anselController release]; + [_controllerWindow release]; + [super dealloc]; +} + +#pragma mark - #pragma mark IBActions - (IBAction)cancelNewGallery: (id)sender { @@ -32,7 +66,7 @@ NSAlert *alert = [[NSAlert alloc] init]; [alert setMessageText:@"Gallery names cannot be empty"]; [alert setAlertStyle: NSCriticalAlertStyle]; - [alert beginSheetModalForWindow: controllerWindow + [alert beginSheetModalForWindow: _controllerWindow modalDelegate: nil didEndSelector: nil contextInfo: nil]; @@ -44,63 +78,38 @@ gallerySlug, @"slug", galleryDescription, @"desc", nil]; - NSDictionary *results = [[anselController createNewGallery: params] retain]; + NSDictionary *results = [[_anselController createNewGallery: params] retain]; [NSApp endSheet: newGallerySheet]; [newGallerySheet orderOut: nil]; - if ([anselController state] != TURAnselStateError) { + if ([_anselController state] != TURAnselStateError) { NSAlert *alert = [[NSAlert alloc] init]; [alert setMessageText: @"Gallery successfully created."]; - [alert beginSheetModalForWindow: controllerWindow + [alert beginSheetModalForWindow: _controllerWindow modalDelegate: nil didEndSelector: nil contextInfo: nil]; [alert release]; - if ([delegate respondsToSelector:@selector(TURAnselGalleryPanelDidAddGallery)]) { - [delegate TURAnselGalleryPanelDidAddGallery]; + if ([_delegate respondsToSelector:@selector(TURAnselGalleryPanelDidAddGallery)]) { + [_delegate TURAnselGalleryPanelDidAddGallery]; } } [results release]; } --(id)initWithController: (TURAnsel *)theController -{ - [super init]; - anselController = [theController retain]; - [NSBundle loadNibNamed: @"AnselGalleryPanel" - owner: self]; - - return self; -} - -- (id)initWithController: (TURAnsel *)theController - withGalleryName: (NSString *)galleryName -{ - - [super init]; - anselController = [theController retain]; - [NSBundle loadNibNamed: @"AnselGalleryPanel" - owner: self]; - - [galleryNameTextField setStringValue: galleryName]; - - return self; - - -} - (void)setDelegate: (id)theDelegate { - delegate = theDelegate; // weak + _delegate = theDelegate; // weak } - (void)showSheetForWindow: (NSWindow *)theWindow { - [controllerWindow release]; - controllerWindow = [theWindow retain]; + [_controllerWindow release]; + _controllerWindow = [theWindow retain]; [NSApp beginSheet: newGallerySheet modalForWindow: theWindow modalDelegate: nil @@ -108,11 +117,4 @@ contextInfo: nil]; } -- (void)dealloc -{ - [anselController release]; - [controllerWindow release]; - [super dealloc]; -} - @end diff --git a/ApertureToAnselExportPlugin/TURAnselKit.h b/ApertureToAnselExportPlugin/TURAnselKit.h new file mode 100644 index 000000000..7a4277a8a --- /dev/null +++ b/ApertureToAnselExportPlugin/TURAnselKit.h @@ -0,0 +1,4 @@ +#import "TURAnselConstants.h" +#import "TURAnsel.h" +#import "TURAnselGallery.h" + -- 2.11.0