import apt import apt.progress import pygtk import gtk import gtk.glade import threading import shutil import datetime import os import re import locale import gettext locale.textdomain("lliurex-apt") gettext.textdomain("lliurex-apt") _=gettext.gettext class Apt: skel_path = "/usr/share/lliurex-apt/skels" optional_path = "/usr/share/lliurex-apt/optional" def __init__(self): print("Apt::__init__") self.skel=[] self.optional=[] if os.path.exists(Apt.skel_path): for file in os.listdir(Apt.skel_path): name=self.get_skel_name(Apt.skel_path + os.sep + file) if name=="": name=file self.skel.append((name,Apt.skel_path + os.sep + file)) if os.path.exists(Apt.optional_path): for file in os.listdir(Apt.optional_path): name=self.get_skel_name(Apt.optional_path + os.sep + file) if name=="": name=file self.optional.append((name,Apt.optional_path + os.sep + file)) def get_repo_names(self): list=[] m=re.compile("^#Name:(?P.+)$",re.IGNORECASE) name="" f = open("/etc/apt/sources.list","r") for line in f.readlines(): if not line=="": ma=m.match(line) if not ma==None: name=ma.group("name").lstrip() list.append(name) return list def get_skel_name(self,file): m=re.compile("^#Name:(?P.+)$",re.IGNORECASE) name="" f = open(file,"r") for line in f.readlines(): if not line=="": ma=m.match(line) if not ma==None: name=ma.group("name").lstrip() print "Name:" + name break f.close() return name #print "no name found for " + file def create_source_list_file(self,skels): #backup current source list backupname = "/etc/apt/sources.list."+str(datetime.datetime.now().isoformat()) print("Apt::create_source_list_file -> Creating backup as " + backupname) shutil.copyfile("/etc/apt/sources.list",backupname) #filling destination data source_list_data=[] for sk in skels: f=open(sk) for line in f.readlines(): source_list_data.append(line) f.close() f=open("/etc/apt/sources.list","w") for line in source_list_data: f.write(line) f.close() class UpdateWindow(apt.progress.FetchProgress,apt.progress.OpProgress): sources_list="/etc/apt/sources.list" glade_file = "/usr/share/lliurex-apt/glade/ui.glade" skel_path = "/usr/share/lliurex-apt/skels/" def __init__(self): self.deb=[] self.deb_src=[] self.uiTree = gtk.glade.XML(UpdateWindow.glade_file) #self.btnupdateok=self.uiTree.get_widget("btnUpdateOk") #self.btnupdateok.connect("clicked",self.OnBtnUpdateOkClick) self.dlgUpdate=self.uiTree.get_widget("dlgUpdate") self.pbarUpdate=self.uiTree.get_widget("pbarUpdate") self.treeUpdates=self.uiTree.get_widget("treeUpdates") self.scrUpdate=self.uiTree.get_widget("scrUpdate") self.lblUpdate=self.uiTree.get_widget("lblUpdate") self.store = gtk.ListStore(str,str) self.treeUpdates.set_model(self.store) self.dlgMessage = self.uiTree.get_widget("dlgMessage") self.lblMessage=self.uiTree.get_widget("lblMessage") self.btnAccept = self.uiTree.get_widget("btnAccept") self.btnAccept.connect("clicked",gtk.main_quit) col1=gtk.TreeViewColumn("Uri") cell=gtk.CellRendererText() col1.pack_start(cell, True) col1.add_attribute(cell, 'text', 0) col2=gtk.TreeViewColumn("Status") cell=gtk.CellRendererText() col2.pack_start(cell, True) col2.add_attribute(cell, 'text', 1) self.treeUpdates.append_column(col2) self.treeUpdates.append_column(col1) def OnBtnUpdateOkClick(self,data): print "click" gtk.main_quit() def pulse(self): gtk.gdk.threads_enter() self.pbarUpdate.pulse() gtk.gdk.threads_leave() return True def updateStatus(self, uri, descr, shortDescr, status): #print "toc:"+uri+":"+descr+":"+self.dlStatusStr[status] if self.dlStatusStr[status]=="Hit": #print(uri+":"+self.dlStatusStr[status]) gtk.gdk.threads_enter() self.store.append([descr,self.dlStatusStr[status]]) a=self.scrUpdate.get_vscrollbar().get_adjustment() self.scrUpdate.get_vscrollbar().set_value(a.upper) gtk.gdk.threads_leave() def start(self): print "Apt::UpdateWindow::start" def stop(self): print "Apt::UpdateWindow::stop" gtk.gdk.threads_enter() self.pbarUpdate.set_fraction(0.0) #self.lblUpdate.set_label(_("Sources Updated")) gtk.gdk.threads_leave() self.dlgUpdate.hide_all() self.lblMessage.set_label(_("Sources Updated")) self.dlgMessage.show_all() def cache_update(self): self.dlgUpdate.show() cache = apt.cache.Cache(self) print("Apt::update:performing apt-get update") self.cache_thread=threading.Thread(target=cache.update,args=[self]) self.cache_thread.start() #cache.update(self) print("Apt::update:complete") #self.dlgUpdate.hide()