Advertisement
Guest User

Untitled

a guest
Oct 24th, 2010
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.24 KB | None | 0 0
  1. #!/usr/bin/env python2
  2. # -*- coding: utf-8 -*-
  3.  
  4. ### Pacman database informer 2.1
  5. ### by mangus
  6. ###The ARCHLINUX name and logo are recognized trademarks
  7. ###See http://www.archlinux.org for acceptable use and restrictions.
  8.  
  9. import sys
  10. import os
  11. import subprocess
  12. from PyQt4 import QtGui, QtCore
  13. from mainform import Ui_MainWindow
  14.  
  15. class MainWindow(QtGui.QMainWindow,Ui_MainWindow):
  16.         def __init__(self,parent=None):
  17.                 super(MainWindow, self).__init__(parent)
  18.                 self.setupUi(self)
  19.                 self.statusbar.showMessage('Pacman database Informer')
  20.                 self.lineEdit.backspace()
  21.                 self.lineEdit.setPlaceholderText('Insert complete PATH - pacman -Qo')
  22.                 list=self.findRepos()
  23.                 self.comboBox.addItems(list)
  24.                 self.comboBox.insertSeparator((self.comboBox.count())-3)
  25.                 self.style()
  26.                 #signals
  27.                 self.pushButton_5.clicked.connect(self.clearAll)
  28.                 self.pushButton.clicked.connect(self.searchPkg)
  29.                 self.actionRefresh.triggered.connect(self.clearAll)
  30.                 self.comboBox.activated[str].connect(self.listRepo)
  31.                 self.connect(self.actionExit, QtCore.SIGNAL("triggered()"), self.quit)
  32.                 self.connect(self.lineEdit,QtCore.SIGNAL("returnPressed ()"),self.searchPkg)
  33.  
  34.         def quit(self):
  35.                 QtGui.QApplication.quit()
  36.  
  37.         def closeEvent(self, event):  ##reimplemented qt function
  38.                 self.hide()  ##always hide the mainwindow
  39.                 event.ignore()
  40.  
  41.         def style(self):
  42.                 self.textEdit.setStyleSheet ("background-image:url('pixmaps/sticker-arch2.png'); \
  43.                                              background-repeat: no repeat; background-position:center; \
  44.                                             ")
  45.                 self.textEdit_2.setStyleSheet ("background-image:url('pixmaps/sticker-arch2.png'); \
  46.                                                background-repeat: no repeat; background-position:center; \
  47.                                               ")
  48.                 self.textEdit_3.setStyleSheet ("background-image:url('pixmaps/sticker-arch2.png'); \
  49.                                                background-repeat: no repeat; background-position:center; \
  50.                                               ")
  51.                 self.textEdit_4.setStyleSheet ("background-image:url('pixmaps/sticker-arch2.png'); \
  52.                                                background-repeat: no repeat; background-position:center; \
  53.                                               ")
  54.  
  55.         def removeStyle(self):
  56.                 self.textEdit.setStyleSheet ("background-image:url('');")
  57.                 self.textEdit_2.setStyleSheet ("background-image:url('');")
  58.                 self.textEdit_3.setStyleSheet ("background-image:url('');")
  59.                 self.textEdit_4.setStyleSheet ("background-image:url('');")
  60.  
  61.         def clearAll(self):
  62.                 list=self.findRepos()
  63.                 self.comboBox.addItems(list)
  64.                 self.comboBox.insertSeparator((self.comboBox.count())-3)
  65.                 self.listWidget.clear()
  66.                 self.textEdit.clear()
  67.                 self.textEdit_2.clear()
  68.                 self.textEdit_3.clear()
  69.                 self.textEdit_4.clear()
  70.                 self.lineEdit.clear()
  71.                 self.comboBox.setCurrentIndex(0)
  72.                 self.tabWidget.setCurrentWidget(self.tab_3)
  73.                 self.style()
  74.  
  75.         def listRepo(self,repo):
  76.                 self.listWidget.clear()
  77.                 self.textEdit.clear()
  78.                 self.style()
  79.                 self.textEdit_2.clear()
  80.                 self.textEdit_3.clear()
  81.                 self.textEdit_4.clear()
  82.  
  83.                 if repo == 'Orphans - pacman -Qdt':
  84.                   cmd='pacman -Qdt'
  85.                   barstring=' orphans packages'
  86.                   self.listPackages(cmd,barstring)
  87.                 elif repo == 'Foreign - pacman -Qm':
  88.                   cmd='pacman -Qm'
  89.                   barstring=' foreign packages'
  90.                   self.listPackages(cmd,barstring)
  91.                 else:
  92.                   if repo == 'Stable - All But Testing':
  93.                       repos = [i for i in self.findRepos()[1:-3] if 'testing' not in i]
  94.                       print repos
  95.                   elif repo == 'All':
  96.                       repos = self.findRepos()[1:-3]
  97.                       print repos
  98.                   else:
  99.                     repos = [repo]
  100.                     print repos
  101.                   for repo in repos:
  102.                     cmd='paclist '+ str(repo)
  103.                    # barstring=str(repo) +' packages'
  104.                     barstring=' packages'
  105.                     self.listPackages(cmd,barstring)
  106.  
  107.         def listPackages(self,cmd,barstring):
  108.                 for i in os.popen(cmd,"r"):
  109.                     item = QtGui.QListWidgetItem(i.strip())
  110.                     item.setIcon(QtGui.QIcon('pixmaps/tgz.png'))
  111.                     self.listWidget.addItem(item)
  112.                 c=self.listWidget.count()
  113.                 self.statusbar.showMessage(str(c) + ' ' + barstring)
  114.  
  115.         def findRepos(self):
  116.                 list= ['All']
  117.                 f = open('/etc/pacman.conf','r')
  118.                 for line in f.readlines():
  119.                     if line[0] == '[':  ## this may be ugly....
  120.                         a=line.split(' ')[0].rstrip("\n")[1:-1]
  121.                         list.append(a)
  122.                 f.close()
  123.                 del list[1]  ###removes '[options]' from pacman.conf parsed with the repos
  124.                 list.append('Orphans - pacman -Qdt')
  125.                 list.append('Foreign - pacman -Qm')
  126.                 list.append('Stable - All But Testing')
  127.                 return list
  128.  
  129.         def on_listWidget_itemClicked(self, item):
  130.                 ### first tab info
  131.                 # clean and set first tab
  132.                 self.removeStyle()
  133.                 self.textEdit.clear()
  134.                 self.textEdit_2.clear()
  135.                 self.textEdit_3.clear()
  136.                 self.textEdit_4.clear()
  137.                 self.tabWidget.setCurrentWidget(self.tab_3)
  138.                 p=str(item.text()).split(" ")[0]
  139.                 cmd="pacman -Qi " + p
  140.                 a=os.popen(cmd).read().decode("utf-8")
  141.                 self.textEdit.setText(a)
  142.  
  143.                 ### second tab files
  144.                 self.textEdit_2.clear()
  145.                 a=self.listWidget.selectedItems()[0]
  146.                 p=str(a.text()).split(" ")[0]
  147.                 cmd="pacman -Ql " + p
  148.                 l=os.popen(cmd).read()
  149.                 self.textEdit_2.setText(l)
  150.  
  151.                 ### third tab scripts
  152.                 self.textEdit_3.clear()
  153.                 a=self.listWidget.selectedItems()[0]
  154.                 p=str(a.text()).split(" ")[0]
  155.                 cmd="pacscripts " + p
  156.                 r = subprocess.Popen(cmd, shell=True ,stdout=subprocess.PIPE, stdin=subprocess.PIPE,  stderr=subprocess.PIPE)
  157.                 o=r.stdout.read().decode( "utf-8")
  158.                 u=r.stderr.read().decode( "utf-8")
  159.                 self.textEdit_3.setText(str(o)+str(u))
  160.  
  161.                 ### fourth tab deps tree
  162.                 self.textEdit_4.clear()
  163.                 a=self.listWidget.selectedItems()[0]
  164.                 p=str(a.text()).split(" ")[0]
  165.                 app.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
  166.                 self.statusbar.showMessage('Loading deps tree')
  167.                 cmd="pactree " + p
  168.                 l=os.popen(cmd).read()
  169.                 self.textEdit_4.setText(l)
  170.                 self.statusbar.showMessage('Done')
  171.                 app.restoreOverrideCursor()
  172.  
  173.         def searchPkg(self):
  174.                 self.listWidget.clear()
  175.                 self.tabWidget.setCurrentWidget(self.tab_3)
  176.                 self.textEdit.clear()
  177.                 a=self.lineEdit.displayText().toUtf8()
  178.                 b=str(a)
  179.                 if not b:
  180.                     self.textEdit.clear()
  181.                     self.removeStyle()
  182.                     self.textEdit.setText('No file specified.')
  183.                     return
  184.                 cmd="pacman -Qo " + str(a)
  185.                 app.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor))
  186.                 a=os.popen(cmd).readlines()
  187.                 if not a:
  188.                     self.textEdit.clear()
  189.                     self.removeStyle()
  190.                     self.textEdit.setText('No such file or directory.')
  191.                     app.restoreOverrideCursor()
  192.                     return
  193.  
  194.                 for l in os.popen(cmd):
  195.                     r=l.decode( "utf-8")
  196.                     item = QtGui.QListWidgetItem(r.strip().split(" ")[4] + ' ' +r.strip().split(" ")[5])
  197.                     item.setIcon(QtGui.QIcon('pixmaps/tgz.png'))
  198.                     self.listWidget.addItem(item)
  199.                 self.statusbar.showMessage('Done.')
  200.                 app.restoreOverrideCursor()
  201.  
  202.         @QtCore.pyqtSlot()
  203.         def on_actionAbout_triggered(self):
  204.               QtGui.QMessageBox.about(self ,"Pacman database Informer" , 'Pacman database Informer 2.1 by mangus \n \n'
  205.                                             'A little tool for little queries to the pacman database \n'
  206.                                             '[email protected] \n \n The ARCHLINUX name and'
  207.                                             'logo are recognized trademarks \n'
  208.                                             'See http://www.archlinux.org/ for acceptable use and restrictions.')
  209.  
  210.         @QtCore.pyqtSlot()
  211.         def on_actionAbout_Qt_triggered(self):
  212.               QtGui.QMessageBox.aboutQt(self)
  213.  
  214.         def on_actionArchlinux_org_triggered(self):
  215.               QtGui.QDesktopServices().openUrl(QtCore.QUrl('http://www.archlinux.org'))
  216.  
  217. class SystemTrayIcon(QtGui.QSystemTrayIcon):
  218.     def __init__(self, icon, parent=None):
  219.         QtGui.QSystemTrayIcon.__init__(self, icon, parent)
  220.         menu = QtGui.QMenu(parent)
  221.         # Actions
  222.         self.actionQuit= QtGui.QAction(QtGui.QIcon('pixmaps/application-exit.png'),"Exit", self)
  223.         menu.addAction(self.actionQuit)
  224.         # Connect menu with signals
  225.         self.connect(self.actionQuit, QtCore.SIGNAL("triggered()"), self.quit)
  226.         # Other signals
  227.         traySignal = "activated(QSystemTrayIcon::ActivationReason)"
  228.         QtCore.QObject.connect(self, QtCore.SIGNAL(traySignal), self.icon_activated)
  229.         # Create Menu
  230.         self.setContextMenu(menu)
  231.  
  232.     def quit(self):
  233.         QtGui.QApplication.quit()
  234.  
  235.     def icon_activated(self, reason):
  236.         if reason == QtGui.QSystemTrayIcon.Trigger:
  237.             mainwindow.show()
  238.  
  239. def main():
  240.       global app
  241.       app = QtGui.QApplication(sys.argv)
  242.       # TrayIcon
  243.       if QtGui.QSystemTrayIcon.isSystemTrayAvailable():
  244.           w = QtGui.QWidget()
  245.           icon = QtGui.QIcon("pixmaps/archlinux-icon-crystal-64.svg")
  246.           trayIcon = SystemTrayIcon(icon, w)
  247.           trayIcon.show()
  248.           trayIcon.setToolTip("pdi - pacman database informer")
  249.       # Main Window
  250.       global mainwindow
  251.       mainwindow=MainWindow()
  252.       mainwindow.show()
  253.       sys.exit(app.exec_())
  254.  
  255. if __name__ == "__main__":
  256.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement