Skip to content

Commit 7da64a0

Browse files
committed
first commit
1 parent 20bf01c commit 7da64a0

File tree

3 files changed

+238
-0
lines changed

3 files changed

+238
-0
lines changed

core.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/python
2+
# encoding: utf-8
3+
4+
5+
import arrow
6+
from dateutil import tz
7+
from workflow import ICON_CLOCK, ICON_INFO
8+
9+
FORMAT_LIST = (
10+
(ICON_INFO, 'X', 'UTC Timestamp (s)'),
11+
(ICON_INFO, 'x', 'UTC Timestamp (us)'),
12+
(
13+
ICON_CLOCK, 'YYYY-MM-DD HH:mm:ss', 'Date and Time'
14+
),
15+
(
16+
ICON_CLOCK, 'W, DDDD[th day]',
17+
'ISO Week date and Day for year'
18+
),
19+
( # https://www.w3.org/TR/NOTE-datetime
20+
ICON_CLOCK, 'YYYY-MM-DDTHH:mm:ssZZ',
21+
'W3C'
22+
),
23+
(ICON_CLOCK, arrow.FORMAT_RFC850, 'RFC850'),
24+
# FORMAT_RFC3339
25+
)
26+
27+
28+
def parser_query(wf):
29+
"""parser datetime, timezone, shift"""
30+
try:
31+
query = wf.args[0].encode('utf8').strip(' ').rstrip(' ')
32+
33+
if query.isdigit():
34+
query = int(query)
35+
36+
wf.logger.debug('query string:{} {}'.format(type(query), query))
37+
return arrow.get(query), False
38+
39+
except (IndexError, arrow.ParserError):
40+
wf.logger.debug('args:{}'.format(wf.args))
41+
return arrow.get(), True
42+
43+
44+
def create_feedback(time, is_now):
45+
f = list()
46+
for icon, fmt, desc in FORMAT_LIST:
47+
value = time.to(tz.tzlocal()).format(fmt)
48+
# value = t.format(fmt)
49+
50+
f.append({
51+
'title': value,
52+
'subtitle': 'Current {}'.format(desc) if is_now else desc,
53+
'valid': True,
54+
'arg': value,
55+
'icon': icon,
56+
})
57+
58+
return f
59+
60+
61+
def do_convert(wf):
62+
time, is_now = parser_query(wf)
63+
return create_feedback(time, is_now)

entry_point.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/python
2+
# encoding: utf-8
3+
4+
import sys
5+
6+
# Workflow3 supports Alfred 3's new features. The `Workflow` class
7+
# is also compatible with Alfred 2.
8+
from workflow import Workflow3
9+
10+
from core import do_convert
11+
12+
13+
def main(wf):
14+
# The Workflow3 instance will be passed to the function
15+
# you call from `Workflow3.run`.
16+
# Not super useful, as the `wf` object created in
17+
# the `if __name__ ...` clause below is global...
18+
#
19+
# Your imports go here if you want to catch import errors, which
20+
# is not a bad idea, or if the modules/packages are in a directory
21+
# added via `Workflow3(libraries=...)`
22+
# import somemodule
23+
# import anothermodule
24+
25+
# Get args from Workflow3, already in normalized Unicode.
26+
# This is also necessary for "magic" arguments to work.
27+
# args = wf.args
28+
29+
# Do stuff here ...
30+
feedback = do_convert(wf)
31+
32+
# Add an item to Alfred feedback
33+
# wf.add_item(u'Item title', u'Item subtitle')
34+
for item in feedback:
35+
wf.add_item(**item)
36+
37+
# Send output to Alfred. You can only call this once.
38+
# Well, you *can* call it multiple times, but subsequent calls
39+
# are ignored (otherwise the JSON sent to Alfred would be invalid).
40+
wf.send_feedback()
41+
42+
43+
if __name__ == '__main__':
44+
# Create a global `Workflow3` object
45+
wf = Workflow3()
46+
# Call your entry function via `Workflow3.run()` to enable its
47+
# helper functions, like exception catching, ARGV normalization,
48+
# magic arguments etc.
49+
sys.exit(wf.run(main))

info.plist

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
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.rexzhang.alfred-workflow-time</string>
7+
<key>category</key>
8+
<string>Tools</string>
9+
<key>connections</key>
10+
<dict>
11+
<key>A0BEA961-6062-42BD-9606-2257AA07F7AD</key>
12+
<array>
13+
<dict>
14+
<key>destinationuid</key>
15+
<string>E35A1CC1-CA0E-44E7-A39D-DB1C877AC4FC</string>
16+
<key>modifiers</key>
17+
<integer>0</integer>
18+
<key>modifiersubtext</key>
19+
<string></string>
20+
<key>vitoclose</key>
21+
<false/>
22+
</dict>
23+
</array>
24+
</dict>
25+
<key>createdby</key>
26+
<string>Rex Zhang</string>
27+
<key>description</key>
28+
<string>Time Format Convert Tool</string>
29+
<key>disabled</key>
30+
<false/>
31+
<key>name</key>
32+
<string>Time Converter</string>
33+
<key>objects</key>
34+
<array>
35+
<dict>
36+
<key>config</key>
37+
<dict>
38+
<key>alfredfiltersresults</key>
39+
<false/>
40+
<key>alfredfiltersresultsmatchmode</key>
41+
<integer>0</integer>
42+
<key>argumenttreatemptyqueryasnil</key>
43+
<true/>
44+
<key>argumenttrimmode</key>
45+
<integer>0</integer>
46+
<key>argumenttype</key>
47+
<integer>1</integer>
48+
<key>escaping</key>
49+
<integer>102</integer>
50+
<key>keyword</key>
51+
<string>time</string>
52+
<key>queuedelaycustom</key>
53+
<integer>3</integer>
54+
<key>queuedelayimmediatelyinitially</key>
55+
<true/>
56+
<key>queuedelaymode</key>
57+
<integer>0</integer>
58+
<key>queuemode</key>
59+
<integer>1</integer>
60+
<key>runningsubtext</key>
61+
<string></string>
62+
<key>script</key>
63+
<string>/usr/bin/python entry_point.py "{query}"</string>
64+
<key>scriptargtype</key>
65+
<integer>0</integer>
66+
<key>scriptfile</key>
67+
<string>ls</string>
68+
<key>subtext</key>
69+
<string></string>
70+
<key>title</key>
71+
<string>now</string>
72+
<key>type</key>
73+
<integer>0</integer>
74+
<key>withspace</key>
75+
<true/>
76+
</dict>
77+
<key>type</key>
78+
<string>alfred.workflow.input.scriptfilter</string>
79+
<key>uid</key>
80+
<string>A0BEA961-6062-42BD-9606-2257AA07F7AD</string>
81+
<key>version</key>
82+
<integer>3</integer>
83+
</dict>
84+
<dict>
85+
<key>config</key>
86+
<dict>
87+
<key>autopaste</key>
88+
<false/>
89+
<key>clipboardtext</key>
90+
<string>{query}</string>
91+
<key>ignoredynamicplaceholders</key>
92+
<false/>
93+
<key>transient</key>
94+
<false/>
95+
</dict>
96+
<key>type</key>
97+
<string>alfred.workflow.output.clipboard</string>
98+
<key>uid</key>
99+
<string>E35A1CC1-CA0E-44E7-A39D-DB1C877AC4FC</string>
100+
<key>version</key>
101+
<integer>3</integer>
102+
</dict>
103+
</array>
104+
<key>readme</key>
105+
<string></string>
106+
<key>uidata</key>
107+
<dict>
108+
<key>A0BEA961-6062-42BD-9606-2257AA07F7AD</key>
109+
<dict>
110+
<key>xpos</key>
111+
<integer>275</integer>
112+
<key>ypos</key>
113+
<integer>145</integer>
114+
</dict>
115+
<key>E35A1CC1-CA0E-44E7-A39D-DB1C877AC4FC</key>
116+
<dict>
117+
<key>xpos</key>
118+
<integer>425</integer>
119+
<key>ypos</key>
120+
<integer>145</integer>
121+
</dict>
122+
</dict>
123+
<key>webaddress</key>
124+
<string>https://github.com/rexzhang/alfred-workflow-time</string>
125+
</dict>
126+
</plist>

0 commit comments

Comments
 (0)