from roxiadebug import *
import syncML
from setting import setting
NAME, GROUP, PRIORITY, HOME, MOBILE, OFFICE, SPEED, EMAIL, MELODY, SNAPSHOT, CDATE, MDATE = range(12)
# nab-syncml.ktann.com /
class SyncML:
def __init__(self):
self.synccode = '200' # 200 two way / 203 REFRESH_FROM_CLIENT 올리기 / 205 REFRESH_FROM_SERVER 내려받기
self.userid = ''
self.userpwd = ''
self.terminal = ''
self.filepath = '/usr/local/lgvp/sync'
# dict ={'synccode':'', 'userid':'','userpwd':'','terminal':'', 'filepath':'/usr/local/lgvp/sync'}
# self.keys = dict.keys()
self.set_user_type()
self.deleted_db = []
def get_image(self):
syncML.download_img()
def put_image(self):
syncML.upload_img()
def sync_start_phonebook(self):
roxia_event('SyncML.start_phonebook')
if not self.load_phonebook():
print '[SYNC] load DB: fail'
return False
print '[SYNC] load DB: success'
#import os
#os.system('cp sync/addressbook_ann sync/addressbook_ann_load')
# result : 1 = error 0: OK
setting.set_sync_complete(1) # complete false
result = syncML.start_sync()
# 이 함수는 성공이든 실패든, syncDB를 다운 받는다.
def get_syncResult(self):
setting.set_sync_complete(0) # complete True
result =syncML.get_result()
if result == 0: ##################### cookies 인증 실패 후에도 성공 event를 받음;;
print '[SYNC] sync result: success'
self.down_phonebook()
return result
elif result == 1:
print '[SYNC] sync result: ING'
return result
else: # -1
print '[SYNC] sync result: fail'
self.down_phonebook()
return result
def sync_stop(self):
roxia_event('SyncML.stop_sync')
syncML.stop_sync()
def sync_start_infomation(self):
roxia_event('SyncML.start_information')
syncML.start_sync()
def load_phonebook(self):
# MMI phonenumber.txt --> sync/phonebook 으로 변환
import struct
self.db = [] # syncML common DB
self.deleted_db = [] # syncML deleted DB
from phonedb import phonedb
# KA...for test
#phonedb.sort_cdate()
#fp = open('phonenumber_test.txt','w')
#for item in phonedb.db:
# fp.write('\t'.join(item) + '\n')
#fp.close()
for item in phonedb.db:
#print 'ka.............phonedb.db=', phonedb.db, len(phonedb.db)
# syncML common DB
# --- v n g p h m c e cd md ----#
#db = '%s%-40s\0%-40s\0%-1s\0%-30s\0%-30s\0%-30s\0%-30s\0%-14s\0%-14s\0\r\n' % ('1', \
#item[NAME], item[GROUP], item[PRIORITY], item[HOME], item[MOBILE], item[OFFICE], \
#item[EMAIL], item[CDATE], item[MDATE])
#item[NAME]
name= unicode(item[NAME], 'utf-8').encode('euc-kr')
from groupdb import groupdb
index = item[GROUP]
group = groupdb.get_name(int(index))
group = unicode(group, 'utf-8').encode('euc-kr')
valid = struct.pack('1s', '1')
#name = struct.pack('31s', item[NAME])
name = struct.pack('31s', name)
group = struct.pack('31s', group)
priority = struct.pack('2s', item[PRIORITY])
home = struct.pack('31s', item[HOME])
mobile = struct.pack('31s', item[MOBILE])
office = struct.pack('31s', item[OFFICE])
email = struct.pack('65s', item[EMAIL])
image = struct.pack('129s', '')
cdate = struct.pack('18s', item[CDATE])
mdate = struct.pack('15s', item[MDATE])
crlf = struct.pack('2s', '\r\n')
db= valid + name+group+priority+home+mobile+office+email+image + cdate+mdate+crlf
self.db.append(db)
# syncML deleted DB
deleted_db = item[CDATE], item[SPEED], item[MELODY], item[SNAPSHOT]
self.deleted_db.append(deleted_db)
#print 'ka... syncdb=', self.db
#print 'ka...deleted syncdb=', self.deleted_db
# DB 를 300개 size로 맞춰준다.
for i in range(500):
if len(self.db) < 500:
db = struct.pack('385s', '') + struct.pack('2s', '\r\n')
self.db.append(db)
else:
break;
fp = open('sync/addressbook_ann','w')
for item in self.db:
#fp.write(item+'\n')
fp.write(item)
fp.close()
# for delete item
fp = open('sync/addressbook_del','w')
for item in self.deleted_db:
fp.write('\t'.join(item) + '\n')
fp.close()
# for test
#import os
#os.system('cp sync/addressbook_ann sync/addressbook_test')
return True
def down_phonebook(self):
# sync/phonebook 을 --> MMI phonenumber.txt 으로 변환
self.db=[]
for line in file('sync/addressbook_ann'):
#NULL값으로 채워지는 경우가 존대 --> null이면 return
value = line[:1]
if value != '1':
#print 'ka.......########### finish DB'
continue
else:
pass
item = []
# try:
line = line[1:]
name = line[:31].strip('\x00')
name = unicode(name, 'euc-kr').encode('utf-8')
item.append(name)
line = line[31:]
group = line[:31].strip('\x00')
group = unicode(group, 'euc-kr').encode('utf-8')
from groupdb import groupdb
group_index = groupdb.get_group_index(group)
item.append(str(group_index))
line = line[31:]
priority = line[:2].strip('\x00')
if priority not in ('0', '1', '2'):
priority = '0'
item.append(priority)
line = line[2:]
item.append(line[:31].strip('\x00'))
line = line[31:]
item.append(line[:31].strip('\x00'))
line = line[31:]
item.append(line[:31].strip('\x00'))
line = line[31:]
# SPEED
item.append('')
# EMAIL
item.append(line[:65].strip('\x00'))
line = line[65:]
#item.append(line[:129].strip('\x00'))
line = line[129:]
# deleted data --SPEED, MELODY, SNAPSHOT
item.append('')
item.append('')
item.append(line[:18].strip('\x00')) # cdate
line = line[18:]
item.append(line[:15].strip('\x00')) # mdate
self.db.append(item)
# except:
# pass
#print 'ka........... download db=', self.db
# syncML deleted DB add
self.restore_deleteDB()
def restore_deleteDB(self):
# check deleteDB
self.deleted_db = self.load_deleted_db()
#print 'ka..........######### deleted_db=', self.deleted_db
if self.deleted_db:
for item in self.db: #sync result DB 안에서 검색 - 생성일이 같은 놈이 존재하면 add
for d_item in self.deleted_db:
if item[CDATE] == d_item[0]:
item[SPEED] = d_item[1]
item[MELODY] = d_item[2]
item[SNAPSHOT] = d_item[3]
self.save_to_phoneDB()
def load_deleted_db(self):
self.deleted_db = []
for line in file('sync/addressbook_del'):
#try:
item = line[:-1].split('\t')
self.deleted_db.append(item)
#except:
# pass
return self.deleted_db
def save_to_phoneDB(self):
fp = open('phonenumber.txt','w')
for item in self.db:
fp.write('\t'.join(item) + '\n')
fp.close()
from phonedb import phonedb
phonedb.load_db()
def set_user_type(self):
from vdcisetting import vdci_setting
value = vdci_setting.tel_num
fp = open('syncpara.cfg','r')
data = []
for line in fp.readlines():
if line.find('USERID') >= 0:
line = "[USERID]%s\n"%value
if line.find('USERPWD') >= 0:
line = "[USERPWD]%s\n"%value
data.append(line)
fp.close()
fp = open('syncpara.cfg','w')
for line in data:
fp.write(line)
fp.close()
def set_sync_type(self, index):
if index == 0:
value = '200'
elif index == 1:
value = '203'
else:
value = '205'
fp = open('syncpara.cfg','r')
data = []
for line in fp.readlines():
if line.find('COOKIE') >= 0:
cookies = self.load_cookies()
line = "[COOKIE]%s\n"%cookies
if line.find('SYNCCODE') >= 0:
line = "[SYNCCODE]%s\n"%value
data.append(line)
fp.close()
fp = open('syncpara.cfg','w')
for line in data:
fp.write(line)
fp.close()
def get_sync_type(self):
code = '200'
fp = open('syncpara.cfg','r')
for line in fp.readlines():
if line.find('SYNCCODE') >= 0:
code = line.split(']')[1]
fp.close()
print '[SYNC] get sync code=', code
return code
def load_cookies(self):
fname = config.SYNC_COOKIE_FILE
import os
if os.path.exists(fname) == False:
return ''
'''
fp = open(fname,'r')
validate =''
domain = ''
for line in fp.readlines():
if line.find('SSOValidate') >= 0:
startPoint = line.find('SSOValidate') + 12 #SSOValidate=
line = line[startPoint:]
endPoint = line.find(';')
validate = line[:endPoint]
if line.find('domain') >= 0:
startPoint = line.find('domain') + 7 #domain=.ktann.com
line = line[startPoint:] # endPoint
endPoint = line.find(';')
domain = line[:endPoint]
fp.close()
newData = validate+ ';' + domain
return newData
'''
fp = open(fname,'r')
# 파일을 열어서 mcookies /ccookies 가 나눠진 SIP
data = []
for line in fp.readlines():
if line.find('mcookie') >= 0:
tmp = line.split('"')
data = tmp[1]+tmp[3]
tmp = data.split('|')
newData = ''.join(tmp)
else:
tmp = line.split('|')
newData = ''.join(tmp)
return newData
def set_sync_server(self, value):
fp = open('/usr/local/lgvp/slib.cfg','r')
data = []
for line in fp.readlines():
if line.find('HostDomain') >= 0:
server = line.split(']')[1]
line = "[HostDomain]%s\n"%value
data.append(line)
fp.close()
fp = open('/usr/local/lgvp/slib.cfg','w')
for line in data:
fp.write(line)
fp.close()
def get_sync_server(self):
fp = open('/usr/local/lgvp/slib.cfg','r')
server = ''
for line in fp.readlines():
if line.find('HostDomain') >= 0:
server = line.split(']')[1].strip()
fp.close()
return server
# class가 import 되는 순간에 불리워 진다. (__init__)
'''
def __setattr__(self, name, value):
print 'ka.....name=%s, value=%s'%(name, value)
v = self.__dict__.get(name, 'none')
print 'ka....v=', v
self.__dict__[name] = value
if v != 'none' and v != value:
print key, v, value
# self.save()
# elif v != 'none':
# #print key, v, value
# pass
def _save(self):
#text = text.upper()
f_name = 'syncpara.cfg'
fp = open(f_name, 'w')
for name, value in self.__dict__.items():
fp.write("[%s]%s\n" % (name, repr(value)))
self._save_tag = 0
return False
'''
sync = SyncML()