import os.path
from mmsmanager import mmsmgr
def get_filename(fname):
fname = os.path.split(fname)[1]
dot = fname.rfind('.')
if dot >=0:
fname = fname[:dot]
return fname
def MMS_smilsave(fp, ntap, text):
text = unicode(text)
text = text.encode('utf-8')
fp.write('\t'*ntap + text + '\n')
def MMS_smilmake(msg, filepath, slide_pos=[], region_fit=[]):
def change_filename(fname):
if not fname:
return ''
fname = fname.replace('&', '&')
fname = fname.replace('<', '<')
fname = fname.replace('>', '>')
fname = fname.replace('"', '"')
fname = fname.replace("'", ''')
return fname
if not msg:
return False
tag_version = '<?xml version="1.0" encoding="utf-8"?>'
tag_start = ('<smil xmlns="http://www.w3.org/2001/SMIL20/Language">', '</smil>')
tag_head = ('<head>', '</head>')
tag_layout = ('<layout>', '</layout>')
tag_rootlayout = '<root-layout width="100%" height="100%"/>'
region_id = [ \
'<region id="__YH__IMAGE_UP__" width="100%" height="70%" left="0%" top="0%" fit="meet" />', \
'<region id="__YH__IMAGE_DOWN__" width="100%" height="70%" left="0%" top="30%" fit="meet" />', \
'<region id="__YH__TEXT_UP__" width="100%" height="30%" left="0%" top="0%" />', \
'<region id="__YH__TEXT_DOWN__" width="100%" height="30%" left="0%" top="70%" />', \
'<region id="__YH__ALL__" width="100%" height="100%" left="0%" top="0%" />', \
]
tag_body = ('<body>', '</body>')
tag_par = ('<par dur = "', 'ms" >', '</par>')
tag_image = ('<img src = "cid:', '" region="', '" />')
tag_video = ('<video src = "cid:', '" region="', '" />')
tag_text = ('<text src = "cid:', '" region="', '" />')
tag_sound = ('<audio src = "cid:', '" />')
isregion_all = False
isregion_up = False
isregion_down = False
body_value = []
slide_count = len(msg.media)
if slide_count <= 0:
return False
for index, s in enumerate(msg.media):
fname_text = change_filename(s.fname_text)
fname_image = change_filename(s.fname_image)
fname_sound = change_filename(s.fname_sound)
fname_video = change_filename(s.fname_video)
try:
slide_time = msg.slide_time[index]
except:
slide_time = 5000
isimage = False
isvideo = False
istext = False
issound = False
isimage_one = False
isvideo_one = False
istext_one = False
if s.fname_image:
isimage = True
if s.fname_video:
isvideo =True
if s.fname_text:
istext = True
if s.fname_sound:
issound =True
if isimage and not isvideo and not istext:
isimage_one = True
isimage = False
if isvideo and not isimage and not istext:
isvideo_one = True
isvideo = False
if istext and not isimage and not isvideo:
istext_one = True
istext = False
if isvideo or isvideo_one:
body_value.append(tag_par[0] + '%d'%(slide_time) + tag_par[1])
else:
body_value.append(tag_par[0] + '%d'%(slide_time) + tag_par[1])
if isimage_one:
body_value.append(tag_image[0]+get_filename(fname_image)+tag_image[1]+'__YH__ALL__'+tag_image[2])
elif isvideo_one:
body_value.append(tag_video[0]+get_filename(fname_video)+tag_video[1]+'__YH__ALL__'+tag_video[2])
elif istext_one:
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__ALL__'+tag_text[2])
else:
if slide_pos:
if isimage and istext:
if slide_pos[index] == 'idown':
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__TEXT_UP__'+tag_text[2])
body_value.append(tag_image[0]+get_filename(fname_image)+tag_image[1]+'__YH__IMAGE_DOWN__'+tag_image[2])
else:
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__TEXT_DOWN__'+tag_text[2])
body_value.append(tag_image[0]+get_filename(fname_image)+tag_image[1]+'__YH__IMAGE_UP__'+tag_image[2])
elif isvideo and istext:
if slide_pos[index] == 'idown':
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__TEXT_UP__'+tag_text[2])
body_value.append(tag_video[0]+get_filename(fname_video)+tag_video[1]+'__YH__IMAGE_DOWN__'+tag_video[2])
else:
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__TEXT_DOWN__'+tag_text[2])
body_value.append(tag_video[0]+get_filename(fname_video)+tag_video[1]+'__YH__IMAGE_UP__'+tag_video[2])
else:
if isimage:
body_value.append(tag_image[0]+get_filename(fname_image)+tag_image[1]+'__YH__IMAGE_UP__'+tag_image[2])
elif isvideo:
body_value.append(tag_video[0]+get_filename(fname_video)+tag_video[1]+'__YH__IMAGE_UP__'+tag_video[2])
if istext:
body_value.append(tag_text[0]+get_filename(fname_text)+tag_text[1]+'__YH__TEXT_DOWN__'+tag_text[2])
if issound:
body_value.append(tag_sound[0]+get_filename(fname_sound)+tag_sound[1])
body_value.append(tag_par[2])
fp = open(filepath, 'w')
MMS_smilsave(fp, 0, tag_version)
MMS_smilsave(fp, 0, tag_start[0])
MMS_smilsave(fp, 1, tag_head[0])
MMS_smilsave(fp, 2, tag_layout[0])
MMS_smilsave(fp, 3, tag_rootlayout)
for w in region_id:
MMS_smilsave(fp, 3, w)
MMS_smilsave(fp, 2, tag_layout[1])
MMS_smilsave(fp, 1, tag_head[1])
MMS_smilsave(fp, 1, tag_body[0])
for w in body_value:
if w[:4] == '<par' or w == '</par>':
MMS_smilsave(fp, 2, w)
else:
MMS_smilsave(fp, 3, w)
MMS_smilsave(fp, 1, tag_body[1])
MMS_smilsave(fp, 0, tag_start[1])
fp.close()
return True
def change_smil(msg, filepath):
from mmssmilparser import setsmil
slide_pos = []
region_pos = {}
region_fit = []
try:
rootlayout, region, par = setsmil(filepath)
except:
return MMS_smilmake(msg, filepath)
if len(region) == 0:
return MMS_smilmake(msg, filepath)
for i, r in enumerate(region):
region_pos[r[u'id']] = i
for n, m in enumerate(msg.media):
slide_pos.append('')
region_fit.append('')
if n <= len(par):
if par[n][1] and par[n][3]:
i = region[region_pos[par[n][1][u'region']]][u'top']
i = i.replace('%', '')
i = i.replace('px', '')
t = region[region_pos[par[n][3][u'region']]][u'top']
t = t.replace('%', '')
t = t.replace('px', '')
if i > t:
slide_pos[n] = 'idown'
else:
slide_pos[n] = 'iup'
elif par[n][3] and par[n][4]:
i = region[region_pos[par[n][4][u'region']]][u'top']
i = i.replace('%', '')
i = i.replace('px', '')
t = region[region_pos[par[n][3][u'region']]][u'top']
t = t.replace('%', '')
t = t.replace('px', '')
if i > t:
slide_pos[n] = 'idown'
else:
slide_pos[n] = 'iup'
MMS_smilmake(msg, filepath, slide_pos, region_fit)