import os import commands import Apt from gi.repository import Gtk,GObject import locale import gettext import aptdaemon import aptdaemon.gtk3widgets import aptdaemon.client locale.textdomain("lliurex-apt") gettext.textdomain("lliurex-apt") _=gettext.gettext class Interface(): glade_file = "/usr/share/lliurex-apt/glade/ui.glade" def __init__(self): print("Interface::__init__") #gtk.gdk.threads_init() # Test if we are clients or another Flavour self.flavour="" aux = commands.getoutput("lliurex-version") tmp = aux.split(',') for flv in tmp: flv=flv.lstrip() if flv=="desktop": self.flavour=flv print("This seems to be a desktop") if flv=="server": self.flavour=flv print("This seems to be a server") if flv=="client": self.flavour=flv print("This seems to be a client") if self.flavour=="": print("Cannot guess system flavour") self.apt = Apt.Apt() #self.uiTree = gtk.glade.XML(Interface.glade_file) self.uiTree = Gtk.Builder() self.uiTree.add_from_file(Interface.glade_file) self.winMain = self.uiTree.get_object("winMain") self.winMain.connect("destroy", self.OnWinMainDestroy) self.dlgMessage = self.uiTree.get_object("dlgMessage") self.lblMessage=self.uiTree.get_object("lblMessage") #self.chkIsUbuntu = self.uiTree.get_object("chkIsUbuntu") self.treeOptions = self.uiTree.get_object("treeOptions") #self.store_options = gtk.ListStore(bool,str,str) self.store_options = Gtk.ListStore(GObject.TYPE_BOOLEAN,GObject.TYPE_STRING,GObject.TYPE_STRING) self.treeOptions.set_model(self.store_options) #self.btnCdrom = self.uiTree.get_object("btnCdrom") #self.btnCdrom.connect("clicked",self.OnBtnCdromClick) repo_names = self.apt.get_repo_names() for name,file in self.apt.optional: if name in repo_names: self.store_options.append([True,name,file]) else: self.store_options.append([False,name,file]) self.cmbDistro= self.uiTree.get_object("cmbDistro") #self.store = gtk.ListStore(str,str) self.store = Gtk.ListStore(GObject.TYPE_STRING,GObject.TYPE_STRING) active = None for name,file in self.apt.skel: if name=="Desktop": bname=_("Internet") if name=="Server": bname=_("Local Mirror") if name=="Client": bname=_("Mirror on Server") if (name.lower() == self.flavour.lower()): tmpiter=self.store.append([bname +" "+ _("(default)"),file]) #active=tmpiter else: tmpiter=self.store.append([bname,file]) if name in repo_names: active=tmpiter #self.cmbDistro.set_id_column(0) self.cmbDistro.set_model(self.store) cell = Gtk.CellRendererText() self.cmbDistro.pack_start(cell, True) self.cmbDistro.add_attribute(cell, "text", 0) if not active==None: self.cmbDistro.set_active_iter(active) #self.cmbDistro.set_active(option) """ self.store.append(["Lliurex Desktop","desktop.list"]) self.store.append(["Lliurex client","client.list"]) self.store.append(["Lliurex server","server.list"]) """ colToggle = Gtk.TreeViewColumn("") colText = Gtk.TreeViewColumn("") self.treeOptions.append_column(colToggle) self.treeOptions.append_column(colText) cell = Gtk.CellRendererToggle() cell.connect("toggled",self.OnTreeOptionsToggle) colToggle.pack_start(cell,True) cell.set_property('activatable', True) colToggle.add_attribute(cell, 'active', 0) cell = Gtk.CellRendererText() colText.pack_start(cell, True) colText.add_attribute(cell, 'text', 1) #todo #autodetect current distro #self.cmbDistro.set_active(0) btnok = self.uiTree.get_object("btnOk") btnok.connect("clicked",self.OnBtnOkClick) btnCancel = self.uiTree.get_object("btnCancel") btnCancel.connect("clicked",self.OnBtnCancelClick) btnDefault = self.uiTree.get_object("btnAdvanced") btnDefault.connect("clicked",self.OnBtnAdvancedClick) self.winMain.show() def OnTreeOptionsToggle(self,cell,path): iter = self.store_options.get_iter(path) value = self.store_options.get_value(iter,0) self.store_options.set_value(iter,0,not value) def OnBtnOkClick(self,data): print("Interface::Ok") skels=[] iter=self.cmbDistro.get_active_iter() index = self.cmbDistro.get_model().get_value(iter,0) value = self.cmbDistro.get_model().get_value(iter,1) skels.append(value) print(index+":"+value) iter = self.store_options.get_iter_first() while not iter==None: if self.store_options.get_value(iter,0): value=self.store_options.get_value(iter,2) skels.append(value) print value iter = self.store_options.iter_next(iter) self.apt.create_source_list_file(skels) client = aptdaemon.client.AptClient() trans = client.update_cache() trans.connect("finished", self.OnTransactionFinished) pd = aptdaemon.gtk3widgets.AptProgressDialog(transaction=trans,terminal=True,parent=self.winMain) pd.set_modal(True) pd.set_position(Gtk.WindowPosition.CENTER_ALWAYS) pd.run(close_on_finished=True) def OnTransactionFinished(self,alpha,beta): self.lblMessage.set_label(_("Sources updated!")) self.dlgMessage.show_all() self.dlgMessage.run() Gtk.main_quit() def OnBtnCancelClick(self,data): print("Interface::Cancel") Gtk.main_quit() def OnBtnAdvancedClick(self,data): print("Interface::Advanced") #subprocess.call(["software-properties-gtk"]) Gtk.main_quit() print("opening ubuntu software manager") os.execl("/usr/bin/software-properties-gtk.real","software-properties-gtk") def OnWinMainDestroy(self,data): print("Interface::Destroy") Gtk.main_quit()