Parcourir la source

updates running. Basic gui setup

master
Hussar il y a 5 ans
révision
d0ef0768c6
6 fichiers modifiés avec 130 ajouts et 0 suppressions
  1. BIN
      .update.py.swp
  2. +1
    -0
      .upnot
  3. BIN
      .upnot.swp
  4. +9
    -0
      README.md
  5. BIN
      assets/spin3.gif
  6. +120
    -0
      update.py

BIN
.update.py.swp Voir le fichier


+ 1
- 0
.upnot Voir le fichier

@@ -0,0 +1 @@
The json file for configs

BIN
.upnot.swp Voir le fichier


+ 9
- 0
README.md Voir le fichier

@@ -0,0 +1,9 @@
# Debian Update Notifier
Update Notifier is a simple and easy-to-use application that uses chronjobs for scheduling package updates. It takes a password and runs ``sudo apt update`` in a subprocess. It stores no passwords in any files.

// [Insert picture of notification popup]

## Usage
`` ./setup.py 15``

Sets the chronjob to run the update.py script at the current location every 15 days. Setup expects an integer representing the update interval.

BIN
assets/spin3.gif Voir le fichier

Avant Après
Largeur: 50  |  Hauteur: 50  |  Taille: 6.3 KiB

+ 120
- 0
update.py Voir le fichier

@@ -0,0 +1,120 @@
#!/usr/bin/python3

from PySide2.QtWidgets import (QApplication, QLabel,
QPushButton, QSlider,
QLineEdit, QWidget, QVBoxLayout, QHBoxLayout,
QDialog, QGroupBox, QTabWidget, QErrorMessage,
QListWidgetItem, QGridLayout, QTextEdit,
QComboBox, QToolBar, QInputDialog, QAction,
QStackedWidget, QTextBrowser)
from PySide2.QtCore import (Qt, QThread, Signal, QDir)
from PySide2.QtGui import (QIcon, QMovie)
import sys, subprocess

class UpdatePrompt(QDialog):

def __init__(self):
super().__init__()
self.makeView()
return

def makeView(self):
layout = QVBoxLayout()
btnLayout = QHBoxLayout()
self.centStack = QStackedWidget()
updateButton = QPushButton('Update')
cancelButton = QPushButton('Cancel')
notifyLabel = QLabel('There are updates scheduled')
self.inputBox = QLineEdit()
self.outputBox = QTextBrowser()
#refreshIcon = QIcon.fromTheme('process-working')
self.refreshIcon = QMovie('assets/spin3.gif')
refreshAnimation = QLabel()

layout.addWidget(notifyLabel)
layout.addWidget(self.centStack)
layout.addWidget(self.inputBox)
layout.addLayout(btnLayout)
btnLayout.addWidget(cancelButton)
btnLayout.addWidget(updateButton)

self.centStack.addWidget(refreshAnimation)
self.centStack.addWidget(self.outputBox)
refreshAnimation.setMovie(self.refreshIcon)
refreshAnimation.setAlignment(Qt.AlignCenter)
self.refreshIcon.start()

self.inputBox.setEchoMode(QLineEdit.Password)
self.inputBox.setFocus()
self.inputBox.returnPressed.connect(self.pkgUpdates)
updateButton.clicked.connect(self.pkgUpdates)
cancelButton.clicked.connect(self.cancelUpdates)

self.centStack.setCurrentIndex(1)
notifyLabel.setAlignment(Qt.AlignTop)
self.outputBox.setReadOnly(True)
#self.outputBox.setAlignment(Qt.AlignTop)
self.setWindowTitle('Package Updates')
self.setLayout(layout)
self.resize(450, 250)
return

def pkgUpdates(self):
self.centStack.setCurrentIndex(0)
self.refreshIcon.start()

password = self.inputBox.text()

if (password == ''):
self.passError('The password field cannot be empty')
return

password = password.encode()
result = subprocess.run(['sudo', '-S', 'apt-get', 'update'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, input=password)
stdout = result.stdout.decode()
currentText = self.outputBox.toPlainText()
self.outputBox.setText('Running updates\n' + stdout)

result = subprocess.run(['sudo', '-S', 'apt-get', 'upgrade', '-y'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, input=password)
stdout = result.stdout.decode()
currentText = self.outputBox.toPlainText()
self.outputBox.setText(currentText + '\nRunning upgrades\n' + stdout)
# result = subprocess.run(['sudo', 'apt', 'upgrade', '-y'],
# stdout=subprocess.PIPE,
# stderr=subprocess.STDOUT, input=password)
# currentText = self.outputBox.toPlainText()
# self.outputBox.setText(currentText + '\n' + stdout)

#self.refreshIcon.stop()
self.centStack.setCurrentIndex(1)
return

def passError(self, s):
passError = QDialog(self)
msg = QLabel(s)
layout = QVBoxLayout()
layout.addWidget(msg)
passError.setLayout(layout)

okBtn = QPushButton('OK')
okBtn.clicked.connect(passError.reject)
layout.addWidget(okBtn)

passError.exec_()
return

def cancelUpdates(self):
self.reject()
return



if __name__ == '__main__':
app = QApplication([])
view = UpdatePrompt()
view.show()
sys.exit(app.exec_())

||||||
x
 
000:0
Chargement…
Annuler
Enregistrer