mirror of
https://github.com/arsenetar/dupeguru.git
synced 2026-03-13 03:51:38 +00:00
Compare commits
1 Commits
dd32298809
...
4.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
c408873d20
|
37
core/util.py
37
core/util.py
@@ -7,12 +7,6 @@
|
|||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import urllib.request
|
|
||||||
import urllib.error
|
|
||||||
import json
|
|
||||||
import semantic_version
|
|
||||||
import logging
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from hscommon.util import format_time_decimal
|
from hscommon.util import format_time_decimal
|
||||||
|
|
||||||
@@ -70,34 +64,3 @@ def fix_surrogate_encoding(s, encoding="utf-8"):
|
|||||||
|
|
||||||
def executable_folder():
|
def executable_folder():
|
||||||
return os.path.dirname(os.path.abspath(sys.argv[0]))
|
return os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
|
|
||||||
|
|
||||||
def check_for_update(current_version: str, include_prerelease: bool = False) -> Union[None, dict]:
|
|
||||||
request = urllib.request.Request(
|
|
||||||
"https://api.github.com/repos/arsenetar/dupeguru/releases",
|
|
||||||
headers={"Accept": "application/vnd.github.v3+json"},
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
with urllib.request.urlopen(request) as response:
|
|
||||||
if response.status != 200:
|
|
||||||
logging.warn(f"Error retriving updates. Status: {response.status}")
|
|
||||||
return None
|
|
||||||
try:
|
|
||||||
response_json = json.loads(response.read())
|
|
||||||
except json.JSONDecodeError as ex:
|
|
||||||
logging.warn(f"Error parsing updates. {ex.msg}")
|
|
||||||
return None
|
|
||||||
except urllib.error.URLError as ex:
|
|
||||||
logging.warn(f"Error retriving updates. {ex.reason}")
|
|
||||||
return None
|
|
||||||
new_version = semantic_version.Version(current_version)
|
|
||||||
new_url = None
|
|
||||||
for release in response_json:
|
|
||||||
release_version = semantic_version.Version(release["name"])
|
|
||||||
if new_version < release_version and (include_prerelease or not release_version.prerelease):
|
|
||||||
new_version = release_version
|
|
||||||
new_url = release["html_url"]
|
|
||||||
if new_url is not None:
|
|
||||||
return {"version": new_version, "url": new_url}
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
=== 4.2.1 (2022-03-25)
|
||||||
|
* Default to English on unsupported system language (#976)
|
||||||
|
* Fix image viewer zoom datatype issue (#978)
|
||||||
|
* Fix errors from window change event (#937, #980)
|
||||||
|
* Fix deprecation warning from SQLite
|
||||||
|
* Enforce minimum Windows version in installer (#983)
|
||||||
|
* Fix help path for local files
|
||||||
|
* Drop python 3.6 support
|
||||||
|
* VS Code project settings added, yaml validation for GitHub actions
|
||||||
|
|
||||||
=== 4.2.0 (2021-01-24)
|
=== 4.2.0 (2021-01-24)
|
||||||
|
|
||||||
* Add Malay and Turkish
|
* Add Malay and Turkish
|
||||||
|
|||||||
@@ -6,11 +6,18 @@
|
|||||||
# which should be included with this package. The terms are also available at
|
# which should be included with this package. The terms are also available at
|
||||||
# http://www.gnu.org/licenses/gpl-3.0.html
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QCoreApplication, QTimer
|
from PyQt5.QtCore import Qt, QCoreApplication
|
||||||
from PyQt5.QtGui import QPixmap, QFont
|
from PyQt5.QtGui import QPixmap, QFont
|
||||||
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QSizePolicy, QHBoxLayout, QVBoxLayout, QLabel
|
from PyQt5.QtWidgets import (
|
||||||
|
QDialog,
|
||||||
|
QDialogButtonBox,
|
||||||
|
QSizePolicy,
|
||||||
|
QHBoxLayout,
|
||||||
|
QVBoxLayout,
|
||||||
|
QLabel,
|
||||||
|
QApplication,
|
||||||
|
)
|
||||||
|
|
||||||
from core.util import check_for_update
|
|
||||||
from qtlib.util import move_to_screen_center
|
from qtlib.util import move_to_screen_center
|
||||||
from hscommon.trans import trget
|
from hscommon.trans import trget
|
||||||
|
|
||||||
@@ -24,56 +31,61 @@ class AboutBox(QDialog):
|
|||||||
self.app = app
|
self.app = app
|
||||||
self._setupUi()
|
self._setupUi()
|
||||||
|
|
||||||
self.button_box.accepted.connect(self.accept)
|
self.buttonBox.accepted.connect(self.accept)
|
||||||
self.button_box.rejected.connect(self.reject)
|
self.buttonBox.rejected.connect(self.reject)
|
||||||
|
|
||||||
def _setupUi(self):
|
def _setupUi(self):
|
||||||
self.setWindowTitle(tr("About {}").format(QCoreApplication.instance().applicationName()))
|
self.setWindowTitle(tr("About {}").format(QCoreApplication.instance().applicationName()))
|
||||||
|
self.resize(400, 290)
|
||||||
size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
size_policy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
|
size_policy.setHorizontalStretch(0)
|
||||||
|
size_policy.setVerticalStretch(0)
|
||||||
|
size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
|
||||||
self.setSizePolicy(size_policy)
|
self.setSizePolicy(size_policy)
|
||||||
main_layout = QHBoxLayout(self)
|
self.horizontalLayout = QHBoxLayout(self)
|
||||||
logo_label = QLabel()
|
self.logoLabel = QLabel(self)
|
||||||
logo_label.setPixmap(QPixmap(":/%s_big" % self.app.LOGO_NAME))
|
self.logoLabel.setPixmap(QPixmap(":/%s_big" % self.app.LOGO_NAME))
|
||||||
main_layout.addWidget(logo_label)
|
self.horizontalLayout.addWidget(self.logoLabel)
|
||||||
detail_layout = QVBoxLayout()
|
self.verticalLayout = QVBoxLayout()
|
||||||
name_label = QLabel()
|
self.nameLabel = QLabel(self)
|
||||||
font = QFont()
|
font = QFont()
|
||||||
font.setWeight(75)
|
font.setWeight(75)
|
||||||
font.setBold(True)
|
font.setBold(True)
|
||||||
name_label.setFont(font)
|
self.nameLabel.setFont(font)
|
||||||
name_label.setText(QCoreApplication.instance().applicationName())
|
self.nameLabel.setText(QCoreApplication.instance().applicationName())
|
||||||
detail_layout.addWidget(name_label)
|
self.verticalLayout.addWidget(self.nameLabel)
|
||||||
version_label = QLabel()
|
self.versionLabel = QLabel(self)
|
||||||
version_label.setText(tr("Version {}").format(QCoreApplication.instance().applicationVersion()))
|
self.versionLabel.setText(tr("Version {}").format(QCoreApplication.instance().applicationVersion()))
|
||||||
detail_layout.addWidget(version_label)
|
self.verticalLayout.addWidget(self.versionLabel)
|
||||||
self.update_label = QLabel(tr("Checking for updates..."))
|
self.label_3 = QLabel(self)
|
||||||
self.update_label.setTextInteractionFlags(Qt.TextBrowserInteraction)
|
self.verticalLayout.addWidget(self.label_3)
|
||||||
self.update_label.setOpenExternalLinks(True)
|
self.label_3.setText(tr("Licensed under GPLv3"))
|
||||||
detail_layout.addWidget(self.update_label)
|
self.label = QLabel(self)
|
||||||
license_label = QLabel()
|
font = QFont()
|
||||||
license_label.setText(tr("Licensed under GPLv3"))
|
font.setWeight(75)
|
||||||
detail_layout.addWidget(license_label)
|
font.setBold(True)
|
||||||
spacer_label = QLabel()
|
self.label.setFont(font)
|
||||||
spacer_label.setFont(font)
|
self.verticalLayout.addWidget(self.label)
|
||||||
detail_layout.addWidget(spacer_label)
|
self.buttonBox = QDialogButtonBox(self)
|
||||||
self.button_box = QDialogButtonBox()
|
self.buttonBox.setOrientation(Qt.Horizontal)
|
||||||
self.button_box.setOrientation(Qt.Horizontal)
|
self.buttonBox.setStandardButtons(QDialogButtonBox.Ok)
|
||||||
self.button_box.setStandardButtons(QDialogButtonBox.Ok)
|
self.verticalLayout.addWidget(self.buttonBox)
|
||||||
detail_layout.addWidget(self.button_box)
|
self.horizontalLayout.addLayout(self.verticalLayout)
|
||||||
main_layout.addLayout(detail_layout)
|
|
||||||
|
|
||||||
def _check_for_update(self):
|
|
||||||
update = check_for_update(QCoreApplication.instance().applicationVersion(), include_prerelease=False)
|
|
||||||
if update is None:
|
|
||||||
self.update_label.setText(tr("No update available."))
|
|
||||||
else:
|
|
||||||
self.update_label.setText(
|
|
||||||
tr('New version {} available, download <a href="{}">here</a>.').format(update["version"], update["url"])
|
|
||||||
)
|
|
||||||
|
|
||||||
def showEvent(self, event):
|
def showEvent(self, event):
|
||||||
self.update_label.setText(tr("Checking for updates..."))
|
|
||||||
# have to do this here as the frameGeometry is not correct until shown
|
# have to do this here as the frameGeometry is not correct until shown
|
||||||
move_to_screen_center(self)
|
move_to_screen_center(self)
|
||||||
super().showEvent(event)
|
super().showEvent(event)
|
||||||
QTimer.singleShot(0, self._check_for_update)
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QApplication([])
|
||||||
|
QCoreApplication.setOrganizationName("Hardcoded Software")
|
||||||
|
QCoreApplication.setApplicationName("FooApp")
|
||||||
|
QCoreApplication.setApplicationVersion("1.2.3")
|
||||||
|
app.LOGO_NAME = ""
|
||||||
|
dialog = AboutBox(None, app)
|
||||||
|
dialog.show()
|
||||||
|
sys.exit(app.exec_())
|
||||||
|
|||||||
@@ -4,30 +4,18 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: utf-8\n"
|
"Content-Transfer-Encoding: utf-8\n"
|
||||||
|
|
||||||
#: qtlib\about_box.py:31
|
#: qtlib\about_box.py:38
|
||||||
msgid "About {}"
|
msgid "About {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qtlib\about_box.py:47
|
#: qtlib\about_box.py:58
|
||||||
msgid "Version {}"
|
msgid "Version {}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qtlib\about_box.py:49 qtlib\about_box.py:75
|
#: qtlib\about_box.py:62
|
||||||
msgid "Checking for updates..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qtlib\about_box.py:54
|
|
||||||
msgid "Licensed under GPLv3"
|
msgid "Licensed under GPLv3"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: qtlib\about_box.py:68
|
|
||||||
msgid "No update available."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qtlib\about_box.py:71
|
|
||||||
msgid "New version {} available, download <a href=\"{}\">here</a>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: qtlib\error_report_dialog.py:50
|
#: qtlib\error_report_dialog.py:50
|
||||||
msgid "Error Report"
|
msgid "Error Report"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -4,5 +4,4 @@ polib>=1.1.0
|
|||||||
mutagen>=1.44.0
|
mutagen>=1.44.0
|
||||||
distro>=1.5.0
|
distro>=1.5.0
|
||||||
PyQt5 >=5.14.1,<6.0; sys_platform != 'linux'
|
PyQt5 >=5.14.1,<6.0; sys_platform != 'linux'
|
||||||
pywin32>=228; sys_platform == 'win32'
|
pywin32>=228; sys_platform == 'win32'
|
||||||
semantic-version>=2.9.0,<3.0.0
|
|
||||||
Reference in New Issue
Block a user