# -*- coding: euc-kr -*-
#-------------------------------------------------------------------------------
# Name: vmHandler
# Purpose: MMI와 VM간에 사용되는 함수를 정의한다.
#
# Author: 류호창
#
# Created: 14-03-2008
# Copyright: (c) LG-Nortel 2007
# Licence: <Ryoo Ho Chang GGU!>
#-------------------------------------------------------------------------------
import os
import socket
import vmConfig
import runtime
from runtime import mmiDebug as MD
import config
import status
import utils
import shutil
from setting import setting
class VmHandler:
MSG_ITEM_LENGTH = 12
SOCKET_BUF_SIZE = 2048
# define goto target
IDLE = 'idle'
BACK = 'back'
PAUSED = 'paused'
MMSC = 'MMSC'
MULTIMEDIA = 'MULTIMEDIA'
BROWSER = 'BROWSER'
MMI = 'MMI'
BANKING = 'BANKING'
# FBTOP
FOREGROUND_MMI = 'fbtop 1'
FOREGROUND_BROWSER = 'fbtop 2'
FOREGROUND_VM = 'fbtop 3'
def __init__(self):
self.vmHandler_pid = None
self.vmClientSocket = None
self.vmReceveHandler = None
self.vmPid = None
self.vmAliveTimer = None
self.smsPlayTimer = None
self.with_error = False
#self.regi_status = False
self.runVmHandler()
# KA: [20080522] Init info 전달 (model/swV/hwV/serialNUM/MAC)
if self.vmReceveHandler:
self.setTerminalInitInformation()
# KA: [20080522] Init info 전달 (model/swV/hwV/serialNUM/MAC) ==
self.channel = None
self.baseStatus = None
self.toAddress = None
self.contentType = None
self.subject = None
self.filePath = None
self.filePathForTempMessage = '/tmp/tempMessageForSMS'
self.replyUser = None
# 처음 JVM server를 살리고 처음 한번 보내는 system info
def setTerminalInitInformation(self):
import os, phonesetting
model, hwver, swver = phonesetting.getVersion()
serialnumber = phonesetting.getSerialNumber()
macaddress = phonesetting.getMACNumber()
mmsServer = setting.mms_http_server
#mmsServer = config.MMS_HTTP_SERVER
lang = setting.lang
self.VM_TERMINAL_INIT_INFO_SET(model, swver, hwver, serialnumber, macaddress, mmsServer, lang)
print 'ka...########## info=', model, swver, hwver, serialnumber, macaddress, mmsServer, lang
# 처음 reigister 성공하고 한번 보내는 info
def setTerminalInformation(self):
#print 'ka.....................regi_status=', self.regi_status
if runtime.vdciapp.vm_register:
return
from vdcisetting import vdci_setting
import profile
import phonesetting
terminalIp = '0.0.0.0'
terminalIpInfo = phonesetting.getIpAddress()
if terminalIpInfo:
terminalIp = terminalIpInfo[0]
telephoneNumber = vdci_setting.tel_num
domain = vdci_setting.domain
password = setting.pin
if profile.profile.get_profile() == 2:
if status.wifi_connected:
connection = '1' #success
else:
connection = '0' # fail
else:
if status.LanConnected:
connection = '1'
else:
connection = '0'
#register_status = str(status.registered_status) #success -1 / fail -0
import ntptime
ntpTime = ntptime.timediff()
runtime.vdciapp.vm_register = True
# for key tone
#keytone profile index/keytone volume/효과음 profile index/효과음 volume
buttonIndex = setting.button_effect_index # 0 해제 (1~4)
effectIndex = setting.setting_effect_index # 0 해제 (1~3)
buttonVolume = config.keytone[setting.keytone_volume-1]
effectVolume = config.effect_sound[setting.effect_volume-1]
self.VM_TERMINAL_INFO_SET(terminalIp, telephoneNumber, domain, password, connection, ntpTime, buttonIndex, buttonVolume, effectIndex, effectVolume)
def keepMMSMessage(self, channel, baseStatus, toAddress, contentType, subject, filePath, replyUser):
self.channel = channel
self.baseStatus = baseStatus
self.toAddress = toAddress
self.contentType = contentType
self.subject = subject
self.filePath = filePath
self.replyUser = replyUser
if status.TEMP_MSG_CONDITION:
shutil.copyfile(self.filePath, self.filePathForTempMessage)
def getMMSInfoForMessageTest(self):
return [self.baseStatus, self.toAddress, self.contentType, self.subject, self.filePathForTempMessage, self.replyUser]
def sendMessageWithDectConfirm(self):
self.VM_SMMS_RECV_REQUEST(self.baseStatus, self.toAddress, self.contentType, self.subject, self.filePath, self.replyUser)
def jvmServerStart(self):
MD.mmiTrace('### ### JVM Server START ### ###')
try:
os.unlink(config.vm_socket_path)
except OSError:
pass
self.vmPid = os.fork()
if self.vmPid == 0:
try:
os.execlp('jvm-ipc-server','jvm-ipc-server')
#os.execlp('jvm-ipc-server','jvm-ipc-server', '-classpath', '\"__xvmrom__.jar:DownloadBox.jar:MediaPlayer.jar:MMSClient.jar\"', '-heapsize','8M')
#os.execlp('sh', 'sh', '/usr/local/bin/jvm-run.sh')
except:
os._exit(1)
def runVmHandler(self):
MD.mmiTrace('VmHandler.runVmHandler()')
self.jvmServerStart()
import time
time.sleep(3)
self.vmClientSocket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.vmClientSocket.setblocking( 1 )
import time
try_connect = 0
while try_connect < 5:
try_connect += 1
connected = True
try:
self.vmClientSocket.connect(config.vm_socket_path)
except:
connected = False
if connected:
MD.mmiTrace('** jvm_socket connected! **')
import evas
self.vmReceveHandler=runtime.evas.input_add(self.vmClientSocket.fileno(), evas.INPUT_READ, self.messageHandlerFromVm)
break
else: # sock connect error, retry..
MD.mmiTrace('** jvm_socket connect failed, retry', try_connect, '**')
time.sleep(1)
# msglen | event | data1 | data2 | data3 | data4 | data5 | data6 | data7 | data8 | data9 | data10
def messageHandlerFromVm(self,vmClientSocket,type):
import status
try:
socketMessage = self.vmClientSocket.recv( self.SOCKET_BUF_SIZE )
except:
self.with_error = True
MD.mmiException('messageHandlerFromVm')
return
if len( socketMessage ) == 0: # Disconnected from unix socket
if self.vmReceveHandler != None:
runtime.evas.input_remove(self.vmReceveHandler)
self.vmReceveHandler = None
return
receivedMessage = socketMessage.split('|')
messages = []
while receivedMessage:
messages.append(receivedMessage[:self.MSG_ITEM_LENGTH])
receivedMessage = receivedMessage[self.MSG_ITEM_LENGTH:]
if len(receivedMessage) == 1:
break
for message in messages:
#print '[MMI] ', message
event = message[1]
data = message[2:]
intEvent = int(event)
#MD.mmiTrace('MESSAGE : VM --> BASE :: ', vmConfig.DICT_V2B_FUNCTION[intEvent])
self.V2B_messageRun(vmConfig.DICT_V2B_FUNCTION[intEvent], event, data)
return True
def V2B_messageRun(self, cmd, *param):
if hasattr(self, cmd):
func = getattr(self, cmd)
func(param)
def VM_CHECK_KEEP_ALIVE_RESP(self, V2B_message):
event, data = V2B_message
def VM_STEREO_SOUND_OPEN(self, V2B_message):
event, data = V2B_message
def VM_STEREO_SOUND_CLOSE(self, V2B_message):
event, data = V2B_message
def VM_STEREO_VOLUME_SET(self, V2B_message):
event, data = V2B_message
def VM_SMMS_SEND_REQUEST(self, V2B_message):
event, data = V2B_message
toAddress, replyUser, contentType, subject, filePath, length = data[:6]
if toAddress == 'mms' or toAddress =='MMS':
#domainAddress = 'ktwibro.net'
#domainAddress = 'ktann.com'
domainAddress = setting.mms_host
useraddr = ''
domainAddress2 = ''
else:
domainAddress = setting.sms_host
#domainAddress = 'ismc.ann.com'
#useraddr = '1549'
useraddr = setting.sms_user
#domainAddress2 = 'ismc.ann.com'
domainAddress2 = domainAddress
MD.mmiTodo('관리자 모드에서 설정된 값으로 변경해야 함.')
uriType = '0' # sip-uri
if runtime.vdciapp:
runtime.vdciapp.send_mesg(code1='m', code2='m', \
mesg1=toAddress, \
mesg2=domainAddress, \
mesg3=contentType, \
mesg4=subject, \
mesg5=filePath, \
mesg6=replyUser, \
mesg7=useraddr,\
mesg8=domainAddress2,\
mesg9=uriType)
def VM_SMMS_MMI_NOTIFY(self, V2B_message):
event, data = V2B_message
data = data[0]
if data == 'mms:low-storage':
MD.mmiTrace('********* LOW STORAGE *******')
status.low_storage_in_message = True
elif data.startswith('mms:receive-completed'):
MD.mmiTrace('********* NEW MMS MESSAGE RECEIVED *******')
number = data.split(';')[1]
date = data.split(';')[2]
status.mms_received_count += 1
status.mms_received_info = number+ ' ' +date
MD.mmiTrace('MESSAGE', status.mms_received_info)
#print 'ka............. runtime.eaHandler.isAppInUse() =', runtime.eaHandler.isAppInUse()
#print 'ka............status.mms_received_count=', status.mms_received_count
setting.set_sms_missed(True) # for top bar
if runtime.manager.stage.get_name() == 'idle':
runtime.manager.stage.ui.update_sms_icon()
if status.low_storage_in_message == True:
status.low_storage_in_message = False
full_flag = True
else:
full_flag = False
# screen saver 동작 중인 경우 STOP
#if status.slideshow_running:
# setting.stop_slideshow()
setting.reset_screen_saver_timer()
# KA: [20080609] sms notify
if not runtime.eaHandler.isAppInUse():
if runtime.manager.stage.get_name() == 'idle' or \
runtime.manager.stage.get_name() == 'missed_message':
runtime.manager.change_stage(MessageNotifyStage(full_flag), True)
else:
runtime.manager.stage.SMS_Notify_show()
else:
destination = runtime.eaHandler.getForeground().getName()
#print '[MMI] message receive -destination=', destination
if destination == 'MMI':
if runtime.manager.stage.get_name() == 'idle' or \
runtime.manager.stage.get_name() == 'missed_message':
runtime.manager.change_stage(MessageNotifyStage(full_flag), True)
else:
runtime.manager.stage.SMS_Notify_show()
elif destination == 'BROWSER':
runtime.myannapp.send_message_received()
#utils.player.play_message_effect()
self.playNotify()
else:
self.EVT_APP_MESSAGE_RECEIVED()
#utils.player.play_message_effect()
self.playNotify()
elif data.startswith('mms:notify-sound-off'):
self.playClear()
elif data.startswith('mms:inbox-read'):
self.playClear()
#'mms:inbox-read(0)'
pos_1 = data.find('(')
pos_2 = data.find(')')
noReadMsg = data[pos_1+1:pos_2]
if noReadMsg == '0' or noReadMsg == '-1': #-1전체 삭제
setting.set_sms_missed(False)
status.mms_received_count = 0
elif data == 'mms:receive-failed':
pass
elif data == 'mms:ready':
pass
elif data == 'mms:notify-internal:1':
setting.set_message_interval(1)
elif data == 'mms:notify-internal:120':
setting.set_message_interval(120)
elif data == 'mms:notify-internal:600':
setting.set_message_interval(600)
def playNotify(self):
utils.player.play_message_effect()
if setting.message_interval != 1:
self.smsPlayTimer = utils.Timer(setting.message_interval * 1000, self.playByInterval)
#self.play_timer = utils.Timer(10000, self.playByInterval)
def playByInterval(self):
utils.player.play_message_effect()
return True
def playClear(self):
self.smsPlayTimer = None
def VM_GOTO_MMI_PROCESS(self, V2B_message):
event, data = V2B_message
command = data[0].split(':')[1]
MD.mmiTrace('VM_GOTO_MMI_PROCESS::command = ', command)
# 2008.07.02
self.AliveVM()
if command == self.IDLE:
runtime.eaHandler.deactivateApplication(gotoIdle=True)
if runtime.eaHandler.pauseTimer:
#print 'ka....######## RedAck --- go to Incoming'
runtime.eaHandler.rcvPauseAck()
elif command == self.BACK:
# manager.py에서 EaHandler를 이용할 것.
# 현재 MMI와 동일하게 구현함.
runtime.eaHandler.deactivateApplication()
if runtime.eaHandler.pauseTimer:
#print 'ka....######## BackAck --- go to Incoming'
runtime.eaHandler.rcvPauseAck()
elif command == self.MMSC:
self.EVT_APP_SET_FOREGROUND(self.MMSC)
elif command == self.MULTIMEDIA:
self.EVT_APP_SET_FOREGROUND(self.MULTIMEDIA)
elif command == self.BROWSER:
#self.VM_KEY_STOP()
#status.MMI_KEY_BLOCK = False
#os.system(self.FOREGROUND_BROWSER)
runtime.eaHandler.gotoBrowser()
elif command == self.MMI:
self.VM_KEY_STOP()
status.MMI_KEY_BLOCK = False
os.system(self.FOREGROUND_MMI)
elif command == self.PAUSED:
runtime.eaHandler.rcvPauseAck()
def VM_PHONEBOOK_SELECT(self, V2B_message):
event, data = V2B_message
if data[0] == 'phonebook:selection':
runtime.eaHandler.openPhonebook('MMSC')
elif data[0] == 'phonebook:group_selection':
runtime.eaHandler.openGroupbook('MMSC')
else: # phonebook:addtelnum:07077000126
number = data[0].split(':')[2]
runtime.eaHandler.openAddPhonebook('MMSC', data=number)
def VM_VDCI_CALL_REQUEST(self, V2B_message):
event, data = V2B_message
MD.mmiTrace('VM_VDCI_CALL_REQUEST::data = ', data)
# 2008.07.02
self.AliveVM()
data = data[0]
#number = data[1]
if data.find('from:') != -1:
source = data.split('from:')[1]
number = ''
else:
# 이 경우에만 number가 존재
source = 'MMSC'
number = data.split('tel://')[1]
# QA:10-35:메시지 수신 확인시 popup 창 있을때 Green키 누르는 경우
if number == 'null':
number = ''
if data.find('h_vtel') != -1:
#source = data.split('from:')[1]
#number = data[9:]
#if len(number):
# runtime.eaHandler.startVideoCall(self.MMSC, number)
#else:
runtime.eaHandler.startCallWithoutNumber(source, number)
elif data.find('h_tel') != -1:
#source = data.split('from:')[1]
#number = data[8:]
#if len(number):
# runtime.eaHandler.startAudioCall(self.MMSC, number)
#else:
runtime.eaHandler.startCallWithoutNumber(source, config.OffHook)
# video key에 의한 비디오 콜
elif data.find('vtel') != -1:
#number = data[7:]
if len(number):
runtime.eaHandler.startVideoCall(source, number)
else:
runtime.eaHandler.startCallWithoutNumber(source, config.Video)
# audio key에 의한 오디오 콜
elif data.find('tel') != -1:
if len(number):
runtime.eaHandler.startAudioCall(source, number)
else:
runtime.eaHandler.startCallWithoutNumber(source, config.Green)
def VM_WAP_BROWSER_REQUEST(self, V2B_message):
event, data = V2B_message
runtime.eaHandler.startWAPfromBank()
def VM_SMMS_FULL(self, V2B_message):
event, data = V2B_message
def VM_SYNC_NOTI(self, V2B_message):
event, data = V2B_message
def VM_GET_INFO(self, V2B_message):
#register 상태와 link connection 상태를 알린다.
regiStatus = status.get_regstatus()
import profile
cur_profile = profile.profile.get_profile()
conStatus = 0
if cur_profile == 1:
if runtime.peek_lanlink():
conStatus = 1
else:
if runtime.peek_wifilink():
conStatus = 1
event = str(vmConfig.VM_GET_INFOACK)
self.B2V_sendMessage(event, str(regiStatus), str(conStatus))
#def VM_GET_INFOACK (self):
# event = str(vmConfig.VM_GET_INFOACK)
# self.B2V_sendMessage(event, regiStatus, conStatus)
def VM_SET_INFO_TO_MMI(self, V2B_message):
event, data = V2B_message
if data[0] == 'k.BELL_MMS_RECEIVED':
#melody = unicode(data[1], 'utf-8').encode('euc-kr')
melody = data[1]
melody = melody.replace(config.message_effect_VM_dir, config.message_effect_dir)
setting.set_message_effect(melody)
elif data[0] == 'k.IDLE_SCREEN':
full_path = data[1]
file = full_path.split('/usr/local/lgvp/')[1]
setting.bg_image_file = file
import baseui
baseui.change_bg(runtime.evas, file)
elif data[0] =='k.BELL':
audio_file = data[1]
# 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 ==
setting.external_ring = audio_file
def VM_MULTIMEA_BACK_IMAGE(self, V2B_message):
event, data = V2B_message
#print 'ka....background image = ', unicode(data[1], 'euc-kr').encode('utf-8')
full_path = data[1]
file = full_path.split('/usr/local/lgvp/')[1]
#try:
# full_path = unicode(full_path, 'utf-8').encode('euc-kr')
#except:
# pass
setting.bg_image_file = file
import baseui
baseui.change_bg(runtime.evas, file)
# msglen | event | data1 | data2 | data3 | data4 | data5 | data6 | data7 | data8 | data9 | data10 |
def B2V_sendMessage(self, event, data1='', data2='', data3='', data4='', data5='', data6='', data7='', data8='', data9='', data10=''):
intEvent = int(event)
MD.mmiTrace('MESSAGE : BASE --> VM :: ', vmConfig.DICT_B2V_FUNCTION[intEvent])
#MD.mmiTrace('data1 = ', data1)
#MD.mmiTrace('data2 = ', data2)
#MD.mmiTrace('data3 = ', data3)
#MD.mmiTrace('data4 = ', data4)
#MD.mmiTrace('data5 = ', data5)
#MD.mmiTrace('data6 = ', data6)
#MD.mmiTrace('data7 = ', data7)
#MD.mmiTrace('data8 = ', data8)
#MD.mmiTrace('data9 = ', data9)
#MD.mmiTrace('data10 = ', data10)
data = [data1, data2, data3, data4, data5, data6, data7, data8, data9, data10]
data.insert(0, event)
B2V_messageString = '|'.join(data) + '|'
B2V_messageString = str(len(B2V_messageString)) + '|' + B2V_messageString
#MD.mmiTrace('B2V_messageString = ', B2V_messageString)
if self.vmClientSocket != None:
try:
self.vmClientSocket.send(B2V_messageString)
except:
pass
def EVT_APP_MESSAGE_RECEIVED(self):
event = str(vmConfig.EVT_APP_MESSAGE_RECEIVED)
self.B2V_sendMessage(event)
def EVT_APP_PAUSE(self):
event = str(vmConfig.EVT_APP_PAUSE)
self.B2V_sendMessage(event)
def EVT_APP_MIDLET_PAUSE(self, application):
event = str(vmConfig.EVT_APP_MIDLET_PAUSE)
self.B2V_sendMessage(event, application)
def EVT_APP_MIDLET_RESUME(self, application, language):
event = str(vmConfig.EVT_APP_MIDLET_RESUME)
self.B2V_sendMessage(event, application, language)
def EVT_APP_RESUME(self):
event = str(vmConfig.EVT_APP_RESUME)
self.B2V_sendMessage(event)
def EVT_APP_SHUTDOWN(self):
event = str(vmConfig.EVT_APP_SHUTDOWN)
self.B2V_sendMessage(event)
def EVT_APP_SET_FOREGROUND(self, application):
event = str(vmConfig.EVT_APP_SET_FOREGROUND)
self.B2V_sendMessage(event, application)
def EVT_APP_START(self, MIDlet):
event = str(vmConfig.EVT_APP_START)
self.B2V_sendMessage(event, MIDlet)
def EVT_APP_STOP(self):
event = str(vmConfig.EVT_APP_STOP)
self.B2V_sendMessage(event)
def EVT_APP_LIST(self):
event = str(vmConfig.EVT_APP_LIST)
self.B2V_sendMessage(event)
def EVT_APP_MESSAGE(self, name, data):
event = str(vmConfig.EVT_APP_MESSAGE)
self.B2V_sendMessage(event, name, data)
def ERR_SIP_UNREGISTERED(self):
event = str(vmConfig.ERR_SIP_UNREGISTERED)
self.B2V_sendMessage(event)
def ERR_NETWORK_LINE_OUT(self):
event = str(vmConfig.ERR_NETWORK_LINE_OUT)
self.B2V_sendMessage(event)
def ERR_SIP_REGISTERED(self):
event = str(vmConfig.ERR_SIP_REGISTERED)
self.B2V_sendMessage(event)
def ERR_NETWORK_LINE_IN(self):
event = str(vmConfig.ERR_NETWORK_LINE_IN)
self.B2V_sendMessage(event)
def VM_CHECK_KEEP_ALIVE(self):
event = str(vmConfig.VM_CHECK_KEEP_ALIVE)
self.B2V_sendMessage(event)
def VM_GET_EXECUTION_LIST(self):
pass
def VM_GET_FOREGROUND_ID(self):
pass
def VM_SMMS_RECV_REQUEST(self, baseStatus, toAddress, contentType, subject, filePath, replyUser):
event = str(vmConfig.VM_SMMS_RECV_REQUEST)
from os.path import getsize
length = str(getsize(filePath))
#print 'ka............................baseStatus=', baseStatus
self.B2V_sendMessage(event, baseStatus, toAddress, replyUser, contentType, subject, filePath, length)
def VM_SMMS_SEND_RESULT(self, code, reason):
event = str(vmConfig.VM_SMMS_SEND_RESULT)
self.B2V_sendMessage(event, code, reason)
def VM_COOKIE_UPDATE_REQ(self, path=None):
event = str(vmConfig.VM_COOKIE_UPDATE_REQ)
self.B2V_sendMessage(event, path)
def VM_TERMINAL_INFO_SET(self, ip, telephoneNumber, domain, password, connection, ntptime, buttonIndex, buttonVolume, effectIndex, effectVolume):
#LINE CON =0 /1 , REGI=1 /0
event = str(vmConfig.VM_TERMINAL_INFO_SET)
self.B2V_sendMessage(event, ip, telephoneNumber, domain, password, connection, str(ntptime), str(buttonIndex), str(buttonVolume), str(effectIndex), str(effectVolume))
def VM_TERMINAL_INIT_INFO_SET(self, model, sw, hw, serial, mac, mmsServer, language):
event = str(vmConfig.VM_TERMINAL_INIT_INFO_SET)
self.B2V_sendMessage(event, model, sw, hw, serial, mac, mmsServer, language)
def VM_KEY_STOP(self):
event = str(vmConfig.VM_KEY_STOP)
self.B2V_sendMessage(event)
def VM_KEY_START(self):
event = str(vmConfig.VM_KEY_START)
self.B2V_sendMessage(event)
# KT 서비스 신청
def VM_KT_SERVICES(self, services):
event = str(vmConfig.VM_KT_SERVICES)
self.B2V_sendMessage(event, services)
def VM_REDKEY_PRESSED(self):
if not self.vmAliveTimer and not runtime.eaHandler.pauseTimer:
print 'ka...############ waitRed----------'
self.vmAliveTimer = utils.Timer(10 * 1000, self.reRunVmHandler)
event = str(vmConfig.VM_REDKEY_PRESSED)
self.B2V_sendMessage(event)
else:
print 'ka...### Red key / Pause timer started!! ignore~~'
def VM_REDKEY_RELEASED(self):
event = str(vmConfig.VM_REDKEY_RELEASED)
self.B2V_sendMessage(event)
def AliveVM(self):
print 'ka...############ rcvRedAck----------'
self.vmAliveTimer = None
def VM_KEEP_APP(self, V2B_message):
#event, data = V2B_message
self.AliveVM()
def reRunVmHandler(self):
self.vmAliveTimer = None
import os, time
print 'ka.....### reRunVmHandler------------'
os.system('fbtop 1')
time.sleep(0.5)
os.system('killall python')
#os.system('reboot')
#self.killJVM()
#runtime.vmHandler = VmHandler()
def killJVM(self):
def killall(name, sig):
for pid in os.listdir('/proc'):
cmdline_path = '/proc/%s/cmdline' % pid
if os.path.exists(cmdline_path):
try:
pid = int(pid)
except ValueError:
continue
if open(cmdline_path).read().startswith(name):
os.kill(pid, sig)
#if self.run_recv_thread != None:
# runtime.evas.input_remove(self.run_recv_thread)
# self.run_recv_thread = None
if self.vmPid:
try:
import signal, time
os.kill(self.vmPid, signal.SIGKILL)
os.waitpid(self.vmPid, 0)
killall('jvm-ipc-server', signal.SIGKILL)
except:
pass
def hdl_sigchld(signum, frame): # clean a zombie
try:
while 1:
print 'os wait pid 6'
if os.waitpid(0, os.WNOHANG): raise OSError
except OSError:
pass
self.vmPid = None
signal.signal(signal.SIGCHLD, hdl_sigchld)
os.unlink(config.vm_socket_path)
os.system('rm -rf /tmp/Embider/')
from basemodel import Stage
class MessageStatusNotifyStage(Stage):
name = 'message_status_notify'
def __init__(self):
self.ui = MessageStatusNotifyUI(num_mms, uiconfig.baloon_message_mms_icon)
self.ui.show_bg = True
'''
def update_num_mms(self):
self.ui.set_num_mms(num_mms)
icon = uiconfig.baloon_message_mms_icon
icon_name, pos = icon
self.ui.remove(self.ui.icon)
self.ui.icon = utils.put_image(icon_name, pos)
self.ui.add(self.ui.icon)
'''
def handle_key(self, key):
if key == config.Menu1:
runtime.eaHandler.readNewMessage(destination='MMS')
runtime.manager.back_stage()
elif key == config.Menu2:
runtime.manager.back_stage()
else:
return self.ui.handle_key(key)
return True
from baseui import BaloonUI
import uiconfig
class MessageStatusNotifyUI(BaloonUI):
def __init__(self, icon=uiconfig.baloon_message_mms_icon):
BaloonUI.__init__(self, _('VIEW'), _('EXIT'), '', icon)
if status.low_storage_in_message:
message = _('Message received!')
else:
message = _('Message received![almost Full]')
self.messageStatusNotifyMessage = runtime.evas.text(text=message, font=uiconfig.idle_sms_font, color=uiconfig.idle_sms_color)
self.messageStatusNotifyMessage.pos = uiconfig.idle_sms_pos
self.add(self.messageStatusNotifyMessage)
if status.low_storage_in_message:
name, pos = uiconfig.idle_icon_messagefull
sms_fullimage = utils.put_image(name, pos)
self.add(sms_fullimage)
else:
name, pos = uiconfig.idle_sms_icon
self.sms_image = utils.put_image(name, pos)
self.add(self.sms_image)
def set_num_mms(self, num_mms):
self.num_mms = num_mms
if self.num_mms == 1:
message = _('1 MMS received!')
else:
message = '%d' % self.num_mms + ' ' + _('MMS received.')
self.t.text = message
# KA: [20080523] VM SMS수신
import ui
class MessageNotifyStage(Stage):
name = 'missed_message'
def __init__(self, full_flag = False):
#from phonedb import phonedb
#caller_name = phonedb.get_name(number)
#self.caller_name = utils.resize_text(caller_name, uiconfig.incoming_call_text_width, uiconfig.incoming_call_font)[0]
self.play_timer = None
msg_num = status.mms_received_count
info = status.mms_received_info
number, date = info.split(' ')
# make date - 2008/05/30/17:40 /21
'''
yy = date[:4]
mon = date[4:6]
day = date[6:8]
hour = date[8:10]
min = date[10:12]
date = yy + '/' + mon + '/' + day + ' ' + hour + ':' + min
'''
# make date - 05/30 05:40PM
yy = int(date[:4])
mon = int(date[4:6])
day = int(date[6:8])
hour = int(date[8:10])
min = int(date[10:12])
'''
if hour > 12:
date = "%02d/%02d %02d:%02dPM" % (mon, day, (hour-12), min)
elif hour == 12:
date = "%02d/%02d %02d:%02dPM" % (mon, day, hour, min)
else:
date = "%02d/%02d %02d:%02dAM" % (mon, day, hour, min)
'''
if hour > 12:
date = "%02d/%02d %s%02d:%02d" % (mon, day, _('PM'), (hour-12), min)
elif hour == 12:
date = "%02d/%02d %s%02d:%02d" % (mon, day, _('PM'), hour, min)
elif hour == 0:
date = "%02d/%02d %s%02d:%02d" % (mon, day, _('AM'), (hour+12), min)
else:
date = "%02d/%02d %s%02d:%02d" % (mon, day, _('AM'), hour, min)
from phonedb import phonedb
name = phonedb.get_name(number)
if name == '1549':
name = _('KT SMS Center')
if name.isdigit():
name = utils.conv_telnum(name)
if full_flag:
#msg = name+ _('Message received') +'\n' + _('Message inbox is full') + '\n' + date
msg = _('New message received.') + '\n' + name + '\n' + date + '\n' + _('Message inbox is full')
else:
#msg = name+ ' ' + _('Message received')+ '\n' + date
msg = _('New message received.') + '\n' + name + '\n' + date
self.ui = ui.MessageNotifyUI(msg)
self.play_notify()
setting.set_sms_missed(True) # for top bar
def play_notify(self):
utils.player.play_message_effect()
if setting.message_interval != 1:
self.play_timer = utils.Timer(setting.message_interval * 1000, self.playByInterval)
#self.play_timer = utils.Timer(10000, self.playByInterval)
def playByInterval(self):
utils.player.play_message_effect()
return True
def MMSC_goto_init(self):
from eaHandler import EaHandler
runtime.eaHandler.startAsInitialMode()
def destroy(self):
status.mms_received_count = 0
self.play_timer = None
Stage.destroy(self)
def handle_key(self, key):
#runtime.mmedia.unload() #vc02를 clear
if key in (config.Menu1, config.ok):
status.mms_received_count = 0
runtime.manager.back_stage()
from eaHandler import EaNotifyStage
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
runtime.eaHandler.activateApplication(destination = 'MMSC')
runtime.vmHandler.EVT_APP_SET_FOREGROUND('MMSC')
runtime.eaHandler.readNewMessage()
return True
elif key == config.Menu4 or key == config.Red:
status.mms_received_count = 0
from model import IdleStage
runtime.manager.change_stage(IdleStage, True)
#self.MMSC_goto_init()
return True
else:
return False
#return True
# KA: [20080523] VM SMS수신 ==