1
2
3
4
5
6
7
8
9
10 "Deals with SMS import/export stuff"
11
12 from __future__ import with_statement
13 from email.generator import Generator
14 from email.mime.text import MIMEText
15 from email.utils import formatdate
16
17
18 import wx
19
20
21 import bptime
22 import guihelper
23 import sms
24
25
28 super(ExportSMSDialog, self).__init__(parent, -1, title)
29 self._smswidget=parent.GetActiveSMSWidget()
30 self._sel_data=self._smswidget.get_selected_data()
31 self._data=self._smswidget.get_data()
32
33 vbs=wx.BoxSizer(wx.VERTICAL)
34 hbs=wx.BoxSizer(wx.HORIZONTAL)
35 hbs.Add(wx.StaticText(self, -1, "File"), 0, wx.ALL|wx.ALIGN_CENTRE, 5)
36 self.filenamectrl=wx.TextCtrl(self, -1, "sms_export")
37 hbs.Add(self.filenamectrl, 1, wx.ALL|wx.EXPAND, 5)
38 self.browsectrl=wx.Button(self, wx.NewId(), "Browse...")
39 hbs.Add(self.browsectrl, 0, wx.ALL|wx.EXPAND, 5)
40 vbs.Add(hbs, 0, wx.EXPAND|wx.ALL, 5)
41
42 vbs.Add(self.GetSelectionGui(self), 5, wx.EXPAND|wx.ALL, 5)
43
44 vbs.Add(wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL), 0, wx.EXPAND|wx.ALL,5)
45 vbs.Add(self.CreateButtonSizer(wx.OK|wx.CANCEL), 0, wx.ALIGN_CENTER|wx.ALL, 5)
46
47 wx.EVT_BUTTON(self, self.browsectrl.GetId(), self.OnBrowse)
48 wx.EVT_BUTTON(self, wx.ID_OK, self.OnOk)
49
50 self.SetSizer(vbs)
51 self.SetAutoLayout(True)
52 vbs.Fit(self)
53
54 _formats=('mbox', 'CSV')
55 _wildcards={ _formats[0]: 'mbox files (*.mbox)|*.mbox',
56 _formats[1]: 'CSV files (*.csv)|*.csv',
57 }
59 hbs=wx.BoxSizer(wx.HORIZONTAL)
60 rbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, "SMS Messages"), wx.VERTICAL)
61 lsel=len(self._sel_data)
62 lall=len(self._data)
63 self.rows_selected=wx.RadioButton(self, wx.NewId(), "Selected (%d)" % (lsel,), style=wx.RB_GROUP)
64 self.rows_all=wx.RadioButton(self, wx.NewId(), "All (%d)" % (lall,))
65 if lsel==0:
66 self.rows_selected.Enable(False)
67 self.rows_selected.SetValue(0)
68 self.rows_all.SetValue(1)
69 rbs.Add(self.rows_selected, 0, wx.EXPAND|wx.ALL, 2)
70 hbs.Add(rbs, 3, wx.EXPAND|wx.ALL, 5)
71 rbs.Add(self.rows_all, 0, wx.EXPAND|wx.ALL, 2)
72 vbs=wx.StaticBoxSizer(wx.StaticBox(self, -1, 'Export Format'),
73 wx.VERTICAL)
74 self._format=wx.ComboBox(self, wx.NewId(),
75 value=self._formats[0],
76 choices=self._formats,
77 style=wx.CB_READONLY)
78 vbs.Add(self._format, 0, wx.EXPAND|wx.ALL, 5)
79 hbs.Add(vbs, 3, wx.EXPAND|wx.ALL, 5)
80 return hbs
81
89
111
132
134 if v:
135 return 'Yes'
136 return 'No'
144
145 _csv_template=(
146 ('Date', 'datetime', _datetime_str),
147 ('From', '_from', None),
148 ('To', '_to', None),
149 ('Subj', 'subject', None),
150 ('Text', 'text', None),
151 ('Priority', 'priority', _priority_str),
152 ('Read', 'read', _yesno_str),
153 ('Locked', 'locked', _yesno_str),
154 ('Callback', 'callback', None),
155 ('Folder', 'folder', None))
157
158
159 fp.write(','.join(['"'+e[0]+'"' for e in self._csv_template])+'\n')
160
161 _keys=sms.keys()
162 _keys.sort()
163 for k in _keys:
164 try:
165 e=sms[k]
166 _l=[]
167 for _c in self._csv_template:
168 if _c[2] is None:
169 _s=str(getattr(e, _c[1], ''))
170 else:
171 _s=_c[2](self, getattr(e, _c[1], None))
172 _l.append('"'+_s.replace('"', '')+'"')
173 fp.write(','.join(_l)+'\n')
174 except:
175 if __debug__:
176 raise
177