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

150 lines
4.9 KiB

6 years ago
#!/usr/bin/python3
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QPushButton,
5 years ago
QHBoxLayout, QVBoxLayout)
from PyQt5.QtCore import Qt
6 years ago
from PyQt5.QtGui import QIcon
from optparse import OptionParser
from pathlib import Path
import subprocess
5 years ago
6 years ago
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 = ""
5 years ago
hbox = QHBoxLayout()
6 years ago
hbox.addStretch(1)
hbox.addWidget(self.upgradeBtn)
hbox.addWidget(self.closeBtn)
hbox.addStretch(1)
5 years ago
vbox = QVBoxLayout()
6 years ago
vbox.addWidget(self.label)
vbox.addLayout(hbox)
5 years ago
if self.upg_path is None:
6 years ago
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 upgrades available. Do you want to do a system upgrade?\nThis will mean packages could be upgraded, installed, or removed."
6 years ago
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()
5 years ago
screen = QApplication.desktop().screenNumber(
QApplication.desktop().cursor().pos())
6 years ago
centerPoint = QApplication.desktop().screenGeometry(screen).center()
frameGm.moveCenter(centerPoint)
self.move(frameGm.topLeft())
def call_reject(self):
app.quit()
def call_upgrade(self):
5 years ago
self.label.setText("Upgrading...")
# TODO maybe open another thread so notifier won't freeze
6 years ago
if self.upg_path == "terminal":
5 years ago
# cmd = ['qterminal', '-e', 'sudo', 'apt', 'dist-upgrade']
6 years ago
cmd = ['qterminal', '-e', './upg.sh']
else:
5 years ago
cmd = ['lxqt-sudo', self.upg_path, '--full-upgrade']
# process = subprocess.Popen(self.upg_path)
# process = subprocess.Popen(cmd, shell=True)
6 years ago
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()
5 years ago
6 years ago
class App(QApplication):
def __init__(self, upgrades, security_upgrades, reboot_required, upg_path,
5 years ago
*args):
6 years ago
QApplication.__init__(self, *args)
self.dialog = Dialog(upgrades, security_upgrades, reboot_required,
5 years ago
upg_path)
6 years ago
self.dialog.show()
5 years ago
6 years ago
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_()
5 years ago
6 years ago
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:
5 years ago
main(sys.argv, int(options.upgrades), int(options.security_upgrades),
reboot_required, options.upg_path)