Skip to content

Commit 5c2de42

Browse files
committed
Add time shift support
1 parent 47d1857 commit 5c2de42

File tree

3 files changed

+64
-18
lines changed

3 files changed

+64
-18
lines changed

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66
## Get it
77
Download from [Github release](https://github.com/rexzhang/alfred-workflow-time-converter/releases), double click package file to install.
88

9+
## History
10+
11+
### 0.1.0
12+
- first release
13+
14+
### 0.2.0(not release yet)
15+
- support time zone
16+
- support time shift
17+
918
## Will
10-
- time zone
11-
- time shift
19+
- multi time shift args?

core.py

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414
'icon': ICON_ERROR,
1515
}]
1616

17+
SHIFT_UNIT_MAP = {
18+
'ms': 'microsecond',
19+
's': 'second',
20+
'm': 'minute',
21+
'h': 'hour',
22+
'd': 'day',
23+
'w': 'weeks',
24+
'M': 'month',
25+
'q': 'quarters',
26+
'y': 'year',
27+
}
28+
1729
FORMAT_LIST = (
1830
(ICON_NOTE, True, 'X', 'Timestamp(s)'),
1931
(ICON_NOTE, True, 'x', 'Timestamp(us)'),
@@ -26,14 +38,15 @@
2638
),
2739
( # https://www.w3.org/TR/NOTE-datetime
2840
ICON_CLOCK, False, 'YYYY-MM-DDTHH:mm:ssZZ',
29-
'W3C Format'
41+
'ISO 8601/W3C Format'
3042
),
3143
(ICON_CLOCK, False, arrow.FORMAT_RFC850, 'RFC850 Format'),
44+
(ICON_CLOCK, False, arrow.FORMAT_RFC3339, 'RFC3339 Format'),
3245
# FORMAT_RFC3339
3346
)
3447

3548
RE_TIMEZONE = '^[+-][0-9]{2}$'
36-
RE_SHIFT = '^[+-][0-9]+[smhdmy]$'
49+
RE_SHIFT = '^[+-][0-9]+[smhdwmy]$'
3750

3851

3952
class Time(object):
@@ -72,7 +85,7 @@ def do_parser(self):
7285
if not self._parser_extend_info():
7386
break
7487

75-
return self._parser_datetime()
88+
self._parser_datetime()
7689

7790
def _parser_extend_info(self):
7891
"""parser timezone, shift"""
@@ -88,17 +101,23 @@ def _parser_extend_info(self):
88101
if info.upper() == 'UTC' or info == '+00' or info == '-00':
89102
self.query = query
90103
self.zone = 'UTC'
91-
self.wf.logger.debug('found zone info:'.format(self.zone))
104+
self.wf.logger.debug('found zone info:{}'.format(self.zone))
92105
return True
93106

94107
r = re.match(RE_TIMEZONE, info)
95108
if r:
96109
self.query = query
97110
self.zone = info
98-
self.wf.logger.debug('found zone info:'.format(self.zone))
111+
self.wf.logger.debug('found zone info:{}'.format(self.zone))
99112
return True
100113

101114
# time shift TODO
115+
r = re.match(RE_SHIFT, info)
116+
if r:
117+
self.query = query
118+
self.shift = info
119+
self.wf.logger.debug('found shift info:{}'.format(self.shift))
120+
return True
102121

103122
return False
104123

@@ -113,17 +132,30 @@ def _parser_datetime(self):
113132
return True
114133

115134
except arrow.ParserError:
116-
self.wf.logger.debug(
117-
'parser datetime error,query string:{}'.format(self.query)
118-
)
135+
pass
119136

120137
if self.query == 'now' or self.query == '':
121138
self.now = True
122139
self.time = arrow.now()
123140
return True
124141

142+
self.wf.logger.debug(
143+
'parser datetime error,query string:{}'.format(self.query)
144+
)
125145
return False
126146

147+
def _apply_shift(self):
148+
if self.time is None or self.shift is None:
149+
return
150+
151+
index = len(self.shift) - 1
152+
unit = self.shift[index]
153+
number = int(self.shift[:index])
154+
kwargs = {
155+
SHIFT_UNIT_MAP[unit]: number,
156+
}
157+
self.time = self.time.shift(**kwargs)
158+
127159
def get_feedback(self):
128160
if self.time is None:
129161
return DEFAULT_FEEDBACK
@@ -135,20 +167,26 @@ def get_feedback(self):
135167

136168
f = list()
137169
for icon, force_utc, fmt, desc_format in FORMAT_LIST:
170+
# time shift
171+
if self.shift:
172+
desc_shift = '{}, '.format(self.shift)
173+
else:
174+
desc_shift = ''
138175

176+
# time znone
139177
if force_utc:
140178
self.time = self.time.to('UTC')
141-
desc_zone = 'UTC, '
179+
desc_zone = 'UTC'
142180
elif self.zone and not force_utc:
143181
self.time = self.time.to(self.zone)
144-
desc_zone = '{}, '.format(self.zone)
182+
desc_zone = self.zone
145183
else:
146184
self.time = self.time.to('local')
147-
desc_zone = 'Local, '
185+
desc_zone = 'Local'
148186

149187
value = self.time.format(fmt)
150-
subtitle = '{}{}{}'.format(
151-
desc_now, desc_zone, desc_format
188+
subtitle = '{}{}[{}] {}'.format(
189+
desc_now, desc_shift, desc_zone, desc_format
152190
)
153191
f.append({
154192
'title': value,

info.plist

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<plist version="1.0">
44
<dict>
55
<key>bundleid</key>
6-
<string>com.rexzhang.alfred-workflow-time</string>
6+
<string>com.rexzhang.alfred-workflow-time-converter</string>
77
<key>category</key>
88
<string>Tools</string>
99
<key>connections</key>
@@ -23,7 +23,7 @@
2323
</array>
2424
</dict>
2525
<key>createdby</key>
26-
<string>Rex Zhang</string>
26+
<string>Rex Zhang &lt;[email protected]&gt;</string>
2727
<key>description</key>
2828
<string>Time Format Convert Tool</string>
2929
<key>disabled</key>
@@ -121,6 +121,6 @@
121121
</dict>
122122
</dict>
123123
<key>webaddress</key>
124-
<string>https://github.com/rexzhang/alfred-workflow-time</string>
124+
<string>https://github.com/rexzhang/alfred-workflow-time-converter</string>
125125
</dict>
126126
</plist>

0 commit comments

Comments
 (0)