You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lubuntu-update-notifier/notifier.py

151 lines
5.1 KiB

#!/usr/bin/python3
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QPushButton,
QHBoxLayout, QVBoxLayout)
from PyQt5.QtCore import (Qt, QProcess)
from PyQt5.QtGui import QIcon
from optparse import OptionParser
from pathlib import Path
import subprocess
#from upgrader import DialogUpg #still dont know how to ask for sudo when calling a function
class Dialog(QWidget):
def __init__(self, upgrades, security_upgrades, reboot_required, upg_path):
QWidget.__init__(self)
self.upgrades = upgrades
self.security_upgrades = security_upgrades
self.upg_path = upg_path
self.initUI()
self.upgradeBtn.clicked.connect(self.call_upgrade)
self.closeBtn.clicked.connect(self.call_reject)
def initUI(self):
self.label = QLabel()
self.label.setAlignment(Qt.AlignHCenter)
self.upgradeBtn = QPushButton("Upgrade")
self.closeBtn = QPushButton("Close")
text = ""
hbox=QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(self.upgradeBtn)
hbox.addWidget(self.closeBtn)
hbox.addStretch(1)
vbox=QVBoxLayout()
vbox.addWidget(self.label)
vbox.addLayout(hbox)
if self.upg_path == None:
self.upgradeBtn.setVisible(False)
self.setLayout(vbox)
self.setGeometry(300, 300, 500, 150)
self.setWindowTitle("Update Notifier")
self.center()
if self.upgrades > 0:
'''text = "There are(is) %s upgrade(s) available and %s security update(s) available\n" % (self.upgrades, self.security_upgrades)
text = text + "Do you want to do a system upgrade?\nThis will upgrade, install and remove packages"'''
text = "There are upgrades available. Do you want to do a system upgrade?\nThis will upgrade, install and remove packages"
if reboot_required:
if text == "":
text = "Reboot is needed"
self.upgradeBtn.setVisible(False)
else:
text = text + "\nReboot is needed"
self.label.setText(text)
def center(self):
frameGm = self.frameGeometry()
screen = QApplication.desktop().screenNumber(QApplication.desktop().cursor().pos())
centerPoint = QApplication.desktop().screenGeometry(screen).center()
frameGm.moveCenter(centerPoint)
self.move(frameGm.topLeft())
def call_reject(self):
app.quit()
def call_upgrade(self):
self.label.setText("Upgrading....")
#TODO maybe open another thread so notifier won't freeze
if self.upg_path == "terminal":
#cmd = ['qterminal', '-e', 'sudo', 'apt', 'dist-upgrade']
cmd = ['qterminal', '-e', './upg.sh']
else:
cmd = ['lxqt-sudo', self.upg_path,'--full-upgrade']
#process = subprocess.Popen(self.upg_path)
#process = subprocess.Popen(cmd, shell=True)
self.upgradeBtn.setVisible(False)
self.upgradeBtn.setEnabled(False)
process = subprocess.Popen(cmd)
process.wait()
'''options.fullUpgrade = 1
dialogUpg = DialogUpg(optionss, pkg=self.packages)
dialogUpg.show()'''
if self.upg_path == "terminal":
text = "Upgrade finished"
reboot_required_path = Path("/var/run/reboot-required")
if reboot_required_path.exists():
text = text + "\n" + "Restart required"
self.label.setText(text)
self.closeBtn.setVisible(True)
self.closeBtn.setEnabled(True)
else:
app.quit()
class App(QApplication):
def __init__(self, upgrades, security_upgrades, reboot_required, upg_path,
*args):
QApplication.__init__(self, *args)
self.dialog = Dialog(upgrades, security_upgrades, reboot_required,
upg_path)
self.dialog.show()
def main(args, upgrades, security_upgrades, reboot_required, upg_path):
global app
app = App(upgrades, security_upgrades, reboot_required, upg_path, args)
app.setWindowIcon(QIcon.fromTheme("system-software-update"))
app.exec_()
if __name__ == "__main__":
parser = OptionParser()
parser.add_option("-p",
"--upgrader-sw",
dest="upg_path",
help="Define software/app to open for upgrade",
metavar="APP")
parser.add_option("-u",
"--upgrades",
dest="upgrades",
help="How many upgrades are available",
metavar="APP")
parser.add_option("-s",
"--security-upg",
dest="security_upgrades",
help="How many security upgrades are available",
metavar="APP")
(options, args) = parser.parse_args()
reboot_required_path = Path("/var/run/reboot-required")
if reboot_required_path.exists():
reboot_required = True
else:
reboot_required = False
if int(options.upgrades) > 0 or reboot_required:
main(sys.argv, int(options.upgrades), int(options.security_upgrades), reboot_required, options.upg_path)