Newer
Older
Import / projects / LGN-IP3870 / t / orig / mmsmanager.py
import mmsconfig, mmsutils, os.path, utils
from mms_net_pdu import *

class MMSMessageInfo:
	def __init__(self):
		self.subject = None
		self.info_sender = None
		self.info_received = [[[],[],[]], [[],[],[]]]
		self.info_inbox_sender = None
		self.msgtype = 0

		self.delivery_report = False

		self.isdrm_forward = False

		self.fname_smil = None
		self.media = []
		self.slide_time = []

class MMSMediaInfo:
	def __init__(self):
		self.text_summary = None
		self.text_type = None

		self.fname_text = None
		self.fname_sound = None
		self.fname_image = None
		self.fname_video = None

class MMSManager:
	def __init__(self):
		self.boxmsg = None
		self.box_current_slide = -1
		self.box_infoindex = -1

		self.msg = None
		self.reply_address = None

		self.current_slide = -1

		self.rinfo = []
		self.rinfo_index = -1

		self.inbox_info = []
		self.outbox_info = []
		self.setbox_info = []
		self.draftbox_info = []
		self.infoindex = -1

		self.mmsurl = 'http://mensajemms.telefonica.es:19080/mm1/CMM1Servlet'
		self.mmscport = 80
		self.autolist = []

		self.sel_first_file = ''
		self.mmsbox_modify_file = ''

		self.isreply_mms = False
		self.isforward = False

		self.reload()
		self.MMS_Remove_Tempmsg()

		self.MMS_Directory()

	def initmsg(self):
		if not self.isreply_mms:
			self.boxmsg = None
		self.msg = None
		self.box_current_slide = -1
		self.box_infoindex = -1
		self.reply_address = None
		self.current_slide = -1
		self.rinfo = []
		self.rinfo_index = -1
		self.infoindex = -1
		self.sel_first_file = ''
		self.mmsbox_modify_file = ''
		self.isforward = False

	def initboxmsg(self):
		self.msg = None
		self.reply_address = None
		self.current_slide = -1
		self.rinfo = []
		self.rinfo_index = -1
		self.infoindex = -1
		self.sel_first_file = ''
		self.mmsbox_modify_file = ''

	def msginfo_copy(self, dst, src):
		dst.subject = src.subject
		dst.info_sender = src.info_sender
		dst.info_received = src.info_received
		dst.info_inbox_sender = src.info_inbox_sender
		dst.msgtype = src.msgtype
		dst.delivery_report = src.delivery_report
		dst.isdrm_forward = src.isdrm_forward
		dst.fname_smil = src.fname_smil
		dst.media = src.media
		dst.slide_time = src.slide_time

	def get_reply_number(self, num):
		if not num.isdigit():
			return num
		_list = num.split(':')
		if len(_list) == 1:
			_len = mmsutils.MMS_Unicode_len(num)
			new_num = ''
			if _len == 10:
				new_num = num[:9]
				if num[9] != 0 and num[9].isdigit():
					new_num += ':'
					new_num += num[9]
					return new_num
				else:
					return num
			elif _len > 10:
				return num[:9]
			else:
				return num
		else:
			return num

	def slide_getcount(self):
		if not self.msg:
			return 0
		else:
			return len(self.msg.media)

	def slide_add(self):
		tsize = self.totalsize(istext=False) + 800
		m_count = self.mediacount()
		for m in range(m_count):
			tsize += 80

		if mmsconfig.mms_max_size - tsize < 4*1024:
			return False
		else:
			self.current_slide += 1
			self.msg.media.insert(self.current_slide, MMSMediaInfo())
			self.msg.slide_time.append(5000)
			return True

	def slide_remove(self, nslide=None):
		num = self.slide_getcount()
		if not nslide:
			nslide = self.current_slide

		if num <= 0 or nslide > num-1 or nslide < 0:
			print 'slide error'
			return True

		try:
			self.msg.media.pop(nslide)
			self.msg.slide_time.pop(nslide)
		except:
			print 'pop error'
			return True

		new_num = num-1
		if new_num-1 < self.current_slide:
			self.current_slide = new_num-1

		if self.current_slide < 0:
			if num <= 0:
				return False
		return True

	def slide_allremove(self):
		msgclass.media = []

	def mediacount(self, nslide = -1):
		i = 0
		if nslide == -1:
			for w in self.msg.media:
				if w.fname_text:
					i += 1
				if w.fname_image:
					i += 1
				if w.fname_sound:
					i += 1
				if w.fname_video:
					i += 1
		else:
			try:
				if self.msg.media[nslide].fname_text:
					i += 1
				if self.msg.media[nslide].fname_image:
					i += 1
				if self.msg.media[nslide].fname_sound:
					i += 1
				if self.msg.media[nslide].fname_video:
					i += 1
			except:
				i = 0
		return i

	def setmedia(self, mtype, path=None, nslide=None):
		def isexcess(mtype, path, nslide):
			if mtype == mmsconfig.MEDIA_TEXT:
				return True
			m_path = ''
			m_size = 0

			if mtype == mmsconfig.MEDIA_IMAGE:
				if self.msg.media[nslide].fname_image:
					m_path = self.msg.media[nslide].fname_image
			elif mtype == mmsconfig.MEDIA_SOUND:
				if self.msg.media[nslide].fname_sound:
					m_path = self.msg.media[nslide].fname_sound
			elif mtype == mmsconfig.MEDIA_VIDEO:
				if self.msg.media[nslide].fname_video:
					m_path = self.msg.media[nslide].fname_video

			if m_path:
				m_size = mmsutils.MMS_EachFilesize(m_path) + 80
			tsize = self.totalsize(istext=False) + 800
			m_count = self.mediacount()
			for m in range(m_count):
				tsize += 80
			tsize -= m_size
			size = mmsutils.MMS_EachFilesize(path) + 80

			if tsize+size > mmsconfig.mms_max_size:
				return False
			else:
				return True

		if not self.msg:
			self.load_message()

		if path == None and self.current_slide == -1:
			return True
		elif path != None and self.current_slide == -1:
			if not self.slide_add():
				return False

		num = self.slide_getcount()

		if nslide == None and num <= 0 or nslide != None and num < nslide+1:
			print 'semedia error', nslide, num
			return True

		if not nslide:
			nslide = self.current_slide


		if path:
			if not isexcess(mtype, path, nslide):
				return False

			if not self.sel_first_file and mtype != mmsconfig.MEDIA_TEXT:
				self.sel_first_file = path

			if mtype == mmsconfig.MEDIA_TEXT:
				self.msg.media[nslide].fname_text = path
			elif mtype == mmsconfig.MEDIA_IMAGE:
				if self.msg.media[nslide].fname_video:
					self.msg.media[nslide].fname_video = None
				self.msg.media[nslide].fname_image = path
			elif mtype == mmsconfig.MEDIA_SOUND:
				if self.msg.media[nslide].fname_video:
					self.msg.media[nslide].fname_video = None
				self.msg.media[nslide].fname_sound = path
			elif mtype == mmsconfig.MEDIA_VIDEO:
				if self.msg.media[nslide].fname_image:
					self.msg.media[nslide].fname_image = None
				if self.msg.media[nslide].fname_sound:
					self.msg.media[nslide].fname_sound = None
				self.msg.media[nslide].fname_video = path
		else:
			if mtype == mmsconfig.MEDIA_TEXT:
				self.msg.media[nslide].fname_text = None
				self.msg.media[nslide].text_summary = None
			elif mtype == mmsconfig.MEDIA_IMAGE:
				if self.sel_first_file == self.msg.media[nslide].fname_image:
					self.self_first_file = ''
				self.msg.media[nslide].fname_image = None
			elif mtype == mmsconfig.MEDIA_SOUND:
				if self.sel_first_file == self.msg.media[nslide].fname_sound:
					self.self_first_file = ''
				self.msg.media[nslide].fname_sound = None
			elif mtype == mmsconfig.MEDIA_VIDEO:
				if self.sel_first_file == self.msg.media[nslide].fname_video:
					self.self_first_file = ''
				self.msg.media[nslide].fname_video = None

			if not self.sel_first_file:
				for w in self.msg.media:
					if w.fname_image:
						self.sel_first_file = w.fname_image
					elif w.fname_sound:
						self.sel_first_file = w.fname_sound
					elif w.fname_video:
						self.sel_first_file = w.fname_video
					if self.sel_first_file:
						break
		return True

	def getsummary(self, fname_text):
		fp = open(fname_text)
		text = fp.read()
		fp.close()
		text = unicode(text, 'utf-8')
		token = ['\n', '\t', '\r']
		def parser(_text, value):
			textlist = []
			textlist = _text.split(value)
			if len(textlist) == 1:
				_text = textlist[0]
			else:
				_text = ''
				for t in textlist:
					if value == '\t':
						_text += ' '+t
					else:
						_text += t
			return _text
		for value in token:
			text = parser(text, value)
			text = text.strip()
		if mmsutils.MMS_Unicode_len(text) > mmsconfig.mms_text_listdisplay_max[0]:
			text = text[:mmsconfig.mms_text_listdisplay_max[1]]
			text += '...'
		return text

	def media_list(self, istext=True, nslide=-1):
		path_media = []
		media = []
		media_type = []	#0_text, 1_image, 2_sound, 3_video
		slide_list = []
		try:
			if nslide != -1:
				if istext and self.msg.media[nslide].fname_text:
					path_media.append(self.msg.media[nslide].fname_text)
					if self.msg.media[nslide].text_summary:
						media.append(self.msg.media[nslide].text_summary)
					else:
						media.append(self.getsummary(self.msg.media[nslide].fname_text))
					media_type.append(0)
				if self.msg.media[nslide].fname_image:
					path_media.append(self.msg.media[nslide].fname_image)
					media.append(mmsutils.MMS_FileName(self.msg.media[nslide].fname_image))
					media_type.append(1)
				if self.msg.media[nslide].fname_sound:
					path_media.append(self.msg.media[nslide].fname_sound)
					media.append(mmsutils.MMS_FileName(self.msg.media[nslide].fname_sound))
					media_type.append(2)
				if self.msg.media[nslide].fname_video:
					path_media.append(self.msg.media[nslide].fname_video)
					media.append(mmsutils.MMS_FileName(self.msg.media[nslide].fname_video))
					media_type.append(3)
				return media, path_media, media_type, slide_list
			else:
				nslide = 0
				allslide = self.slide_getcount()
				for i in range(allslide):
					if istext and self.msg.media[i].fname_text:
						path_media.append(self.msg.media[i].fname_text)
						slide_list.append(nslide)
						media_type.append(0)
						if self.msg.media[i].text_summary:
							media.append(self.msg.media[i].text_summary)
						else:
							media.append(self.getsummary(self.msg.media[nslide].fname_text))
					if self.msg.media[i].fname_image:
						path_media.append(self.msg.media[i].fname_image)
						slide_list.append(nslide)
						media_type.append(1)
						media.append(mmsutils.MMS_FileName(self.msg.media[i].fname_image))
					if self.msg.media[i].fname_sound:
						path_media.append(self.msg.media[i].fname_sound)
						slide_list.append(nslide)
						media_type.append(2)
						media.append(mmsutils.MMS_FileName(self.msg.media[i].fname_sound))
					if self.msg.media[i].fname_video:
						path_media.append(self.msg.media[i].fname_video)
						slide_list.append(nslide)
						media_type.append(3)
						media.append(mmsutils.MMS_FileName(self.msg.media[i].fname_video))
					nslide += 1
				return media, path_media, media_type, slide_list
		except:
			return [], [], [], []

	def addaddress(self, email, to, address):
		info = str(email)+str(to)+str(len(self.msg.info_received[email][to]))
		if email:
			self.msg.info_received[email][to].append(address)
		else:
			self.msg.info_received[email][to].append(address)
		self.rinfo.append(info)

	def removeaddress(self, index=-1):
		if index == -1:
			self.rinfo = []
			self.msg.info_received = [[[],[],[]], [[],[],[]]]
		else:
			info = self.rinfo[index]
			phone = int(info[0])
			to = int(info[1])
			i = int(info[2:])
			self.msg.info_received[phone][to].pop(i)
			self.rinfo.pop(index)

			pos = index
			if len(self.rinfo[index:]) > 0:
				for info in self.rinfo[index:]:
					phone_c = int(info[0])
					to_c = int(info[1])
					if phone == phone_c and to == to_c:
						i_c = int(info[2:])
						i_c -= 1
						self.rinfo[pos] = str(phone_c)+str(to_c)+str(i_c)
					pos += 1


	def lenaddress(self):
		pto = len(self.msg.info_received[0][0])
		pcc = len(self.msg.info_received[0][1])
		pbcc = len(self.msg.info_received[0][2])
		eto = len(self.msg.info_received[1][0])
		ecc = len(self.msg.info_received[1][1])
		ebcc = len(self.msg.info_received[1][2])
		return pto, pcc, pbcc, eto, ecc, ebcc

	def changeaddress(self, index, add):
		phone = int(self.rinfo[index][0])
		to = int(self.rinfo[index][1])
		i = int(self.rinfo[index][2:])
		self.msg.info_received[phone][to][i] = add

	def getaddress(self, index=-1, issend=False):
		address = []

		def getdisplayadd(add):
			import uiconfig
			displayadd = ''
			icon = ''
			from phonedb import phonedb
			if add.isdigit():
				displayadd, sicon = phonedb.get_name_by_number(add)
				if sicon == 'number':
					icon = uiconfig.list_icon_normal
				elif sicon == 'mobile':
					icon = uiconfig.list_icon_mobile
				else:
					icon = uiconfig.list_icon_normal
			else:
				displayadd = phonedb.get_name_by_email(add)
				if displayadd:
					icon = uiconfig.list_icon_email
				else:
					icon = uiconfig.list_icon_email
			return displayadd, icon

		if len(self.rinfo) <= 0 and not issend:
			return []

		if issend:
			to = []
			cc = []
			bcc = []

			for add in self.msg.info_received[0][0]:
				ret = add.split(':')
				if len(ret) == 2:
					val = ret[0]+ret[1]
				else:
					val = ret[0]
				to.append(val)
			for add in self.msg.info_received[1][0]:
				to.append(add)
			for add in self.msg.info_received[0][1]:
				ret = add.split(':')
				if len(ret) == 2:
					val = ret[0]+ret[1]
				else:
					val = ret[0]
				cc.append(val)
			for add in self.msg.info_received[1][1]:
				cc.append(add)
			for add in self.msg.info_received[0][2]:
				ret = add.split(':')
				if len(ret) == 2:
					val = ret[0]+ret[1]
				else:
					val = ret[0]
				bcc.append(val)
			for add in self.msg.info_received[1][2]:
				bcc.append(add)
			return tuple(to), tuple(cc), tuple(bcc)
		else:
			if index != -1:	#설정된 주소에서의 index의 주소
				info = self.rinfo[index]
				phone = int(info[0])
				to = int(info[1])
				i = int(info[2:])
				return self.msg.info_received[phone][to][i]
			else:		#설정된 전송 주소를 전부 가져온다
				icon = []
				for info in self.rinfo:
					phone = int(info[0])
					to = int(info[1])
					i = int(info[2:])
					ad, ic = getdisplayadd((self.msg.info_received[phone][to][i]).split(':')[0])
					address.append(ad)
					icon.append(ic)
				return address, icon

	def MMSBoxtype(self):
		if self.infoindex == -1:
			return 0, 0
		box = int(str(self.infoindex)[0])
		index = int(str(self.infoindex)[1:])
		box = box+2000
		return box, index

	def reload(self, boxtype=mmsconfig.MMS_ALLBOX):
		if boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_INBOX):
			self.inbox_info = []
			try:
				for l in file(mmsconfig.mms_info_inbox):
					l = l.strip()
					if not l:
						continue

					tokens = l.split(',', 8)
					if len(tokens) != 9:
						continue

					filename, t, isread, address, report, subject, url, transactionid, mmsexpiry = tokens
					subject = unicode(subject, 'utf-8')
					try:
						isread = int(isread)
						report = int(report)
					except:
						continue

					if not os.path.exists(filename) and not url:
						pass
					else:
						self.inbox_info.append([filename, t, isread, address, report, subject, url, transactionid, mmsexpiry])
			except IOError:
				pass

		if boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_OUTBOX):
			self.outbox_info = []
			try:
				for l in file(mmsconfig.mms_info_outbox):
					l = l.strip()
					if not l:
						continue

					tokens = l.split(',', 6)
					if len(tokens) != 7:
						continue

					filename, t, address, report, subject, summary, sel_first_file = tokens
					subject = unicode(subject, 'utf-8')
					summary = unicode(summary, 'utf-8')
					try:
						report = int(report)
					except:
						continue

					if os.path.exists(filename):
						self.outbox_info.append([filename, t, address, report, subject, summary, sel_first_file])
			except IOError:
				pass

		if boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_SENTBOX):
			self.sentbox_info = []
			try:
				for l in file(mmsconfig.mms_info_sentbox):
					l = l.strip()
					if not l:
						continue

					tokens = l.split(',', 6)
					if len(tokens) != 7:
						continue

					filename, t, address, report, subject, summary, sel_first_file = tokens
					subject = unicode(subject, 'utf-8')
					summary = unicode(summary, 'utf-8')
					try:
						report = int(report)
					except:
						continue

					if os.path.exists(filename):
						self.sentbox_info.append([filename, t, address, report, subject, summary, sel_first_file])
			except IOError:
				pass

		if boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_DRAFTBOX):
			self.draftbox_info = []
			try:
				for l in file(mmsconfig.mms_info_draftbox):
					l = l.strip()
					if not l:
						continue

					tokens = l.split(',', 6)
					if len(tokens) != 7:
						continue

					filename, t, address, report, subject, summary, sel_first_file = tokens
					subject = unicode(subject, 'utf-8')
					summary = unicode(summary, 'utf-8')
					try:
						report = int(report)
					except:
						continue

					if os.path.exists(filename):
						self.draftbox_info.append([filename, t, address, report, subject, summary, sel_first_file])
			except IOError:
				pass


	def save_infos(self, boxtype=mmsconfig.MMS_ALLBOX):
		if self.inbox_info and boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_INBOX):
			f = open(mmsconfig.mms_info_inbox, 'w')
			for data in self.inbox_info:
				file, t, isread, address, report, subject, url, transactionid, mmsexpiry = data
				if not subject:
					subject = ''
				f.write('%s,%s,%d,%s,%d,%s,%s,%s,%s\n' % (file, t, isread, address, report, subject.encode('utf-8'), url, transactionid, mmsexpiry))
			f.close()

		if self.outbox_info and boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_OUTBOX):
			f = open(mmsconfig.mms_info_outbox, 'w')
			for data in self.outbox_info:
				file, t, address, report, subject, summary, sel_first_file = data
				if not subject:
					subject = ''
				if not summary:
					summary = ''
				f.write('%s,%s,%s,%d,%s,%s,%s\n' % (file, t, address, report, subject.encode('utf-8'), summary.encode('utf-8'), sel_first_file))
			f.close()

		if self.sentbox_info and boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_SENTBOX):
			f = open(mmsconfig.mms_info_sentbox, 'w')
			for data in self.sentbox_info:
				file, t, address, report, subject, summary, sel_first_file = data
				if not subject:
					subject = ''
				if not summary:
					summary = ''
				f.write('%s,%s,%s,%d,%s,%s,%s\n' % (file, t, address, report, subject.encode('utf-8'), summary.encode('utf-8'), sel_first_file))
			f.close()

		if self.draftbox_info and boxtype in (mmsconfig.MMS_ALLBOX, mmsconfig.MMS_DRAFTBOX):
			f = open(mmsconfig.mms_info_draftbox, 'w')
			for data in self.draftbox_info:
				file, t, address, report, subject, summary, sel_first_file = data
				if not subject:
					subject = ''
				if not summary:
					summary = ''
				f.write('%s,%s,%s,%d,%s,%s,%s\n' % (file, t, address, report, subject.encode('utf-8'), summary.encode('utf-8'), sel_first_file))
			f.close()

	def insert_personal_info(self, boxtype, msgfile):
		path = ''
		info = None
		if boxtype == mmsconfig.MMS_OUTBOX:
			path = mmsconfig.mms_message_outbox
			info = self.outbox_info
		elif boxtype == mmsconfig.MMS_SENTBOX:
			path = mmsconfig.mms_message_sentbox
			info = self.sentbox_info
		elif boxtype == mmsconfig.MMS_DRAFTBOX:
			path = mmsconfig.mms_message_draftbox
			info = self.draftbox_info
		else:
			return

		i = 0
		while True:
			filename = path + '%08d' % i
			if not os.path.exists(filename):
				break
			i += 1

		filename = os.path.normpath(filename)
		utils.rename(msgfile, filename)

		import time, ntptime
		t = ntptime.ntime()
		t = time.localtime(t)
		t = '%02d/%02d/%s;%02d:%02d:%02d'%(t[2], t[1], str(t[0])[2:], t[3], t[4], t[5])

		address = self.getaddress(0)
		if not address:
			address = ''

		summary = ''
		for w in self.msg.media:
			if w.text_summary:
				summary = w.text_summary
				break
			elif w.fname_text:
				summary = self.getsummary(w.fname_text)
				break

		sel_first_file = ''
		if self.sel_first_file:
			sel_first_file = os.path.split(self.sel_first_file)[1]

		info.insert(0, (filename, t, address, self.msg.delivery_report, self.msg.subject, summary, sel_first_file))
		self.save_infos(boxtype)

	#Roxia Begin cmlim imms 06.01.17
	def insert_received_noti_sip(self, fromnumber, sub, report, url, tranid, mmsexp):
		if None == fromnumber:
			return False, ''
		try:
			print 'insert_received_noti_sip'
			print fromnumber, sub, report, url, tranid, mmsexp
			#Roxia Begin cmlim 06.06.12
			fromnumber = self.cut_address(fromnumber)
			#Roxia End cmlim
			self.insert_received_info(2, fromnumber, sub, report, url, tranid, mmsexp)
		except MemoryError:
			return False, 'MemoryError'
		return True, ''
	#Roxia End cmlim imms 06.01.17

	#Roxia Begin cmlim 06.06.12
	def cut_address(self, addr):
		idx = addr.find('/')
		if -1 != idx:
			return addr[:idx]
		return addr
	#Roxia End cmlim

	def insert_received_noti(self, noti_data):
		fromnumber, sub, report, url, tranid, mmsexp = Parse_MMSNoti(noti_data)
		#Roxia Begin cmlim 06.06.12
		fromnumber = self.cut_address(fromnumber)
		#Roxia End cmlim
		if None == fromnumber:
			return False, ''
		try:
			print 'insert_received_noti'
			print fromnumber, sub, report, url, tranid, mmsexp
			self.insert_received_info(2, fromnumber, sub, report, url, tranid, mmsexp)
		except MemoryError:
			return False, 'MemoryError'
		return True, ''

	def insert_received_info(self, isread, address, subject, report, url='', transactionid='', mmsexpiry='', msgfile=''):
		path = mmsconfig.mms_message_inbox
		filename = ''

		#Roxia Begin cmlim 06.06.12
		address = self.cut_address(address)
		#Roxia End cmlim

		i = 0
		if isread !=2:
			while True:
				filename = path + '%08d' % i
				if not os.path.exists(filename):
					break
				i += 1

			filename = os.path.normpath(filename)
			utils.rename(msgfile, filename)
			url = ''

		import time, ntptime
		t = ntptime.ntime()
		t = time.localtime(t)
		t = '%02d/%02d/%s;%02d:%02d:%02d'%(t[2], t[1], str(t[0])[2:], t[3], t[4], t[5])

		self.inbox_info.insert(0, (filename, t, isread, address, \
		report,	subject, url, transactionid, mmsexpiry))
		from setting import setting
		if setting.mms_retrieval:
			print 'autolist.insert'
			print filename, t, isread, address, \
				report, subject, url, transactionid, mmsexpiry

			if 2 == isread:
				self.autolist.insert(0, (filename, t, isread, address, \
				report, subject, url, transactionid, \
					mmsexpiry))
			else:
				print 'isread != 2'
				pass
		self.save_infos(mmsconfig.MMS_INBOX)

	def get_autolist(self):
		downitem = None
		downnum = len(self.autolist)
		if downnum:
			downitem = self.autolist.pop(downnum-1)
		print 'get_autolist'
		print downitem
		return downitem

	def remove_info(self, index, boxtype):
		if boxtype == mmsconfig.MMS_INBOX:
			info = self.inbox_info
		elif boxtype == mmsconfig.MMS_OUTBOX:
			info = self.outbox_info
		elif boxtype == mmsconfig.MMS_SENTBOX:
			info = self.sentbox_info
		elif boxtype == mmsconfig.MMS_DRAFTBOX:
			info = self.draftbox_info
		else:
			return

		remove_info = info.pop(index)

		if os.path.exists(remove_info[0]):
			from utils import remove
			remove(remove_info[0])

	def remove_notyinfo(self, url):
		index = 0
		for info in self.inbox_info:
			if info[6] == url:
				self.remove_info(index, mmsconfig.MMS_INBOX)
				return True
			index += 1
		return False

	def count(self):
		return len(self.inbox_info)

	def count_total(self):
		return len(self.inbox_info)+len(self.outbox_info)+len(self.sentbox_info)+len(self.draftbox_info)

	def count_unread(self):
		_count = 0
		for info in self.inbox_info:
			if info[2] in (0, 2):
				_count += 1
		return _count

	def box_list(self, boxtype):
		def getname_from_phone(info, num):
			displayadd = ''
			address = info[3-num].split(':')
			if address[0]:
				from phonedb import phonedb
				if address[0].isdigit():
					displayadd = phonedb.get_name(address[0])
					if not displayadd or displayadd == address[0]:
						try:
							displayadd = address[0]+address[1]
						except:
							displayadd = address[0]
				else:
					displayadd = phonedb.get_name_by_email(address[0])
					if not displayadd or displayadd == address[0]:
						displayadd = address[0]
			else:
				displayadd = _('No subject')
			return displayadd

		def getdisplayadd(info, num):
			displayadd = ''
			if info[5-num]:
				displayadd = info[5-num]
			else:
				if boxtype == mmsconfig.MMS_INBOX:
					displayadd = getname_from_phone(info, num)
				else:
					if info[5]:
						displayadd = info[5]
					else:
						displayadd = _('No subject')
			return displayadd

		_list = []
		_list_isread = []
		if boxtype == mmsconfig.MMS_INBOX:
			self.reload(mmsconfig.MMS_INBOX)
			for info in self.inbox_info:
				_list_isread.append(info[2])
				_list.append(getdisplayadd(info, 0))
		elif boxtype == mmsconfig.MMS_OUTBOX:
			self.reload(mmsconfig.MMS_OUTBOX)
			for info in self.outbox_info:
				_list.append(getdisplayadd(info, 1))
		elif boxtype == mmsconfig.MMS_SENTBOX:
			self.reload(mmsconfig.MMS_SENTBOX)
			for info in self.sentbox_info:
				_list.append(getdisplayadd(info, 1))
		elif boxtype == mmsconfig.MMS_DRAFTBOX:
			self.reload(mmsconfig.MMS_DRAFTBOX)
			for info in self.draftbox_info:
				_list.append(getdisplayadd(info, 1))

		return tuple(_list), tuple(_list_isread)

	def get_player_title(self):
		if mmsmgr.msg.subject:
			_title = mmsmgr.msg.subject
		else:
			_title = _('NO SUBJECT')

		return _title

	def get_inbox_list(self):
		import uiconfig, time
		_list = []
		date = 0
		title = ''
		icon = ''
		focus = 0

		for file, date, isread, address, report, subject, url, transactionid, mmsexpiry in self.inbox_info:
			if date:
				t = date.split(';')
				t = t[0].split('/')+t[1].split(':')
				if len(t) < 9:
					_len = 9 - len(t)+1
					for i in range(1,_len):
						t.append('0')
				elif len(t) > 9:
					_len = 9 - len(t) + 1
					for i in range(1, _len):
						t.pop()

				_t=[]
				for w in t:
					_t.append(int(w))
				date = time.mktime(tuple(_t))
			else:
				date = ntptime.ntime()

			def getname_from_phone(num):
				displayadd = ''
				if num:
					from phonedb import phonedb
					if num.isdigit():
						displayadd = phonedb.get_name(num)
						if not displayadd:
							displayadd = num
					else:
						displayadd = phonedb.get_name_by_email(num)
						if not displayadd:
							displayadd = num
				else:
					displayadd = 'No subject'
				return displayadd

			if subject:
				name = subject
			else:
				name = getname_from_phone(address)

			if isread == 0:
				icon = uiconfig.list_icon_mms_received
			elif isread == 2:
				icon = uiconfig.list_icon_mms_unload
			else:
				icon = uiconfig.list_icon_mms_saved

			_list.append(('mms', date, name, icon, focus))
			focus += 1
		return _list

	def get_detail(self):
		import time, ntptime
		import os

		if self.infoindex != -1:
			boxtype, index = self.MMSBoxtype()
			if boxtype == mmsconfig.MMS_INBOX:
				date = self.inbox_info[index][1]
			elif boxtype == mmsconfig.MMS_OUTBOX:
				date = self.outbox_info[index][1]
			elif boxtype == mmsconfig.MMS_SENTBOX:
				date = self.sentbox_info[index][1]
			elif boxtype == mmsconfig.MMS_DRAFTBOX:
				date = self.draftbox_info[index][1]

		else:
			t = ntptime.ntime()
			t = time.localtime(t)
			date = '%02d/%02d/%s-%02d:%02d'%(t[2], t[1], t[0], t[3], t[4])

		size = self.totalsize(kb_type=True)

		if self.msg.subject:
			subject = self.msg.subject
		else:
			subject = _('No subject')

		return (date, subject, '%dK' % size)


	def totalsize(self, kb_type=False, istext=True):
		if self.msg == None or self.slide_getcount() == 0:
			return 0

		total = 0
		for m in self.msg.media:
			if m.fname_text and istext:
				total += mmsutils.MMS_EachFilesize(m.fname_text)
			if not istext:
				total += 4*1024
			if m.fname_sound:
				total += mmsutils.MMS_EachFilesize(m.fname_sound)
			if m.fname_image:
				total += mmsutils.MMS_EachFilesize(m.fname_image)
			if m.fname_video:
				total += mmsutils.MMS_EachFilesize(m.fname_video)
		if kb_type:
			total = (total+1023)/ 1024

		return total

	def load_textmessage(self, filename=None, text=None):
		from smtp import SmsMessage
		m = SmsMessage()
		m.MMSload(filename, text)
		return m

	def load_message(self):
		self.msg = MMSMessageInfo()
	def MMS_Directory(self):
		utils.make_dir(mmsconfig.mms_message)
		utils.make_dir(mmsconfig.mms_message_inbox)
		utils.make_dir(mmsconfig.mms_message_outbox)
		utils.make_dir(mmsconfig.mms_message_sentbox)
		utils.make_dir(mmsconfig.mms_message_draftbox)
		utils.make_dir(mmsconfig.mms_temp_message)

	def MMS_Remove_outbox(self):
		utils.remove_dir(mmsconfig.mms_message_outbox)
		if os.path.exists(mmsconfig.mms_info_outbox):
			utils.remove(mmsconfig.mms_info_outbox)
		self.outbox_info = []

	def MMS_Remove_sentbox(self):
		utils.remove_dir(mmsconfig.mms_message_sentbox)
		if os.path.exists(mmsconfig.mms_info_sentbox):
			utils.remove(mmsconfig.mms_info_sentbox)
		self.sentbox_info = []

	def MMS_Remove_draftbox(self):
		utils.remove_dir(mmsconfig.mms_message_draftbox)
		if os.path.exists(mmsconfig.mms_info_draftbox):
			utils.remove(mmsconfig.mms_info_draftbox)
		self.draftbox_info = []

	def MMS_Remove_inbox(self):
		utils.remove_dir(mmsconfig.mms_message_inbox)
		if os.path.exists(mmsconfig.mms_info_inbox):
			utils.remove(mmsconfig.mms_info_inbox)
		self.inbox_info = []

	def MMS_Remove_Tempmsg(self):
		utils.remove_dir(mmsconfig.mms_temp_message)

	def MMS_Remove_Allmsg(self):
		self.MMS_Remove_outbox()
		self.MMS_Remove_sentbox()
		self.MMS_Remove_draftbox()
		self.MMS_Remove_inbox()
		self.MMS_Remove_Tempmsg()

	def MMS_Getmsgfilecount(self, boxtype):
		if boxtype == mmsconfig.MMS_INBOX:
			path = mmsconfig.mms_message_inbox
		elif boxtype == mmsconfig.MMS_OUTBOX:
			path = mmsconfig.mms_message_outbox
		elif boxtype == mmsconfig.MMS_SENTBOX:
			path = mmsconfig.mms_message_sentbox
		elif boxtype == mmsconfig.MMS_DRAFTBOX:
			path = mmsconfig.mms_message_draftbox

		return utils.get_file_count(path)


mmsmgr = MMSManager()