import time
import config
import os.path
import utils
from smtp import SmsMessage_KT, SmsInfoHandler, IsmcMessageHandler, MmsHeaderHandler, IsmcContentHandler
import mms_net_define
FILE, TIME, READ, EMS, NUMBER, SUMMARY = range(6)
IN_BOX = 0
OUT_BOX = 1
SENT_BOX = 2
DRAFT_BOX = 3
def get_summary(m):
s = m.summary(20)
s = unicode(s, 'utf-8')
s = s.replace('\n', '')
s = s.replace('\r', '')
s = s.replace('\t', '')
s = s.strip()
return s
def list_get(list, f):
for l in list:
if l[0] == f:
return l
return None
def get_sent_time(m):
t = m.time
#assert(len(t) == 7)
t = (t[0], t[1], t[2], t[3], t[4], t[5], t[6], 0, 0)
return time.mktime(t)
'''
class MessageManagerBase:
received_path = ''
received_info_path = ''
personal_path = ''
personal_info_path = ''
sent_path = ''
sent_info_path = ''
draft_path = ''
draft_info_path = ''
def __init__(self):
if self.received_path: utils.make_dir(self.received_path)
if self.personal_path: utils.make_dir(self.personal_path)
if self.sent_path: utils.make_dir(self.sent_path)
if self.draft_path: utils.make_dir(self.draft_path)
self.received_info = []
self.personal_info = []
self.sent_info = []
self.draft_info = []
self.reload()
def reload(self):
self.received_info = []
self.personal_info = []
self.sent_info = []
self.draft_info = []
try:
if self.received_info_path:
for l in file(self.received_info_path):
l = l.strip()
if not l:
continue
tokens = l.split(',', 6)
if len(tokens) != 7:
continue
filename, t, read, ems, number, report, summary = tokens
summary = unicode(summary, 'utf-8')
try:
t = int(t)
ems = int(ems)
read = int(read)
report = int(report)
except:
continue
if os.path.exists(filename):
self.received_info.append((filename, t, read, ems, number, report, summary))
except IOError:
pass
try:
if self.personal_info_path:
for l in file(self.personal_info_path):
l = l.strip()
if not l:
continue
tokens = l.split(',', 6)
if len(tokens) != 7:
continue
filename, t, sent, ems, number, report, summary = tokens
if not os.path.exists(filename):
continue
summary = unicode(summary, 'utf-8')
try:
t = int(t)
sent = int(sent)
ems = int(ems)
report = int(report)
except:
continue
if os.path.exists(filename):
self.personal_info.append((filename, t, sent, ems, number, report, summary))
except IOError:
pass
try:
if self.sent_info_path:
for l in file(self.sent_info_path):
l = l.strip()
if not l:
continue
tokens = l.split(',', 6)
if len(tokens) != 7:
continue
filename, t, sent, ems, number, report, summary = tokens
if not os.path.exists(filename):
continue
summary = unicode(summary, 'utf-8')
try:
t = int(t)
sent = int(sent)
ems = int(ems)
report = int(report)
except:
continue
if os.path.exists(filename):
self.sent_info.append((filename, t, sent, ems, number, report, summary))
except IOError:
pass
try:
if self.draft_info_path:
for l in file(self.draft_info_path):
l = l.strip()
if not l:
continue
tokens = l.split(',', 6)
if len(tokens) != 7:
continue
filename, t, sent, ems, number, report, summary = tokens
if not os.path.exists(filename):
continue
summary = unicode(summary, 'utf-8')
try:
t = int(t)
sent = int(sent)
ems = int(ems)
report = int(report)
except:
continue
if os.path.exists(filename):
self.draft_info.append((filename, t, sent, ems, number, report, summary))
except IOError:
pass
if self.received_path:
for f,dummy,dummy in utils.get_file_lists(self.received_path):
path = os.path.normpath(self.received_path + f)
if not list_get(self.received_info, path):
m = SmsMessage()
m.load(path)
ems = 0
if len(m.get_pictures()) + len(m.get_melodies()) > 0:
ems = 1
report = 0
if m.type == 'status report':
report = 1
self.received_info.append((path, get_sent_time(m), m.read, ems, m.number, report, get_summary(m)))
del m
if self.personal_path:
for f,dummy,dummy in utils.get_file_lists(self.personal_path):
path = os.path.normpath(self.personal_path + f)
if not list_get(self.personal_info, path):
m = SmsMessage()
m.load(path)
ems = 0
if len(m.get_pictures()) + len(m.get_melodies()) > 0:
ems = 1
report = 0
if m.type == 'status report':
report = 1
self.personal_info.append((path, 0, m.sent, ems, m.number, report, get_summary(m)))
del m
if self.sent_path:
for f,dummy,dummy in utils.get_file_lists(self.sent_path):
path = os.path.normpath(self.sent_path + f)
if not list_get(self.sent_info, path):
m = SmsMessage()
m.load(path)
ems = 0
if len(m.get_pictures()) + len(m.get_melodies()) > 0:
ems = 1
report = 0
if m.type == 'status report':
report = 1
self.sent_info.append((path, 0, m.sent, ems, m.number, report, get_summary(m)))
del m
if self.draft_path:
for f,dummy,dummy in utils.get_file_lists(self.draft_path):
path = os.path.normpath(self.draft_path + f)
if not list_get(self.draft_info, path):
m = SmsMessage()
m.load(path)
ems = 0
if len(m.get_pictures()) + len(m.get_melodies()) > 0:
ems = 1
report = 0
if m.type == 'status report':
report = 1
self.sent_info.append((path, 0, m.sent, ems, m.number, report, get_summary(m)))
del m
self.save_infos()
def save_infos(self):
if self.received_info_path:
f = open(self.received_info_path, 'w')
for data in self.received_info:
file, t, read, ems, number, report, summary = data
f.write('%s,%d,%d,%d,%s,%d,%s\n' % (file, t, read, ems, number, report, summary.encode('utf-8')))
if self.personal_info_path:
f = open(self.personal_info_path, 'w')
for data in self.personal_info:
file, t, sent, ems, number, report, summary = data
f.write('%s,%d,%d,%d,%s,%d,%s\n' % (file, t, sent, ems, number, report, summary.encode('utf-8')))
if self.sent_info_path:
f = open(self.sent_info_path, 'w')
for data in self.sent_info:
file, t, sent, ems, number, report, summary = data
f.write('%s,%d,%d,%d,%s,%d,%s\n' % (file, t, sent, ems, number, report, summary.encode('utf-8')))
if self.draft_info_path:
f = open(self.draft_info_path, 'w')
for data in self.draft_info:
file, t, sent, ems, number, report, summary = data
f.write('%s,%d,%d,%d,%s,%d,%s\n' % (file, t, sent, ems, number, report, summary.encode('utf-8')))
#0 = received, 1 = personal(out), 2 = sent, 3 = draft
def insert_msg(self, m, boxtype=0):
if 0 == boxtype:
path = self.received_path
info = self.received_info
elif 1 == boxtype:
path = self.personal_path
info = self.personal_info
elif 2 == boxtype:
path = self.sent_path
info = self.sent_info
elif 3 == boxtype:
path = self.draft_path
info = self.draft_info
else:
pass
if len(info) >= config.message_entry_max:
import basemodel
raise basemodel.StorageFullError, 'Storage Full'
i = 0
while True:
filename = path + '%08d' % i
if not os.path.exists(filename):
break
i += 1
continue
m.filename = os.path.normpath(filename)
m.save()
ems = 0
if len(m.get_pictures()) + len(m.get_melodies()) > 0:
ems = 1
report = 0
if m.type == 'status report':
report = 1
if 0 == boxtype:#received
info.insert(0, (m.filename, get_sent_time(m), m.read, ems, m.number, report, get_summary(m)))
elif 1 == boxtype:#out
info.insert(0, (filename, 0, m.sent, ems, m.number, report, get_summary(m)))
elif 2 == boxtype:#sent
info.insert(0, (filename, 0, m.sent, ems, m.number, report, get_summary(m)))
elif 3 == boxtype:#draft
info.insert(0, (filename, 0, m.sent, ems, m.number, report, get_summary(m)))
else:
pass
self.save_infos()
def remove_msg(self, m):
if self.received_path:
if m.filename.startswith(self.received_path):
l = list_get(self.received_info, m.filename)
self.received_info.remove(l)
if self.personal_path:
if m.filename.startswith(self.personal_path):
l = list_get(self.personal_info, m.filename)
self.personal_info.remove(l)
if self.sent_path:
if m.filename.startswith(self.sent_path):
l = list_get(self.sent_info, m.filename)
self.sent_info.remove(l)
if self.draft_path:
if m.filename.startswith(self.draft_path):
l = list_get(self.draft_info, m.filename)
self.draft_info.remove(l)
utils.remove_file(m.filename)
self.save_infos()
def count(self):
return len(self.received_info)
def count_unread(self):
count = 0
for file, t, read, ems, number, report, summary in self.received_info:
if not read:
count += 1
return count
def count_personal(self):
return len(self.personal_info)
def count_sent(self):
return len(self.sent_info)
def count_draft(self):
return len(self.draft_info)
def count_allsms(self):
return self.count()+self.count_sent()+self.count_draft()+self.count_personal()
def load_message(self, filename):
for i, info in enumerate(self.received_info):
if info[0] == filename:
file, t, read, ems, number, report, summary = info
self.received_info[i] = (file, t, 1, ems, number, report, summary)
self.save_infos()
m = SmsMessage()
m.load(filename)
if not m.read:
m.read = True
m.save()
return m
def load_message_for_type(self, filename):
m = SmsMessage()
m.load(filename)
return m
def get_received_messages(self):
def cmp_func(i1, i2):
#assert len(i1) == 7
#assert len(i2) == 7
#최근 시간이 위로 올라오게
return cmp(i2[1], i1[1])
self.received_info.sort(cmp_func)
return self.received_info
def get_sent_messages(self):
return self.sent_info
def get_draft_messages(self):
return self.draft_info
def get_personal_messages(self):
return self.personal_info
def remove_all_sent(self):
utils.remove_dir(self.sent_path)
self.sent_info = []
self.save_infos()
def remove_all_draft(self):
utils.remove_dir(self.draft_path)
self.draft_info = []
self.save_infos()
def remove_all_received(self):
utils.remove_dir(self.received_path)
self.received_info = []
self.save_infos()
def remove_all_saved(self):
utils.remove_dir(self.personal_path)
self.personal_info = []
self.save_infos()
def remove_all(self):
self.remove_all_received()
self.remove_all_saved()
self.remove_all_sent()
self.remove_all_draft()
def get_inbox_list(self):
import uiconfig
_list = []
boxtype = 'sms'
date = 0
title = ''
icon = ''
focus = 0
for file,t,read,ems,number,report,summary in self.get_received_messages():
date = t
if number:
from phonedb import phonedb
number = phonedb.get_name(number)
title = number
else:
title = summary
if ems:
if read:
icon = uiconfig.list_icon_ems_read
else:
icon = uiconfig.list_icon_ems_new
elif report:
if read:
icon = uiconfig.list_icon_sms_notify_read
else:
icon = uiconfig.list_icon_sms_notify_new
else:
if read:
icon = uiconfig.list_icon_sms_read
else:
icon = uiconfig.list_icon_sms_new
_list.append(('sms', date, title, icon, focus))
focus += 1
return _list
'''
class MessageManagerBase_KT:
def __init__(self):
self.received_path = ''
self.received_info_path = ''
self.saved_path = ''
self.saved_info_path = ''
self.sent_path = ''
self.sent_info_path = ''
self.draft_path = ''
self.draft_info_path = ''
self.received_info = []
self.saved_info = []
self.sent_info = []
self.draft_info = []
def getReceivedPath(self):
return self.received_path
def setReceivedPath(self, received_path):
self.received_path = received_path
def getReceivedInfoPath(self):
return received_info_path
def setReceivedInfoPath(self, received_info_path):
self.received_info_path = received_info_path
def getSavedPath(self):
return self.saved_path
def setSavedPath(self, saved_path):
self.saved_path = saved_path
def getSavedInfoPath(self):
return saved_info_path
def setSavedInfoPath(self, saved_info_path):
self.saved_info_path = saved_info_path
def getSentPath(self):
return self.sent_path
def setSentPath(self, sent_path):
self.sent_path = sent_path
def getSentInfoPath(self):
return sent_info_path
def setSentInfoPath(self, sent_info_path):
self.sent_info_path = sent_info_path
def getDraftPath(self):
return self.draft_path
def setDraftPath(self, draft_path):
self.draft_path = draft_path
def getDraftInfoPath(self):
return draft_info_path
def setDraftInfoPath(self, draft_info_path):
self.draft_info_path = draft_info_path
def reload(self):
self.received_info = []
self.saved_info = []
self.sent_info = []
self.draft_info = []
try:
if self.received_info_path:
for messageInfo in file(self.received_info_path):
messageInfo = messageInfo.strip()
if not messageInfo:
continue
tokens = messageInfo.split('|')
if os.path.exists(tokens[0]):
self.received_info.append(tokens)
except IOError:
pass
try:
if self.saved_info_path:
for messageInfo in file(self.saved_info_path):
messageInfo = messageInfo.strip()
if not messageInfo:
continue
tokens = messageInfo.split('|')
if os.path.exists(tokens[0]):
self.saved_info.append(tokens)
except IOError:
pass
try:
if self.sent_info_path:
for messageInfo in file(self.sent_info_path):
messageInfo = messageInfo.strip()
if not messageInfo:
continue
tokens = messageInfo.split('|')
if os.path.exists(tokens[0]):
self.sent_info.append(tokens)
except IOError:
pass
try:
if self.draft_info_path:
for messageInfo in file(self.draft_info_path):
messageInfo = messageInfo.strip()
if not messageInfo:
continue
tokens = messageInfo.split('|')
if os.path.exists(tokens[0]):
self.draft_info.append(tokens)
except IOError:
pass
if config.mms_debug:
print 'RECEIVED INFO ===================='
print self.received_info
print 'SAVED INFO ===================='
print self.saved_info
print 'SENT INFO ===================='
print self.sent_info
print 'DRAFT INFO ===================='
print self.draft_info
def save_infos(self, boxType=None):
if boxType == IN_BOX:
f = open(self.received_info_path, 'w')
for data in self.received_info:
f.write('|'.join(data))
f.write(mms_net_define.CRLF)
f.close()
elif boxType == SENT_BOX:
f = open(self.sent_info_path, 'w')
for data in self.sent_info:
f.write('|'.join(data))
f.write(mms_net_define.CRLF)
f.close()
elif boxType == OUT_BOX:
f = open(self.saved_info_path, 'w')
for data in self.saved_info:
f.write('|'.join(data))
f.write(mms_net_define.CRLF)
f.close()
elif boxType == DRAFT_BOX:
f = open(self.draft_info_path, 'w')
for data in self.draft_info:
f.write('|'.join(data))
f.write(mms_net_define.CRLF)
f.close()
else:
print 'ERROR in save_infos'
def saveReceivedMessage(self, receivedMessage):
path = self.received_path
info = self.received_info
if len(info) >= config.message_entry_max:
#import basemodel
#raise basemodel.StorageFullError, 'Storage Full'
return False
smsInfoHandler = SmsInfoHandler()
smsInfoHandler.copyTempToNormal(path, receivedMessage.getSipAbsMessagePath())
smsInfoHandler.setSmsMessageType(receivedMessage.mmsMessageHandler.mmsHeaderHandler.getMmsMessageType())
smsInfoHandler.setMessageTime(receivedMessage.mmsMessageHandler.mmsHeaderHandler.getMmsDate())
smsInfoHandler.setIsRead(mms_net_define.NO)
smsInfoHandler.setSender(receivedMessage.mmsMessageHandler.mmsHeaderHandler.getMmsFrom())
smsInfoHandler.setReceiver(receivedMessage.mmsMessageHandler.mmsHeaderHandler.getMmsTo())
smsInfoHandler.setSmsSubject(receivedMessage.mmsMessageHandler.mmsHeaderHandler.getMmsSubject())
if mms_net_define.DEBUG_MMS_NET:
smsInfoHandler.printVar(1)
info.insert(0, smsInfoHandler.makeInfoList())
self.save_infos(IN_BOX)
return True
def insert_msg(self, m, boxType=0):
if IN_BOX == boxType:
path = self.received_path
info = self.received_info
elif OUT_BOX == boxType:
path = self.saved_path
info = self.saved_info
elif SENT_BOX == boxType:
path = self.sent_path
info = self.sent_info
elif DRAFT_BOX == boxType:
path = self.draft_path
info = self.draft_info
else:
pass
if len(info) >= config.message_entry_max:
import basemodel
raise basemodel.StorageFullError, 'Storage Full'
smsInfoHandler = SmsInfoHandler()
# m ==> SmsIsmcMessage_Send
smsInfoHandler.copyTempToNormal(path, m.getSipAbsMessagePath())
smsInfoHandler.setMessageTime(m.ismcMessageHandler.makeTimeStamp())
smsInfoHandler.setIsRead(mms_net_define.NO)
smsInfoHandler.setReplyTo(m.getSipReplyTo())
smsInfoHandler.setReceiver(m.getTargetFullName())
smsInfoHandler.setSmsMessageType(m.getSipContentType())
smsInfoHandler.setSmsSubject(m.ismcMessageHandler.getIsmcSubject())
if mms_net_define.DEBUG_MMS_NET:
smsInfoHandler.printVar(1)
info.insert(0, smsInfoHandler.makeInfoList())
self.save_infos(boxType)
def remove_msg(self, smsInfoHandler):
filename = smsInfoHandler.getFilename()
boxType = smsInfoHandler.getBoxType()
if boxType == IN_BOX:
l = list_get(self.received_info, filename)
if l:
self.received_info.remove(l)
else:
print 'ERROR in list_get()'
elif boxType == SENT_BOX:
l = list_get(self.sent_info, filename)
if l:
self.sent_info.remove(l)
else:
print 'ERROR in list_get()'
elif boxType == OUT_BOX:
l = list_get(self.saved_info, filename)
if l:
self.saved_info.remove(l)
else:
print 'ERROR in list_get()'
elif boxType == DRAFT_BOX:
l = list_get(self.draft_info, filename)
if l:
self.draft_info.remove(l)
else:
print 'ERROR in list_get()'
utils.remove_file(filename)
self.save_infos(boxType)
def count_received(self):
return len(self.received_info)
def count_unread(self):
count = 0
for info in self.received_info:
if info[2] == mms_net_define.NO:
count += 1
return count
def count_saved(self):
return len(self.saved_info)
def count_sent(self):
return len(self.sent_info)
def count_draft(self):
return len(self.draft_info)
def count_allsms(self):
return self.count_received()+self.count_sent()+self.count_draft()+self.count_saved()
def load_message(self, filename, boxType=IN_BOX):
infos = None
if boxType == IN_BOX:
infos = self.received_info
elif boxType == OUT_BOX:
infos = self.saved_info
elif boxType == SENT_BOX:
infos = self.sent_info
elif boxType == DRAFT_BOX:
infos = self.draft_info
selectedInfo = ''
for i, info in enumerate(infos):
if info[0] == filename:
selectedInfo = info
smsInfoHandler = SmsInfoHandler(info)
smsInfoHandler.setIsRead(mms_net_define.YES)
infos[i] = smsInfoHandler.makeInfoList()
self.save_infos(boxType)
break
self.ismcMessageHandler = IsmcMessageHandler()
self.ismcMessageHandler.parse(filename)
return self.ismcMessageHandler
def cmp_func(self, a, b):
return cmp(b[1], a[1])
def getReceivedInfo(self):
self.received_info.sort(self.cmp_func)
return self.received_info
def getSentInfo(self):
self.sent_info.sort(self.cmp_func)
return self.sent_info
def getSavedInfo(self):
self.saved_info.sort(self.cmp_func)
return self.saved_info
def getDraftInfo(self):
self.draft_info.sort(self.cmp_func)
return self.draft_info
def remove_all_received(self):
utils.remove_dir(self.received_path)
self.received_info = []
self.save_infos(IN_BOX)
def remove_all_sent(self):
utils.remove_dir(self.sent_path)
self.sent_info = []
self.save_infos(SENT_BOX)
def remove_all_saved(self):
utils.remove_dir(self.saved_path)
self.saved_info = []
self.save_infos(OUT_BOX)
def remove_all_draft(self):
utils.remove_dir(self.draft_path)
self.draft_info = []
self.save_infos(DRAFT_BOX)
def remove_all(self):
self.remove_all_received()
self.remove_all_saved()
self.remove_all_sent()
self.remove_all_draft()
'''
class SMSManager(MessageManagerBase):
draft_path = config.sms_draft_path
draft_info_path = config.sms_draft_info_path
sent_path = config.sms_sent_path
sent_info_path = config.sms_sent_info_path
received_path = config.sms_received_path
received_info_path = config.sms_received_info
personal_path = config.sms_saved_path
personal_info_path = config.sms_personal_info
'''
class SMSManager_KT(MessageManagerBase_KT):
def __init__(self):
MessageManagerBase_KT.__init__(self)
utils.make_dir(config.sms_received_path_KT)
self.setReceivedPath(config.sms_received_path_KT)
self.setReceivedInfoPath(config.sms_received_info_KT)
utils.make_dir(config.sms_saved_path_KT)
self.setSavedPath(config.sms_saved_path_KT)
self.setSavedInfoPath(config.sms_saved_info_KT)
utils.make_dir(config.sms_sent_path_KT)
self.setSentPath(config.sms_sent_path_KT)
self.setSentInfoPath(config.sms_sent_info_path_KT)
utils.make_dir(config.sms_draft_path_KT)
self.setDraftPath(config.sms_draft_path_KT)
self.setDraftInfoPath(config.sms_draft_info_path_KT)
self.reload()
smsmgr = SMSManager_KT()
import mmsmanager