dev 02020935

This commit is contained in:
Julian Freeman
2024-02-02 09:35:56 -04:00
parent a69ba157a5
commit d84b107177
8 changed files with 129 additions and 44 deletions

View File

@@ -7,6 +7,7 @@ name = "pypi"
pyside6 = "==6.6.1" pyside6 = "==6.6.1"
requests = "==2.31.0" requests = "==2.31.0"
wmi = "==1.5.1" wmi = "==1.5.1"
pyinstaller = "==6.3.0"
[dev-packages] [dev-packages]

74
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "9fb9aefd0be8259a8edb7585a24d4f9480d2ffccf9320d3971b34c4aa306b7ef" "sha256": "c9e6c224ff1fb7073100c794e46ce72371b7c482473c9704fc5709aefe9f1f33"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@@ -16,13 +16,20 @@
] ]
}, },
"default": { "default": {
"altgraph": {
"hashes": [
"sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406",
"sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"
],
"version": "==0.17.4"
},
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f",
"sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"
], ],
"markers": "python_version >= '3.6'", "markers": "python_version >= '3.6'",
"version": "==2023.11.17" "version": "==2024.2.2"
}, },
"charset-normalizer": { "charset-normalizer": {
"hashes": [ "hashes": [
@@ -128,6 +135,49 @@
"markers": "python_version >= '3.5'", "markers": "python_version >= '3.5'",
"version": "==3.6" "version": "==3.6"
}, },
"packaging": {
"hashes": [
"sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5",
"sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"
],
"markers": "python_version >= '3.7'",
"version": "==23.2"
},
"pefile": {
"hashes": [
"sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc",
"sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"
],
"markers": "sys_platform == 'win32'",
"version": "==2023.2.7"
},
"pyinstaller": {
"hashes": [
"sha256:0597fb04337695e5cc5250253e0655530bf14f264b7a5b7d219cc65f6889c4bd",
"sha256:156b32ba943e0090bcc68e40ae1cb68fd92b7f1ab6fe0bdf8faf3d3cfc4e12dd",
"sha256:1eadbd1fae84e2e6c678d8b4ed6a232ec5c8fe3a839aea5a3071c4c0282f98cc",
"sha256:41c937fe8f07ae02009b3b5a96ac3eb0800a4f8a97af142d4100060fe2135bb9",
"sha256:75a6f2a6f835a2e6e0899d10e60c10caf5defd25aced38b1dd48fbbabc89de07",
"sha256:886b3b995b674905a20ad5b720b47cc395897d7b391117831027a4c8c5d67a58",
"sha256:914d4c96cc99472e37ac552fdd82fbbe09e67bb592d0717fcffaa99ea74273df",
"sha256:96c37a1ee5b2fd5bb25c098ef510661d6d17b6515d0b86d8fc93727dd2475ba3",
"sha256:abe91106a3bbccc3f3a27af4325676ecdb6f46cb842ac663625002a870fc503b",
"sha256:b721d793a33b6d9946c7dd95d3ea7589c0424b51cf1b9fe580f03c544f1336b2",
"sha256:de25beb176f73a944758553caacec46cc665bf3910ad8a174706d79cf6e95340",
"sha256:e436fcc0ea87c3f132baac916d508c24c84a8f6d8a06c3154fbc753f169b76c7"
],
"index": "pypi",
"markers": "python_version < '3.13' and python_version >= '3.8'",
"version": "==6.3.0"
},
"pyinstaller-hooks-contrib": {
"hashes": [
"sha256:469b5690df53223e2e8abffb2e44d6ee596e7d79d4b1eed9465123b67439875a",
"sha256:a7118c1a5c9788595e5c43ad058a7a5b7b6d59e1eceb42362f6ec1f0b61986b0"
],
"markers": "python_version >= '3.7'",
"version": "==2024.0"
},
"pyside6": { "pyside6": {
"hashes": [ "hashes": [
"sha256:0a67587c088cb80e90d4ce3023b02466ea858c93a6dc9c4e062b13314e03d464", "sha256:0a67587c088cb80e90d4ce3023b02466ea858c93a6dc9c4e062b13314e03d464",
@@ -178,6 +228,14 @@
], ],
"version": "==306" "version": "==306"
}, },
"pywin32-ctypes": {
"hashes": [
"sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60",
"sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"
],
"markers": "sys_platform == 'win32'",
"version": "==0.2.2"
},
"requests": { "requests": {
"hashes": [ "hashes": [
"sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f",
@@ -187,6 +245,14 @@
"markers": "python_version >= '3.7'", "markers": "python_version >= '3.7'",
"version": "==2.31.0" "version": "==2.31.0"
}, },
"setuptools": {
"hashes": [
"sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05",
"sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"
],
"markers": "python_version >= '3.8'",
"version": "==69.0.3"
},
"shiboken6": { "shiboken6": {
"hashes": [ "hashes": [
"sha256:072c35c4fe46ec13b364d9dc47b055bb2277ee3aeaab18c23650280ec362f62a", "sha256:072c35c4fe46ec13b364d9dc47b055bb2277ee3aeaab18c23650280ec362f62a",

View File

@@ -60,7 +60,7 @@ class DaShowProfiles(QtWidgets.QDialog):
def __init__(self, def __init__(self,
browser: str, browser: str,
is_chrome_compat: bool, is_compat: bool,
profiles_data: ProfilesData, profiles_data: ProfilesData,
ext_id: str, ext_id: str,
ext_name: str, ext_name: str,
@@ -71,7 +71,7 @@ class DaShowProfiles(QtWidgets.QDialog):
self.setWindowTitle(ext_name) self.setWindowTitle(ext_name)
self.setWindowIcon(ext_icon) self.setWindowIcon(ext_icon)
self.browser = browser self.browser = browser
self.is_chrome_compat = is_chrome_compat self.is_compat = is_compat
self.process = QtCore.QProcess(self) self.process = QtCore.QProcess(self)
@@ -132,7 +132,7 @@ class DaShowProfiles(QtWidgets.QDialog):
def on_pbn_delete_selected_clicked(self): def on_pbn_delete_selected_clicked(self):
us = QtCore.QSettings() us = QtCore.QSettings()
user_data_path = str(us.value(f"{self.browser}Data", "")) user_data_path = str(us.value(f"{self.browser}Data", ""))
if self.browser == "Chrome" and self.is_chrome_compat: if self.is_compat:
pref_name = "Preferences" pref_name = "Preferences"
else: else:
pref_name = "Secure Preferences" pref_name = "Secure Preferences"

33
main.py
View File

@@ -7,7 +7,7 @@ from mw_dailycheck import MwDailyCheck
import daily_check_rc import daily_check_rc
version = (0, 1, 0) version = (0, 2, 0)
ORG_NAME = "JnPrograms" ORG_NAME = "JnPrograms"
APP_NAME = "DailyCheck" APP_NAME = "DailyCheck"
@@ -18,14 +18,14 @@ def set_default_settings():
user_path = os.path.expanduser("~") user_path = os.path.expanduser("~")
user_data_path_map = { user_data_path_map = {
"win32": { "win32": {
"Chrome": Path(user_path, r"AppData\Local\Google\Chrome\User Data"), "Chrome": str(Path(user_path, r"AppData\Local\Google\Chrome\User Data")),
"Edge": Path(user_path, r"AppData\Local\Microsoft\Edge\User Data"), "Edge": str(Path(user_path, r"AppData\Local\Microsoft\Edge\User Data")),
"Brave": Path(user_path, r"AppData\Local\BraveSoftware\Brave-Browser\User Data"), "Brave": str(Path(user_path, r"AppData\Local\BraveSoftware\Brave-Browser\User Data")),
}, },
"darwin": { "darwin": {
"Chrome": Path(user_path, "Library/Application Support/Google/Chrome"), "Chrome": str(Path(user_path, "Library/Application Support/Google/Chrome")),
"Edge": Path(user_path, "Library/Application Support/Microsoft Edge"), "Edge": str(Path(user_path, "Library/Application Support/Microsoft Edge")),
"Brave": Path(user_path, "Library/Application Support/BraveSoftware/Brave-Browser"), "Brave": str(Path(user_path, "Library/Application Support/BraveSoftware/Brave-Browser")),
}, },
} }
exec_path_map = { exec_path_map = {
@@ -42,13 +42,20 @@ def set_default_settings():
} }
user_data_path = user_data_path_map[plat] user_data_path = user_data_path_map[plat]
exec_path = exec_path_map[plat] exec_path = exec_path_map[plat]
settings_map = {
"ChromeExec": exec_path["Chrome"],
"EdgeExec": exec_path["Edge"],
"BraveExec": exec_path["Brave"],
"ChromeData": user_data_path["Chrome"],
"EdgeData": user_data_path["Edge"],
"BraveData": user_data_path["Brave"],
}
us = QtCore.QSettings() us = QtCore.QSettings()
us.setValue("ChromeExec", exec_path["Chrome"]) exist_keys = us.childKeys()
us.setValue("EdgeExec", exec_path["Edge"]) for s in settings_map:
us.setValue("BraveExec", exec_path["Brave"]) if s not in exist_keys:
us.setValue("ChromeData", user_data_path["Chrome"]) us.setValue(s, settings_map[s])
us.setValue("EdgeData", user_data_path["Edge"]) # print(f"Add key {s}")
us.setValue("BraveData", user_data_path["Brave"])
def main(): def main():

View File

@@ -1,6 +1,7 @@
# coding: utf8 # coding: utf8
import json import json
from pathlib import Path from pathlib import Path
from datetime import datetime
from PySide6 import QtWidgets, QtGui, QtCore from PySide6 import QtWidgets, QtGui, QtCore
from wg_basic import WgBasic from wg_basic import WgBasic
from wg_software import WgSoftware from wg_software import WgSoftware
@@ -81,8 +82,8 @@ class MwDailyCheck(QtWidgets.QMainWindow):
dirname = QtWidgets.QFileDialog.getExistingDirectory(self, "导出未知") dirname = QtWidgets.QFileDialog.getExistingDirectory(self, "导出未知")
if len(dirname) == 0: if len(dirname) == 0:
return return
now = datetime.strftime(datetime.now(), "%y%m%d%H%M")
ex_file = Path(dirname, f"未知信息.json") ex_file = Path(dirname, f"未知信息{now}.json")
if accept_warning(self, ex_file.exists(), "警告", "文件已存在,确认覆盖吗?"): if accept_warning(self, ex_file.exists(), "警告", "文件已存在,确认覆盖吗?"):
return return

View File

@@ -70,10 +70,12 @@ def get_extension_icon_path(ext_icons: dict[str, str], ext_path: str, profile_pa
icon_file = icon_file[1:] icon_file = icon_file[1:]
full_path = Path(profile_path, "Extensions", ext_path, icon_file) full_path = Path(profile_path, "Extensions", ext_path, icon_file)
if not full_path.exists():
return ""
return str(full_path) return str(full_path)
def scan_extensions(browser: str, is_chrome_compat=False) -> tuple[ExtensionsData, ProfilesData]: def scan_extensions(browser: str, is_compat=False) -> tuple[ExtensionsData, ProfilesData]:
us = QtCore.QSettings() us = QtCore.QSettings()
user_data_path = str(us.value(f"{browser}Data", "")) user_data_path = str(us.value(f"{browser}Data", ""))
if len(user_data_path) == 0 or not Path(user_data_path).exists(): if len(user_data_path) == 0 or not Path(user_data_path).exists():
@@ -82,11 +84,13 @@ def scan_extensions(browser: str, is_chrome_compat=False) -> tuple[ExtensionsDat
profile_data = scan_profiles(user_data_path) profile_data = scan_profiles(user_data_path)
extensions_data: ExtensionsData = {} extensions_data: ExtensionsData = {}
if browser == "Chrome" and is_chrome_compat: if is_compat:
pref_file = "Preferences" pref_file = "Preferences"
else: else:
pref_file = "Secure Preferences" pref_file = "Secure Preferences"
# print(pref_file)
for profile_id in profile_data: for profile_id in profile_data:
profile_path = Path(user_data_path, profile_id) profile_path = Path(user_data_path, profile_id)
secure_pref_path = Path(profile_path, pref_file) secure_pref_path = Path(profile_path, pref_file)

View File

@@ -69,7 +69,7 @@ def extract_win_icon_from_file(icon: str, default: QIcon) -> QIcon:
icon = icon.replace("'", "") icon = icon.replace("'", "")
if not os.path.exists(icon): if not os.path.exists(icon):
return default return default
if not icon.endswith(("exe", "EXE")): if not icon.endswith(("exe", "EXE", "dll", "DLL")):
return QIcon(icon) return QIcon(icon)
large, small = win32gui.ExtractIconEx(icon, 0) large, small = win32gui.ExtractIconEx(icon, 0)

View File

@@ -24,7 +24,7 @@ class UiWgExtensions(object):
self.cbx_safe.setChecked(True) self.cbx_safe.setChecked(True)
self.cbx_unsafe.setChecked(True) self.cbx_unsafe.setChecked(True)
self.cbx_unknown.setChecked(True) self.cbx_unknown.setChecked(True)
self.cbx_chrome_compat = QtWidgets.QCheckBox("谷歌兼容模式", window) self.cbx_compat = QtWidgets.QCheckBox("兼容模式", window)
self.pbn_update = QtWidgets.QPushButton("更新", window) self.pbn_update = QtWidgets.QPushButton("更新", window)
self.pbn_settings = QtWidgets.QPushButton("设置", window) self.pbn_settings = QtWidgets.QPushButton("设置", window)
self.hly_top.addWidget(self.cmbx_browsers) self.hly_top.addWidget(self.cmbx_browsers)
@@ -32,7 +32,7 @@ class UiWgExtensions(object):
self.hly_top.addWidget(self.cbx_unsafe) self.hly_top.addWidget(self.cbx_unsafe)
self.hly_top.addWidget(self.cbx_unknown) self.hly_top.addWidget(self.cbx_unknown)
self.hly_top.addStretch(1) self.hly_top.addStretch(1)
self.hly_top.addWidget(self.cbx_chrome_compat) self.hly_top.addWidget(self.cbx_compat)
self.hly_top.addWidget(self.pbn_update) self.hly_top.addWidget(self.pbn_update)
self.hly_top.addWidget(self.pbn_settings) self.hly_top.addWidget(self.pbn_settings)
@@ -51,17 +51,20 @@ class BaseExtensionsListModel(QtCore.QAbstractListModel):
self.safe_info = {} # type: dict[str, dict] self.safe_info = {} # type: dict[str, dict]
self.blank_icon = QtGui.QIcon(":/images/blank_128.png") self.blank_icon = QtGui.QIcon(":/images/blank_128.png")
def update(self, **kwargs): self.last_is_compat = False
def update(self, is_compat=False):
raise NotImplementedError raise NotImplementedError
def update_ext(self, browser: str, is_chrome_compat=False): def update_ext(self, browser: str, is_compat=False):
"""内部用""" """内部用"""
self.all_profiles.clear() self.all_profiles.clear()
self.all_extensions.clear() self.all_extensions.clear()
self.names.clear() self.names.clear()
self.icons.clear() self.icons.clear()
self.all_extensions, self.all_profiles = scan_extensions(browser, is_chrome_compat) self.all_extensions, self.all_profiles = scan_extensions(browser, is_compat)
self.last_is_compat = is_compat
for ext_id in self.all_extensions: for ext_id in self.all_extensions:
name = self.all_extensions[ext_id].name name = self.all_extensions[ext_id].name
icon = self.all_extensions[ext_id].icon icon = self.all_extensions[ext_id].icon
@@ -108,20 +111,20 @@ class BaseExtensionsListModel(QtCore.QAbstractListModel):
class ChromeExtensionsListModel(BaseExtensionsListModel): class ChromeExtensionsListModel(BaseExtensionsListModel):
def update(self, is_chrome_compat=False): def update(self, is_compat=False):
super().update_ext("Chrome", is_chrome_compat) super().update_ext("Chrome", is_compat)
class EdgeExtensionsListModel(BaseExtensionsListModel): class EdgeExtensionsListModel(BaseExtensionsListModel):
def update(self, **kwargs): def update(self, is_compat=False):
super().update_ext("Edge") super().update_ext("Edge", is_compat)
class BraveExtensionsListModel(BaseExtensionsListModel): class BraveExtensionsListModel(BaseExtensionsListModel):
def update(self, **kwargs): def update(self, is_compat=False):
super().update_ext("Brave") super().update_ext("Brave", is_compat)
class BrowsersListModel(QtCore.QAbstractListModel): class BrowsersListModel(QtCore.QAbstractListModel):
@@ -168,7 +171,7 @@ class WgExtensions(QtWidgets.QWidget):
} }
self.switch_model(self.get_current_browser()) self.switch_model(self.get_current_browser())
self.ui.cbx_chrome_compat.clicked.connect(self.on_cbx_chrome_compat_clicked) self.ui.cbx_compat.clicked.connect(self.on_cbx_compat_clicked)
self.ui.cmbx_browsers.currentTextChanged.connect(self.on_cmbx_browsers_current_text_changed) self.ui.cmbx_browsers.currentTextChanged.connect(self.on_cmbx_browsers_current_text_changed)
self.ui.cbx_safe.clicked.connect(self.on_cbx_safe_clicked) self.ui.cbx_safe.clicked.connect(self.on_cbx_safe_clicked)
self.ui.cbx_unsafe.clicked.connect(self.on_cbx_unsafe_clicked) self.ui.cbx_unsafe.clicked.connect(self.on_cbx_unsafe_clicked)
@@ -199,7 +202,7 @@ class WgExtensions(QtWidgets.QWidget):
def update_model(self, browser: str): def update_model(self, browser: str):
model = self.ext_list_models[browser] model = self.ext_list_models[browser]
self.show_all_rows() self.show_all_rows()
model.update(is_chrome_compat=self.ui.cbx_chrome_compat.isChecked()) model.update(is_compat=self.ui.cbx_compat.isChecked())
self.apply_rows_hidden() self.apply_rows_hidden()
def switch_model(self, browser: str): def switch_model(self, browser: str):
@@ -207,15 +210,18 @@ class WgExtensions(QtWidgets.QWidget):
self.update_model(browser) self.update_model(browser)
self.model_is_initial[browser] = False self.model_is_initial[browser] = False
self.ui.lv_extensions.setModel(self.ext_list_models[browser]) model = self.ext_list_models[browser]
self.show_all_rows()
self.ui.lv_extensions.setModel(model)
self.apply_rows_hidden()
# 单纯的切换浏览器不一定会导致更新数据,所以需要同步兼容模式的设置
self.ui.cbx_compat.setChecked(model.last_is_compat)
def on_cbx_chrome_compat_clicked(self): def on_cbx_compat_clicked(self):
if self.get_current_browser() == "Chrome": self.update_model(self.get_current_browser())
self.update_model("Chrome")
def on_cmbx_browsers_current_text_changed(self, text: str): def on_cmbx_browsers_current_text_changed(self, text: str):
self.switch_model(text) self.switch_model(text)
self.ui.cbx_chrome_compat.setVisible(self.ui.cmbx_browsers.currentText() == "Chrome")
def filters_clicked(self, safe_mark: bool | None, checked: bool): def filters_clicked(self, safe_mark: bool | None, checked: bool):
model = self.ext_list_models[self.get_current_browser()] model = self.ext_list_models[self.get_current_browser()]
@@ -243,7 +249,7 @@ class WgExtensions(QtWidgets.QWidget):
node = model.all_extensions[ext_id] node = model.all_extensions[ext_id]
da_sp = DaShowProfiles( da_sp = DaShowProfiles(
self.get_current_browser(), self.get_current_browser(),
self.ui.cbx_chrome_compat.isChecked(), self.ui.cbx_compat.isChecked(),
model.all_profiles, model.all_profiles,
ext_id, ext_id,
node.name, node.name,