home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from instun import objects
- from instun import main
- from instun import classes
- from instun import idcardlist
- import sys, vte, re, os
- try:
- import pygtk
- pygtk.require('2.0')
- except:
- pass
- try:
- import gtk
- import gtk.glade
- except:
- sys.exit(1)
-
-
- atilatest = '8.36.5'
- atilegacy = '8.28.8'
-
- nvlatest = '9755'
- nvnewlegacy = '9631'
- nvlegacy = '7185'
-
-
- def aptcheck():
- """
- Check if any apt processes are running
- """
- p = os.popen("ps -U root -o comm")
- running = False
- pslist = p.readlines()
- p.close()
- for process in pslist:
- if process.strip() in ["dpkg", "apt-get","synaptic","update-manager", "adept", "adept-notifier"]:
- running = True
- #print process
- break
- return running
-
-
-
- class EnvyMain:
- def __init__(self):
- #Set the Glade file
- #self.gladefile = '/usr/share/envy/gtkenvy.glade'
- self.gladefile = 'gtkenvy.glade'
- self.wTree = gtk.glade.XML(self.gladefile)
-
- self.gtkdetails = {}
- #Get the Main Window, and connect the destroy event
- self.window = self.wTree.get_widget('MainWindow')
- if (self.window):
- self.window.connect('destroy', gtk.main_quit)
-
- self.window.set_position(gtk.WIN_POS_CENTER)
-
- self.xorgdialog = self.wTree.get_widget('messagedialog1')
- self.restartdialog = self.wTree.get_widget('messagedialog2')
- self.errordialog = self.wTree.get_widget('messagedialog3')
- self.completedialog = self.wTree.get_widget('messagedialog4')
- self.aptdialog = self.wTree.get_widget('messagedialog5')
- '''Part for Dapper'''
- self.xorgdialogd = self.wTree.get_widget('dialog1')
- self.restartdialogd = self.wTree.get_widget('dialog2')
- self.errordialogd = self.wTree.get_widget('dialog3')
- self.completedialogd = self.wTree.get_widget('dialog4')
- self.aptdialogd = self.wTree.get_widget('dialog5')
-
-
-
- #Radiobuttons
- radio1 = self.wTree.get_widget("radio1")
- radio1.connect('toggled', self.callback, 'nvinstall')
- radio1.connect('toggled', self.hideatinv)
-
- radio2 = self.wTree.get_widget("radio2")
- radio2.connect('toggled', self.callback, 'nvuninstall')
- radio2.connect('toggled', self.hideatinv)
-
- radio3 = self.wTree.get_widget("radio3")
- radio3.connect('toggled', self.callback, 'atiinstall')
- radio3.connect('toggled', self.hideatinv)
-
- radio4 = self.wTree.get_widget("radio4")
- radio4.connect('toggled', self.callback, 'atiuninstall')
- radio4.connect('toggled', self.hideatinv)
-
- radio5 = self.wTree.get_widget("radio5")
- radio5.connect('toggled', self.callback, 'mannvinstall')
- radio5.connect('toggled', self.mannvenable)
-
- radio6 = self.wTree.get_widget("radio6")
- radio6.connect('toggled', self.callback, 'manatiinstall')
- radio6.connect('toggled', self.manatienable)
-
-
- applybutton = self.wTree.get_widget("applybutton")
- applybutton.connect('clicked', self.aptdial)
- applybutton.connect('clicked', self.launcher)
-
- exitbutton = self.wTree.get_widget("exitbutton")
- exitbutton.connect('clicked', lambda wid: gtk.main_quit())
-
- #dic = { 'on_radio1_toggled' : self.callback('MainWindow', 'nvinstall'),
- # 'on_radio2_toggled' : self.callback('MainWindow', 'nvuninstall'),
- # 'on_radio3_toggled' : self.callback('MainWindow', 'atiinstall'),
- # 'on_radio4_toggled' : self.callback('MainWindow', 'atiuninstall'),
- # 'on_radio5_toggled' : self.callback('MainWindow', 'maninstall'),
- # 'on_exitbutton_clicked' : gtk.main_quit,
- # 'on_MainWindow_destroy' : gtk.main_quit,
- # 'on_applybutton_clicked' : self.launcher}
- #self.wTree.signal_autoconnect(dic)
-
- atibutton1 = self.wTree.get_widget("atibutton1")
- atibutton1.set_label("version %s" % (atilatest))
- atibutton1.connect('toggled', self.callback, 'atilatestinstall')
-
- atibutton2 = self.wTree.get_widget("atibutton2")
- atibutton2.set_label("version %s" % (atilegacy))
- atibutton2.connect('toggled', self.callback, 'atilegacyinstall')
-
- nvbutton1 = self.wTree.get_widget("nvbutton1")
- nvbutton1.set_label("version %s" % (nvlatest))
- nvbutton1.connect('toggled', self.callback, 'nvlatestinstall')
-
- nvbutton2 = self.wTree.get_widget("nvbutton2")
- nvbutton2.set_label("version %s" % (nvnewlegacy))
- nvbutton2.connect('toggled', self.callback, 'nvnewlegacyinstall')
-
- nvbutton3 = self.wTree.get_widget("nvbutton3")
- nvbutton3.set_label("version %s" % (nvlegacy))
- nvbutton3.connect('toggled', self.callback, 'nvlegacyinstall')
-
- self.terminalwindow = self.wTree.get_widget('TerminalWindow')
- self.term = vte.Terminal()
- self.termfork = self.term.fork_command
- self.child = self.term.feed_child
-
- termbutton = self.wTree.get_widget('termbutton1')
- termbutton.connect('clicked', self.closeterm)
-
- self.term.show()
- self.terminalwindow.hide()
-
- scrolled = self.wTree.get_widget('scrolledwindow1')
- scrolled.add_with_viewport(self.term)
-
- self.aboutdialog1 = self.wTree.get_widget('aboutdialog1')
- aboutbutton = self.wTree.get_widget('aboutbutton')
- aboutbutton.connect('clicked', self.aboutdial)
-
- self.osdetect()
-
-
- def osdetect(self, data=None):
- self.legacyos = ['dapper', 'etch']
- getver = classes.Specsdetect()
- getver.init()
- getver.codename()
- self.osver = getver.details['osname']
-
-
- def on_aboutbox_response(self, dialog, response, *args):
- # system-defined GtkDialog responses are always negative, in which
- # case we want to hide it
- if response < 0:
- self.aboutdialog1.hide()#dialog.hide()
- self.aboutdialog1.emit_stop_by_name('response')
-
- def on_aboutbox_close(self, widget, event=None):
- self.aboutdialog1.hide()
- return gtk.TRUE
-
-
- def aboutdial(self, widget, data=None):
- self.aboutdialog1.show()
- response3 = self.aboutdialog1.run()
- self.aboutdialog1.connect("response", self.on_aboutbox_response)
- self.aboutdialog1.connect("close", self.on_aboutbox_close)
- self.aboutdialog1.connect("delete_event", self.on_aboutbox_close)
-
- def hideatinv(self, data=None):# widget
- nvoptions = self.wTree.get_widget('nvframe')
- atioptions = self.wTree.get_widget('atiframe')
- nvoptions.hide()
- atioptions.hide()
-
- def mannvenable(self, widget, data=None):
- nvoptions = self.wTree.get_widget('nvframe')
- atioptions = self.wTree.get_widget('atiframe')
- atioptions.hide()
- nvoptions.show()
- self.operation = 'nvlatestinstall'
-
- def manatienable(self, widget, data=None):
- nvoptions = self.wTree.get_widget('nvframe')
- atioptions = self.wTree.get_widget('atiframe')
- nvoptions.hide()
- atioptions.show()
- self.operation = 'atilatestinstall'
-
-
- def closeterm(self, data):
- self.terminalwindow.hide()
-
- def xorgsettings(self, data=None):
- getver = classes.Specsdetect()
- getver.init()
- getver.codename()
- ##getver.driverpushback()
- #try:
- driver = self.gtkdetails['drv']
- try:
- version = self.gtkdetails['ver']
- except KeyError:
- pass
- if driver == 'ati':
- try:
- getver.details['drvtype'] = version
-
- except UnboundLocalError:#Automatic detection
- getver.cards = idcardlist.atinewcards()#set the id lists
- getver.middlecards = idcardlist.atimidcards()
- getver.legacycards = idcardlist.atioldcards()
- getver.driverpushback()
- pass
- getver.atixorgset()
- elif driver == 'nvidia':
- try:
- getver.details['drvtype'] = version
- except UnboundLocalError:#Automatic detection
- getver.cards = idcardlist.nvnewcards()#set the id lists
- getver.middlecards = idcardlist.nvmidcards()
- getver.legacycards = idcardlist.nvoldcards()
-
- getver.driverpushback()
- pass
- getver.nvxorgset()
- #except AttributeError:
- # pass
-
- def completehide(self, data=None):
- self.completedialogd.hide()
-
- def completedial(self, widget=None, data=None):
- if self.osver not in self.legacyos:#!= dapper
- self.completedialog.show()
- response5 = self.completedialog.run()
- self.completedialog.set_default_response(gtk.RESPONSE_OK)
- if response5 == gtk.RESPONSE_OK:
- self.completedialog.hide()#destroy()
- else:#Only for Dapper
- button8 = self.wTree.get_widget("button8")
- button8.connect('clicked', self.completehide)
- self.completedialogd.show()
-
- def aptdialhide(self, data=None):
- self.aptdialogd.hide()
- sys.exit(1)
-
- def aptdial(self, data=None):
- if aptcheck():
- if self.osver not in self.legacyos:#!= dapper
- self.aptdialog.show()
- response6 = self.aptdialog.run()
- self.aptdialog.set_default_response(gtk.RESPONSE_OK)
- if response6 == gtk.RESPONSE_OK:
- self.aptdialog.hide()#destroy()
- sys.exit(1)
- else:#Only for Dapper
- button9 = self.wTree.get_widget("button9")
- button9.connect('clicked', self.aptdialhide)
- #button9.connect('clicked', sys.exit(1))
- self.aptdialogd.show()
-
-
- def restarthide(self, data=None):
- self.restartdialogd.hide()
-
- def restart(self, widget=None, data=None):
- if self.osver not in self.legacyos:#!= dapper
- self.restartdialog.show()
- response2 = self.restartdialog.run()
- self.restartdialog.set_default_response(gtk.RESPONSE_YES)
- if response2 == gtk.RESPONSE_YES:
- self.restartdialog.hide()#destroy()
- self.systemrestart()
- elif response2 == gtk.RESPONSE_NO:
- self.restartdialog.hide()#destroy()
- else:#Only for Dapper
- button5 = self.wTree.get_widget("button5")
- button5.connect('clicked', self.restarthide)
- button5.connect('clicked', self.systemrestart)
- button6 = self.wTree.get_widget("button6")
- button6.connect('clicked', self.restarthide)
- self.restartdialogd.show()
-
- def errorhide(self, data=None):
- self.errordialogd.hide()
-
- def errorwin(self, widget=None, data=None):
- if self.osver not in self.legacyos:#!= dapper
- self.errordialog.show()
- response4 = self.errordialog.run()
- self.errordialog.set_default_response(gtk.RESPONSE_OK)
- if response4 == gtk.RESPONSE_OK:
- self.errordialog.hide()#destroy()
- else:#Only for
- button7 = self.wTree.get_widget("button7")
- button7.connect('clicked', self.errorhide)
- self.errordialogd.show()
-
- def xorghide(self, data=None):
- self.xorgdialogd.hide()
-
-
- def xorg(self, widget=None, data=None):
- if self.osver not in self.legacyos:#!= dapper
- self.xorgdialog.show()
- response1 = self.xorgdialog.run()
- self.xorgdialog.set_default_response(gtk.RESPONSE_YES)
- if response1 == gtk.RESPONSE_YES:
- self.xorgdialog.hide()#destroy()
- self.xorgsettings()
- self.restart()
- elif response1 == gtk.RESPONSE_NO:
- self.restart()
- self.xorgdialog.hide()#destroy()
- else:#only for Dapper
- button1 = self.wTree.get_widget("button1")
- button1.connect('clicked', self.xorghide)
- button1.connect('clicked', self.xorgsettings)
- button1.connect('clicked', self.restart)
- button2 = self.wTree.get_widget("button2")
- button2.connect('clicked', self.xorghide)
- button2.connect('clicked', self.restart)
- self.xorgdialogd.show()
-
-
-
-
- def systemrestart(self, data=None):
- os.system('sudo reboot')
- sys.exit()
-
-
- def callback(self, widget, data):
- #print data
- try:
- self.operation = data
- except TypeError:
- print data
- pass
- #print self.operation
-
- def actionpack(self):
- selaction = self.operation
- if selaction == 'mannvinstall':
- self.mannvenable()
- elif selaction == 'manatiinstall':
- self.manatienable()
- elif selaction == 'nvinstall':#Automatic
- self.drv = 'nvidia'
- elif selaction == 'nvuninstall':#Automatic Uninstallation
- self.drv = 'nvidia'
- self.ver = 'uninstall'
- elif selaction == 'atiinstall':#Automatic
- self.drv = 'ati'
- elif selaction == 'atiuninstall':#Automatic Uninstallation
- self.drv = 'ati'
- self.ver = 'uninstall'
- elif selaction == 'atilatestinstall':#Manual
- self.drv = 'ati'
- self.ver = 'latest'
- elif selaction == 'atinewlegacyinstall':#Manual
- self.drv = 'ati'
- self.ver = 'middle'
- elif selaction == 'atilegacyinstall':#Manual
- self.drv = 'ati'
- self.ver = 'oldest'
- elif selaction == 'nvlatestinstall':#Manual
- self.drv = 'nvidia'
- self.ver = 'latest'
- elif selaction == 'nvnewlegacyinstall':#Manual
- self.drv = 'nvidia'
- self.ver = 'middle'
- elif selaction == 'nvlegacyinstall':#Manual
- self.drv = 'nvidia'
- self.ver = 'oldest'
-
- self.gtkdetails['drv'] = self.drv
- try:
- self.gtkdetails['ver'] = self.ver
- except AttributeError:
- pass
- #vte terminal
- self.completetxt = []
- self.logtxtfile = '/var/log/envy-installer.log'
- self.r = 0
- self.logged = ''
- #self.terminalwindow.reset(full=True, clear_history=True)
- self.term.reset(full=True, clear_history=True)
-
- self.termfork('bash')
- try:
- self.child('python pulse.py %s %s \n' % (self.drv, self.ver))
- except AttributeError:
- self.child('python pulse.py %s \n' % (self.drv))
- pass
- self.term.connect("cursor-moved",self.log_output)
- self.term.show()
- self.terminalwindow.show()
- #self.errorcheck()
-
- def errorcheck(self, data=None):
- self.terminalwindow.hide()
- #self.terminalwindow.destroy()
- #self.term.destroy()
- #if no ERROR
- try:
- if self.error == 'error':#if there is an error
- self.errorwin()
- self.selfcleaner()
- elif self.error == 'noerror':
- try:
- if self.ver == 'uninstall':
- self.completedial()
- self.selfcleaner()
- else:
- self.xorg()
- self.selfcleaner()
- except AttributeError:
- self.xorg()
- self.selfcleaner()
- except AttributeError:#if no error is reported
- self.xorg()
- self.selfcleaner()
- pass
-
-
- def log_output(self,term):
- column,row = self.term.get_cursor_position()
- if self.r != row:
- off = row-self.r
- text = self.term.get_text_range(row-off,0,row-1,-1,self.capture_text)
- self.r=row
- text = text.strip()
- if "\n" not in text or text[-1] != "\n":
- text += "\n"
- ##self.logged += text
- self.completetxt.append(text)
- a = self.logged
- error = re.compile('.*ENVY ERROR.*\n')
- success = re.compile('.*ENVY:.*Operation.*Completed.*')
- for line in self.completetxt:#self.logged:
- m1 = error.match(line)
- m2 = success.match(line)
- if m1:
- self.error = 'error'
- sep = ''#write a logfile
- logtext = sep.join(self.completetxt)
- logfile = open(self.logtxtfile, 'w')
- logfile.write(logtext)
- logfile.close()
- self.errorcheck()
- if m2:
- self.error = 'noerror'
- sep = ''#write a logfile
- logtext = sep.join(self.completetxt)
- logfile = open(self.logtxtfile, 'w')
- logfile.write(logtext)
- logfile.close()
- self.errorcheck()
- # print 'ERROR NOT FOUND'
- #else:
- # print 'ERRORE NON FOUND'
- #print self.logged
- #print line
- #print row
-
-
- def capture_text(self,text,text2,text3,text4):
- return True
-
- def launcher(self, data):
- try:
- if self.operation != 'a':
- pass
- except AttributeError:
- self.operation = 'nvinstall'
- #print self.operation
- self.actionpack()
- #self.errorcheck()
-
- def selfcleaner(self):
- #try:
- # del self.operation
- #except AttributeError:
- # pass
- radio1 = self.wTree.get_widget("radio1")
- #radio1.connect('toggled', self.callback, 'nvinstall')
- self.hideatinv()
- radio1.set_active(True)
- self.operation = 'nvinstall'#initial position
- try:
- del self.drv
- except AttributeError:
- pass
- try:
- del self.ver
- except AttributeError:
- pass
- #self.gtkdetails = {}#reset gtkdetails
-
-
-
- def main():
- gtk.main()
- return 0
-
- if __name__ == '__main__':
- EnvyMain()
- main()
-