Merge branch 'updater_dev' into dev
This commit is contained in:
145
app/ui/Widget.py
145
app/ui/Widget.py
@@ -25,13 +25,14 @@ v4.2
|
||||
作者:DLmaster_361
|
||||
"""
|
||||
|
||||
from PySide6.QtWidgets import QWidget, QHBoxLayout
|
||||
from PySide6.QtCore import Qt, QTime, QEvent
|
||||
from PySide6.QtWidgets import QWidget, QWidget, QLabel, QHBoxLayout, QSizePolicy
|
||||
from PySide6.QtCore import Qt, QTime, QEvent, QSize
|
||||
from PySide6.QtGui import QIcon, QPixmap, QPainter, QPainterPath
|
||||
from qfluentwidgets import (
|
||||
LineEdit,
|
||||
PasswordLineEdit,
|
||||
MessageBoxBase,
|
||||
MessageBox,
|
||||
SubtitleLabel,
|
||||
SettingCard,
|
||||
SpinBox,
|
||||
@@ -50,9 +51,13 @@ from qfluentwidgets import (
|
||||
TeachingTip,
|
||||
TransparentToolButton,
|
||||
TeachingTipTailPosition,
|
||||
ExpandSettingCard,
|
||||
ToolButton,
|
||||
PushButton,
|
||||
)
|
||||
from qfluentwidgets.common.overload import singledispatchmethod
|
||||
import os
|
||||
from urllib.parse import urlparse
|
||||
from typing import Optional, Union, List
|
||||
|
||||
from app.services import Crypto
|
||||
@@ -330,6 +335,142 @@ class TimeEditSettingCard(SettingCard):
|
||||
self.TimeEdit.setTime(QTime.fromString(value, "HH:mm"))
|
||||
|
||||
|
||||
class UrlItem(QWidget):
|
||||
"""Url item"""
|
||||
|
||||
removed = Signal(QWidget)
|
||||
|
||||
def __init__(self, url: str, parent=None):
|
||||
super().__init__(parent=parent)
|
||||
self.url = url
|
||||
self.hBoxLayout = QHBoxLayout(self)
|
||||
self.folderLabel = QLabel(url, self)
|
||||
self.removeButton = ToolButton(FluentIcon.CLOSE, self)
|
||||
|
||||
self.removeButton.setFixedSize(39, 29)
|
||||
self.removeButton.setIconSize(QSize(12, 12))
|
||||
|
||||
self.setFixedHeight(53)
|
||||
self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Fixed)
|
||||
self.hBoxLayout.setContentsMargins(48, 0, 60, 0)
|
||||
self.hBoxLayout.addWidget(self.folderLabel, 0, Qt.AlignLeft)
|
||||
self.hBoxLayout.addSpacing(16)
|
||||
self.hBoxLayout.addStretch(1)
|
||||
self.hBoxLayout.addWidget(self.removeButton, 0, Qt.AlignRight)
|
||||
self.hBoxLayout.setAlignment(Qt.AlignVCenter)
|
||||
|
||||
self.removeButton.clicked.connect(lambda: self.removed.emit(self))
|
||||
|
||||
|
||||
class UrlListSettingCard(ExpandSettingCard):
|
||||
"""Url list setting card"""
|
||||
|
||||
urlChanged = Signal(list)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
icon: Union[str, QIcon, FluentIconBase],
|
||||
configItem: ConfigItem,
|
||||
title: str,
|
||||
content: str = None,
|
||||
parent=None,
|
||||
):
|
||||
"""
|
||||
Parameters
|
||||
----------
|
||||
configItem: RangeConfigItem
|
||||
configuration item operated by the card
|
||||
|
||||
title: str
|
||||
the title of card
|
||||
|
||||
content: str
|
||||
the content of card
|
||||
|
||||
parent: QWidget
|
||||
parent widget
|
||||
"""
|
||||
super().__init__(icon, title, content, parent)
|
||||
self.configItem = configItem
|
||||
self.addUrlButton = PushButton("添加代理网址", self)
|
||||
|
||||
self.urls: List[str] = qconfig.get(configItem).copy()
|
||||
self.__initWidget()
|
||||
|
||||
def __initWidget(self):
|
||||
self.addWidget(self.addUrlButton)
|
||||
|
||||
# initialize layout
|
||||
self.viewLayout.setSpacing(0)
|
||||
self.viewLayout.setAlignment(Qt.AlignTop)
|
||||
self.viewLayout.setContentsMargins(0, 0, 0, 0)
|
||||
for url in self.urls:
|
||||
self.__addUrlItem(url)
|
||||
|
||||
self.addUrlButton.clicked.connect(self.__showUrlDialog)
|
||||
|
||||
def __showUrlDialog(self):
|
||||
"""show url dialog"""
|
||||
|
||||
choice = LineEditMessageBox(
|
||||
self.window(), "添加代理网址", "请输入代理网址", "明文"
|
||||
)
|
||||
if choice.exec() and self.__validate(choice.input.text()):
|
||||
|
||||
if choice.input.text()[-1] == "/":
|
||||
url = choice.input.text()
|
||||
else:
|
||||
url = f"{choice.input.text()}/"
|
||||
|
||||
if url in self.urls:
|
||||
return
|
||||
|
||||
self.__addUrlItem(url)
|
||||
self.urls.append(url)
|
||||
qconfig.set(self.configItem, self.urls)
|
||||
self.urlChanged.emit(self.urls)
|
||||
|
||||
def __addUrlItem(self, url: str):
|
||||
"""add url item"""
|
||||
item = UrlItem(url, self.view)
|
||||
item.removed.connect(self.__showConfirmDialog)
|
||||
self.viewLayout.addWidget(item)
|
||||
item.show()
|
||||
self._adjustViewSize()
|
||||
|
||||
def __showConfirmDialog(self, item: UrlItem):
|
||||
"""show confirm dialog"""
|
||||
|
||||
choice = MessageBox(
|
||||
"确认",
|
||||
f"确定要删除 {item.url} 代理网址吗?",
|
||||
self.window(),
|
||||
)
|
||||
if choice.exec():
|
||||
self.__removeUrl(item)
|
||||
|
||||
def __removeUrl(self, item: UrlItem):
|
||||
"""remove folder"""
|
||||
if item.url not in self.urls:
|
||||
return
|
||||
|
||||
self.urls.remove(item.url)
|
||||
self.viewLayout.removeWidget(item)
|
||||
item.deleteLater()
|
||||
self._adjustViewSize()
|
||||
|
||||
self.urlChanged.emit(self.urls)
|
||||
qconfig.set(self.configItem, self.urls)
|
||||
|
||||
def __validate(self, value):
|
||||
|
||||
try:
|
||||
result = urlparse(value)
|
||||
return all([result.scheme, result.netloc])
|
||||
except ValueError:
|
||||
return False
|
||||
|
||||
|
||||
class StatefulItemCard(CardWidget):
|
||||
|
||||
def __init__(self, item: list, parent=None):
|
||||
|
||||
@@ -61,7 +61,7 @@ import shutil
|
||||
|
||||
from app.core import Config, MainInfoBar, TaskManager
|
||||
from app.services import Crypto
|
||||
from app.utils import Updater
|
||||
from app.utils import DownloadManager
|
||||
from .Widget import (
|
||||
LineEditMessageBox,
|
||||
LineEditSettingCard,
|
||||
@@ -355,8 +355,19 @@ class MemberManager(QWidget):
|
||||
while len(maa_version) < 4:
|
||||
maa_version.append(0)
|
||||
|
||||
self.downloader = Updater(Path(folder), "MAA", maa_version, [])
|
||||
self.downloader = DownloadManager(
|
||||
Path(folder),
|
||||
"MAA",
|
||||
maa_version,
|
||||
[],
|
||||
{
|
||||
"thread_numb": Config.global_config.get(
|
||||
Config.global_config.update_ThreadNumb
|
||||
)
|
||||
},
|
||||
)
|
||||
self.downloader.show()
|
||||
self.downloader.run()
|
||||
|
||||
def show_password(self):
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ from qfluentwidgets import (
|
||||
HyperlinkCard,
|
||||
HeaderCardWidget,
|
||||
SwitchSettingCard,
|
||||
RangeSettingCard,
|
||||
ExpandGroupSettingCard,
|
||||
PushSettingCard,
|
||||
ComboBoxSettingCard,
|
||||
@@ -55,8 +56,13 @@ from pathlib import Path
|
||||
|
||||
from app.core import Config, MainInfoBar
|
||||
from app.services import Crypto, System
|
||||
from app.utils import Updater
|
||||
from .Widget import LineEditMessageBox, LineEditSettingCard, PasswordLineEditSettingCard
|
||||
from app.utils import DownloadManager
|
||||
from .Widget import (
|
||||
LineEditMessageBox,
|
||||
LineEditSettingCard,
|
||||
PasswordLineEditSettingCard,
|
||||
UrlListSettingCard,
|
||||
)
|
||||
|
||||
|
||||
class Setting(QWidget):
|
||||
@@ -335,6 +341,16 @@ class Setting(QWidget):
|
||||
updater_version_remote = list(
|
||||
map(int, version_remote["updater_version"].split("."))
|
||||
)
|
||||
remote_proxy_list = version_remote["proxy_list"]
|
||||
Config.global_config.set(
|
||||
Config.global_config.update_ProxyUrlList,
|
||||
list(
|
||||
set(
|
||||
Config.global_config.get(Config.global_config.update_ProxyUrlList)
|
||||
+ remote_proxy_list
|
||||
)
|
||||
),
|
||||
)
|
||||
|
||||
# 有版本更新
|
||||
if (main_version_remote > main_version_current) or (
|
||||
@@ -368,17 +384,26 @@ class Setting(QWidget):
|
||||
# 更新更新器
|
||||
if updater_version_remote > updater_version_current:
|
||||
# 创建更新进程
|
||||
self.updater = Updater(
|
||||
self.updater = DownloadManager(
|
||||
Config.app_path,
|
||||
"AUTO_MAA更新器",
|
||||
main_version_remote,
|
||||
updater_version_remote,
|
||||
{
|
||||
"proxy_list": Config.global_config.get(
|
||||
Config.global_config.update_ProxyUrlList
|
||||
),
|
||||
"thread_numb": Config.global_config.get(
|
||||
Config.global_config.update_ThreadNumb
|
||||
),
|
||||
},
|
||||
)
|
||||
# 完成更新器的更新后更新主程序
|
||||
if main_version_remote > main_version_current:
|
||||
self.updater.update_process.accomplish.connect(self.update_main)
|
||||
self.updater.download_accomplish.connect(self.update_main)
|
||||
# 显示更新页面
|
||||
self.updater.show()
|
||||
self.updater.run()
|
||||
|
||||
# 更新主程序
|
||||
elif main_version_remote > main_version_current:
|
||||
@@ -836,6 +861,19 @@ class UpdaterSettingCard(HeaderCardWidget):
|
||||
content="选择AUTO_MAA的更新类别",
|
||||
texts=["稳定版", "公测版"],
|
||||
)
|
||||
self.card_ThreadNumb = RangeSettingCard(
|
||||
configItem=Config.global_config.update_ThreadNumb,
|
||||
icon=FluentIcon.PAGE_RIGHT,
|
||||
title="下载器线程数",
|
||||
content="更新器的下载线程数,建议仅在下载速度较慢时适量拉高",
|
||||
)
|
||||
self.card_ProxyUrlList = UrlListSettingCard(
|
||||
icon=FluentIcon.SETTING,
|
||||
configItem=Config.global_config.update_ProxyUrlList,
|
||||
title="代理地址列表",
|
||||
content="更新器代理地址列表",
|
||||
parent=self,
|
||||
)
|
||||
self.card_CheckUpdate = PushSettingCard(
|
||||
text="检查更新",
|
||||
icon=FluentIcon.UPDATE,
|
||||
@@ -846,6 +884,8 @@ class UpdaterSettingCard(HeaderCardWidget):
|
||||
Layout = QVBoxLayout()
|
||||
Layout.addWidget(self.card_IfAutoUpdate)
|
||||
Layout.addWidget(self.card_UpdateType)
|
||||
Layout.addWidget(self.card_ThreadNumb)
|
||||
Layout.addWidget(self.card_ProxyUrlList)
|
||||
Layout.addWidget(self.card_CheckUpdate)
|
||||
self.viewLayout.addLayout(Layout)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user