consolidator

Форк
0
/
VersionChecker.py 
93 строки · 3.6 Кб
1
import sys
2
import yaml
3
import urllib.request 
4
from http import client
5
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QSizePolicy, QWidget, QLabel
6
from PySide6.QtCore import QRect
7
from PySide6.QtGui import QFont
8

9
class UpdatePromptDialod(QMainWindow):
10
    def __init__(self):
11
        super().__init__()
12
        self.need_update = False
13
        
14
        # window
15
        self.setWindowTitle("Обновление")
16
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
17
        sizePolicy.setHorizontalStretch(0)
18
        sizePolicy.setVerticalStretch(0)
19
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
20
        self.resize(420,100)
21
        self.setSizePolicy(sizePolicy)
22
        self.centralwidget = QWidget(self)
23
        
24
        # label
25
        self.label = QLabel(self.centralwidget)
26
        self.label.setGeometry(QRect(10, 10, 400, 30))
27
        font = QFont()
28
        font.setPointSize(12)
29
        self.label.setFont(font)
30
        self.label.setText("Доступно обновление продукта. Скачать обновление?")
31
        
32
        # ok button
33
        self.okButton = QPushButton(self.centralwidget)
34
        self.okButton.setGeometry(QRect(90, 50, 75, 24))
35
        self.okButton.setText("Ok")
36
        self.okButton.clicked.connect(self.ok_button_clicked)
37
        
38
        # cancel buttton
39
        self.cancelButton = QPushButton(self.centralwidget)
40
        self.cancelButton.setGeometry(QRect(220, 50, 75, 24))
41
        self.cancelButton.setText("Cancel")        
42
        self.cancelButton.clicked.connect(self.cancel_button_clicked)
43
        
44
        self.setCentralWidget(self.centralwidget)
45
        
46
    def ok_button_clicked(self, s):
47
        self.need_update = True 
48
        self.close() 
49
    def cancel_button_clicked(self, s):
50
        self.need_update = False 
51
        self.close()         
52

53
class VersionChecker(object):
54
    
55
    def __init__(self,metadata:dict={}):
56
        self.metadata = metadata
57
        self.current_version = metadata.get("Version","0.0.0.0")
58
        self.update_version = "0.0.0.0"
59
        self.repo_root_url = metadata.get("Repo",None)
60
        self.distr_url = f"{self.repo_root_url}/dummy.zip"
61
    @staticmethod
62
    def get_int_version(str_version:str)->int:
63
        try:
64
            ver = int(str_version.replace(".",""))
65
            return ver
66
        except: return -1
67
        
68
    def update_exists(self)->bool:
69
        try:
70
            if self.repo_root_url is None: raise Exception("Отсутствует url репозитория для проверки обновлений.")
71
            try:
72
                response:client.HTTPResponse = urllib.request.urlopen(f"{self.repo_root_url}/metadata.yml")
73
            except: return False
74
            if response.status!=200: return False
75
            data = response.read()
76
            update_metadata:dict = yaml.load(data, Loader=yaml.FullLoader)
77
            self.update_version = update_metadata.get("Version","0.0.0.0")
78
            product = self.metadata.get("ProductName","dummy")
79
            self.distr_url = f"{self.repo_root_url}/{product}-v.{self.update_version}.zip"
80
            update_ver_int = VersionChecker.get_int_version(self.update_version)
81
            cur_ver_int = VersionChecker.get_int_version(self.current_version)
82
            return update_ver_int > cur_ver_int
83
        except: raise
84
        
85
    def show_update_dialog(self)->bool:
86
        try:
87
            app = QApplication(sys.argv)
88
            app.setStyle("Windows")
89
            win = UpdatePromptDialod()
90
            win.show()
91
            res=app.exec()
92
            return win.need_update
93
        except : raise

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.