更正了对2009中现有记录的处理
完成一个号码中所有好友记录的批量导入
修正了某条消息超过128字的bug
增加了装QQ在c盘e盘的选择
代码如下:
#Encoding:UTF-8 #FileName:QQMsgAssistant.py #Version:0.1 #Date:2009_10_22 #批量导入手机QQ2008聊天记录到2009中,并把2009中现有记录与2008中记录按时间排序 #更正了装C:盘E:盘的选择,解决了某条消息超过128字的BUG。 #如有错误或者建议,请联系:[email protected] from os import listdir,makedirs from os.path import isfile from appuifw import query,note from time import mktime def de8(s): return s.decode("UTF-8") def de16(s): return s.decode("UTF-16") def Win(n): n="%x" %n l=len(n) re="" if 0!=l%2 : n="0"+n l+=1 i=0 while i*2 1) and ((s.menuChoose in x) and (s.find != 'dir')))): x = ([(s.ru('/xe6/x92/xad/xe6/x94/xbe'), s.playsound)] + x) s.appuifw.app.menu = x i = (s.body.current() + add) if (i == -1): i = (len(s.curlist) - 1) elif (i == len(s.curlist)): i = 0 if (s.curdir == u'root'): if (s.find == 'dir'): _set([s.menuChoose, s.menuOpen]) else: _set([s.menuOpen]) return elif (i == 0): _set([s.menuChoose, s.menuDir]) return else: path = (s.curdir + s.curlist[i][1:-1]) if s.os.path.isdir(s.ur(path)): if (s.find == 'dir'): _set([s.menuChoose, s.menuOpen, s.menuBack]) else: _set([s.menuOpen, s.menuMark, s.menuBack]) else: _set([s.menuChoose, s.menuMark, s.menuBack]) def del_dir(s, path): for name in s.os.listdir(path): new = ((path + '//') + name) if s.os.path.isdir(new): s.del_dir(new) try: s.os.rmdir(new) except: pass else: try: s.os.remove(new) except: pass def _remove(s): i = s.body.current() if (s.marknum == 1): if s.appuifw.query(('%s%d%s' % (s.ru('/xe5/x88/xa0/xe9/x99/xa4/xe6/xa0/x87/xe8/xae/xb0 '), len(s.selectfile), s.ru(' /xe9/xa1/xb9'))), 'query'): for x in range(len(s.selectfile)): if s.os.path.isdir(s.ur(s.selectfile[x])): try: s.del_dir(s.ur(s.selectfile[x])) s.os.rmdir(s.ur(s.selectfile[x])) s.curlist.remove((('+[' + s.os.path.split(s.os.path.realpath(s.selectfile[x]))[-1]) + ']')) s.body.set_list(s.curlist, i) except: pass else: try: s.os.remove(s.ur(s.selectfile[x])) s.curlist.remove(('+' + s.os.path.split(s.os.path.realpath(s.selectfile[x]))[-1])) s.body.set_list(s.curlist, i) except: pass s.marknum = 0 s.selectfile = [] s.appuifw.app.title = (u'%s' % s.title) else: return elif ((s.curdir != u'root') and (i != 0)): item = (s.curdir + s.curlist[i]) if s.os.path.isdir(s.ur((s.curdir + s.curlist[i][1:-1]))): if s.appuifw.query(((s.ru('/xe5/x88/xa0/xe9/x99/xa4/xe7/x9b/xae/xe5/xbd/x95/n< ') + s.curlist[i][1:-1]) + ' >'), 'query'): try: s.del_dir(s.ur((s.curdir + s.curlist[i][1:-1]))) s.os.rmdir(s.ur((s.curdir + s.curlist[i][1:-1]))) s.curlist.pop(i) s.body.set_list(s.curlist, i) except: pass else: return elif s.appuifw.query(((s.ru('/xe5/x88/xa0/xe9/x99/xa4/xe6/x96/x87/xe4/xbb/xb6/n< ') + s.curlist[i]) + ' >'), 'query'): try: s.os.remove(s.ur(item)) s.curlist.pop(i) s.body.set_list(s.curlist, i) except: pass else: return def list_root(s): resultlist = [] for drive in s.e32.drive_list(): resultlist.append(drive) return resultlist def listslice(s, keycode): x = s.body.current() if (s.curdir == u'root'): return if (keycode == u'1'): s.index = s.curlist[x] if (s.appuifw.app.title.find('*') <= 0): s.fileinfo() if (s.curnumstring == u''): return s.curnumstring = s.curnumstring[:-1] if (s.curnumstring == u''): if (s.appuifw.app.title[-1] == u'*'): s.appuifw.app.title = s.appuifw.app.title[:-1] s.curlist = s.fulllist s.body.set_list(s.fulllist, s.curlist.index(s.index)) return else: s.curnumstring += keycode if (s.appuifw.app.title[-1] != u'*'): s.appuifw.app.title += u'*' resultlist = [s.curlist[0]] if (keycode == u'0'): s.txt = s.appuifw.query(s.ru('/xe7/xad/x9b/xe9/x80/x89/xe5/x85/xb3/xe9/x94/xae/xe5/xad/x97:'), 'text', s.txt) if (s.txt == None): return for i in range(0, len(s.curnumlist1)): if (s.curnumlist1[i].lower().find(s.txt.lower()) >= 0): resultlist.append(s.fulllist[(i + 1)]) for i in range(0, len(s.curnumlist)): if s.curnumlist[i].startswith(s.curnumstring): resultlist.append(s.fulllist[(i + 1)]) s.curlist = resultlist index = 0 if (len(resultlist) > 1): index = 1 s.body.set_list(resultlist, index) def listdir(s, prevdir = None, posfile = None): if (s.appuifw.app.title[-1] == u'*'): s.appuifw.app.title = s.appuifw.app.title[:-1] resultlist = [s.backitem] s.curnumlist = [] s.curnumlist1 = [] s.curnumstring = u'' s.body.set_list([s.workitem]) s.e32.ao_yield() (templist, files, folders,) = (s.os.listdir(s.ur(s.curdir)), [], []) posindex = 1 if templist: for item in templist: if s.os.path.isfile((s.ur(s.curdir) + item)): if (s.find == 'file'): if (len(s.ext) > 0): for extension in s.ext: if (s.os.path.splitext(item)[1].lower() == extension.lower()): files.append(item) else: files.append(item) else: folders.append(item) templist = folders for i in range(len(templist)): item = s.ru(templist[i]) if (item.lower() == prevdir): posindex = (i + 1) resultlist.append((('[' + item) + ']')) for x in range(len(s.selectfile)): if ((s.curdir + item) == s.selectfile[x]): resultlist.append((('+[' + item) + ']')) resultlist.remove((('[' + item) + ']')) s.curnumlist.append(s._manager__s2d(item)) s.curnumlist1.append(item) templist = files for i in range(len(templist)): item = s.ru(templist[i]) if (item.lower() == posfile): posindex = ((len(folders) + i) + 1) resultlist.append(item) for x in range(len(s.selectfile)): if ((s.curdir + item) == s.selectfile[x]): resultlist.append(('+' + item)) resultlist.remove(item) s.curnumlist.append(s._manager__s2d(item)) s.curnumlist1.append(item) s.body.set_list(resultlist, posindex) s.curlist = resultlist s.fulllist = resultlist s.construct_menu(0) def browse_back(s): if (s.curdir == u'root'): return elif (len(s.curdir) == 3): s.root(s.curdir[:-1]) else: ind = s.curdir[:-1].rfind('//') prevdir = s.curdir[(ind + 1):-1].lower() s.curdir = s.os.path.dirname(s.curdir[:-1]) if (s.curdir[-1] != '//'): s.curdir += '//' s.listdir(prevdir) s.appuifw.app.title = (u'%s' % s.title) s.marktitle() def _rename(s): i = s.body.current() if (s.curlist[i].startswith('+') or (i == 0)): return item = (s.curdir + s.curlist[i]) item1 = (s.curdir + s.curlist[i][1:-1]) if s.os.path.isdir(s.ur(item1)): s.i = 1 name = s.curlist[i][1:-1] if s.os.path.isfile(s.ur(item)): s.i = 0 name = s.curlist[i] name = s.appuifw.query(s.ru('/xe8/xbe/x93/xe5/x85/xa5/xe6/x96/xb0/xe5/x90/x8d'), 'text', name) if (name is None): return fname = ((s.curdir + '//') + name) if s.os.path.exists(s.ur(fname)): s.appuifw.note(s.ru('/xe5/x90/x8c/xe5/x90/x8d/xe6/x96/x87/xe4/xbb/xb6/xe5/xb7/xb2/xe7/xbb/x8f/xe5/xad/x98/xe5/x9c/xa8'), 'error') return if (s.i == 1): s.os.rename(s.ur(item1), s.ur(fname)) s.curlist.pop(i) s.curlist.append((('[' + name) + ']')) s.body.set_list(s.curlist, s.curlist.index((('[' + name) + ']'))) else: s.os.rename(s.ur(item), s.ur(fname)) s.curlist.pop(i) s.curlist.append(name) s.body.set_list(s.curlist, s.curlist.index(name)) def _createfolder(s): name = s.appuifw.query(s.ru('/xe6/x96/xb0/xe5/xbb/xba/xe7/x9b/xae/xe5/xbd/x95'), 'text', u'new folder') if (name is None): return fname = s.ur(((s.curdir + '//') + name)) if s.os.path.exists(fname): s.appuifw.note(s.ru('/xe5/x90/x8c/xe5/x90/x8d/xe7/x9b/xae/xe5/xbd/x95/xe5/xb7/xb2/xe7/xbb/x8f/xe5/xad/x98/xe5/x9c/xa8'), 'error') return s.os.mkdir(fname) s.curlist.append((('[' + name) + ']')) s.body.set_list(s.curlist, s.curlist.index((('[' + name) + ']'))) def browse_forward(s): i = s.body.current() if (s.curdir == u'root'): path = (s.e32.drive_list()[i] + '//') elif (i == 0): s.browse_back() return elif s.curlist[i].startswith('+'): path = ((s.curdir + s.curlist[i][2:-1]) + '//') else: path = ((s.curdir + s.curlist[i][1:-1]) + '//') if s.os.path.isdir(s.ur(path)): s.curdir = path s.listdir() else: s.choose_item() s.appuifw.app.title = (u'%s' % s.title) s.marktitle() def ch_made(s, p): s.curdir = p s.choice_made = True s.lock.signal() def mark(s, setmark = None): i = s.body.current() if (setmark == 0): if ((s.curdir != u'root') and (i != 0)): for x in range(len(s.curlist)): if (s.curlist[x].startswith('+') and (x != 0)): s.curlist[x] = s.curlist[x].replace(u'+', '') if s.os.path.isdir(s.ur((s.curdir + s.curlist[x][1:-1]))): del s.selectfile[s.selectfile.index((s.curdir + s.curlist[x][1:-1]))] else: del s.selectfile[s.selectfile.index((s.curdir + s.curlist[x]))] if (setmark == 1): if ((s.curdir != u'root') and (i != 0)): for x in range(len(s.curlist)): if ((not s.curlist[x].startswith('+')) and (x != 0)): if (s.markmod == False): if s.os.path.isdir(s.ur((s.curdir + s.curlist[x][1:-1]))): s.selectfile.append((s.curdir + s.curlist[x][1:-1])) else: s.selectfile.append((s.curdir + s.curlist[x])) s.curlist[x] = ('+' + s.curlist[x]) elif s.os.path.isfile(s.ur((s.curdir + s.curlist[x]))): s.selectfile.append((s.curdir + s.curlist[x])) s.curlist[x] = ('+' + s.curlist[x]) if ((s.curdir != u'root') and ((i != 0) and (setmark == None))): if (not s.curlist[i].startswith('+')): if (s.markmod == False): if s.os.path.isdir(s.ur((s.curdir + s.curlist[i][1:-1]))): s.selectfile.append((s.curdir + s.curlist[i][1:-1])) else: s.selectfile.append((s.curdir + s.curlist[i])) s.curlist[i] = ('+' + s.curlist[i]) elif s.os.path.isfile(s.ur((s.curdir + s.curlist[i]))): s.selectfile.append((s.curdir + s.curlist[i])) s.curlist[i] = ('+' + s.curlist[i]) else: s.curlist[i] = s.curlist[i].replace(u'+', '') if s.os.path.isdir(s.ur((s.curdir + s.curlist[i][1:-1]))): del s.selectfile[s.selectfile.index((s.curdir + s.curlist[i][1:-1]))] else: del s.selectfile[s.selectfile.index((s.curdir + s.curlist[i]))] s.body.set_list(s.curlist, i) s.marktitle() def marktitle(s): if (len(s.selectfile) == 0): s.marknum = 0 if (s.appuifw.app.title.find('*') >= 0): s.appuifw.app.title = (u'%s*' % s.title) else: s.appuifw.app.title = (u'%s' % s.title) else: s.marknum = 1 if (s.appuifw.app.title.find('*') >= 0): s.appuifw.app.title = (u'%s*/n%s: %02d' % (s.title, s.ru('/xe5/xb7/xb2/xe9/x80/x89'), len(s.selectfile))) else: s.appuifw.app.title = (u'%s/n%s: %02d' % (s.title, s.ru('/xe5/xb7/xb2/xe9/x80/x89'), len(s.selectfile))) def fileinfo(s): i = s.body.current() item = (s.curdir + s.curlist[i]) if s.curlist[i].startswith('+'): item = (s.curdir + s.curlist[i][1:]) if s.os.path.isfile(s.ur(item)): filesize = s.os.stat(s.ur(item)).st_size if (filesize > 1048575): filesize = ('%s:%fMb' % (s.ru('/xe5/xa4/xa7/xe5/xb0/x8f'), float(((((filesize / 10.24) / 100.0) / 10.24) / 100.0)))) elif (filesize > 1024): filesize = ('%s:%fKb' % (s.ru('/xe5/xa4/xa7/xe5/xb0/x8f'), float(((filesize / 10.24) / 100.0)))) else: filesize = ('%s:%2db' % (s.ru('/xe5/xa4/xa7/xe5/xb0/x8f'), filesize)) s.appuifw.note(filesize, 'info') def move(s, op): i = s.body.current() if (op == 0): i += 6 if (i > len(s.curlist)): i = 0 s.body.set_list(s.curlist, i) else: i -= 6 if (i < 0): i = len(s.curlist) s.body.set_list(s.curlist, i) def choose_item(s): i = s.body.current() if (s.curdir == u'root'): if (s.find == 'dir'): s.ch_made((s.e32.drive_list()[i] + '//')) else: s.browse_forward() elif (i == 0): s.browse_back() else: item = (s.curdir + s.curlist[i]) if s.curlist[i].startswith('+'): item1 = (s.curdir + s.curlist[i][2:-1]) item = (s.curdir + s.curlist[i][1:]) else: item1 = (s.curdir + s.curlist[i][1:-1]) if s.os.path.isdir(s.ur(item1)): if (s.find == 'dir'): s.ch_made(item1) else: s.browse_forward() elif ((s.markmod != False) and (len(s.selectfile) != 0)): s.ch_made(s.selectfile) else: if item.endswith(']'): return if (s.markmod != False): s.ch_made([item]) else: s.ch_made(item) def exit(s): s.choice_made = False s.lock.signal() if __name__ == "__main__" : print "Start--------" patch()