from basemodel import Stage, ListStage, NotifyStage, YesNoStage, OkNoStage, EntryStage, SymbolSelectionStage
import runtime, config, utils, status, uiconfig, baseui
from setting import setting
from model import StorageShortStage
import os
#MMW
import stat
#end of MMW
class SoundNotifyStage(NotifyStage):
def __init__(self, message, cb=None):
icon = uiconfig.baloon_sound_icon
NotifyStage.__init__(self, message, icon, cb)
class RecordedAudioStage(ListStage):
icon = uiconfig.image_image_sound_sound_icon
def __init__(self, mmsmessage=None):
self.title = _('RECORDED AUDIOS')
self.choice = _('Add new'), _('Audio gallery')
ListStage.__init__(self)
self.mmsmessage = mmsmessage
status.supervision_not_allowed = 1
def activate(self, index):
if index == 0:
if status.phonebook_in_calling:
stage = NotifyStage(_('Audio recorder is not allowed during conversation'), icon=uiconfig.baloon_image_sound_image_icon)
runtime.manager.stack_stage(stage)
return
if status.phone_status != status.Disconnected:
stage = SoundNotifyStage(_('Recording is not allowed during conversation'))
runtime.manager.stack_stage(stage)
return
# 남은 공간 체크
if not utils.check_free_storage():
runtime.manager.stack_stage(StorageShortStage(uiconfig.baloon_record_icon))
return
if config.audio_record_max <= utils.get_file_count(config.audio_recorded_dir):
runtime.manager.stack_stage(NotifyStage(_('Gallery is full!'), uiconfig.baloon_record_icon))
return
if config.mm_debug:
print 'audio capturer'
import mmtools
stage = mmtools.AudioReadyStage(self.mmsmessage)
runtime.manager.stack_stage(stage)
elif index == 1:
stage = AudioGalleryStage('recorded', self.mmsmessage)
if runtime.manager.find_stage('melody choice'):
if setting.external_ring:
ring_type = utils.audio_type(setting.external_ring)
if ring_type == 'recorded':
stage.set_focus_item(setting.external_ring)
runtime.manager.stack_stage(stage)
def destroy(self):
ListStage.destroy(self)
status.supervision_not_allowed = 0
class ReceivedMelodyStage(ListStage):
icon = uiconfig.image_image_sound_sound_icon
def __init__(self, mmsmessage=None):
self.title = _('RECEIVED MELODIES')
self.choice = _('Polyphonic melodies'), _('Other melodies')
ListStage.__init__(self)
self.mmsmessage = mmsmessage
status.supervision_not_allowed = 1
def activate(self, index):
if config.mm_debug:
print 'ReceivedMelodyStage, index:', index
if index == 0:
stage = AudioGalleryStage('poly', self.mmsmessage)
if status.melody_editing:
if setting.external_ring:
ring_type = utils.audio_type(setting.external_ring)
if ring_type == 'poly':
stage.set_focus_item(setting.external_ring)
else:
stage = AudioGalleryStage('other', self.mmsmessage)
if status.melody_editing:
if setting.external_ring:
ring_type = utils.audio_type(setting.external_ring)
if ring_type == 'other':
stage.set_focus_item(setting.external_ring)
runtime.manager.stack_stage(stage)
def destroy(self):
ListStage.destroy(self)
status.supervision_not_allowed = 0
class SortStage(ListStage):
icon = uiconfig.image_image_sound_sound_icon
def __init__(self):
self.title = _('SORT')
self.choice = _('By name'), _('By size')
ListStage.__init__(self)
self.ui.set_focus(setting.audio_sort_rule)
def activate(self, index):
setting.audio_sort_rule = index
stage = runtime.manager.find_stage('audio gallery')
runtime.manager.back_stage('audio gallery', False)
stage.refresh_lists()
stage.change_focus()
stage.show()
class RenameStage(EntryStage):
def __init__(self):
EntryStage.__init__(self, _('Name'), _('RENAME'))
gallery = runtime.manager.find_stage('audio gallery')
self.ui.entry.ascii_mode_case3 = True
self.bell_check = 0
name = gallery.get_current_name()
if config.mmi_debug:
print 'RenameStage name = ', name
audio_type = utils.audio_type(gallery.get_current_file())
if audio_type == 'recorded':
audio_file_ext = gallery.get_current_file()
ext_name = utils.get_ext(audio_file_ext)
fullname = config.audio_recorded_dir + unicode(name, 'utf-8').encode('euc-kr') + '.' + ext_name
if fullname == setting.external_ring:
self.bell_check = 1
if config.mmi_debug:
print 'RenameStage bell !!'
#if len(name) > 16:
# name = name[:16]
self.ui.set_text(name)
self.ui.set_max(16)
#self.ui.set_fixed_automata(None, False)
# shchun : global automata change
if setting.lang == 'Korean':
self.ui.set_automata('hangul', False)
else:
self.ui.set_automata('multitap', 'lower')
# end shchun
def activate_menu1(self):
new_name = self.ui.get_text()
if not new_name:
utils.player.play_effect(config.SETTING_FAILED)
stage = SoundNotifyStage(_('Empty audio name'))
runtime.manager.change_stage(stage)
return
stage = runtime.manager.find_stage('audio gallery')
old_name = stage.get_current_name()
if new_name == old_name:
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(SoundNotifyStage(_('No change')))
return
if stage:
if not stage.rename_is_ok(new_name):
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.stack_stage(SoundNotifyStage(_('File exists.')))
return
for ch in new_name:
if ch in '\/:*?"<>':
#runtime.manager.stack_stage(NotifyStage(_('Please, do not use \/:*?"<> characters to make file name'), uiconfig.baloon_photo_icon))
msg = runtime.evas.pre_parse(_('Please, do not use %s characters to make file name')%('\/:*?"<>',))
runtime.manager.stack_stage(NotifyStage(msg, uiconfig.baloon_photo_icon))
return
def cb():
runtime.manager.back_stage('audio gallery')
runtime.manager.stage.rename(new_name)
audio_type = utils.audio_type(stage.get_current_file())
if audio_type == 'recorded':
message = _('Audio renamed')
if self.bell_check == 1:
audio_file_ext = stage.get_current_file()
ext_name = utils.get_ext(audio_file_ext)
setting.external_ring = config.audio_recorded_dir + unicode(new_name, 'utf-8').encode('euc-kr') + '.' + ext_name
if config.mmi_debug:
print 'RenameStage bell applied:'+setting.external_ring
else:
message = _('Melody renamed')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = SoundNotifyStage(message, cb)
runtime.manager.stack_stage(stage)
def handle_key(self, key):
#ka...hangul 2007.02.05 modify
# if key == '*':
# if self.ui.entry.ascii_mode_case3:
# runtime.manager.stack_stage(SymbolSelectionStage(self, case=3))
# return True
# elif key == '#':
# if key == 'SOFT4':
# # vpark 2006.08.28 automata
# self.ui.automata_idx = utils.get_automata_idx(*self.ui.automata)
# if setting.lang == 'Korean':
# self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list_hangul)
# self.ui.automata = config.automata_list_hangul[self.ui.automata_idx]
# else:
# self.ui.automata_idx = (self.ui.automata_idx + 1) % len(config.automata_list)
# self.ui.automata = config.automata_list[self.ui.automata_idx]
# self.ui.set_automata(*self.ui.automata)
# return True
if key == config.Menu4:
runtime.manager.back_stage()
return True
return EntryStage.handle_key(self, key)
def AssignStage():
import phonebook
from phonedb import phonedb
if phonedb.is_empty():
return phonebook.PhoneBookTempEmptyStage()
gallery = runtime.manager.find_stage('audio gallery')
status.assign_melody = gallery.get_current_file()
def phonelist_activate(phonelist, index):
item = phonelist.get_phonedb_item(index)
# eicho modify 06.10.02
#item.melody = status.assign_melody
#phonedb.save()
# end
def cb():
runtime.manager.back_stage('audio gallery')
audio_type = utils.audio_type(status.assign_melody)
if audio_type == 'recorded':
message = _('Audio assigned')
else:
message = _('Melody assigned')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(message, uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
runtime.evas.render_now()
ret_melody = utils.player.set_as_user_ring(status.assign_melody)
if ret_melody == True:
item.melody = status.assign_melody
phonedb.save()
# end.
status.phonelist_activate = phonelist_activate
return phonebook.FindStage()
class AudioDetailStage(Stage):
def __init__(self):
gallery = runtime.manager.find_stage('audio gallery')
detail = gallery.get_detail()
from ui import AudioDetailUI
self.ui = AudioDetailUI(*detail)
def handle_key(self, key):
if key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
class AudioOptionStage(ListStage):
def __init__(self, audio_type):
self.title = _('OPTIONS')
self.choice1 = _('Set as ringing'), _('Send'), _('Delete'), _('Rename'), _('Assign to contact'), _('Sort'), _('Details')
self.choice2 = _('Set as ringing'), _('Assign to contact'), _('Sort'), _('Details')
self.choice3 = _('Set as ringing'), _('Delete'), _('Delete all'), _('Rename'), _('Details')
self.audio_type = audio_type
if audio_type == 'ring':
self.choice = self.choice2
else:
from profile import profile
if profile.get_profile() == 0:
self.choice = self.choice1
else:
self.choice = self.choice3
ListStage.__init__(self)
def activate(self, index):
gallery_stage = runtime.manager.find_stage('audio gallery')
if self.choice[index] == _('Set as ringing'):
##### eicho modify 06.07.26
gallery = runtime.manager.find_stage('audio gallery')
#gallery.set_as_ring()
#message = _('External calls ringing set')
message = _('New ringtone set')
def done_cb():
runtime.manager.back_stage('audio gallery') # newair7:audio gallery-->audio setting
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = SoundNotifyStage(message, done_cb)
runtime.manager.stack_stage(stage)
runtime.evas.render_now()
gallery.set_as_ring()
return
elif self.choice[index] == _('Send'):
import mmsconfig
from mmscomposestage import MMSCreateStage, MMSSize_excess
from mmsmanager import mmsmgr
if mmsmgr.setmedia(mmsconfig.MEDIA_SOUND, gallery_stage.get_current_file()):
runtime.manager.stack_stage(MMSCreateStage(addmedia_type=mmsconfig.MEDIA_SOUND))
else:
MMSSize_excess()
return
elif self.choice[index] == _('Rename'):
try:
gallery = runtime.manager.find_stage('audio gallery')
unicode(gallery.get_current_name(),'utf-8')
stage = RenameStage
except:
stage = NotifyStage(_('No change'), uiconfig.baloon_photo_icon)
elif self.choice[index] == _('Assign to contact'):
stage = AssignStage()
elif self.choice[index] == _('Sort'):
stage = SortStage
elif self.choice[index] == _('Details'):
stage = AudioDetailStage
elif self.choice[index] == _('Delete'):
def yes():
def delete_done():
gallery_stage.delete()
if len(gallery_stage.lists) == 0:
runtime.manager.change_stage(NotifyStage(_('Gallery empty!'), uiconfig.baloon_sound_icon))
if runtime.manager.find_stage('MMToolsStage'):
runtime.manager.back_stage('MMToolsStage')
elif runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
else:
runtime.manager.back_stage('idle')
else:
#runtime.manager.back_stage('audio gallery')
#gallery_stage.set_focus_item(gallery_stage.get_current_file())
stage = AudioGalleryStage('recorded')
runtime.manager.change_stage(stage)
if self.audio_type == 'recorded':
message = _('Voice deleted') #_('Audio deleted')
else:
message = _('Voice deleted') #_('Melody deleted')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = SoundNotifyStage(message, delete_done)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
if self.audio_type == 'recorded':
message = _('Do you want to delete voice?') #_('Delete audio?')
else:
message = _('Do you want to delete voice?') #_('Delete melody?')
stage = YesNoStage(message, yes, no, '', uiconfig.baloon_sound_icon)
elif self.choice[index] == _('Delete all'):
def yes():
def delete_done():
gallery_stage.delete_all()
if len(gallery_stage.lists) == 0:
runtime.manager.change_stage(NotifyStage(_('Gallery empty!'), uiconfig.baloon_sound_icon))
if runtime.manager.find_stage('MMToolsStage'):
runtime.manager.back_stage('MMToolsStage')
elif runtime.manager.find_stage('my album'):
runtime.manager.back_stage('my album')
else:
runtime.manager.back_stage('idle')
else:
#runtime.manager.back_stage('audio gallery')
#gallery_stage.set_focus_item(gallery_stage.get_current_file())
stage = AudioGalleryStage('recorded')
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = SoundNotifyStage(_('Voice deleted'), delete_done)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Do you want to delete all voices?'), yes, no, '', uiconfig.baloon_sound_icon)
print 'state =', stage
runtime.manager.stack_stage(stage)
audio_paths = {'ring': config.audio_dir_effect, #config.audio_def_dir,
'recorded': config.audio_recorded_dir,
'poly': config.audio_polyphonic_dir,
'other': config.audio_other_dir,
'mp3':config.mp3_dir,
'basic': config.audio_dir_basic,
'sweet':config.audio_dir_sweet,
'merry':config.audio_dir_merry,
'classic':config.audio_dir_classic,
'effect': config.audio_dir_effect,
'download':config.audio_dir_download}
def get_audio_gallery_list(type):
dirname = audio_paths[type]
return dirname, utils.get_file_lists(dirname)
def AudioGalleryStage(audio_type, mmsmessage=None,ipemailMessage = None, audio_index=0): # newair7:20080419
#status.supervision_not_allowed = 1
dirname, lists = get_audio_gallery_list(audio_type)
if len(lists) == 0:
utils.player.play_effect(config.SETTING_FAILED)
return NotifyStage(_('Gallery empty!'), uiconfig.baloon_sound_icon)
stage = _AudioGalleryStage(audio_type, dirname, lists, mmsmessage,ipemailMessage, audio_index)
return stage
class _AudioGalleryStage(ListStage):
name = 'audio gallery'
def __init__(self, audio_type, dirname, lists, mmsmessage=None,ipemailMessage = None, audio_index=0):
self.title = _('AUDIO GALLERY')
#status.supervision_not_allowed = 1
self.mmsmessage = mmsmessage
self.ipemailMessage = ipemailMessage
self.audio_type = audio_type
print 'audio_type'
self.audio_dir = dirname
self.player_pid = None
self.lists = lists
self.audio_index = audio_index # newair7:20080419
self.audio_number = len(lists)
ListStage.__init__(self)
self.refresh_lists(True)
#self.refresh_lists()
# title image 검색
#titleimage = uiconfig.Third_title_audio_gallery
#name, pos = titleimage
#title_image = utils.put_image(name, pos)
#title_image.hide()
#self.ui.add(title_image)
# recording Background
ag_img = uiconfig.audio_gallery_img
name, pos = ag_img
ag_image = utils.put_image(name, pos)
ag_image.hide()
self.ui.add(ag_image)
if status.melody_editing:
self.ui.set_left(_('SET'))
else:
if self.mmsmessage or self.ipemailMessage:
self.ui.set_left(_('OK'))
else:
self.ui.set_left(_('MENU'))
#audio_titles= {'ring': _("VIDEOPHONE'S MELODIES"), 'recorded': _('AUDIO GALLERY'), 'poly': _('POLYPHONIC MELODIES'), 'other': _('OTHER MELODIES'), 'mp3':_('MP3GALLERY')}
#self.ui.set_title(audio_titles[self.audio_type])
def change_focus(self):
self.audio_index = 0
self.ui.set_focus(0)
def refresh_lists(self, isfirst=False):
if config.stage_debug:
print '_AudioGalleryStage:refresh_lists'
names = []
atype_icons = []
#thang [20080317 -2] update list satge
#self.ui.remove_all_icon_columns()
dirname, lists = get_audio_gallery_list(self.audio_type)
self.lists = lists
self.audio_number = len(lists)
self.sort()
for item in self.lists:
name = self.get_list_label(item)
names.append(name)
ext = utils.get_ext(item[0])
if ext.lower() == 'imy':
atype_icons.append(uiconfig.list_icon_melody_mono)
else:
atype_icons.append(uiconfig.list_icon_melody_poly)
if isfirst:
self.ui.update_lists(names)
self.choice = names
else:
self.change_choice(names)
#self.ui.create_icon_column( 60, atype_icons )
#thang [20080317 -2] update list satge
def set_focus_item(self, file):
file = file.split('/')[-1]
for i, item in enumerate(self.lists):
if file == item[0]:
if config.mm_debug:
print 'focus item change ->', i
self.ui.set_focus(i)
self.audio_index = i
break
def get_list_label(self, item):
fullname = self.audio_dir + item[0]
name = item[0]
last_dot = name.rfind('.')
if last_dot > 0:
name = name[:last_dot]
# yylee: added for korean file name support
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
# name resize
name = name + " [%dKB]" % utils.get_size_kb(fullname)
return name
def handle_key(self, key):
if key == config.Menu4 or key == 'CLR':
stage = runtime.manager.find_stage('MMToolsStage')
if stage:
runtime.manager.back_stage('MMToolsStage')
else:
stage = runtime.manager.find_stage('my album')
if stage:
runtime.manager.back_stage('my album')
else:
runtime.manager.back_stage()
return True
ret = ListStage.handle_key(self, key)
if key in ('Up', 'Down'):
new_audio_index = self.ui.get_focus()
runtime.evas.render_now()
if self.audio_index != new_audio_index:
self.audio_index = new_audio_index
self.stop_audio()
self.play_audio()
return ret
def activate(self, index):
if status.editing_phone_number_index >= 0:
if status.melody_editing:
#### eicho add 06.08.24
self.stop_audio()
'''
ret_melody = utils.player.set_as_user_ring(self.get_current_file())
if ret_melody==True :
from phonedb import phonedb
phonedb.set_melody(self.get_current_file())
'''
def cb():
runtime.manager.back_stage('modify kind')
stage = NotifyStage(_('Melody modified'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
runtime.evas.render_now()
ret_melody = utils.player.set_as_user_ring(self.get_current_file())
if ret_melody==True :
from phonedb import phonedb
phonedb.set_melody(self.get_current_file())
# end.
return
if status.melody_editing:
stage = runtime.manager.find_stage('add last')
if stage:
# phonebook add entry에서 파생된 Stage인 경우
#### eicho add 06.08.25
self.stop_audio()
def cb():
runtime.manager.back_stage('add last')
stage = NotifyStage(_('Melody selected'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
runtime.evas.render_now()
ret_melody = utils.player.set_as_user_ring(self.get_current_file())
if ret_melody==True :
status.phone_item.melody = self.get_current_file()
'''
status.phone_item.melody = self.get_current_file()
def cb():
runtime.manager.back_stage('add last')
stage = NotifyStage(_('Melody selected'), uiconfig.baloon_phonebook_icon, cb)
runtime.manager.change_stage(stage)
'''
# end.
return
message = _('Melody for calls set!')
def done_cb():
runtime.manager.back_stage('ringing setting')
#self.set_as_ring()
stage = SoundNotifyStage(message, done_cb)
runtime.manager.stack_stage(stage)
runtime.evas.render_now()
self.set_as_ring()
return
if self.ipemailMessage:
from ipemailstage import IpEmailAttachNotify
runtime.manager.stack_stage(IpEmailAttachNotify(_('Recorded audio attached'), \
unicode(self.get_current_file())))
return
if self.mmsmessage:
from mmsmanager import mmsmgr
from mmscomposestage import MMSMessageNotify, MMSMessageNotify_cb, MMSSize_excess
from mmsconfig import MEDIA_SOUND
if mmsmgr.setmedia(MEDIA_SOUND, self.get_current_file()):
runtime.manager.change_stage(MMSMessageNotify(self.mmsmessage, MMSMessageNotify_cb))
else:
MMSSize_excess()
else:
stage = AudioOptionStage(self.audio_type)
runtime.manager.stack_stage(stage)
def play_audio(self):
if status.phone_status != status.Disconnected:
return
if len(self.lists) == 0:
return
audio_file = self.get_current_file()
try:
audio_file = unicode(audio_file, 'utf-8').encode('euc-kr')
except:
pass
# spkOffHook = runtime.SP_context.SPK_OffHook()
# if spkOffHook.next():
# spkOffHook.next()
#self.player_pid = utils.player.play(audio_file)
utils.player.play_stereo(audio_file, gallery=True)
def stop_audio(self):
#print 'ka......STOP_audio/ phone_status=', status.phone_status
if status.phone_status != status.Disconnected:
return
# runtime.SP_context.SP_stopPlayback()
# spkOnHook = runtime.SP_context.SPK_OnHook()
# if spkOnHook.next():
# spkOnHook.next()
# spkOnHook.next()
#print 'ka......stop----------done'
#utils.player.stop(self.player_pid)
utils.player.stop_ring()
def sort(self):
'''
if config.mm_debug:
print '_AudioGalleryStage:sort'
if setting.audio_sort_rule == 0: # name
def sort_func(x,y):
return cmp(x[0].lower(), y[0].lower())
elif setting.audio_sort_rule == 1: # size
def sort_func(x,y,sort_col=setting.audio_sort_rule):
return cmp(x[sort_col], y[sort_col])
else: # date(new 가 먼저)
def sort_func(x,y,sort_col=setting.audio_sort_rule):
return -(cmp(x[sort_col], y[sort_col]))
'''
def sort_func(x, y):
return cmp(y[2], x[2])
self.lists.sort(sort_func)
# eicho remove. following occurs error when debug mode is enabled.
'''
if config.mm_debug:
print 'sort', 'col', setting.audio_sort_rule, first
'''
def get_current_file(self):
if config.mm_debug:
print '************** get current', self.audio_index
return self.audio_dir + self.lists[self.audio_index][0]
def set_as_ring(self):
audio_file = self.get_current_file()
try:
audio_file = unicode(audio_file, 'utf-8').encode('euc-kr')
except:
pass
if config.mm_debug:
print 'external'
##############################################
# eicho modify 06.07.25
'''
self.player_pid = utils.player.set_ring_amr(audio_file)
if self.player_pid == '' or self.player_pid == None:
if config.mm_debug:
print '### Can not change audio_file /ring=', setting.external_ring
else:
setting.external_ring = audio_file
if config.mm_debug:
print 'set this melody to ring', audio_file
'''
if audio_file.lower().endswith('.amr'):
utils.player.set_as_ring_cmd(audio_file)
else:
setting.external_ring = audio_file
#eicho modify 06.07.26 setting.external_ring = audio_file
def stop_set_as_ring(self):
utils.player.stop_change_amr(self.player_pid)
##############################################
def get_current_name(self):
name = self.lists[self.audio_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
return name
def rename_is_ok(self, name):
old = self.get_current_file()
ext = utils.get_ext(old)
name = name + '.' + ext
new_name = self.audio_dir + name
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
import os.path
if os.path.exists(new_name):
return False
return True
def rename(self, name):
audio_file = self.get_current_file()
ext = utils.get_ext(audio_file)
new_name = self.audio_dir + name + '.' + ext
try:
audio_file = unicode(audio_file, 'utf-8').encode('euc-kr')
except:
pass
try:
new_name = unicode(new_name, 'utf-8').encode('euc-kr')
except:
pass
if utils.rename(audio_file, new_name):
# eicho add 06.11.23 same as BT, for amw2wav ring
if config.mm_debug:
print ' audio_file =', audio_file
print ' new_name=', new_name
if audio_file == setting.external_ring:
setting.external_ring = config.def_melody
if audio_file.lower().endswith('.amr'):
p_filename = utils.player.change_name_audiowav(audio_file)
if os.access(p_filename, os.R_OK):
utils.remove(p_filename)
from phonedb import phonedb
if phonedb.count() >= 1:
for i in range(phonedb.count()):
item = phonedb.get_item(i)
if audio_file == item.melody:
item.melody=''
phonedb.save()
# end. 06.11.23
self.refresh_lists()
self.set_focus_item(new_name)
self.show()
self.ui.set_focus(self.audio_index)
def delete(self):
audio_file = self.get_current_file()
print audio_file
try:
audio_file = unicode(audio_file, 'utf-8').encode('euc-kr')
except:
pass
print audio_file
if audio_file == setting.external_ring:
setting.external_ring = config.def_melody
# eicho add 06.11.23 same as BT, for amw2wav ring
if audio_file.lower().endswith('.amr'):
p_filename = utils.player.change_name_audiowav(audio_file)
if os.access(p_filename, os.R_OK):
utils.remove(p_filename)
from phonedb import phonedb
if phonedb.count() >= 1:
for i in range(phonedb.count()):
item = phonedb.get_item(i)
if audio_file == item.melody:
item.melody=''
phonedb.save()
# end. 06.11.23
from groupdb import groupdb
if groupdb.count() >= 1:
for i in range(groupdb.count()):
if audio_file == groupdb.get_melody(i):
groupdb.set_melody(i, path='', name='')
groupdb.save()
if utils.remove(audio_file):
del self.lists[self.audio_index]
self.audio_number = len(self.lists)
if self.audio_number > 0:
if self.audio_index >= self.audio_number:
self.audio_index = self.audio_number - 1
self.refresh_lists()
if config.mm_debug:
print 'delete this melody', audio_file
print 'new index:', self.audio_index
def delete_all(self):
for i in range(self.audio_number):
name = self.audio_dir + self.lists[i][0]
try:
name = unicode(name, 'utf-8').encode('euc-kr')
except:
pass
utils.remove(name)
del self.lists[:]
if not os.path.exists(setting.external_ring):
setting.external_ring = config.def_melody
def get_detail(self):
audio_file = self.get_current_file()
import time
stat_audio = os.stat(audio_file)
#MMW
atime = os.stat(audio_file)[stat.ST_ATIME]
# print 'atime**********************', atime
mtime = os.stat(audio_file)[stat.ST_MTIME]
# print 'atime**********************', mtime
ctime = time.localtime(atime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
# print 'atime', date
ctime = time.localtime(mtime)
date = '%02d/%02d/%03d' % (ctime[2], ctime[1], ctime[0])
# print 'mtime', date
#end of MMW
size = (stat_audio[6] + 1023)/ 1024
name = audio_file.split('/')[-1]
try:
name = unicode(name, 'euc-kr').encode('utf-8')
except:
pass
return (name, date, '%dKB' % size)
def show(self):
self.play_audio()
ListStage.show(self)
def hide(self):
self.stop_audio()
ListStage.hide(self)
def destroy(self):
self.stop_audio()
ListStage.destroy(self)
class SoundsStage(ListStage):
icon = uiconfig.image_image_sound_sound_icon
def __init__(self):
self.title = _('SOUNDS')
self.choice = _('Recorded audios'), _("Videophone's melodies"), _("Received melodies")
ListStage.__init__(self)
def activate(self, index):
if index == 1:
stage = AudioGalleryStage('ring')
runtime.manager.stack_stage(stage)
return
stage = (RecordedAudioStage,None,ReceivedMelodyStage)[index]
runtime.manager.stack_stage(stage)
class DeleteReceivedAudioStage(ListStage):
icon = uiconfig.image_image_sound_sound_delete_icon
def __init__(self):
self.title = _('DELETE')
self.choice = _('Polyphonic melodies'), _('Other melodies')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
dirname, lists = get_audio_gallery_list('poly')
if len(lists) == 0:
stage = SoundNotifyStage(_('No polyphonic melodies'))
runtime.manager.stack_stage(stage)
return
message = _('Delete all polyphonic melodies?')
else:
dirname, lists = get_audio_gallery_list('other')
if len(lists) == 0:
stage = SoundNotifyStage(_('No other melodies'))
runtime.manager.stack_stage(stage)
return
message = _('Delete all other melodies?')
def yes():
if index == 0:
if config.mm_debug:
print 'FIXME: delete all polyphonic melodies!!'
utils.remove_dir(utils.get_audio_dir('poly'))
# eicho add 06.11.23 same as BT.
utils.remove_dir(config.audio_amr2wav_polyphonic_dir)
# end.
stage = NotifyStage(_('All polyphonic melodies deleted'), uiconfig.baloon_sound_delete_icon)
else:
if config.mm_debug:
print 'FIXME: delete all other melodies!!'
utils.remove_dir(utils.get_audio_dir('other'))
# eicho add 06.11.23 same as BT.
utils.remove_dir(config.audio_amr2wav_other_dir)
# end.
stage = NotifyStage(_('All other melodies deleted'), uiconfig.baloon_sound_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_sound_delete_icon)
runtime.manager.change_stage(stage)
class SoundDeleteStage(ListStage):
icon = uiconfig.image_image_sound_sound_delete_icon
def __init__(self):
self.title = _('DELETE')
self.choice = _('Recorded audio'),_('All sounds')
ListStage.__init__(self)
def activate(self, index):
if index == 0:
dirname, lists = get_audio_gallery_list('recorded')
if len(lists) == 0:
stage = SoundNotifyStage(_('No recorded audios'))
runtime.manager.stack_stage(stage)
return
message = _('Delete all recorded audios?')
def yes():
if config.mm_debug:
print 'FIXME: delete all recorded audios!!'
utils.remove_dir(utils.get_audio_dir('recorded'))
# eicho add 06.11.23 same as BT.
utils.remove_dir(config.audio_amr2wav_recorded_dir)
# end.
stage = NotifyStage(_('All recorded audios deleted'), uiconfig.baloon_sound_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_sound_delete_icon)
runtime.manager.stack_stage(stage)
#ka...3800 malaga 2007.04.02
# elif index == 1:
# stage = DeleteReceivedAudioStage()
# runtime.manager.stack_stage(stage)
else:
dirname, lists1 = get_audio_gallery_list('recorded')
dirname, lists2 = get_audio_gallery_list('poly')
dirname, lists3 = get_audio_gallery_list('other')
if len(lists1)+len(lists2)+len(lists3) == 0:
stage = SoundNotifyStage(_('No sounds'))
runtime.manager.stack_stage(stage)
return
message = _('Delete all sounds?')
def yes():
if config.mm_debug:
print 'FIXME: delete all Sounds!!'
# eicho add 06.11.23 same as BT.
utils.remove_dir(utils.get_audio_dir('recorded'))
utils.remove_dir(config.audio_amr2wav_recorded_dir)
utils.remove_dir(utils.get_audio_dir('poly'))
utils.remove_dir(config.audio_amr2wav_polyphonic_dir)
utils.remove_dir(utils.get_audio_dir('other'))
utils.remove_dir(config.audio_amr2wav_other_dir)
# end.
stage = NotifyStage(_('All sounds deleted'), uiconfig.baloon_sound_delete_icon)
runtime.manager.change_stage(stage)
def no():
runtime.manager.back_stage()
stage = OkNoStage(message, yes, no, '', uiconfig.baloon_sound_delete_icon)
runtime.manager.stack_stage(stage)
class SRSWOWSettingStage(Stage):
name = 'SRS WOW setting'
def __init__(self):
self.ui = baseui.SRSWOWSettingUI(_('SAVE'), '', '', _('BACK'))
def handle_key(self,key):
if key == config.Menu1 or key == 'OK':
setting.srswow_enable = self.ui.srs_wow_set.get_index()
setting.srswow_preset = self.ui.srs_wow_preset.get_index()
if setting.srswow_enable == 1:
utils.enable_srswow()
else:
utils.disable_srswow()
utils.set_srswow_preset(setting.srswow_preset)
setting.save()
utils.player.play_effect(config.SETTING_SUCCEEDED)
#stage = NotifyStage(_('Wow HD setting saved'), uiconfig.baloon_phonebook_icon) # CHECKME icon
stage = NotifyStage(_('Set is saved'), uiconfig.baloon_sound_icon)
runtime.manager.change_stage(stage)
return True
elif key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
elif key == 'Right' or key == 'Left':
if self.ui.index == 0:
self.ui.srs_wow_set.handle_key(key)
else:
self.ui.srs_wow_preset.handle_key(key)
return True
elif key == 'Up':
if self.ui.index == 0:
self.ui.index = 1
else:
self.ui.index = 0
self.ui.set_focus(self.ui.index)
return True
elif key == 'Down':
if self.ui.index == 0:
self.ui.index = 1
else:
self.ui.index = 0
self.ui.set_focus(self.ui.index)
return True
# Newair7: [20080415] Sound setting --> select bell
class NewSelectBellStage(Stage):
name = 'new_select_bell'
def __init__(self):
#self.ui = baseui.NewSelectBellUI(_('SAVE'), _('LIST'), '', _('BACK'))
self.ui = baseui.NewSelectBellUI(_('SAVE'), '', '', _('BACK')) # LIST key is blocked...
self.player_pid = None
#dirname, lists = get_audio_gallery_list('basic')
#self.audio_dir = dirname
#self.lists = lists
self.play_audio_timer = None
def get_current_file(self):
if config.mmi_debug:
print 'self.ui.audio_file_index=', self.ui.audio_file_index
filename = self.ui.full_lists[self.ui.audio_file_index]
if config.mmi_debug:
print '************** get current index=', self.ui.audio_file_index
print 'ui.audio_dir =', self.ui.audio_dir
print 'filename =', filename
print 'filename[0]=', filename[0]
print 'result =', self.ui.audio_dir + filename[0]
return self.ui.audio_dir + filename[0]
def play_audio(self):
if status.phone_status != status.Disconnected:
return
if self.ui.audio_file_index <= -1:
if config.mmi_debug: print 'index invalid. so not play'
return
audio_file = self.get_current_file()
if config.mmi_debug: print 'audio filename = ', audio_file
utils.player.play_ring(audio_file)
def stop_audio(self):
utils.player.stop_ring()
def destroy(self):
self.stop_audio()
Stage.destroy(self)
self.play_audio_timer = None
def handle_key(self,key):
if key == config.Menu1 or key == 'OK':
self.play_audio_timer = None
self.stop_audio()
runtime.mmedia.unload()
if self.ui.audio_file_index == -1:
stage = NotifyStage(_('Invalid ring for external calls'), uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_FAILED)
else:
audio_file = self.get_current_file()
if config.mmi_debug: print 'audio_file = ', audio_file
if os.access(audio_file, os.R_OK): # 20080419 added
# KA: [20080527] for test- mmf ring
setting.mmf_external_ring = ''
if audio_file.endswith('mmf'):
setting.mmf_external_ring = audio_file
os.system('cp \"%s\" /mfs/ram/mmf/ring.mmf'%audio_file)
audio_file = '/mfs/ram/mmf/ring.mmf'
# KA: [20080527] for test- mmf ring
if audio_file.lower().endswith('.amr'):
utils.player.set_as_ring_cmd(audio_file)
else:
setting.external_ring = audio_file
setting.save()
message = _('Set is saved')
stage = NotifyStage(message, uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
else:
stage = NotifyStage(_('Already deleted or renamed'), uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_FAILED)
return True
elif key == config.Menu2:
return True # List key is blocked...
self.stop_audio()
import menu
if self.ui.index == 0:
runtime.manager.stack_stage(SelectBellListStage)
runtime.manager.stage.ui.set_focus(self.ui.audio_dir_index) # audio_dir_index
else:
runtime.manager.stack_stage(SelectBellListStage)
runtime.manager.stage.ui.set_focus(self.ui.audio_dir_index)
if self.ui.audio_file_index == -1:
self.ui.audio_file_index = 0
runtime.manager.stage.activate(self.ui.audio_dir_index, self.ui.audio_file_index, stage_change=True) # 20080419 added
runtime.manager.stage.ui.set_focus(self.ui.audio_file_index)
self.ui.index = 0
#self.ui.audio_file_index = -1
#file_index = self.ui.audio_file_index
return True
elif key == config.Menu3:
return True
elif key == config.Menu4 or key == 'CLR':
self.play_audio_timer = None
self.stop_audio()
runtime.manager.back_stage()
return True
elif key == 'Right':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.change_melody_dir(True)
else:
self.stop_audio()
self.ui.change_melody_file(True)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Left':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.change_melody_dir(False)
else:
self.stop_audio()
self.ui.change_melody_file(False)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Up':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.index = 1
#self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
else:
self.ui.index = 0
self.stop_audio()
self.ui.set_focus(self.ui.index)
return True
elif key == 'Down':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.index = 1
#self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
else:
self.ui.index = 0
self.stop_audio()
self.ui.set_focus(self.ui.index)
return True
elif key == config.OffHook or key == config.Green or key == config.Red or key == config.Video:
self.play_audio_timer = None
return False
else:
if config.mmi_debug: print 'CHECKME more!!! key=', key
return True
class SelectBellListStage(ListStage):
def __init__(self):
self.title = _('SELECT BELL')
#self.choice = _('Basic bell'), _('Sweet bell'), _('Merry bell'), _('Classic bell'), _('Effect bell'), _('Download bell')
self.choice = _('Basic bell'), _('Sweet bell'), _('Merry bell'), _('Classic bell'), _('Effect bell')
ListStage.__init__(self,titleimage=uiconfig.Third_title_select_bell)
def activate(self, dir_index=0, audio_index=0, stage_change=False):
bell_type = ['basic', 'sweet', 'merry', 'classic', 'effect', 'download']
if config.mmi_debug:
print '### bell_type name =', bell_type[dir_index]
print '### audio_index =', audio_index
stage = AudioGalleryStage(bell_type[dir_index], audio_index=audio_index)
if stage_change == False:
runtime.manager.stack_stage(stage)
else:
runtime.manager.change_stage(stage)
return
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.ui.get_focus() >= 0:
self.activate(self.ui.get_focus())
return True
# yylee modified to add new soft key
# elif key == config.Menu2:
elif key == config.Menu4 or key == 'CLR':
if self.isactivate2:
self.activate2(self.ui.get_focus())
else:
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
return self.ui.handle_key(key)
elif key == '1':
self.activate(0)
return True
elif key == '2':
self.activate(1)
return True
elif key == '3':
self.activate(2)
return True
elif key == '4':
self.activate(3)
return True
elif key == '5':
self.activate(4)
return True
elif key == '6':
self.activate(5)
return True
elif key == '7':
self.activate(6)
return True
elif key == '8':
self.activate(7)
return True
elif key == '9':
self.activate(8)
return True
return False
# Newair7: [20080415] Sound setting --> select effect
class NewSelectEffectStage(Stage):
name = 'new_select_effect'
def __init__(self,index=0):
self.ui = baseui.NewSelectEffectUI(index, _('SAVE'), '', '', _('BACK'))
self.player_pid = None
def get_current_file(self):
if config.mm_debug:
print '************** get current', self.audio_index
return self.audio_dir + self.lists[self.audio_index][0]
def play_audio(self):
if status.phone_status != status.Disconnected:
return
if len(self.lists) == 0:
return
audio_file = self.get_current_file()
#self.player_pid = utils.player.play(audio_file)
def stop_audio(self):
if status.phone_status != status.Disconnected:
return
#utils.player.stop(self.player_pid)
def get_current_name(self):
name = self.lists[self.audio_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
return name
def destroy(self):
self.stop_audio()
Stage.destroy(self)
def handle_key(self,key):
if key == config.Menu1 or key == 'OK':
#setting.button_effect_index = self.ui.button_effect_index
if self.ui.button_effect_index == 1:
setting.button_effect_index = 1
elif self.ui.button_effect_index == 2:
setting.button_effect_index = 3
elif self.ui.button_effect_index == 3:
setting.button_effect_index = 4
else:
print "[error] execption case while setting button effect"
setting.button_effect_index = self.ui.button_effect_index
setting.setting_effect_index = self.ui.setting_effect_index
#setting.message_effect_index = self.ui.msg_effect_index
#setting.weather_effect_index = self.ui.weather_effect_index
setting.save()
runtime.mmedia.unload()
if setting.button_effect_index == 0:
runtime.mmedia.unload()
stage = NotifyStage(_('Set is saved'), uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
return True
elif key == config.Menu2:
return True
elif key == config.Menu3:
return True
elif key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
return True
elif key == 'Right':
if self.ui.index == 0:
self.ui.change_button(True)
elif self.ui.index == 1:
self.ui.change_setting(True)
'''
elif self.ui.index == 2:
self.ui.change_message(True)
'''
'''
elif self.ui.index == 3:
self.ui.change_weather(True)
'''
return True
elif key == 'Left':
if self.ui.index == 0:
self.ui.change_button(False)
elif self.ui.index == 1:
self.ui.change_setting(False)
'''
elif self.ui.index == 2:
self.ui.change_message(False)
'''
'''
elif self.ui.index == 3:
self.ui.change_weather(False)
'''
return True
elif key == 'Down':
self.ui.index = 1 - self.ui.index
'''
self.ui.index += 1
if self.ui.index > 2:
self.ui.index = 0
'''
self.ui.set_focus(self.ui.index)
return True
elif key == 'Up':
self.ui.index = 1- self.ui.index
'''
self.ui.index -= 1
if self.ui.index < 0:
self.ui.index = 2
'''
self.ui.set_focus(self.ui.index)
return True
elif key == config.OffHook or key == config.Green or key == config.Red or key == config.Video:
return False
else:
if config.mmi_debug: print 'CHECKME more!!! key=', key
return True
class GroupBellStage(ListStage):
name = 'groupbellstage'
# choice = _('Undefined'), _('Family'), _('Relatives'), _('Friend'), _('Office'), _('School'), _('Etc')
#titleimage=uiconfig.title_setting_groupbell
icon = uiconfig.setting_groupbell_icon
def __init__(self):
self.title = _('GROUP BELL')
from groupdb import groupdb
groupdb.valid_check()
self.load_group()
ListStage.__init__(self, left=_('OK'), menu4=_('BACK'))
self.change_choice(self.choice)
def load_group(self):
self.choice= []
from groupdb import groupdb
self.choice = groupdb.get_group_list()
# def activate(self, index):
# stage = EditGroupStage(index)
# runtime.manager.stack_stage(stage)
def select_group(self, index):
# print "[yylee debug] select_group index:", index
if index < len(self.choice):
stage = EditGroupBellStage(index)
runtime.manager.stack_stage(stage)
return True
else:
return False
def show(self):
#self.load_group()
#self.change_choice(self.choice)
ListStage.show(self)
def handle_key(self, key):
index = self.ui.get_focus()
if key == config.Menu1 or key == 'OK':
stage = EditGroupBellStage(index)
runtime.manager.stack_stage(stage)
elif key == config.Menu4 or key == 'CLR':
runtime.manager.back_stage()
elif key in ('Up', 'Down'):
ListStage.handle_key(self, key)
elif key in '123456789':
index = int(key) -1
self.select_group(index)
else:
return False
return True
class EditGroupBellStage(Stage):
name = 'EditGroupBell'
def __init__(self,index):
self.ui = baseui.EditGroupBellUI(index, _('SAVE'), '', '', _('BACK'))
self.player_pid = None
self.play_audio_timer = None
def get_current_file(self):
'''
if config.mm_debug:
print '************** get current', self.audio_index
return self.audio_dir + self.lists[self.audio_index][0]
'''
return self.ui.get_current_file()
def play_audio(self):
if status.phone_status != status.Disconnected:
return
'''
if len(self.lists) == 0:
return
'''
audio_file = self.get_current_file()
if audio_file != '':
#self.player_pid = utils.player.play(audio_file)
utils.player.play_ring(audio_file)
def stop_audio(self):
if status.phone_status != status.Disconnected:
return
#utils.player.stop(self.player_pid)
utils.player.stop_ring()
def get_current_name(self):
name = self.lists[self.audio_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
return name
def destroy(self):
Stage.destroy(self)
self.stop_audio()
self.play_audio_timer = None
def handle_key(self,key):
if key == config.Menu1 or key == 'OK':
self.play_audio_timer = None
# print "[yylee debug] item_index: ", self.ui.item_index
if self.ui.audio_dir_index != 0:
if self.ui.audio_file == '' or self.ui.audio_file == _('None'):
stage = NotifyStage(_('Invalid ring for external calls'), uiconfig.baloon_phonebook_icon) # CHECKME icon
runtime.manager.stack_stage(stage)
return True
from groupdb import groupdb
groupdb.set_melody(self.ui.item_index, self.ui.path, self.ui.audio_file)
import phonebook
stage = phonebook.PhonebookNotifyStage(_('Set is saved'))
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
return True
elif key == config.Menu4 or key == config.CLEAR:
self.play_audio_timer = None
runtime.manager.back_stage()
return True
elif key == 'Right':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.change_melody_dir(True)
self.ui.change_melody_file(True, dir_changed=True)
else:
self.stop_audio()
self.ui.change_melody_file(True)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Left':
self.play_audio_timer = None
if self.ui.index == 0:
self.ui.change_melody_dir(False)
self.ui.change_melody_file(False, dir_changed=True)
else:
self.stop_audio()
self.ui.change_melody_file(False)
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Up' or key == 'Down':
self.play_audio_timer = None
self.ui.handle_key(key)
if self.ui.index == 1:
self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
else:
self.stop_audio()
return True
#return False