File tree Expand file tree Collapse file tree 9 files changed +7529
-0
lines changed Expand file tree Collapse file tree 9 files changed +7529
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Mac OSX Finder caches
2
+ .DS_Store
3
+
4
+ # Downloaded caches
5
+ Caches
Original file line number Diff line number Diff line change
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'json'
4
+
5
+
6
+ HOST = "http://raw.githubusercontent.com"
7
+ WORKFLOW_PATH = "~/Library/Application\\ Support/Alfred\\ 2/Alfred.alfredpreferences/workflows"
8
+ FILE_CACHE = "workflow_api.json"
9
+ CACHES_DIRECTORY = "./Caches"
10
+
11
+ module Workflow
12
+ require "./Library/workflow/list"
13
+ require "./Library/workflow/remote"
14
+ require "./Library/workflow/curl"
15
+
16
+ def self . index
17
+ workflows = Workflow ::Remote . index ( )
18
+ puts Workflow ::List . generate_xml ( workflows )
19
+ end
20
+
21
+ def self . search
22
+ query = ARGV [ 1 ]
23
+ if query && query != ""
24
+ workflows = Workflow ::Remote . search ( query )
25
+ puts Workflow ::List . generate_xml ( workflows )
26
+ else
27
+ self . index ( )
28
+ end
29
+ end
30
+
31
+ def self . download
32
+ id = ARGV [ 1 ]
33
+ workflow = Workflow ::Remote . get ( id )
34
+ workflow_download_link = workflow [ "workflow_download_link" ]
35
+ workflow_file = workflow [ "workflow_file" ]
36
+ Workflow ::Curl . download ( workflow_download_link , workflow_file )
37
+ end
38
+ end
39
+
40
+ ########################## Script goes here
41
+ case ARGV [ 0 ]
42
+ when "index"
43
+ if ARGV [ 1 ] . nil?
44
+ Workflow . index
45
+ else
46
+ Workflow . search
47
+ end
48
+
49
+ when "download"
50
+ Workflow . download
51
+ end
Original file line number Diff line number Diff line change
1
+ require 'open-uri'
2
+
3
+ module Workflow
4
+ class Curl
5
+ def self . download ( workflow_download_link , workflow_file )
6
+ # create a temp file
7
+ src = open ( workflow_download_link )
8
+ puts workflow_download_link
9
+ type = src . content_type
10
+
11
+ if type == "application/zip"
12
+ filepath = '#{CACHES_DIRECTORY}/tmp.zip'
13
+ else
14
+ filepath = "#{ CACHES_DIRECTORY } /#{ workflow_file } "
15
+ end
16
+
17
+ open ( filepath , 'wb' ) do |file |
18
+ file << src . read
19
+ end
20
+
21
+ src . close ( )
22
+ src . unlink ( )
23
+
24
+ filename = File . basename ( filepath , File . extname ( filepath ) )
25
+ if type == 'application/zip'
26
+ # extract zip file
27
+ puts `cd #{ CACHES_DIRECTORY } && unzip tmp.zip && rm tmp.zip`
28
+ end
29
+ puts `cd #{ CACHES_DIRECTORY } && unzip #{ workflow_file } -d #{ WORKFLOW_PATH } /#{ filename } `
30
+ end
31
+ end
32
+ end
Original file line number Diff line number Diff line change
1
+ module Workflow
2
+ class List
3
+ def self . generate_xml ( workflows )
4
+ xml = [ ]
5
+ xml << "<?xml version='1.0'?><items>"
6
+
7
+ if workflows . empty?
8
+ xml << "" "
9
+ <item valid='no'>
10
+ <title>No results</title>
11
+ </item>" ""
12
+ else
13
+ workflows . each do |workflow |
14
+ xml << "" "
15
+ <item uid='#{ workflow [ "workflow_name" ] } ' arg='#{ workflow [ "workflow_download_link" ] } '>
16
+ <title>#{ workflow [ "workflow_name" ] } </title>
17
+ <subtitle>#{ workflow [ "workflow_description_small" ] } </subtitle>
18
+ <icon>icon.png</icon>
19
+ </item>" ""
20
+ end
21
+ end
22
+
23
+ xml << "</items>"
24
+ xml . join
25
+ end
26
+ end
27
+ end
Original file line number Diff line number Diff line change
1
+ module Workflow
2
+ class Remote
3
+ @@workflows = JSON . parse ( IO . read ( "#{ FILE_CACHE } " ) )
4
+
5
+ def self . index ( query = nil )
6
+ return @@workflows
7
+ end
8
+
9
+ def self . get ( id )
10
+ @@workflows . each do |workflow |
11
+ if workflow [ "workflow_download_link" ] == id
12
+ return workflow
13
+ end
14
+ end
15
+ end
16
+
17
+ def self . search ( query )
18
+ ret = Array . new
19
+ @@workflows . each do |workflow |
20
+ haystack = workflow [ "workflow_name" ]
21
+ if !haystack . downcase . include? ( query . downcase )
22
+ else
23
+ ret . push workflow
24
+ end
25
+ end
26
+ return ret
27
+ end
28
+ end
29
+ end
Original file line number Diff line number Diff line change
1
+ # Workflow Manager for Alfred
2
+
3
+
4
+ ## Usage
5
+
6
+ Type ` af {query} ` to search workflows and then select the workflow you want and hit ` enter ` . Done!
7
+
8
+
9
+ ## Thanks to...
10
+
11
+ * [ Adam Butler] ( https://github.com/adambutler ) and his [ alfred-workflow-package-manager-workflow repository] ( https://github.com/adambutler/alfred-workflow-package-manager-workflow )
12
+ * [ hzlzh] ( https://github.com/hzlzh ) and his [ ` workflow_api.json ` ] ( workflow_api.json )
Original file line number Diff line number Diff line change
1
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version =" 1.0" >
4
+ <dict >
5
+ <key >bundleid </key >
6
+ <string >com.will.workflow </string >
7
+ <key >category </key >
8
+ <string >Tools </string >
9
+ <key >connections </key >
10
+ <dict >
11
+ <key >7DD3BDE5-A157-42E5-9376-F681FB50A4EE </key >
12
+ <array >
13
+ <dict >
14
+ <key >destinationuid </key >
15
+ <string >06C9C4A9-38CE-441A-8D06-E2F2D8B39B60 </string >
16
+ <key >modifiers </key >
17
+ <integer >0 </integer >
18
+ <key >modifiersubtext </key >
19
+ <string ></string >
20
+ </dict >
21
+ </array >
22
+ </dict >
23
+ <key >createdby </key >
24
+ <string >Will </string >
25
+ <key >description </key >
26
+ <string >Workflow Manager for Alfred </string >
27
+ <key >disabled </key >
28
+ <false />
29
+ <key >name </key >
30
+ <string >Workflow Manager </string >
31
+ <key >objects </key >
32
+ <array >
33
+ <dict >
34
+ <key >config </key >
35
+ <dict >
36
+ <key >argumenttype </key >
37
+ <integer >1 </integer >
38
+ <key >escaping </key >
39
+ <integer >127 </integer >
40
+ <key >keyword </key >
41
+ <string >af </string >
42
+ <key >queuedelaycustom </key >
43
+ <integer >3 </integer >
44
+ <key >queuedelayimmediatelyinitially </key >
45
+ <false />
46
+ <key >queuedelaymode </key >
47
+ <integer >0 </integer >
48
+ <key >queuemode </key >
49
+ <integer >1 </integer >
50
+ <key >runningsubtext </key >
51
+ <string >Loading </string >
52
+ <key >script </key >
53
+ <string >ruby Library/workflow.rb index {query} </string >
54
+ <key >title </key >
55
+ <string >Search for Workflows </string >
56
+ <key >type </key >
57
+ <integer >0 </integer >
58
+ <key >withspace </key >
59
+ <true />
60
+ </dict >
61
+ <key >type </key >
62
+ <string >alfred.workflow.input.scriptfilter </string >
63
+ <key >uid </key >
64
+ <string >7DD3BDE5-A157-42E5-9376-F681FB50A4EE </string >
65
+ <key >version </key >
66
+ <integer >0 </integer >
67
+ </dict >
68
+ <dict >
69
+ <key >config </key >
70
+ <dict >
71
+ <key >escaping </key >
72
+ <integer >127 </integer >
73
+ <key >script </key >
74
+ <string >ruby Library/workflow.rb download {query} </string >
75
+ <key >type </key >
76
+ <integer >0 </integer >
77
+ </dict >
78
+ <key >type </key >
79
+ <string >alfred.workflow.action.script </string >
80
+ <key >uid </key >
81
+ <string >06C9C4A9-38CE-441A-8D06-E2F2D8B39B60 </string >
82
+ <key >version </key >
83
+ <integer >0 </integer >
84
+ </dict >
85
+ </array >
86
+ <key >readme </key >
87
+ <string ></string >
88
+ <key >uidata </key >
89
+ <dict >
90
+ <key >06C9C4A9-38CE-441A-8D06-E2F2D8B39B60 </key >
91
+ <dict >
92
+ <key >ypos </key >
93
+ <real >60 </real >
94
+ </dict >
95
+ <key >7DD3BDE5-A157-42E5-9376-F681FB50A4EE </key >
96
+ <dict >
97
+ <key >ypos </key >
98
+ <real >60 </real >
99
+ </dict >
100
+ </dict >
101
+ <key >webaddress </key >
102
+ <string >https://github.com/githubutilities/alfred-workflow-manager </string >
103
+ </dict >
104
+ </plist >
You can’t perform that action at this time.
0 commit comments