-
Notifications
You must be signed in to change notification settings - Fork 6
/
event.py
160 lines (121 loc) · 4.89 KB
/
event.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# encoding:utf-8
from __future__ import print_function, unicode_literals
import sys
import os
import sqlite3
import random
import unicodedata as ud
import workflow
from workflow import Workflow
from workflow import Workflow3
from consts import *
from util import Util
GITHUB_SLUG = 'xeric/alfred-outlook'
UPDATE_FREQUENCY = 7
log = None
APPLE_SCRIPT = """
set theStartDate to current date
set hours of theStartDate to 0
set minutes of theStartDate to 0
set seconds of theStartDate to 0
set theEndDate to theStartDate + (2 * days) - 1
tell application "Microsoft Outlook"
set allEvents to every calendar event where its start time is greater than or equal to theStartDate and end time is less than or equal to theEndDate
repeat with aEvent in allEvents
set eventProps to properties of aEvent
log eventProps
end repeat
end tell
"""
SELECT_STR = """Select PathToDataFile, Contact_DisplayName, Record_ExchangeOrEasId
from Contacts
where Record_ExchangeOrEasId in (%s)
"""
def main(wf):
query = wf.decode(sys.argv[1])
handle(wf, query)
log.info('searching contact with keyword')
def handle(wf, query):
if len(query) < 1 or (not str(ud.name(query[0])).startswith("CJK UNIFIED") and len(query) < 2):
wf.add_item(title='Type more characters to search...',
subtitle='too less characters will lead huge irrelevant results',
arg='',
uid=str(random.random()),
valid=False
)
else:
# run a script to get exchange id
exchangeIdAndEmail = workflow.util.run_applescript(APPLE_SCRIPT % (query, query,))
log.info(exchangeIdAndEmail)
idEmnailList = exchangeIdAndEmail.split(",")
contacts = None
log.info("found contact total number: " + str(len(idEmnailList) / 2))
homePath = os.environ['HOME']
profile = wf.stored_data(KEY_PROFILE) or OUTLOOK_DEFAULT_PROFILE
# outlookData = homePath + '/outlook/'
outlookData = homePath + OUTLOOK_DATA_PARENT + profile + OUTLOOK_DATA_FOLDER
log.info(outlookData)
if not Util.validateProfile(outlookData):
wf.add_item(title='Profile: ' + profile + ' is not valid...',
subtitle='please use olkc profile to switch profile',
arg='olkc profile ',
uid='err' + str(random.random()),
valid=False)
elif len(contacts) == 0:
wf.add_item(title='No matched contact found...',
subtitle='please check the keyword and try again',
uid='err' + str(random.random()),
valid=False)
else:
con = sqlite3.connect(outlookData + OUTLOOK_SQLITE_FILE)
cur = con.cursor()
dynamicVarsQM = ""
dynamicVars = []
for x in contacts:
if x[0]:
dynamicVarsQM = dynamicVarsQM + "?,"
dynamicVars.append(x[0])
dynamicVarsQM = dynamicVarsQM[:-1]
res = cur.execute(SELECT_STR % dynamicVarsQM, tuple(dynamicVars))
resultCount = cur.rowcount
log.info("got " + str(resultCount) + " results found")
if resultCount:
for row in cur:
relativePath = row[0]
dispName = row[1]
excid = row[2] or ""
fillContacts(contacts, relativePath, dispName, excid)
cur.close()
# id, email, name, relative path
for i, contact in enumerate(contacts):
if i >= 20:
break
log.info(contact)
path = outlookData + contact[3] if contact[3] else None
email = contact[1]
it = wf.add_item(title=wf.decode(contact[2] or ""),
subtitle=(email if email and email.strip() else "No Email Found"),
valid=True,
uid=str(contact[0]),
arg=path or email,
type='file' if path else "")
if not Util.isAlfredV2(wf):
mod = it.add_modifier(key='ctrl',
subtitle="Compose a mail to " + email,
arg=email,
valid=True)
wf.send_feedback()
if __name__ == '__main__':
wf = Workflow(update_settings={
'github_slug': GITHUB_SLUG,
'frequency': UPDATE_FREQUENCY
})
if not Util.isAlfredV2(wf):
wf = Workflow3(update_settings={
'github_slug': GITHUB_SLUG,
'frequency': UPDATE_FREQUENCY
})
log = wf.logger
if wf.update_available:
wf.start_update()
sys.exit(wf.run(main))