diff --git a/Application/AppController.h b/Application/AppController.h index aceb4df..695d688 100644 --- a/Application/AppController.h +++ b/Application/AppController.h @@ -14,6 +14,7 @@ #import "DCAPITagFormatter.h" #import "NSString+SFHFUtils.h" #import "NSDictionary+SFHFUtils.h" +#import "NSArray+IndexSetAdditions.h" #import "NSAppleScript+HandlerCalls.h" #import "SFHFKeychainUtils.h" #import "SFHFTableView.h" @@ -134,6 +135,7 @@ - (void) setPostsWithArray: (NSArray *) newPosts; - (NSMutableDictionary *) posts; - (NSArray *) postsArray; +- (NSArray *) selectedPostsArray; - (NSArray *) urlsArray; - (void) setFilteredPosts: (NSArray *) newFilteredPosts; - (NSArray *) filteredPosts; diff --git a/Application/AppController.m b/Application/AppController.m index 39a77ed..3719aaf 100644 --- a/Application/AppController.m +++ b/Application/AppController.m @@ -536,6 +536,10 @@ - (NSArray *) postsArray { return [[self posts] allValues]; } +- (NSArray *) selectedPostsArray { + return [[self filteredPosts] subarrayWithIndexes: [postList selectedRowIndexes]]; +} + - (NSArray *) urlsArray { return [[self posts] allKeys]; } diff --git a/Delicious Client.xcodeproj/buzz.mode1 b/Delicious Client.xcodeproj/buzz.mode1 index 7e758b7..822a5d8 100644 --- a/Delicious Client.xcodeproj/buzz.mode1 +++ b/Delicious Client.xcodeproj/buzz.mode1 @@ -218,6 +218,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -281,7 +283,7 @@ 225 RubberWindowFrame - 62 202 949 592 0 0 1280 832 + 60 202 949 592 0 0 1280 832 Module PBXSmartGroupTreeModule @@ -318,7 +320,7 @@ Frame {{0, 0}, {702, 0}} RubberWindowFrame - 62 202 949 592 0 0 1280 832 + 60 202 949 592 0 0 1280 832 Module PBXNavigatorGroup @@ -326,8 +328,6 @@ 0pt - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -340,7 +340,7 @@ Frame {{0, 5}, {702, 546}} RubberWindowFrame - 62 202 949 592 0 0 1280 832 + 60 202 949 592 0 0 1280 832 Module XCDetailModule @@ -364,9 +364,9 @@ TableOfContents - 6BFBE6F208D2C1C700C76075 + 6B804EBC08D381F4009B9F90 1CE0B1FE06471DED0097A5F4 - 6BFBE6F308D2C1C700C76075 + 6B804EBD08D381F4009B9F90 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 @@ -500,13 +500,10 @@ 5 WindowOrderList - 1C530D57069F1CE1000CFCEE - 1C0AD2B3069F1EA900FABCE6 - 6BFBD192082EEB42009D11EB /Users/buzz/Code/Cocoa/cocoalicious/Delicious Client.xcodeproj WindowString - 62 202 949 592 0 0 1280 832 + 60 202 949 592 0 0 1280 832 WindowTools @@ -522,8 +519,6 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID @@ -546,10 +541,10 @@ 184pt + BecomeActive + ContentConfiguration - PBXBuildLogShowsTranscriptDefaultKey - {{0, 152}, {853, 142}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel @@ -587,7 +582,7 @@ TableOfContents 6BFBD192082EEB42009D11EB - 6BFBE6E208D2C11000C76075 + 6B491D3608D3621C00B6E3C4 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID @@ -947,9 +942,9 @@ TableOfContents 1C0AD2B3069F1EA900FABCE6 - 6BFBE6E608D2C11000C76075 + 6B491D1608D3600000B6E3C4 1CD0528B0623707200166675 - 6BFBE6E708D2C11000C76075 + 6B491D1708D3600000B6E3C4 ToolbarConfiguration xcode.toolbar.config.run diff --git a/Delicious Client.xcodeproj/buzz.pbxuser b/Delicious Client.xcodeproj/buzz.pbxuser index d99a614..99ab5e2 100644 --- a/Delicious Client.xcodeproj/buzz.pbxuser +++ b/Delicious Client.xcodeproj/buzz.pbxuser @@ -14,7 +14,7 @@ activeExecutable = 6BAB081D06D2FF6A0058BAC1 /* Cocoal.icio.us */; activeTarget = 8D1107260486CEB800E47090 /* Cocoal.icio.us */; addToTargets = ( - 6B47BF5A086345A400636CB2 /* Cocoalicious Definition */, + 6B491C9208D35E1700B6E3C4 /* Convert Tags to Strings */, ); breakpoints = ( ); @@ -145,7 +145,7 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 148029432; + PBXPerProjectTemplateStateSaveDate = 148079034; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; @@ -1017,7 +1017,7 @@ PBXModuleWindowStatusBarHidden = YES; RubberWindowFrame = "465 168 745 467 0 0 1280 832 "; }; - PBXWorkspaceStateSaveDate = 148029432; + PBXWorkspaceStateSaveDate = 148079034; }; sourceControlManager = 6BF88AE705C4D57100D7EDBB /* Source Control */; userBuildSettings = { @@ -1252,17 +1252,17 @@ 6B47BF0908633DF600636CB2 /* main.applescript */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {705, 429}}"; - sepNavSelRange = "{0, 0}"; + sepNavSelRange = "{243, 33}"; sepNavVisRect = "{{0, 0}, {705, 429}}"; - sepNavWindowFrame = "{{15, 269}, {750, 558}}"; + sepNavWindowFrame = "{{349, 132}, {750, 558}}"; }; }; 6B47BF0C08633E0400636CB2 /* Info.plist */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {919, 966}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 440}, {919, 526}}"; - sepNavWindowFrame = "{{38, 151}, {964, 655}}"; + sepNavSelRange = "{941, 0}"; + sepNavVisRect = "{{0, 0}, {919, 526}}"; + sepNavWindowFrame = "{{259, 155}, {964, 655}}"; }; }; 6B47BF5A086345A400636CB2 /* Cocoalicious Definition */ = { @@ -1270,9 +1270,9 @@ }; 6B47BF5D086345C500636CB2 /* definition.plist */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {705, 3038}}"; - sepNavSelRange = "{4293, 8}"; - sepNavVisRect = "{{0, 2226}, {705, 429}}"; + sepNavIntBoundsRect = "{{0, 0}, {705, 3052}}"; + sepNavSelRange = "{2587, 30}"; + sepNavVisRect = "{{0, 674}, {705, 429}}"; sepNavWindowFrame = "{{449, 155}, {750, 558}}"; }; }; @@ -1300,6 +1300,41 @@ sepNavWindowFrame = "{{61, 130}, {964, 655}}"; }; }; + 6B491C9208D35E1700B6E3C4 /* Convert Tags to Strings */ = { + activeExec = 0; + }; + 6B491CA008D35E5600B6E3C4 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1159, 966}}"; + sepNavSelRange = "{289, 0}"; + sepNavVisRect = "{{0, 0}, {1159, 583}}"; + sepNavWindowFrame = "{{15, 115}, {1204, 712}}"; + }; + }; + 6B491CA208D35E7500B6E3C4 /* main.applescript */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1159, 583}}"; + sepNavSelRange = "{375, 0}"; + sepNavVisRect = "{{0, 0}, {1159, 583}}"; + sepNavWindowFrame = "{{15, 115}, {1204, 712}}"; + }; + }; + 6B557A0008D34E74004D4A2A /* NSArray+IndexSetAdditions.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {806, 182}}"; + sepNavSelRange = "{280, 4}"; + sepNavVisRect = "{{0, 30}, {806, 152}}"; + sepNavWindowFrame = "{{18, 97}, {1204, 712}}"; + }; + }; + 6B557A0108D34E74004D4A2A /* NSArray+IndexSetAdditions.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1159, 583}}"; + sepNavSelRange = "{686, 0}"; + sepNavVisRect = "{{0, 0}, {1159, 583}}"; + sepNavWindowFrame = "{{15, 115}, {1204, 712}}"; + }; + }; 6B5A44BC06D1CFB6007C405C /* DCAPITagFormatter.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {711, 404}}"; @@ -1493,17 +1528,17 @@ }; 6BD8187E075AFB740088A2CF /* AppController-AppleScriptExtensions.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {782, 1274}}"; - sepNavSelRange = "{1472, 0}"; - sepNavVisRect = "{{0, 715}, {705, 429}}"; - sepNavWindowFrame = "{{176, 122}, {750, 558}}"; + sepNavIntBoundsRect = "{{0, 0}, {782, 1652}}"; + sepNavSelRange = "{520, 0}"; + sepNavVisRect = "{{0, 984}, {705, 429}}"; + sepNavWindowFrame = "{{371, 126}, {750, 558}}"; }; }; 6BD8187F075AFB740088A2CF /* Cocoalicious.sdef */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {711, 882}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {711, 404}}"; + sepNavIntBoundsRect = "{{0, 0}, {1159, 882}}"; + sepNavSelRange = "{743, 20}"; + sepNavVisRect = "{{0, 0}, {1159, 639}}"; sepNavWindowFrame = "{{84, 206}, {750, 558}}"; }; }; @@ -1516,9 +1551,10 @@ }; 6BD818EB075AFCE50088A2CF /* DCAPIPost-AppleScriptExtensions.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {711, 489}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {711, 404}}"; + sepNavIntBoundsRect = "{{0, 0}, {1304, 583}}"; + sepNavSelRange = "{932, 0}"; + sepNavVisRect = "{{0, 0}, {1159, 583}}"; + sepNavWindowFrame = "{{61, 73}, {1204, 712}}"; }; }; 6BD818EC075AFCE50088A2CF /* DCAPITag-AppleScriptExtensions.h */ = { @@ -1561,17 +1597,17 @@ }; 6BF88AE305C4D56000D7EDBB /* AppController.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {818, 2548}}"; - sepNavSelRange = "{241, 0}"; - sepNavVisRect = "{{0, 0}, {711, 429}}"; + sepNavIntBoundsRect = "{{0, 0}, {818, 2576}}"; + sepNavSelRange = "{4124, 0}"; + sepNavVisRect = "{{0, 1709}, {705, 429}}"; sepNavWindowFrame = "{{209, 239}, {750, 558}}"; }; }; 6BF88AE405C4D56000D7EDBB /* AppController.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1736, 23912}}"; - sepNavSelRange = "{34508, 114}"; - sepNavVisRect = "{{0, 13609}, {806, 152}}"; + sepNavIntBoundsRect = "{{0, 0}, {1736, 23926}}"; + sepNavSelRange = "{34588, 114}"; + sepNavVisRect = "{{0, 13623}, {806, 152}}"; sepNavWindowFrame = "{{442, 274}, {750, 558}}"; }; }; diff --git a/Delicious Client.xcodeproj/project.pbxproj b/Delicious Client.xcodeproj/project.pbxproj index 17a091f..33e7f16 100644 --- a/Delicious Client.xcodeproj/project.pbxproj +++ b/Delicious Client.xcodeproj/project.pbxproj @@ -17,6 +17,16 @@ isSharedContext = 0; runOnlyForDeploymentPostprocessing = 0; }; + 6B491D2708D361F600B6E3C4 /* AppleScript */ = { + isa = PBXAppleScriptBuildPhase; + buildActionMask = 2147483647; + contextName = ""; + files = ( + 6B491D3008D3620200B6E3C4 /* main.applescript in AppleScript */, + ); + isSharedContext = 0; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXAppleScriptBuildPhase section */ /* Begin PBXBuildFile section */ @@ -58,9 +68,16 @@ 6B47BF1908633E4D00636CB2 /* main.applescript in AppleScript */ = {isa = PBXBuildFile; fileRef = 6B47BF0908633DF600636CB2 /* main.applescript */; settings = {ATTRIBUTES = (Debug, ); }; }; 6B47BF1A08633E8700636CB2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 6B47BF1E08633EB700636CB2 /* Automator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B47BF1D08633EB700636CB2 /* Automator.framework */; }; - 6B47BF510863443C00636CB2 /* main.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6B47BF4F0863443C00636CB2 /* main.nib */; }; 6B47BF5E086345C500636CB2 /* definition.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6B47BF5D086345C500636CB2 /* definition.plist */; }; 6B47BF61086345CF00636CB2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6B47BF5F086345CF00636CB2 /* Localizable.strings */; }; + 6B491D1008D35FEE00B6E3C4 /* Convert Tags to Strings.caction in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6B491C9308D35E1700B6E3C4 /* Convert Tags to Strings.caction */; }; + 6B491D1A08D361CF00B6E3C4 /* Automator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B47BF1D08633EB700636CB2 /* Automator.framework */; }; + 6B491D1B08D361CF00B6E3C4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + 6B491D3008D3620200B6E3C4 /* main.applescript in AppleScript */ = {isa = PBXBuildFile; fileRef = 6B491CA208D35E7500B6E3C4 /* main.applescript */; settings = {ATTRIBUTES = (Debug, ); }; }; + 6B557A0208D34E74004D4A2A /* NSArray+IndexSetAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B557A0008D34E74004D4A2A /* NSArray+IndexSetAdditions.h */; }; + 6B557A0308D34E74004D4A2A /* NSArray+IndexSetAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B557A0108D34E74004D4A2A /* NSArray+IndexSetAdditions.m */; }; + 6B557A5F08D3558D004D4A2A /* Convert Posts to URLs.caction in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6B47BEFA08633D0800636CB2 /* Convert Posts to URLs.caction */; }; + 6B557A6008D35590004D4A2A /* Cocoalicious.definition in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6B47BF5B086345A400636CB2 /* Cocoalicious.definition */; }; 6B5A44BE06D1CFB6007C405C /* DCAPITagFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B5A44BC06D1CFB6007C405C /* DCAPITagFormatter.h */; }; 6B5A44BF06D1CFB6007C405C /* DCAPITagFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B5A44BD06D1CFB6007C405C /* DCAPITagFormatter.m */; }; 6B61ACDC0846382500A27692 /* KFTypeSelectTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B61ACDA0846382500A27692 /* KFTypeSelectTableView.m */; }; @@ -137,6 +154,30 @@ }; /* End PBXBuildStyle section */ +/* Begin PBXContainerItemProxy section */ + 6B491CBA08D35EA700B6E3C4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B491C9208D35E1700B6E3C4; + remoteInfo = "Convert Tags to Strings"; + }; + 6B557A4408D35531004D4A2A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B47BEF908633D0800636CB2; + remoteInfo = "Convert Posts to URLs"; + }; + 6B557A4608D35536004D4A2A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B47BF5A086345A400636CB2; + remoteInfo = "Cocoalicious Definition"; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 6B47BF6D0863468200636CB2 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -153,6 +194,9 @@ dstPath = Contents/Library/Automator; dstSubfolderSpec = 1; files = ( + 6B491D1008D35FEE00B6E3C4 /* Convert Tags to Strings.caction in CopyFiles */, + 6B557A6008D35590004D4A2A /* Cocoalicious.definition in CopyFiles */, + 6B557A5F08D3558D004D4A2A /* Convert Posts to URLs.caction in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -207,12 +251,16 @@ 6B47BF0908633DF600636CB2 /* main.applescript */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.applescript; name = main.applescript; path = "Scripting/Automator/Convert Posts To URLs/main.applescript"; sourceTree = ""; }; 6B47BF0C08633E0400636CB2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = Info.plist; path = "Scripting/Automator/Convert Posts To URLs/Info.plist"; sourceTree = ""; }; 6B47BF1D08633EB700636CB2 /* Automator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Automator.framework; path = /System/Library/Frameworks/Automator.framework; sourceTree = ""; }; - 6B47BF500863443C00636CB2 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = "Scripting/Automator/Convert Posts To URLs/English.lproj/main.nib"; sourceTree = ""; }; 6B47BF5B086345A400636CB2 /* Cocoalicious.definition */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Cocoalicious.definition; sourceTree = BUILT_PRODUCTS_DIR; }; 6B47BF5D086345C500636CB2 /* definition.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = definition.plist; path = Scripting/Automator/Definition/definition.plist; sourceTree = ""; }; 6B47BF60086345CF00636CB2 /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; 6B47BF62086345DF00636CB2 /* version.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = version.plist; path = Scripting/Automator/Definition/version.plist; sourceTree = ""; }; 6B47BF64086345F100636CB2 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = Info.plist; path = Scripting/Automator/Definition/Info.plist; sourceTree = ""; }; + 6B491C9308D35E1700B6E3C4 /* Convert Tags to Strings.caction */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Convert Tags to Strings.caction"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B491CA008D35E5600B6E3C4 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; name = Info.plist; path = "Scripting/Automator/Convert Tags to Strings/Info.plist"; sourceTree = ""; }; + 6B491CA208D35E7500B6E3C4 /* main.applescript */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.applescript; name = main.applescript; path = "Scripting/Automator/Convert Tags to Strings/main.applescript"; sourceTree = ""; }; + 6B557A0008D34E74004D4A2A /* NSArray+IndexSetAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSArray+IndexSetAdditions.h"; path = "Utilities/NSArray+IndexSetAdditions.h"; sourceTree = ""; }; + 6B557A0108D34E74004D4A2A /* NSArray+IndexSetAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSArray+IndexSetAdditions.m"; path = "Utilities/NSArray+IndexSetAdditions.m"; sourceTree = ""; }; 6B5A44BC06D1CFB6007C405C /* DCAPITagFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DCAPITagFormatter.h; path = DCAPI/DCAPITagFormatter.h; sourceTree = ""; }; 6B5A44BD06D1CFB6007C405C /* DCAPITagFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DCAPITagFormatter.m; path = DCAPI/DCAPITagFormatter.m; sourceTree = ""; }; 6B61ACDA0846382500A27692 /* KFTypeSelectTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = KFTypeSelectTableView.m; path = UI/KFTypeSelectTableView.m; sourceTree = ""; }; @@ -271,6 +319,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 6B491C9108D35E1700B6E3C4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B491D1A08D361CF00B6E3C4 /* Automator.framework in Frameworks */, + 6B491D1B08D361CF00B6E3C4 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -319,6 +376,7 @@ 6BAB081C06D2FF6A0058BAC1 /* Cocoalicious.app */, 6B47BEFA08633D0800636CB2 /* Convert Posts to URLs.caction */, 6B47BF5B086345A400636CB2 /* Cocoalicious.definition */, + 6B491C9308D35E1700B6E3C4 /* Convert Tags to Strings.caction */, ); name = Products; sourceTree = ""; @@ -403,6 +461,7 @@ children = ( 6B47BF54086344E900636CB2 /* Definition */, 6B47BEDE08633BF100636CB2 /* Convert Posts to URLs */, + 6B491C9F08D35E2B00B6E3C4 /* Convert Tags to Strings */, ); name = "Automator Actions"; sourceTree = ""; @@ -410,7 +469,6 @@ 6B47BEDE08633BF100636CB2 /* Convert Posts to URLs */ = { isa = PBXGroup; children = ( - 6B47BF4F0863443C00636CB2 /* main.nib */, 6B47BF0908633DF600636CB2 /* main.applescript */, 6B47BF0C08633E0400636CB2 /* Info.plist */, ); @@ -428,6 +486,15 @@ name = Definition; sourceTree = ""; }; + 6B491C9F08D35E2B00B6E3C4 /* Convert Tags to Strings */ = { + isa = PBXGroup; + children = ( + 6B491CA208D35E7500B6E3C4 /* main.applescript */, + 6B491CA008D35E5600B6E3C4 /* Info.plist */, + ); + name = "Convert Tags to Strings"; + sourceTree = ""; + }; 6BD81875075AFB510088A2CF /* AppleScript Support */ = { isa = PBXGroup; children = ( @@ -458,6 +525,8 @@ 6B21259A071D935F0044339D /* SFHFKeychainUtils.m */, 6B4324FB08C6DD8C00C26737 /* SFHFFaviconCache.h */, 6B4324FC08C6DD8C00C26737 /* SFHFFaviconCache.m */, + 6B557A0008D34E74004D4A2A /* NSArray+IndexSetAdditions.h */, + 6B557A0108D34E74004D4A2A /* NSArray+IndexSetAdditions.m */, ); name = Utilities; sourceTree = ""; @@ -551,6 +620,7 @@ 6B6475F30867E2F800CD0EC9 /* EBIconAndTextCell.h in Headers */, 6B6475F50867E31500CD0EC9 /* NSFileManager+ESBExtensions.h in Headers */, 6BE1ED1708C82BCD003EDABC /* SFHFFaviconCache.h in Headers */, + 6B557A0208D34E74004D4A2A /* NSArray+IndexSetAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -683,6 +753,70 @@ 1.0 +"; + productType = "com.apple.product-type.bundle"; + }; + 6B491C9208D35E1700B6E3C4 /* Convert Tags to Strings */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6B491C9908D35E1700B6E3C4 /* Build configuration list for PBXNativeTarget "Convert Tags to Strings" */; + buildPhases = ( + 6B491C8F08D35E1700B6E3C4 /* Resources */, + 6B491C9108D35E1700B6E3C4 /* Frameworks */, + 6B491D2708D361F600B6E3C4 /* AppleScript */, + ); + buildRules = ( + ); + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; + INFOPLIST_FILE = "Convert Tags to Strings-Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + LIBRARY_STYLE = BUNDLE; + OPTIMIZATION_CFLAGS = ""; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Carbon, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Convert Tags to Strings"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + }; + dependencies = ( + ); + name = "Convert Tags to Strings"; + productName = "Convert Tags to Strings"; + productReference = 6B491C9308D35E1700B6E3C4 /* Convert Tags to Strings.caction */; + productSettingsXML = " + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Convert Tags to Strings + CFBundleIdentifier + com.yourcompany.Convert_Tags_to_Strings + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CSResourcesFileMapped + yes + + "; productType = "com.apple.product-type.bundle"; }; @@ -724,6 +858,9 @@ WRAPPER_EXTENSION = app; }; dependencies = ( + 6B557A4508D35531004D4A2A /* PBXTargetDependency */, + 6B557A4708D35536004D4A2A /* PBXTargetDependency */, + 6B491CBB08D35EA700B6E3C4 /* PBXTargetDependency */, ); name = Cocoal.icio.us; productInstallPath = "$(HOME)/Applications"; @@ -750,6 +887,7 @@ 8D1107260486CEB800E47090 /* Cocoal.icio.us */, 6B47BEF908633D0800636CB2 /* Convert Posts to URLs */, 6B47BF5A086345A400636CB2 /* Cocoalicious Definition */, + 6B491C9208D35E1700B6E3C4 /* Convert Tags to Strings */, ); }; /* End PBXProject section */ @@ -759,7 +897,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6B47BF510863443C00636CB2 /* main.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -773,6 +910,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 6B491C8F08D35E1700B6E3C4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D1107290486CEB800E47090 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -854,11 +998,30 @@ 6B6475F40867E2FB00CD0EC9 /* EBIconAndTextCell.m in Sources */, 6B6475F60867E31600CD0EC9 /* NSFileManager+ESBExtensions.m in Sources */, 6BE1ED1808C82BD0003EDABC /* SFHFFaviconCache.m in Sources */, + 6B557A0308D34E74004D4A2A /* NSArray+IndexSetAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 6B491CBB08D35EA700B6E3C4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6B491C9208D35E1700B6E3C4 /* Convert Tags to Strings */; + targetProxy = 6B491CBA08D35EA700B6E3C4 /* PBXContainerItemProxy */; + }; + 6B557A4508D35531004D4A2A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6B47BEF908633D0800636CB2 /* Convert Posts to URLs */; + targetProxy = 6B557A4408D35531004D4A2A /* PBXContainerItemProxy */; + }; + 6B557A4708D35536004D4A2A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6B47BF5A086345A400636CB2 /* Cocoalicious Definition */; + targetProxy = 6B557A4608D35536004D4A2A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -876,14 +1039,6 @@ name = MainMenu.nib; sourceTree = ""; }; - 6B47BF4F0863443C00636CB2 /* main.nib */ = { - isa = PBXVariantGroup; - children = ( - 6B47BF500863443C00636CB2 /* English */, - ); - name = main.nib; - sourceTree = ""; - }; 6B47BF5F086345CF00636CB2 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -896,6 +1051,95 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 6B491C9A08D35E1700B6E3C4 /* Development */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Scripting/Automator/Convert Tags to Strings/Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + LIBRARY_STYLE = STATIC; + OPTIMIZATION_CFLAGS = "-O0"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Convert Tags to Strings"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = caction; + }; + name = Development; + }; + 6B491C9B08D35E1700B6E3C4 /* Deployment */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Scripting/Automator/Convert Tags to Strings/Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + LIBRARY_STYLE = STATIC; + OPTIMIZATION_CFLAGS = "-O0"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Convert Tags to Strings"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = caction; + }; + name = Deployment; + }; + 6B491C9C08D35E1700B6E3C4 /* Default */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h"; + INFOPLIST_FILE = "Scripting/Automator/Convert Tags to Strings/Info.plist"; + INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles"; + LIBRARY_STYLE = STATIC; + OPTIMIZATION_CFLAGS = "-O0"; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ( + "-framework", + Cocoa, + ); + OTHER_REZFLAGS = ""; + PREBINDING = NO; + PRODUCT_NAME = "Convert Tags to Strings"; + SECTORDER_FLAGS = ""; + WARNING_CFLAGS = ( + "-Wmost", + "-Wno-four-char-constants", + "-Wno-unknown-pragmas", + ); + WRAPPER_EXTENSION = caction; + }; + name = Default; + }; 6BBFD3BA08AD6B1D005A088A /* Development */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1223,6 +1467,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 6B491C9908D35E1700B6E3C4 /* Build configuration list for PBXNativeTarget "Convert Tags to Strings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6B491C9A08D35E1700B6E3C4 /* Development */, + 6B491C9B08D35E1700B6E3C4 /* Deployment */, + 6B491C9C08D35E1700B6E3C4 /* Default */, + ); + defaultConfigurationIsVisible = 0; + }; 6BBFD3B908AD6B1D005A088A /* Build configuration list for PBXNativeTarget "Convert Posts to URLs" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Scripting/AppController-AppleScriptExtensions.m b/Scripting/AppController-AppleScriptExtensions.m index 465db6c..6f4ff90 100644 --- a/Scripting/AppController-AppleScriptExtensions.m +++ b/Scripting/AppController-AppleScriptExtensions.m @@ -16,7 +16,7 @@ @implementation AppController (AppleScriptExtensions) This also should make it easier to change storage method in the future. */ - (int) countOfOrderedPosts { - return [[self posts] count]; + return [[self postsArray] count]; } - (int) indexOfObjectInOrderedPosts: (id) object { @@ -74,6 +74,31 @@ - (id) objectInOrderedTagsAtIndex: (int) index { return [self valueInOrderedTagsAtIndex: index]; } + +- (int) countOfOrderedSelectedPosts { + return [[self selectedPostsArray] count]; +} + +- (int) indexOfObjectInOrderedSelectedPosts: (id) object { + return [[self selectedPostsArray] indexOfObject: object]; +} + +- (id) valueInOrderedSelectedPostsAtIndex: (int) index { + if (index < [self countOfOrderedSelectedPosts]) { + return [[self selectedPostsArray] objectAtIndex: index]; + } else { + return nil; + } +} + +- (id) objectInOrderedSelectedPostsAtIndex: (int) index { + return [self valueInOrderedSelectedPostsAtIndex: index]; +} + +- (NSArray *) orderedSelectedPosts { + return [self selectedPostsArray]; +} + #pragma mark Application Delegate Methods - (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key { @@ -82,6 +107,8 @@ - (BOOL)application:(NSApplication *)sender delegateHandlesKey:(NSString *)key { return YES; } else if ([key isEqualToString:@"orderedTags"]) { return YES; + } else if ([key isEqualToString:@"orderedSelectedPosts"]) { + return YES; } else { return NO; } diff --git a/Scripting/Automator/Convert Posts To URLs/main.applescript b/Scripting/Automator/Convert Posts To URLs/main.applescript index ef5e2f9..ce7b1fa 100644 --- a/Scripting/Automator/Convert Posts To URLs/main.applescript +++ b/Scripting/Automator/Convert Posts To URLs/main.applescript @@ -8,7 +8,9 @@ on run {input, parameters} set output to {} tell application "Cocoalicious" repeat with x in input - set end of output to url of x + if the class of x is post then + set end of output to url of x + end if end repeat end tell return output diff --git a/Scripting/Automator/Convert Tags to Strings/Info.plist b/Scripting/Automator/Convert Tags to Strings/Info.plist new file mode 100644 index 0000000..d10dea6 --- /dev/null +++ b/Scripting/Automator/Convert Tags to Strings/Info.plist @@ -0,0 +1,68 @@ + + + + + AMAccepts + + Container + List + Optional + + Types + + com.scifihifi.cocoalicious.tag + + + AMApplication + Automator + AMCanShowSelectedItemsWhenRun + + AMCanShowWhenRun + + AMCategory + Converter/Filter + AMDefaultParameters + + AMIconName + (* The name of the icon *) + AMKeywords + + AMName + Convert Tag to String + AMProvides + + Container + List + Types + + com.apple.applescript.text-object + + + AMRequiredResources + + CFBundleDevelopmentRegion + English + CFBundleExecutable + Convert Tags To Strings + CFBundleGetInfoString + Convert Tags To Strings version 1.0, Copyright (c) 2005, Buzz Andersen. + CFBundleIconFile + + CFBundleIdentifier + com.scifihifi.cocoalicious.converttagsaction + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Convert Tags To Strings + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + AMAppleScriptAction + + diff --git a/Scripting/Automator/Convert Tags to Strings/main.applescript b/Scripting/Automator/Convert Tags to Strings/main.applescript new file mode 100644 index 0000000..c3ea42c --- /dev/null +++ b/Scripting/Automator/Convert Tags to Strings/main.applescript @@ -0,0 +1,17 @@ +-- main.applescript +-- Convert Posts To URLs + +-- Created by Buzz Andersen on 10.09.05. +-- Copyright 2005 __MyCompanyName__. All rights reserved. + +on run {input, parameters} + set output to {} + tell application "Cocoalicious" + repeat with x in input + if the class of x is tag then + set end of output to name of x + end if + end repeat + end tell + return output +end run diff --git a/Scripting/Automator/Definition/definition.plist b/Scripting/Automator/Definition/definition.plist index 8b07db5..1939dc4 100644 --- a/Scripting/Automator/Definition/definition.plist +++ b/Scripting/Automator/Definition/definition.plist @@ -151,8 +151,9 @@ ~/Library/Automator/Cocoalicious scripts - + end run + find every item on run {input, parameters} @@ -199,7 +200,7 @@ end run end run - + diff --git a/Scripting/Cocoalicious.sdef b/Scripting/Cocoalicious.sdef index 5faf80f..a3d923f 100644 --- a/Scripting/Cocoalicious.sdef +++ b/Scripting/Cocoalicious.sdef @@ -19,6 +19,11 @@ + + + + + diff --git a/Scripting/DCAPIPost-AppleScriptExtensions.m b/Scripting/DCAPIPost-AppleScriptExtensions.m index f6c6e17..81f9eff 100644 --- a/Scripting/DCAPIPost-AppleScriptExtensions.m +++ b/Scripting/DCAPIPost-AppleScriptExtensions.m @@ -25,6 +25,7 @@ - (NSScriptObjectSpecifier *) objectSpecifier { - (void) setURLAsString: (NSString *) newURLString { [self setURL: [NSURL URLWithString: newURLString]]; } + - (NSString *) URLAsString { return [[self URL] absoluteString]; } diff --git a/Utilities/NSArray+IndexSetAdditions.h b/Utilities/NSArray+IndexSetAdditions.h new file mode 100644 index 0000000..04aaf1d --- /dev/null +++ b/Utilities/NSArray+IndexSetAdditions.h @@ -0,0 +1,13 @@ +// +// NSArray+IndexSetAdditions.h +// Delicious Client +// +// Written by Scott Stevenson (see http://theocacao.com/document.page/66 for more information) +// + +#import + + +@interface NSArray (IndexSetAddition) +- (NSArray *)subarrayWithIndexes: (NSIndexSet *)indexes; +@end \ No newline at end of file diff --git a/Utilities/NSArray+IndexSetAdditions.m b/Utilities/NSArray+IndexSetAdditions.m new file mode 100644 index 0000000..24ba955 --- /dev/null +++ b/Utilities/NSArray+IndexSetAdditions.m @@ -0,0 +1,31 @@ +// +// NSArray+IndexSetAdditions.m +// Delicious Client +// +// Created by Buzz Andersen on 9/10/05. +// Copyright 2005 __MyCompanyName__. All rights reserved. +// + +#import "NSArray+IndexSetAdditions.h" + + +@implementation NSArray (IndexSetAddition) + +- (NSArray *) subarrayWithIndexes: (NSIndexSet *)indexes +{ + NSMutableArray *targetArray = [NSMutableArray array]; + unsigned count = [self count]; + + unsigned index = [indexes firstIndex]; + while ( index != NSNotFound ) + { + if ( index < count ) + [targetArray addObject: [self objectAtIndex: index]]; + + index = [indexes indexGreaterThanIndex: index]; + } + + return targetArray; +} + +@end \ No newline at end of file