home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / envy / gtkenvy.py < prev    next >
Encoding:
Python Source  |  2007-05-10  |  18.2 KB  |  527 lines

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from instun import objects
  4. from instun import main
  5. from instun import classes
  6. from instun import idcardlist
  7. import sys, vte, re, os
  8. try:
  9.     import pygtk
  10.     pygtk.require('2.0')
  11. except:
  12.     pass
  13. try:
  14.     import gtk
  15.     import gtk.glade
  16. except:
  17.     sys.exit(1)
  18.  
  19.  
  20. atilatest = '8.36.5'
  21. atilegacy = '8.28.8'
  22.  
  23. nvlatest = '9755'
  24. nvnewlegacy = '9631'
  25. nvlegacy = '7185'
  26.  
  27.  
  28. def aptcheck():
  29.     """
  30.     Check if any apt processes are running
  31.     """
  32.     p = os.popen("ps -U root -o comm")
  33.     running = False
  34.     pslist = p.readlines()
  35.     p.close()
  36.     for process in pslist:
  37.         if process.strip() in ["dpkg", "apt-get","synaptic","update-manager", "adept", "adept-notifier"]:
  38.             running = True
  39.             #print process
  40.             break
  41.     return running
  42.  
  43.  
  44.  
  45. class EnvyMain:
  46.     def __init__(self):
  47.         #Set the Glade file
  48.         #self.gladefile = '/usr/share/envy/gtkenvy.glade'
  49.         self.gladefile = 'gtkenvy.glade'  
  50.         self.wTree = gtk.glade.XML(self.gladefile)
  51.         
  52.         self.gtkdetails = {}
  53.         #Get the Main Window, and connect the destroy event
  54.         self.window = self.wTree.get_widget('MainWindow')
  55.         if (self.window):
  56.             self.window.connect('destroy', gtk.main_quit)
  57.         
  58.         self.window.set_position(gtk.WIN_POS_CENTER)
  59.         
  60.         self.xorgdialog = self.wTree.get_widget('messagedialog1')
  61.         self.restartdialog = self.wTree.get_widget('messagedialog2')
  62.         self.errordialog = self.wTree.get_widget('messagedialog3')
  63.         self.completedialog = self.wTree.get_widget('messagedialog4')
  64.         self.aptdialog = self.wTree.get_widget('messagedialog5')
  65.         '''Part for Dapper'''
  66.         self.xorgdialogd = self.wTree.get_widget('dialog1')
  67.         self.restartdialogd = self.wTree.get_widget('dialog2')
  68.         self.errordialogd = self.wTree.get_widget('dialog3')
  69.         self.completedialogd = self.wTree.get_widget('dialog4')
  70.         self.aptdialogd = self.wTree.get_widget('dialog5')
  71.         
  72.         
  73.         
  74.         #Radiobuttons
  75.         radio1 = self.wTree.get_widget("radio1")
  76.         radio1.connect('toggled', self.callback, 'nvinstall')
  77.         radio1.connect('toggled', self.hideatinv)
  78.         
  79.         radio2 = self.wTree.get_widget("radio2")
  80.         radio2.connect('toggled', self.callback, 'nvuninstall')
  81.         radio2.connect('toggled', self.hideatinv)
  82.         
  83.         radio3 = self.wTree.get_widget("radio3")
  84.         radio3.connect('toggled', self.callback, 'atiinstall')
  85.         radio3.connect('toggled', self.hideatinv)
  86.         
  87.         radio4 = self.wTree.get_widget("radio4")
  88.         radio4.connect('toggled', self.callback, 'atiuninstall')
  89.         radio4.connect('toggled', self.hideatinv)
  90.         
  91.         radio5 = self.wTree.get_widget("radio5")
  92.         radio5.connect('toggled', self.callback, 'mannvinstall')
  93.         radio5.connect('toggled', self.mannvenable)
  94.         
  95.         radio6 = self.wTree.get_widget("radio6")
  96.         radio6.connect('toggled', self.callback, 'manatiinstall')
  97.         radio6.connect('toggled', self.manatienable)
  98.  
  99.         
  100.         applybutton = self.wTree.get_widget("applybutton")
  101.         applybutton.connect('clicked', self.aptdial)
  102.         applybutton.connect('clicked', self.launcher)
  103.         
  104.         exitbutton = self.wTree.get_widget("exitbutton")
  105.         exitbutton.connect('clicked', lambda wid: gtk.main_quit())
  106.         
  107.         #dic = { 'on_radio1_toggled' : self.callback('MainWindow', 'nvinstall'),
  108.         #        'on_radio2_toggled' : self.callback('MainWindow', 'nvuninstall'),
  109.         #        'on_radio3_toggled' : self.callback('MainWindow', 'atiinstall'),
  110.         #        'on_radio4_toggled' : self.callback('MainWindow', 'atiuninstall'),
  111.         #        'on_radio5_toggled' : self.callback('MainWindow', 'maninstall'),
  112.         #        'on_exitbutton_clicked' : gtk.main_quit,
  113.         #        'on_MainWindow_destroy' : gtk.main_quit,
  114.         #        'on_applybutton_clicked' : self.launcher}
  115.         #self.wTree.signal_autoconnect(dic)
  116.         
  117.         atibutton1 = self.wTree.get_widget("atibutton1")
  118.         atibutton1.set_label("version %s" % (atilatest))
  119.         atibutton1.connect('toggled', self.callback, 'atilatestinstall')
  120.         
  121.         atibutton2 = self.wTree.get_widget("atibutton2")
  122.         atibutton2.set_label("version %s" % (atilegacy))
  123.         atibutton2.connect('toggled', self.callback, 'atilegacyinstall')
  124.         
  125.         nvbutton1 = self.wTree.get_widget("nvbutton1")
  126.         nvbutton1.set_label("version %s" % (nvlatest))
  127.         nvbutton1.connect('toggled', self.callback, 'nvlatestinstall')
  128.         
  129.         nvbutton2 = self.wTree.get_widget("nvbutton2")
  130.         nvbutton2.set_label("version %s" % (nvnewlegacy))
  131.         nvbutton2.connect('toggled', self.callback, 'nvnewlegacyinstall')
  132.         
  133.         nvbutton3 = self.wTree.get_widget("nvbutton3")
  134.         nvbutton3.set_label("version %s" % (nvlegacy))
  135.         nvbutton3.connect('toggled', self.callback, 'nvlegacyinstall')
  136.         
  137.         self.terminalwindow = self.wTree.get_widget('TerminalWindow')
  138.         self.term = vte.Terminal()
  139.         self.termfork = self.term.fork_command
  140.         self.child = self.term.feed_child
  141.         
  142.         termbutton = self.wTree.get_widget('termbutton1')
  143.         termbutton.connect('clicked', self.closeterm)
  144.         
  145.         self.term.show()
  146.         self.terminalwindow.hide()
  147.         
  148.         scrolled = self.wTree.get_widget('scrolledwindow1')
  149.         scrolled.add_with_viewport(self.term)
  150.         
  151.         self.aboutdialog1 = self.wTree.get_widget('aboutdialog1')
  152.         aboutbutton = self.wTree.get_widget('aboutbutton')
  153.         aboutbutton.connect('clicked', self.aboutdial)
  154.         
  155.         self.osdetect()
  156.  
  157.  
  158.     def osdetect(self, data=None):
  159.         self.legacyos = ['dapper', 'etch']
  160.         getver = classes.Specsdetect()
  161.         getver.init()
  162.         getver.codename()
  163.         self.osver = getver.details['osname']
  164.     
  165.         
  166.     def on_aboutbox_response(self, dialog, response, *args):
  167.         # system-defined GtkDialog responses are always negative, in which    
  168.         # case we want to hide it
  169.         if response < 0:
  170.             self.aboutdialog1.hide()#dialog.hide()
  171.             self.aboutdialog1.emit_stop_by_name('response')
  172.  
  173.     def on_aboutbox_close(self, widget, event=None):
  174.         self.aboutdialog1.hide()
  175.         return gtk.TRUE
  176.         
  177.     
  178.     def aboutdial(self, widget, data=None):
  179.         self.aboutdialog1.show()
  180.         response3 = self.aboutdialog1.run()
  181.         self.aboutdialog1.connect("response", self.on_aboutbox_response)
  182.         self.aboutdialog1.connect("close", self.on_aboutbox_close)
  183.         self.aboutdialog1.connect("delete_event", self.on_aboutbox_close)
  184.    
  185.     def hideatinv(self, data=None):# widget
  186.         nvoptions = self.wTree.get_widget('nvframe')
  187.         atioptions = self.wTree.get_widget('atiframe')
  188.         nvoptions.hide()
  189.         atioptions.hide()
  190.     
  191.     def mannvenable(self, widget, data=None):
  192.         nvoptions = self.wTree.get_widget('nvframe')
  193.         atioptions = self.wTree.get_widget('atiframe')
  194.         atioptions.hide()
  195.         nvoptions.show()
  196.         self.operation = 'nvlatestinstall'
  197.         
  198.     def manatienable(self, widget, data=None):
  199.         nvoptions = self.wTree.get_widget('nvframe')
  200.         atioptions = self.wTree.get_widget('atiframe')
  201.         nvoptions.hide()
  202.         atioptions.show()
  203.         self.operation = 'atilatestinstall'
  204.         
  205.     
  206.     def closeterm(self, data):
  207.         self.terminalwindow.hide()
  208.     
  209.     def xorgsettings(self, data=None):
  210.         getver = classes.Specsdetect()
  211.         getver.init()
  212.         getver.codename()
  213.         ##getver.driverpushback()
  214.         #try:
  215.         driver = self.gtkdetails['drv']
  216.         try:
  217.             version = self.gtkdetails['ver']
  218.         except KeyError:
  219.             pass
  220.         if driver == 'ati':
  221.             try:
  222.                 getver.details['drvtype'] = version
  223.             
  224.             except UnboundLocalError:#Automatic detection
  225.                 getver.cards = idcardlist.atinewcards()#set the id lists
  226.                 getver.middlecards = idcardlist.atimidcards()
  227.                 getver.legacycards = idcardlist.atioldcards()                
  228.                 getver.driverpushback()
  229.                 pass
  230.             getver.atixorgset()
  231.         elif driver == 'nvidia':
  232.             try:
  233.                 getver.details['drvtype'] = version
  234.             except UnboundLocalError:#Automatic detection
  235.                 getver.cards = idcardlist.nvnewcards()#set the id lists
  236.                 getver.middlecards = idcardlist.nvmidcards()
  237.                 getver.legacycards = idcardlist.nvoldcards()
  238.  
  239.                 getver.driverpushback()
  240.                 pass
  241.             getver.nvxorgset()
  242.         #except AttributeError:
  243.         #    pass
  244.     
  245.     def completehide(self, data=None):
  246.         self.completedialogd.hide()
  247.  
  248.     def completedial(self, widget=None, data=None):
  249.         if self.osver not in self.legacyos:#!= dapper
  250.             self.completedialog.show()
  251.             response5 = self.completedialog.run()
  252.             self.completedialog.set_default_response(gtk.RESPONSE_OK)
  253.             if response5 == gtk.RESPONSE_OK:
  254.                 self.completedialog.hide()#destroy()
  255.         else:#Only for Dapper
  256.             button8 = self.wTree.get_widget("button8")
  257.             button8.connect('clicked', self.completehide)
  258.             self.completedialogd.show()
  259.             
  260.     def aptdialhide(self, data=None):
  261.         self.aptdialogd.hide()
  262.         sys.exit(1)
  263.  
  264.     def aptdial(self, data=None):
  265.         if aptcheck():
  266.             if self.osver not in self.legacyos:#!= dapper
  267.                 self.aptdialog.show()
  268.                 response6 = self.aptdialog.run()
  269.                 self.aptdialog.set_default_response(gtk.RESPONSE_OK)
  270.                 if response6 == gtk.RESPONSE_OK:
  271.                     self.aptdialog.hide()#destroy()
  272.                     sys.exit(1)
  273.             else:#Only for Dapper
  274.                 button9 = self.wTree.get_widget("button9")
  275.                 button9.connect('clicked', self.aptdialhide)
  276.                 #button9.connect('clicked', sys.exit(1))
  277.                 self.aptdialogd.show()
  278.     
  279.         
  280.     def restarthide(self, data=None):
  281.         self.restartdialogd.hide()
  282.  
  283.     def restart(self, widget=None, data=None):
  284.         if self.osver not in self.legacyos:#!= dapper
  285.             self.restartdialog.show()
  286.             response2 = self.restartdialog.run()
  287.             self.restartdialog.set_default_response(gtk.RESPONSE_YES)
  288.             if response2 == gtk.RESPONSE_YES:
  289.                 self.restartdialog.hide()#destroy()
  290.                 self.systemrestart()
  291.             elif response2 == gtk.RESPONSE_NO:
  292.                 self.restartdialog.hide()#destroy()
  293.         else:#Only for Dapper
  294.             button5 = self.wTree.get_widget("button5")
  295.             button5.connect('clicked', self.restarthide)
  296.             button5.connect('clicked', self.systemrestart)
  297.             button6 = self.wTree.get_widget("button6")
  298.             button6.connect('clicked', self.restarthide)
  299.             self.restartdialogd.show()
  300.         
  301.     def errorhide(self, data=None):
  302.         self.errordialogd.hide()
  303.  
  304.     def errorwin(self, widget=None, data=None):
  305.         if self.osver not in self.legacyos:#!= dapper
  306.             self.errordialog.show()
  307.             response4 = self.errordialog.run()
  308.             self.errordialog.set_default_response(gtk.RESPONSE_OK)
  309.             if response4 == gtk.RESPONSE_OK:
  310.                 self.errordialog.hide()#destroy()
  311.         else:#Only for 
  312.             button7 = self.wTree.get_widget("button7")
  313.             button7.connect('clicked', self.errorhide)
  314.             self.errordialogd.show()
  315.     
  316.     def xorghide(self, data=None):
  317.         self.xorgdialogd.hide()
  318.  
  319.  
  320.     def xorg(self, widget=None, data=None):
  321.         if self.osver not in self.legacyos:#!= dapper
  322.             self.xorgdialog.show()
  323.             response1 = self.xorgdialog.run()
  324.             self.xorgdialog.set_default_response(gtk.RESPONSE_YES)
  325.             if response1 == gtk.RESPONSE_YES:
  326.                 self.xorgdialog.hide()#destroy()
  327.                 self.xorgsettings()
  328.                 self.restart()
  329.             elif response1 == gtk.RESPONSE_NO:
  330.                 self.restart()
  331.                 self.xorgdialog.hide()#destroy()
  332.         else:#only for Dapper
  333.             button1 = self.wTree.get_widget("button1")
  334.             button1.connect('clicked', self.xorghide)
  335.             button1.connect('clicked', self.xorgsettings)
  336.             button1.connect('clicked', self.restart)
  337.             button2 = self.wTree.get_widget("button2")
  338.             button2.connect('clicked', self.xorghide)
  339.             button2.connect('clicked', self.restart)
  340.             self.xorgdialogd.show()
  341.             
  342.     
  343.     
  344.     
  345.     def systemrestart(self, data=None):
  346.         os.system('sudo reboot')
  347.         sys.exit()
  348.  
  349.         
  350.     def callback(self, widget, data):
  351.         #print data
  352.         try:
  353.             self.operation = data
  354.         except TypeError:
  355.             print data
  356.             pass
  357.         #print self.operation
  358.     
  359.     def actionpack(self):
  360.         selaction = self.operation
  361.         if selaction == 'mannvinstall':
  362.             self.mannvenable()
  363.         elif selaction == 'manatiinstall':
  364.             self.manatienable()
  365.         elif selaction == 'nvinstall':#Automatic
  366.             self.drv = 'nvidia'
  367.         elif selaction == 'nvuninstall':#Automatic Uninstallation
  368.             self.drv = 'nvidia'
  369.             self.ver = 'uninstall'
  370.         elif selaction == 'atiinstall':#Automatic
  371.             self.drv = 'ati'
  372.         elif selaction == 'atiuninstall':#Automatic Uninstallation
  373.             self.drv = 'ati'
  374.             self.ver = 'uninstall'
  375.         elif selaction == 'atilatestinstall':#Manual
  376.             self.drv = 'ati'
  377.             self.ver = 'latest'
  378.         elif selaction == 'atinewlegacyinstall':#Manual
  379.             self.drv = 'ati'
  380.             self.ver = 'middle'
  381.         elif selaction == 'atilegacyinstall':#Manual
  382.             self.drv = 'ati'
  383.             self.ver = 'oldest'
  384.         elif selaction == 'nvlatestinstall':#Manual
  385.             self.drv = 'nvidia'
  386.             self.ver = 'latest'
  387.         elif selaction == 'nvnewlegacyinstall':#Manual
  388.             self.drv = 'nvidia'
  389.             self.ver = 'middle'
  390.         elif selaction == 'nvlegacyinstall':#Manual
  391.             self.drv = 'nvidia'
  392.             self.ver = 'oldest'
  393.  
  394.         self.gtkdetails['drv'] = self.drv
  395.         try:
  396.             self.gtkdetails['ver'] = self.ver
  397.         except AttributeError:
  398.             pass
  399.         #vte terminal
  400.         self.completetxt = []
  401.         self.logtxtfile = '/var/log/envy-installer.log'
  402.         self.r = 0
  403.         self.logged = ''
  404.         #self.terminalwindow.reset(full=True, clear_history=True)
  405.         self.term.reset(full=True, clear_history=True)
  406.         
  407.         self.termfork('bash')
  408.         try:
  409.             self.child('python pulse.py %s %s \n' % (self.drv, self.ver))
  410.         except AttributeError:
  411.             self.child('python pulse.py %s \n' % (self.drv))
  412.             pass
  413.         self.term.connect("cursor-moved",self.log_output)
  414.         self.term.show()
  415.         self.terminalwindow.show()
  416.         #self.errorcheck()
  417.         
  418.     def errorcheck(self, data=None):
  419.         self.terminalwindow.hide()
  420.         #self.terminalwindow.destroy()
  421.         #self.term.destroy()
  422.         #if no ERROR
  423.         try:
  424.             if self.error == 'error':#if there is an error
  425.                 self.errorwin()
  426.                 self.selfcleaner()
  427.             elif self.error == 'noerror':
  428.                 try:
  429.                     if self.ver == 'uninstall':
  430.                         self.completedial()
  431.                         self.selfcleaner()
  432.                     else:
  433.                         self.xorg()
  434.                         self.selfcleaner()
  435.                 except AttributeError:
  436.                     self.xorg()
  437.                     self.selfcleaner()
  438.         except AttributeError:#if no error is reported
  439.             self.xorg()
  440.             self.selfcleaner()
  441.             pass
  442.         
  443.     
  444.     def log_output(self,term):
  445.         column,row = self.term.get_cursor_position()
  446.         if self.r != row:
  447.             off = row-self.r
  448.             text = self.term.get_text_range(row-off,0,row-1,-1,self.capture_text)
  449.             self.r=row
  450.             text = text.strip()
  451.             if "\n" not in text or text[-1] != "\n":
  452.                 text += "\n"
  453.             ##self.logged += text
  454.             self.completetxt.append(text)
  455.             a = self.logged
  456.             error = re.compile('.*ENVY ERROR.*\n')
  457.             success = re.compile('.*ENVY:.*Operation.*Completed.*')
  458.             for line in self.completetxt:#self.logged:
  459.                 m1 = error.match(line)
  460.                 m2 = success.match(line)
  461.             if m1:
  462.                 self.error = 'error'
  463.                 sep = ''#write a logfile
  464.                 logtext = sep.join(self.completetxt)
  465.                 logfile = open(self.logtxtfile, 'w')
  466.                 logfile.write(logtext)
  467.                 logfile.close()
  468.                 self.errorcheck()
  469.             if m2:
  470.                 self.error = 'noerror'
  471.                 sep = ''#write a logfile
  472.                 logtext = sep.join(self.completetxt)
  473.                 logfile = open(self.logtxtfile, 'w')
  474.                 logfile.write(logtext)
  475.                 logfile.close()
  476.                 self.errorcheck()
  477.             #    print 'ERROR NOT FOUND'
  478.             #else:
  479.             #    print 'ERRORE NON FOUND'
  480.             #print self.logged
  481.             #print line
  482.          #print row
  483.         
  484.  
  485.     def capture_text(self,text,text2,text3,text4):
  486.         return True
  487.     
  488.     def launcher(self, data):
  489.         try:
  490.             if self.operation != 'a':
  491.                 pass
  492.         except AttributeError:
  493.             self.operation = 'nvinstall'
  494.         #print self.operation
  495.         self.actionpack()
  496.         #self.errorcheck()
  497.     
  498.     def selfcleaner(self):
  499.         #try:
  500.         #    del self.operation
  501.         #except AttributeError:
  502.         #    pass
  503.         radio1 = self.wTree.get_widget("radio1")
  504.         #radio1.connect('toggled', self.callback, 'nvinstall')
  505.         self.hideatinv()
  506.         radio1.set_active(True)
  507.         self.operation = 'nvinstall'#initial position
  508.         try:
  509.             del self.drv
  510.         except AttributeError:
  511.             pass
  512.         try:
  513.             del self.ver
  514.         except AttributeError:
  515.             pass
  516.         #self.gtkdetails = {}#reset gtkdetails
  517.         
  518.  
  519.  
  520. def main():
  521.     gtk.main()
  522.     return 0
  523.  
  524. if __name__ == '__main__':
  525.     EnvyMain()
  526.     main()
  527.