Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import appuifw as A
- import os
- import powlite_fm
- class ZipME:
- def __init__(self):
- self.run=0
- def fman(self,arg):
- if arg>0:
- p=fm.AskUser(find='dir')
- else:
- p=fm.AskUser('E:',ext=Exts)
- return p
- def go(self):
- while 1:
- p=self.fman(1)
- if not p:
- # jika path tidak ada yg dipilih, tanya apakah mau memilih lagi
- if A.query(u'Browse again ?','query'):
- # jika ya, lanjut memilih lagi
- continue
- else:
- # jika tidak, stop
- break
- # lanjutkan jika ada path yg dipilih
- self.pack(p)
- break
- def scan(self,path):
- # scan files dalam folder dan sub-folder nya
- p=[path]
- lst=[]
- while len(p)>0:
- visit=p.pop()
- for i in os.listdir(visit):
- fp=os.path.join(visit,i)
- if os.path.isfile(fp):
- lst.append(os.path.abspath(fp))
- elif os.path.isdir(fp):
- p.append(fp)
- lst.sort(lambda x,y: cmp(x.upper(),y.upper()))
- return lst
- def pack(self, path):
- A.e32.ao_sleep(0)
- files=self.scan(path)
- # path file zip baru ada di E
- zn = 'E:\\'+ os.path.basename(en(path)[:-1])+'.zip'
- if len(files):
- # jika folder yg dipilih ada file nya, tanya dulu, mau lanjut atau tidak
- if A.query(u'%s\nPack this folder ?' %path, 'query'):
- # jika ya, oke lanjut bikin zip nya
- self.__zipf(files,zn)
- else:
- # jika folder kosong
- A.note(u'No files in this directory', 'error')
- def __zipf(self,files,zipname):
- # backup interface tampilan / listbox awal
- old=(A.app.title,A.app.body,A.app.menu,A.app.exit_key_handler)
- # fungsi back
- def back(): # tanpa self
- # untuk kembali ke tampilan awal, swith run dan srun jgn lupa dikembalikan
- self.run,self.srun=1,0
- # kembalikan ke tampilan semula
- (A.app.title,A.app.body,A.app.menu,A.app.exit_key_handler)=old
- # switch, run = untuk listbox utama, srun = untuk listbox proses, matikan dulu run (utama) supaya ga hang karena ada proses 'while' yg bertimpa2.
- self.run,self.srun=0,1
- item=[(u'Packing files', u'Please wait...')]
- lb=A.Listbox(item,)
- A.app.title=u'Processing'
- A.app.body=lb
- # ambil nafas sebelum import modul
- A.e32.ao_sleep(0)
- import zipfile
- arch = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED)
- # jumlah file yg berhasil di pack
- pkg=0
- for n in range(len(files)):
- per=float(n)/(len(files)-1)*100
- try:
- arch.write(en(files[n]),en(files[n])[3:])
- # teks di listbox
- item[0]=u'%s' %os.path.basename(en(files[n])), u'Process.. %0.0f%%' %per
- # file yg berhasil di pack nambah 1
- pkg+=1
- except:pass
- # update teks di listbox
- lb.set_list(item,0)
- A.e32.ao_sleep(1e-04)
- arch.close()
- # close file zip baru nya
- # tampilkan pesan komplit
- A.app.title=u'Completed'
- item[0]=u'Packing Completed', u'%d of %d file(s) Packed' %(pkg,len(files))
- lb.set_list(item,0)
- A.app.menu=[]
- A.app.exit_key_handler=back
- while self.srun:
- A.e32.ao_sleep(1e-04)
- def exit(self):
- self.run=0
- def main(self):
- self.run=1
- def cb():
- x=lb.current()
- (self.go,lambda:none)[x]()
- item=[(u'Browse',u'Select folder to pack')]
- lb=A.Listbox(item,cb)
- A.app.title=u'ZipME'
- A.app.body=lb
- A.app.menu=[(u'Select', cb)]
- A.app.exit_key_handler=self.exit
- while self.run:
- A.e32.ao_sleep(1e-04)
- en=lambda x:x.encode('u8')
- fm=powlite_fm.manager()
- zip=ZipME().main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement