diff options
| -rw-r--r-- | Info.plist | 2 | ||||
| -rw-r--r-- | QSDeliciousPlugIn.xcodeproj/project.pbxproj | 8 | ||||
| -rw-r--r-- | QSDeliciousPlugInSource.nib/classes.nib | 45 | ||||
| -rw-r--r-- | QSDeliciousPlugInSource.nib/designable.nib | 930 | ||||
| -rw-r--r-- | QSDeliciousPlugInSource.nib/info.nib | 16 | ||||
| -rw-r--r-- | QSDeliciousPlugInSource.nib/keyedobjects.nib | bin | 7815 -> 9343 bytes | |||
| -rw-r--r-- | QSDeliciousPlugIn_Source.h | 4 | ||||
| -rw-r--r-- | QSDeliciousPlugIn_Source.m | 351 |
8 files changed, 1172 insertions, 184 deletions
@@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleVersion</key> - <string>94</string> + <string>130</string> <key>NSPrincipalClass</key> <string>QSDeliciousPlugIn</string> <key>QSPlugIn</key> diff --git a/QSDeliciousPlugIn.xcodeproj/project.pbxproj b/QSDeliciousPlugIn.xcodeproj/project.pbxproj index 03b9ea3..c6b5bd2 100644 --- a/QSDeliciousPlugIn.xcodeproj/project.pbxproj +++ b/QSDeliciousPlugIn.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 28855EDF1207EA17003DC758 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28855EDE1207EA17003DC758 /* Security.framework */; }; 7F8AD05107F2503600011548 /* QSDeliciousPlugInSource.nib in Resources */ = {isa = PBXBuildFile; fileRef = 7F8AD05007F2503600011548 /* QSDeliciousPlugInSource.nib */; }; 7F9441A10803A9D9007EDC31 /* QSObjectSource.name.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F9441A00803A9D9007EDC31 /* QSObjectSource.name.strings */; }; 7FB0DC1A0B91FF8600A5B6FF /* bookmark_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 7FB0DC190B91FF8600A5B6FF /* bookmark_icon.png */; }; @@ -30,11 +31,12 @@ 14A6EB3E10CFFC79000B05B4 /* QSPlugIn_Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = QSPlugIn_Release.xcconfig; sourceTree = "<group>"; }; 14A6EB3F10CFFC79000B05B4 /* QSPlugIn.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = QSPlugIn.xcconfig; sourceTree = "<group>"; }; 14A6EB4010CFFC79000B05B4 /* Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; + 28855EDE1207EA17003DC758 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 7F8AD05007F2503600011548 /* QSDeliciousPlugInSource.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = QSDeliciousPlugInSource.nib; sourceTree = "<group>"; }; 7F9441A00803A9D9007EDC31 /* QSObjectSource.name.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = QSObjectSource.name.strings; sourceTree = "<group>"; }; 7FB0DC190B91FF8600A5B6FF /* bookmark_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = bookmark_icon.png; sourceTree = "<group>"; }; - 7FB0DC2D0B91FFC500A5B6FF /* QSCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSCore.framework; sourceTree = "<group>"; }; - 7FB0DC2E0B91FFC600A5B6FF /* QSFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QSFoundation.framework; sourceTree = "<group>"; }; + 7FB0DC2D0B91FFC500A5B6FF /* QSCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QSCore.framework; path = /Applications/Quicksilver.app/Contents/Frameworks/QSCore.framework; sourceTree = "<absolute>"; }; + 7FB0DC2E0B91FFC600A5B6FF /* QSFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QSFoundation.framework; path = /Applications/Quicksilver.app/Contents/Frameworks/QSFoundation.framework; sourceTree = "<absolute>"; }; 8D1AC9730486D14A00FE50C9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; 8D1AC9740486D14A00FE50C9 /* Social Bookmarks.qsplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Social Bookmarks.qsplugin"; sourceTree = BUILT_PRODUCTS_DIR; }; DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; @@ -55,6 +57,7 @@ E182BE5B06FC9C46007BF2C2 /* PreferencePanes.framework in Frameworks */, 7FB0DC2F0B91FFC600A5B6FF /* QSCore.framework in Frameworks */, 7FB0DC300B91FFC600A5B6FF /* QSFoundation.framework in Frameworks */, + 28855EDF1207EA17003DC758 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -114,6 +117,7 @@ 7FB0DC2E0B91FFC600A5B6FF /* QSFoundation.framework */, E182BE5A06FC9C46007BF2C2 /* PreferencePanes.framework */, DD92D38A0106425D02CA0E72 /* Cocoa.framework */, + 28855EDE1207EA17003DC758 /* Security.framework */, ); name = Frameworks; sourceTree = "<group>"; diff --git a/QSDeliciousPlugInSource.nib/classes.nib b/QSDeliciousPlugInSource.nib/classes.nib deleted file mode 100644 index 9ea8de6..0000000 --- a/QSDeliciousPlugInSource.nib/classes.nib +++ /dev/null @@ -1,45 +0,0 @@ -{ - IBClasses = ( - {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, - {CLASS = NSObject; LANGUAGE = ObjC; }, - { - CLASS = NSPreferencePane; - LANGUAGE = ObjC; - OUTLETS = { - "_firstKeyView" = NSView; - "_initialKeyView" = NSView; - "_lastKeyView" = NSView; - "_window" = NSWindow; - }; - SUPERCLASS = NSObject; - }, - { - CLASS = QSAllApplicationsObjectSource; - LANGUAGE = ObjC; - SUPERCLASS = QSObjectSource; - }, - { - ACTIONS = {savePassword = id; }; - CLASS = "QSDeliciousPlugIn_Source"; - LANGUAGE = ObjC; - OUTLETS = {passField = NSTextField; userField = NSTextField; }; - SUPERCLASS = QSObjectSource; - }, - { - ACTIONS = {savePassword = id; }; - CLASS = QSDeliciousPrefPane; - LANGUAGE = ObjC; - OUTLETS = {passField = NSTextField; userField = NSTextField; }; - SUPERCLASS = NSPreferencePane; - }, - {CLASS = QSGroupObjectSource; LANGUAGE = ObjC; SUPERCLASS = QSObjectSource; }, - { - CLASS = QSObjectSource; - LANGUAGE = ObjC; - OUTLETS = {settingsView = NSView; }; - SUPERCLASS = NSObject; - }, - {CLASS = QSVolumesObjectSource; LANGUAGE = ObjC; SUPERCLASS = QSObjectSource; } - ); - IBVersion = 1; -}
\ No newline at end of file diff --git a/QSDeliciousPlugInSource.nib/designable.nib b/QSDeliciousPlugInSource.nib/designable.nib new file mode 100644 index 0000000..030965a --- /dev/null +++ b/QSDeliciousPlugInSource.nib/designable.nib @@ -0,0 +1,930 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> + <data> + <int key="IBDocument.SystemTarget">1060</int> + <string key="IBDocument.SystemVersion">10F569</string> + <string key="IBDocument.InterfaceBuilderVersion">762</string> + <string key="IBDocument.AppKitVersion">1038.29</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> + <bool key="EncodedWithXMLCoder">YES</bool> + <integer value="6"/> + </object> + <reference key="IBDocument.PluginDependencies" ref="0"/> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <object class="NSMutableArray" key="IBDocument.RootObjects" id="791608857"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSCustomObject" id="755236013"> + <string key="NSClassName">QSDeliciousPlugIn_Source</string> + </object> + <object class="NSCustomObject" id="949435413"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1037187928"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="523381760"> + <int key="NSWindowStyleMask">15</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{62, 510}, {270, 151}}</string> + <int key="NSWTFlags">1886912512</int> + <object class="NSMutableString" key="NSWindowTitle"> + <characters key="NS.bytes">Window</characters> + </object> + <string key="NSWindowClass">NSWindow</string> + <object class="NSMutableString" key="NSViewClass"> + <characters key="NS.bytes">View</characters> + </object> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> + <string key="NSWindowContentMinSize">{213, 107}</string> + <object class="NSView" key="NSWindowView" id="246154705"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <object class="NSMutableArray" key="NSSubviews"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSTextField" id="220887054"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{89, 85}, {150, 19}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="388661522"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">4326400</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport" id="26"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">11</double> + <int key="NSfFlags">3100</int> + </object> + <reference key="NSControlView" ref="220887054"/> + <bool key="NSDrawsBackground">YES</bool> + <object class="NSColor" key="NSBackgroundColor" id="251902835"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="941678540"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <object class="NSColor" key="NSColor" id="697840755"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + </object> + <object class="NSTextField" id="487755233"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{6, 88}, {78, 14}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="837401498"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">71434240</int> + <string key="NSContents">Name:</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="487755233"/> + <object class="NSColor" key="NSBackgroundColor" id="685423289"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="690248854"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <reference key="NSColor" ref="697840755"/> + </object> + </object> + </object> + <object class="NSTextField" id="697429448"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{6, 61}, {78, 14}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="314007513"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">71434240</int> + <string key="NSContents">Password:</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="697429448"/> + <reference key="NSBackgroundColor" ref="685423289"/> + <reference key="NSTextColor" ref="690248854"/> + </object> + </object> + <object class="NSTextField" id="932260227"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">266</int> + <string key="NSFrame">{{89, 58}, {150, 19}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="574259110"> + <int key="NSCellFlags">-1804468671</int> + <int key="NSCellFlags2">4326400</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="932260227"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="251902835"/> + <reference key="NSTextColor" ref="941678540"/> + </object> + </object> + <object class="NSButton" id="1030464026"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{86, 34}, {87, 18}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="11812574"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">131072</int> + <string key="NSContents">Include tags</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="1030464026"/> + <int key="NSButtonFlags">1211912703</int> + <int key="NSButtonFlags2">2</int> + <object class="NSButtonImageSource" key="NSAlternateImage"> + <string key="NSImageName">NSSwitch</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSPopUpButton" id="583724646"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{86, 113}, {126, 26}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSPopUpButtonCell" key="NSCell" id="986910851"> + <int key="NSCellFlags">-2076049856</int> + <int key="NSCellFlags2">2048</int> + <object class="NSFont" key="NSSupport"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="583724646"/> + <int key="NSButtonFlags">109199615</int> + <int key="NSButtonFlags2">1</int> + <object class="NSFont" key="NSAlternateImage"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">16</int> + </object> + <string key="NSAlternateContents"/> + <object class="NSMutableString" key="NSKeyEquivalent"> + <characters key="NS.bytes"/> + </object> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + <object class="NSMenuItem" key="NSMenuItem" id="842183426"> + <reference key="NSMenu" ref="396821977"/> + <string key="NSTitle">del.icio.us</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <int key="NSState">1</int> + <object class="NSCustomResource" key="NSOnImage" id="596243717"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="117193000"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">_popUpItemAction:</string> + <reference key="NSTarget" ref="986910851"/> + </object> + <bool key="NSMenuItemRespectAlignment">YES</bool> + <object class="NSMenu" key="NSMenu" id="396821977"> + <object class="NSMutableString" key="NSTitle"> + <characters key="NS.bytes">OtherViews</characters> + </object> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="842183426"/> + <object class="NSMenuItem" id="174640103"> + <reference key="NSMenu" ref="396821977"/> + <string key="NSTitle">ma.gnolia</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="596243717"/> + <reference key="NSMixedImage" ref="117193000"/> + <string key="NSAction">_popUpItemAction:</string> + <int key="NSTag">1</int> + <reference key="NSTarget" ref="986910851"/> + </object> + <object class="NSMenuItem" id="257964281"> + <reference key="NSMenu" ref="396821977"/> + <string key="NSTitle">pinboard.in</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="596243717"/> + <reference key="NSMixedImage" ref="117193000"/> + <string key="NSAction">_popUpItemAction:</string> + <int key="NSTag">2</int> + <reference key="NSTarget" ref="986910851"/> + </object> + </object> + </object> + <int key="NSPreferredEdge">3</int> + <bool key="NSUsesItemFromMenu">YES</bool> + <bool key="NSAltersState">YES</bool> + <int key="NSArrowPosition">1</int> + </object> + </object> + <object class="NSTextField" id="397416172"> + <reference key="NSNextResponder" ref="246154705"/> + <int key="NSvFlags">264</int> + <string key="NSFrame">{{6, 119}, {78, 14}}</string> + <reference key="NSSuperview" ref="246154705"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="816301873"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">71434240</int> + <string key="NSContents">Site:</string> + <reference key="NSSupport" ref="26"/> + <reference key="NSControlView" ref="397416172"/> + <reference key="NSBackgroundColor" ref="685423289"/> + <reference key="NSTextColor" ref="690248854"/> + </object> + </object> + </object> + <string key="NSFrameSize">{270, 151}</string> + <reference key="NSSuperview"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1024, 746}}</string> + <string key="NSMinSize">{213, 129}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> + </object> + <object class="NSObjectController" id="1002997712"> + <object class="NSMutableArray" key="NSDeclaredKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>username</string> + <string>includeTags</string> + <string>site</string> + </object> + <bool key="NSEditable">YES</bool> + <object class="_NSManagedProxy" key="_NSManagedProxy"/> + </object> + </object> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <object class="NSMutableArray" key="connectionRecords"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">nextKeyView</string> + <reference key="source" ref="220887054"/> + <reference key="destination" ref="932260227"/> + </object> + <int key="connectionID">56</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">nextKeyView</string> + <reference key="source" ref="932260227"/> + <reference key="destination" ref="220887054"/> + </object> + <int key="connectionID">57</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">userField</string> + <reference key="source" ref="755236013"/> + <reference key="destination" ref="220887054"/> + </object> + <int key="connectionID">65</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">passField</string> + <reference key="source" ref="755236013"/> + <reference key="destination" ref="932260227"/> + </object> + <int key="connectionID">66</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">settingsView</string> + <reference key="source" ref="755236013"/> + <reference key="destination" ref="246154705"/> + </object> + <int key="connectionID">69</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.username</string> + <reference key="source" ref="220887054"/> + <reference key="destination" ref="1002997712"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="220887054"/> + <reference key="NSDestination" ref="1002997712"/> + <string key="NSLabel">value: selection.username</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.username</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">82</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: selection.includeTags</string> + <reference key="source" ref="1030464026"/> + <reference key="destination" ref="1002997712"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="1030464026"/> + <reference key="NSDestination" ref="1002997712"/> + <string key="NSLabel">value: selection.includeTags</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">selection.includeTags</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">84</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">value: currentPassword</string> + <reference key="source" ref="932260227"/> + <reference key="destination" ref="755236013"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="932260227"/> + <reference key="NSDestination" ref="755236013"/> + <string key="NSLabel">value: currentPassword</string> + <string key="NSBinding">value</string> + <string key="NSKeyPath">currentPassword</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">85</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">contentObject: selection.info</string> + <reference key="source" ref="1002997712"/> + <reference key="destination" ref="755236013"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="1002997712"/> + <reference key="NSDestination" ref="755236013"/> + <string key="NSLabel">contentObject: selection.info</string> + <string key="NSBinding">contentObject</string> + <string key="NSKeyPath">selection.info</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">91</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBBindingConnection" key="connection"> + <string key="label">selectedTag: selection.site</string> + <reference key="source" ref="583724646"/> + <reference key="destination" ref="1002997712"/> + <object class="NSNibBindingConnector" key="connector"> + <reference key="NSSource" ref="583724646"/> + <reference key="NSDestination" ref="1002997712"/> + <string key="NSLabel">selectedTag: selection.site</string> + <string key="NSBinding">selectedTag</string> + <string key="NSKeyPath">selection.site</string> + <int key="NSNibBindingConnectorVersion">2</int> + </object> + </object> + <int key="connectionID">98</int> + </object> + </object> + <object class="IBMutableOrderedSet" key="objectRecords"> + <object class="NSArray" key="orderedObjects"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <reference key="object" ref="0"/> + <reference key="children" ref="791608857"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="755236013"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="949435413"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="523381760"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="246154705"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">Window</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">6</int> + <reference key="object" ref="246154705"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="220887054"/> + <reference ref="487755233"/> + <reference ref="697429448"/> + <reference ref="932260227"/> + <reference ref="1030464026"/> + <reference ref="583724646"/> + <reference ref="397416172"/> + </object> + <reference key="parent" ref="523381760"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">50</int> + <reference key="object" ref="220887054"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="388661522"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">51</int> + <reference key="object" ref="487755233"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="837401498"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">52</int> + <reference key="object" ref="697429448"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="314007513"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">53</int> + <reference key="object" ref="932260227"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="574259110"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">70</int> + <reference key="object" ref="1030464026"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="11812574"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">92</int> + <reference key="object" ref="583724646"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="986910851"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">99</int> + <reference key="object" ref="397416172"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="816301873"/> + </object> + <reference key="parent" ref="246154705"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">75</int> + <reference key="object" ref="1002997712"/> + <reference key="parent" ref="0"/> + <string key="objectName">Settings</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">101</int> + <reference key="object" ref="388661522"/> + <reference key="parent" ref="220887054"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">102</int> + <reference key="object" ref="837401498"/> + <reference key="parent" ref="487755233"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">103</int> + <reference key="object" ref="314007513"/> + <reference key="parent" ref="697429448"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">104</int> + <reference key="object" ref="574259110"/> + <reference key="parent" ref="932260227"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">105</int> + <reference key="object" ref="11812574"/> + <reference key="parent" ref="1030464026"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">106</int> + <reference key="object" ref="986910851"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="396821977"/> + </object> + <reference key="parent" ref="583724646"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">107</int> + <reference key="object" ref="816301873"/> + <reference key="parent" ref="397416172"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">93</int> + <reference key="object" ref="396821977"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="174640103"/> + <reference ref="842183426"/> + <reference ref="257964281"/> + </object> + <reference key="parent" ref="986910851"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">95</int> + <reference key="object" ref="174640103"/> + <reference key="parent" ref="396821977"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">94</int> + <reference key="object" ref="842183426"/> + <reference key="parent" ref="396821977"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1037187928"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">108</int> + <reference key="object" ref="257964281"/> + <reference key="parent" ref="396821977"/> + </object> + </object> + </object> + <object class="NSMutableDictionary" key="flattenedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>108.ImportedFromIB2</string> + <string>5.IBEditorWindowLastContentRect</string> + <string>5.IBWindowTemplateEditedContentRect</string> + <string>5.ImportedFromIB2</string> + <string>5.windowTemplate.hasMinSize</string> + <string>5.windowTemplate.minSize</string> + <string>50.ImportedFromIB2</string> + <string>51.ImportedFromIB2</string> + <string>52.ImportedFromIB2</string> + <string>53.CustomClassName</string> + <string>53.ImportedFromIB2</string> + <string>6.ImportedFromIB2</string> + <string>70.ImportedFromIB2</string> + <string>75.ImportedFromIB2</string> + <string>92.ImportedFromIB2</string> + <string>93.IBEditorWindowLastContentRect</string> + <string>93.ImportedFromIB2</string> + <string>94.ImportedFromIB2</string> + <string>95.ImportedFromIB2</string> + <string>99.ImportedFromIB2</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <boolean value="YES"/> + <string>{{0, 994}, {270, 151}}</string> + <string>{{0, 994}, {270, 151}}</string> + <boolean value="YES"/> + <boolean value="YES"/> + <string>{213, 107}</string> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + <string>NSSecureTextField</string> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + <string>{{75, 1070}, {145, 63}}</string> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + <boolean value="YES"/> + </object> + </object> + <object class="NSMutableDictionary" key="unlocalizedProperties"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="activeLocalization"/> + <object class="NSMutableDictionary" key="localizations"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference key="dict.sortedKeys" ref="0"/> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> + <nil key="sourceID"/> + <int key="maxID">108</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"> + <object class="NSMutableArray" key="referencedPartialClassDescriptions"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">FirstResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">QSDeliciousPlugIn_Source</string> + <string key="superclassName">QSObjectSource</string> + <object class="NSMutableDictionary" key="outlets"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>passField</string> + <string>userField</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSTextField</string> + <string>NSTextField</string> + </object> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBProjectSource</string> + <string key="minorKey">QSDeliciousPlugIn_Source.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">QSDeliciousPlugIn_Source</string> + <string key="superclassName">QSObjectSource</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">savePassword:</string> + <string key="NS.object.0">id</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">QSObjectSource</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBUserSource</string> + <string key="minorKey"/> + </object> + </object> + </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">relaunch:</string> + <string key="NS.object.0">id</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSApplication_BLTRExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSIconLoader.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="662394336"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSObjectSource.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSObject_FileHandling.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSPlugIn.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSProxyObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSRegistry.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSTask.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSTriggerCenter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/QSURLDownloadWrapper.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/UKFileWatcher.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/UKKQueue.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSCore.framework/Headers/UKMainThreadProxy.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NDHotKeyEvent.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSArray_BLTRExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSObject+BLTRExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSObject+ReaperExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSView_BLTRExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QSFoundation.framework/Headers/NSWindow_BLTRExtensions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">QSObjectSource</string> + <string key="superclassName">NSObject</string> + <object class="NSMutableDictionary" key="outlets"> + <string key="NS.key.0">settingsView</string> + <string key="NS.object.0">NSView</string> + </object> + <reference key="sourceIdentifier" ref="662394336"/> + </object> + </object> + </object> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1060" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1060" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <nil key="IBDocument.LastKnownRelativeProjectPath"/> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>NSMenuCheckmark</string> + <string>NSMenuMixedState</string> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + <string>{9, 8}</string> + <string>{7, 2}</string> + </object> + </object> + </data> +</archive> diff --git a/QSDeliciousPlugInSource.nib/info.nib b/QSDeliciousPlugInSource.nib/info.nib deleted file mode 100644 index 06fc562..0000000 --- a/QSDeliciousPlugInSource.nib/info.nib +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IBDocumentLocation</key> - <string>365 116 356 240 0 0 1024 746 </string> - <key>IBFramework Version</key> - <string>446.1</string> - <key>IBOpenObjects</key> - <array> - <integer>5</integer> - </array> - <key>IBSystem Version</key> - <string>8J135</string> -</dict> -</plist> diff --git a/QSDeliciousPlugInSource.nib/keyedobjects.nib b/QSDeliciousPlugInSource.nib/keyedobjects.nib Binary files differindex 6ef063b..a794dc2 100644 --- a/QSDeliciousPlugInSource.nib/keyedobjects.nib +++ b/QSDeliciousPlugInSource.nib/keyedobjects.nib diff --git a/QSDeliciousPlugIn_Source.h b/QSDeliciousPlugIn_Source.h index 5ddd9d2..89729de 100644 --- a/QSDeliciousPlugIn_Source.h +++ b/QSDeliciousPlugIn_Source.h @@ -9,7 +9,7 @@ #import "QSDeliciousPlugIn_Source.h" -@interface QSDeliciousPlugIn_Source : QSObjectSource{ +@interface QSDeliciousPlugIn_Source : QSObjectSource <NSXMLParserDelegate> { NSMutableArray *posts; NSMutableArray *tags; NSMutableArray *dates; @@ -18,7 +18,5 @@ IBOutlet NSTextField *passField; } -- (IBAction)savePassword:(id)sender; - @end diff --git a/QSDeliciousPlugIn_Source.m b/QSDeliciousPlugIn_Source.m index 1267654..a2d6494 100644 --- a/QSDeliciousPlugIn_Source.m +++ b/QSDeliciousPlugIn_Source.m @@ -9,75 +9,237 @@ #import "QSDeliciousPlugIn_Source.h" #import <QSCore/QSCore.h> -#define kQSDeliciousTagType @"us.icio.del.tag" -#define DELICIOUS_API_URL @"api.del.icio.us/v1" -#define MAGNOLIA_API_URL @"ma.gnolia.com/api/mirrord/v1" +#import <Security/Security.h> @implementation QSDeliciousPlugIn_Source -+ (void)initialize{ + ++ (void)initialize { [self setKeys:[NSArray arrayWithObject:@"selection"] triggerChangeNotificationsForDependentKey:@"currentPassword"]; } -- (BOOL)indexIsValidFromDate:(NSDate *)indexDate forEntry:(NSDictionary *)theEntry{ - return -[indexDate timeIntervalSinceNow] < 24*60*60; + +- (BOOL)indexIsValidFromDate:(NSDate *)indexDate forEntry:(NSDictionary *)theEntry { + return -[indexDate timeIntervalSinceNow] < 24 * 60 * 60; } -- (BOOL)isVisibleSource{return YES;} +- (BOOL)isVisibleSource{ return YES; } -- (NSImage *) iconForEntry:(NSDictionary *)dict{ +- (NSImage *) iconForEntry:(NSDictionary *)dict { return [[NSBundle bundleForClass:[self class]]imageNamed:@"bookmark_icon"]; } -- (NSString *)identifierForObject:(id <QSObject>)object{ - return nil; +- (NSString *) mainNibName { + return @"QSDeliciousPrefPane"; } -- (NSView *) settingsView{ - if (![super settingsView]){ +- (void)populateFields { + NSLog(@"populating: %@/%@", [[selection info] objectForKey:@"username"], [[selection info] objectForKey:@"site"]); +} + +- (NSView *) settingsView { + if (![super settingsView]) [NSBundle loadNibNamed:@"QSDeliciousPlugInSource" owner:self]; - } return [super settingsView]; } -- (NSData *)cachedBookmarkDataForUser:(NSString *)username{ - NSString *cachePath=[QSApplicationSupportSubPath(@"Caches/del.icio.us/",NO) stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.xml",username]]; - return [NSData dataWithContentsOfFile:cachePath]; +// Keychain Access -- The QS Built-in ones seems to be broken + +- (SecProtocolType)protocolTypeForString:(NSString *)protocol { + if ([protocol isEqualToString:@"ftp"]) return kSecProtocolTypeFTP; + else if ([protocol isEqualToString:@"http"]) return kSecProtocolTypeHTTP; + else if ([protocol isEqualToString:@"sftp"]) return kSecProtocolTypeFTPS; + else if ([protocol isEqualToString:@"eppc"]) return kSecProtocolTypeEPPC; + else if ([protocol isEqualToString:@"afp"]) return kSecProtocolTypeAFP; + else if ([protocol isEqualToString:@"smb"]) return kSecProtocolTypeSMB; + else if ([protocol isEqualToString:@"ssh"]) return kSecProtocolTypeSSH; + else if ([protocol isEqualToString:@"telnet"]) return kSecProtocolTypeTelnet; + return 0; } -- (NSString *)passwordForUser:(NSString *)username{ - NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://%@@del.icio.us/",username]]; - return [url keychainPassword]; + +- (NSString *)passwordForHost:(NSString *)host user:(NSString *)user andType:(SecProtocolType)type { + const char *buffer; + UInt32 length = 0; + OSErr err; + + err = SecKeychainFindInternetPassword(NULL, + [host length], [host UTF8String], + 0, + NULL, + [user length], [user UTF8String], + 0, NULL, + 0, + type, + 0, + &length, (void**)&buffer, + NULL); + + if (err == noErr) { + NSString *password = [[[NSString alloc] initWithCString:buffer length:length] autorelease]; + SecKeychainItemFreeContent(NULL,(void *)buffer); + return password; + } + return nil; } -- (NSData *)bookmarkDataForUser:(NSString *)username onSite:(int)isMagnolia{ - NSString *password=[self passwordForUser:username]; - if (VERBOSE)NSLog(@"Downloading del.icio.us bookmarks for %@ %d",username, isMagnolia); - //NSString *count=[[self currentEntry] objectForKey:@"QSDeliciousRecentCount"]; +- (NSString *)passwordForHost:(NSString *)host user:(NSString *)user andScheme:(NSString *)scheme { + NSString *password = nil; + + SecProtocolType type = [self protocolTypeForString:scheme]; + + password = [self passwordForHost:host user:user andType:type]; - if (!username || !password) return nil; - //if (!count)count=@"50"; + if (!password && type == kSecProtocolTypeFTP) + password = [self passwordForHost:host user:user andType:kSecProtocolTypeFTPAccount]; // Workaround for Transmit's old type usage + if ( !password ) + password = [self passwordForHost:host user:user andType:0]; + if ( !password ) + NSLog(@"Couldn't find password. URL:%@ %@ %@", host, user,scheme ); + return password; +} + +- (NSString *)keychainPasswordForURL:(NSURL *)url { + return [self passwordForHost:[url host] user:[url user] andScheme:[url scheme]]; +} - - NSString *apiurl=isMagnolia?MAGNOLIA_API_URL:DELICIOUS_API_URL; +- (OSErr)addURLPasswordToKeychain:(NSURL *)url { + OSErr err; - NSError *error; - NSURL *url=[NSURL URLWithString: - [NSString stringWithFormat:@"https://%@:%@@%@/posts/all?",username,password,apiurl]]; + NSString *host = [url host]; + NSString *user = [url user]; + NSString *pass = [url password]; - NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:url - cachePolicy:NSURLRequestUseProtocolCachePolicy - timeoutInterval:60.0]; + SecProtocolType type = [self protocolTypeForString:[url scheme]]; - [theRequest setValue:@"Quicksilver (Blacktree,MacOSX)" forHTTPHeaderField:@"User-Agent"]; + SecKeychainItemRef existing = NULL; + + err = SecKeychainFindInternetPassword(NULL, + [host length], [host UTF8String], + 0, NULL, + [user length], [user UTF8String], + 0, NULL, + 0, + type, + 0, + NULL,NULL, + &existing); + + if ( !err ) { + err = SecKeychainItemModifyContent( existing, NULL, [pass length], [pass UTF8String] ); + CFRelease( existing ); + } else { + err = SecKeychainAddInternetPassword(NULL, + [host length], [host UTF8String], + 0, NULL, + [user length], [user UTF8String], + 0, NULL, + 0, + type, + 0, + [pass length], [pass UTF8String], + NULL); + } + + return err; +} + +// Site Index/API/URL + +- (int)siteIndex { + return [[selection info] objectForKey:@"site"] != nil ? [[[selection info] objectForKey:@"site"] integerValue] : 0; +} + +- (NSString *)siteURLForIndex:(int)siteIndex { + if (siteIndex == 0) return @"del.icio.us"; + else if (siteIndex == 1) return @"ma.gnolia.com"; + else if (siteIndex == 2) return @"pinboard.in"; + else return nil; +} + +- (NSString *)reversedSiteURLForIndex:(int)siteIndex { + if (siteIndex == 0) return @"us.icio.del"; + else if (siteIndex == 1) return @"com.gnolia.ma"; + else if (siteIndex == 2) return @"in.pinboard"; + else return nil; +} + +- (NSString *)tagURLForIndex:(int)siteIndex { + return [NSString stringWithFormat:@"%2.%2", [self reversedSiteURLForIndex:[self siteIndex]], @"tag"]; +} + +- (NSString *)apiURLForIndex:(int)siteIndex { + if (siteIndex == 0) return @"api.del.icio.us/v1"; + else if (siteIndex == 1) return @"ma.gnolia.com/api/mirrord/v1"; + else if (siteIndex == 2) return @"api.pinboard.in/v1"; + else return nil; +} + +// Current Site/API URL + +- (NSString *)currentSiteURL { + return [self siteURLForIndex:[self siteIndex]]; +} + +- (NSString *)currentAPIURL { + return [self apiURLForIndex:[self siteIndex]]; +} + +// Useranme + +- (NSString *)currentUsername { + return [[selection info] objectForKey:@"username"]; +} + +// Password Related + +- (NSString *)currentPassword { + NSString *account = [self currentUsername]; + if (!account) return nil; + NSURL *keychainURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@@%@/", account, [self currentSiteURL]]]; + NSString *password = [self keychainPasswordForURL:keychainURL]; + + return password; +} + +- (void)setCurrentPassword:(NSString *)newPassword { + NSString *account = [self currentUsername]; + if (!account) return; + if ([newPassword length] <= 0) return; - // NSURLConnection *theConnection=[[[NSURLConnection alloc] initWithRequest:theRequest delegate:nil]; + NSURL *keychainURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@%@/", account, newPassword, [self currentSiteURL]]]; - //NSLog(@"url %@",url); - NSData *data=[NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:&error]; - NSString *cachePath=[QSApplicationSupportSubPath(@"Caches/del.icio.us/",YES) stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.xml",username]]; + [self addURLPasswordToKeychain:keychainURL]; +} + +// Bookarmk/Caching + +- (NSData *)cachedBookmarkData { + NSString *cachePath=[QSApplicationSupportSubPath([NSString stringWithFormat:@"Caches/%@/", [self currentSiteURL]], NO) stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.xml", [self currentUsername]]]; + return [NSData dataWithContentsOfFile:cachePath]; +} + +- (NSData *)bookmarkData { + if (![self currentUsername] || ![self currentPassword]) return nil; + + NSString *urlString = [NSString stringWithFormat:@"https://%@:%@@%@/posts/all?", [self currentUsername], [self currentPassword], [self currentAPIURL]]; + NSURL *requestURL = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:requestURL + cachePolicy:NSURLRequestUseProtocolCachePolicy + timeoutInterval:60.0]; + [theRequest setHTTPMethod:@"POST"]; + [theRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; + [theRequest setValue:@"Quicksilver (Blacktree,MacOSX)" forHTTPHeaderField:@"User-Agent"]; + + NSError *error; + NSData *data = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:&error]; + + NSString *cachePath = [QSApplicationSupportSubPath([NSString stringWithFormat:@"Caches/%@/", [self currentSiteURL]], YES) stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.xml", [self currentUsername]]]; [data writeToFile:cachePath atomically:NO]; + return data; } -- (QSObject *)objectForPost:(NSDictionary *)post{ + +- (QSObject *)objectForPost:(NSDictionary *)post { QSObject *newObject=[QSObject makeObjectWithIdentifier:[post objectForKey:@"hash"]]; [newObject setObject:[post objectForKey:@"href"] forType:QSURLType]; [newObject setName:[post objectForKey:@"description"]]; @@ -90,18 +252,15 @@ return newObject; } -- (NSArray *) objectsForEntry:(NSDictionary *)theEntry{ - NSString *username=[theEntry objectForKey:@"username"]; - NSData *data=nil;//[self cachedBookmarkDataForUser:username]; - if (![data length]) data=[self bookmarkDataForUser:username onSite:[[theEntry objectForKey:@"site"]intValue]]; +- (NSArray *)objectsForEntry:(NSDictionary *)theEntry { + NSData *data = nil;//[self cachedBookmarkData]; + if (![data length]) data = [self bookmarkData]; - //NSString *string=[[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]autorelease]; - //NSLog(@"data %@",string); + NSXMLParser *postParser = [[NSXMLParser alloc]initWithData:data]; + [postParser setDelegate:self]; - NSXMLParser *postParser=[[NSXMLParser alloc]initWithData:data]; + posts = [NSMutableArray arrayWithCapacity:1]; - [postParser setDelegate:self]; - posts=[NSMutableArray arrayWithCapacity:1]; [postParser parse]; NSMutableArray *objects=[NSMutableArray arrayWithCapacity:1]; @@ -120,10 +279,10 @@ if ([[theEntry objectForKey:@"includeTags"]boolValue]){ while(tag=[e nextObject]){ newObject=[QSObject makeObjectWithIdentifier:[NSString stringWithFormat:@"[del.icio.us tag]:%@",tag]]; - [newObject setObject:tag forType:kQSDeliciousTagType]; - [newObject setObject:username forMeta:@"us.icio.del.username"]; + [newObject setObject:tag forType:[self tagURLForIndex:[self siteIndex]]]; + [newObject setObject:[self currentUsername] forMeta:@"us.icio.del.username"]; [newObject setName:tag]; - [newObject setPrimaryType:kQSDeliciousTagType]; + [newObject setPrimaryType:[self tagURLForIndex:[self siteIndex]]]; [objects addObject:newObject]; } } @@ -134,7 +293,7 @@ } - (NSArray *)objectsForTag:(NSString *)tag username:(NSString *)username{ - NSData *data=[self cachedBookmarkDataForUser:username]; + NSData *data=[self cachedBookmarkData]; NSXMLParser *postParser=[[NSXMLParser alloc]initWithData:data]; [postParser setDelegate:self]; @@ -145,7 +304,7 @@ QSObject *newObject; NSEnumerator *e=[posts objectEnumerator]; NSDictionary *post; - NSMutableSet *tagSet=[NSMutableSet set]; + // NSMutableSet *tagSet=[NSMutableSet set]; while(post=[e nextObject]){ if ([[post objectForKey:@"tag"]rangeOfString:tag].location==NSNotFound)continue; newObject=[self objectForPost:post]; @@ -154,83 +313,41 @@ return objects; } -// XML Stuff -- (void)parser:(NSXMLParser*)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { - // NSLog(@"started %@ %@ %@ %@",elementName,namespaceURI,qName,attributeDict); - - if ([elementName isEqualToString:@"post"] && attributeDict) - [posts addObject:attributeDict]; -} - -- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { - // NSLog(@"ended %@ %@ %@ %@",elementName,namespaceURI,qName); -} - - - - - - - // Object Handler Methods /* - - (void)setQuickIconForObject:(QSObject *)object{ - [object setIcon:nil]; // An icon that is either already in memory or easy to load - } - - (BOOL)loadIconForObject:(QSObject *)object{ - return NO; - id data=[object objectForType:QSDeliciousPlugInType]; - [object setIcon:nil]; - return YES; - } - */ - - - - - -- (NSString *) mainNibName{ - return @"QSDeliciousPrefPane"; +- (void)setQuickIconForObject:(QSObject *)object { + [object setIcon:nil]; // An icon that is either already in memory or easy to load } -- (void)populateFields{ -} -- (NSString *)currentPassword{ - NSString *account=[[self currentEntry] objectForKey:@"username"]; - if (!account)return nil; - NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://%@@del.icio.us/",account]]; - NSString *password=[url keychainPassword]; - return password; -} -- (void)setCurrentPassword:(NSString *)newPassword{ - NSString *account=[[self currentEntry] objectForKey:@"username"]; - NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@del.icio.us/",account,newPassword]]; - if ([newPassword length]) - [url addPasswordToKeychain]; - +- (BOOL)loadIconForObject:(QSObject *)object { + return NO; + id data=[object objectForType:QSDeliciousPlugInType]; + [object setIcon:nil]; + return YES; } +*/ - - - - - - - - -- (void)setQuickIconForObject:(QSObject *)object{ +- (void)setQuickIconForObject:(QSObject *)object { [object setIcon:[[NSBundle bundleForClass:[self class]]imageNamed:@"bookmark_icon"]]; } -- (BOOL)loadChildrenForObject:(QSObject *)object{ - [object setChildren: - [self objectsForTag:[object objectForType:kQSDeliciousTagType] - username:[object objectForMeta:@"us.icio.del.username"]]]; + +- (BOOL)loadChildrenForObject:(QSObject *)object { + [object setChildren:[self objectsForTag:[object objectForType:[self tagURLForIndex:[self siteIndex]]] + username:[object objectForMeta:@"us.icio.del.username"]]]; return YES; } +// NSXMLParserDelegate Functions +- (void)parser:(NSXMLParser*)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { + NSLog(@"XML Parser started %@ %@ %@ %@",elementName,namespaceURI,qName,attributeDict); + if ([elementName isEqualToString:@"post"] && attributeDict) + [posts addObject:attributeDict]; +} - +- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { + NSLog(@"XML Parser ended %@ %@ %@", elementName, namespaceURI, qName); +} @end |