Kaynağa Gözat

updates running. Basic gui setup

master
Hussar 5 yıl önce
işleme
d0ef0768c6
6 değiştirilmiş dosya ile 130 ekleme ve 0 silme
  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 Dosyayı Görüntüle


+ 1
- 0
.upnot Dosyayı Görüntüle

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

BIN
.upnot.swp Dosyayı Görüntüle


+ 9
- 0
README.md Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

Önce Sonra
Genişlik: 50  |  Yükseklik: 50  |  Boyut: 6.3 KiB

+ 120
- 0
update.py Dosyayı Görüntüle

@@ -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_())

Yükleniyor…
İptal
Kaydet