소스 검색

updates running. Basic gui setup

master
Hussar 5 년 전
커밋
d0ef0768c6
6개의 변경된 파일130개의 추가작업 그리고 0개의 파일을 삭제
  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 파일 보기


+ 1
- 0
.upnot 파일 보기

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

BIN
.upnot.swp 파일 보기


+ 9
- 0
README.md 파일 보기

@@ -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 파일 보기

Before After
Width: 50  |  Height: 50  |  Size: 6.3 KiB

+ 120
- 0
update.py 파일 보기

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

불러오는 중...
취소
저장