📄 encsms.py
字号:
import sys
import messaging, inbox
## Uncomment the following line to use a "fake" inbox for emulator testing.
#messaging = None
import appuifw as ui
import e32
from binascii import b2a_base64, a2b_base64
try:
import pycrypt
except Exception, msg:
pycrypt = None
fake_inbox = []
def fake_send(sender, msg):
import time
fake_inbox.append(Message(sender,msg,time.time()))
import time
class SendView:
def __init__(self):
self.text = ui.Text()
ui.app.body = self.text
ui.app.menu = [
(u'Send', self.send),
(u'Back', self.back),
]
def send(self):
txt = self.text.get(0,110)
txt = txt.encode("utf-8")
pw = ui.query(u'Password', 'code')
if pw is None:
return
if pycrypt:
txt = pycrypt.encrypt(txt, pw)
txt = Message.HEADER + b2a_base64(txt).strip()
rcp = ui.query(u'Recipient', 'text')
if rcp is None:
return
ui.note(u"Sending SMS")
if messaging:
messaging.sms_send(rcp, txt)
else:
fake_send(rcp, txt)
ui.note(u"Message sent")
self.text = None
ui.app.body = None
ReadView()
def back(self):
ReadView()
class Message:
HEADER = "#PyCr"
def __init__(self, addr, content, time):
self.addr = addr
self.content = content
self.time = time
def decrypt(self, pw):
data = self.content[len(Message.HEADER):]
data = a2b_base64(data)
if pycrypt is not None:
data = pycrypt.decrypt(data, pw)
try:
return data.decode("utf-8")
except UnicodeError:
return "(unable to decrypt message: invalid password)"
class ReadView:
def __init__(self):
ui.app.menu = [
(u'Open', self.on_select),
(u'New Message', self.send),
(u'Refresh', self.refresh),
(u'Quit', smsapp.quit),
]
if smsapp.msgs is None:
self.refresh()
else:
self.update_lb()
def refresh(self):
msgs = []
if messaging:
ibx = inbox.Inbox()
ids = ibx.sms_messages()
for id in ids:
cnt = ibx.content(id)
t = ibx.time(id)
if cnt.startswith(Message.HEADER):
msgs.append(Message(ibx.address(id), cnt, t))
else:
msgs = fake_inbox
smsapp.msgs = msgs
self.update_lb()
def update_lb(self):
msgs = smsapp.msgs
if not msgs:
ui.app.body = None
return
items = []
for msg in msgs:
items.append(unicode("From: %s" % msg.addr))
lb = ui.Listbox(items, self.on_select)
ui.app.body = lb
def on_select(self):
lb = ui.app.body
if lb is None:
return
idx = lb.current()
msg = smsapp.msgs[idx]
MsgView(msg)
def send(self):
SendView()
class MsgView:
def __init__(self, msg):
pw = ui.query(u'Password', 'code')
if pw is None:
ReadView()
return
self.msg = msg
self.text = ui.Text(msg.decrypt(pw))
ui.app.menu = [
(u'Back', self.back),
]
ui.app.body = self.text
def back(self):
ReadView()
class EncSMSApp:
def __init__(self):
self.lock = e32.Ao_lock()
ui.app.screen = 'large'
self.msgs = None
def run(self):
# Save the existing exit_key_handler from the Ensymble wrapper
old = ui.app.exit_key_handler
ui.app.exit_key_handler = self.quit
ReadView()
self.lock.wait()
ui.app.menu = []
ui.app.body = None
ui.app.exit_key_handler = old
def quit(self):
self.lock.signal()
smsapp = EncSMSApp()
smsapp.run()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -