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"
requests = "==2.31.0"
wmi = "==1.5.1"
pyinstaller = "==6.3.0"
[dev-packages]

74
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "9fb9aefd0be8259a8edb7585a24d4f9480d2ffccf9320d3971b34c4aa306b7ef"
"sha256": "c9e6c224ff1fb7073100c794e46ce72371b7c482473c9704fc5709aefe9f1f33"
},
"pipfile-spec": 6,
"requires": {
@@ -16,13 +16,20 @@
]
},
"default": {
"altgraph": {
"hashes": [
"sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406",
"sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff"
],
"version": "==0.17.4"
},
"certifi": {
"hashes": [
"sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1",
"sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"
"sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f",
"sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"
],
"markers": "python_version >= '3.6'",
"version": "==2023.11.17"
"version": "==2024.2.2"
},
"charset-normalizer": {
"hashes": [
@@ -128,6 +135,49 @@
"markers": "python_version >= '3.5'",
"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": {
"hashes": [
"sha256:0a67587c088cb80e90d4ce3023b02466ea858c93a6dc9c4e062b13314e03d464",
@@ -178,6 +228,14 @@
],
"version": "==306"
},
"pywin32-ctypes": {
"hashes": [
"sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60",
"sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"
],
"markers": "sys_platform == 'win32'",
"version": "==0.2.2"
},
"requests": {
"hashes": [
"sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f",
@@ -187,6 +245,14 @@
"markers": "python_version >= '3.7'",
"version": "==2.31.0"
},
"setuptools": {
"hashes": [
"sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05",
"sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"
],
"markers": "python_version >= '3.8'",
"version": "==69.0.3"
},
"shiboken6": {
"hashes": [
"sha256:072c35c4fe46ec13b364d9dc47b055bb2277ee3aeaab18c23650280ec362f62a",

View File

@@ -60,7 +60,7 @@ class DaShowProfiles(QtWidgets.QDialog):
def __init__(self,
browser: str,
is_chrome_compat: bool,
is_compat: bool,
profiles_data: ProfilesData,
ext_id: str,
ext_name: str,
@@ -71,7 +71,7 @@ class DaShowProfiles(QtWidgets.QDialog):
self.setWindowTitle(ext_name)
self.setWindowIcon(ext_icon)
self.browser = browser
self.is_chrome_compat = is_chrome_compat
self.is_compat = is_compat
self.process = QtCore.QProcess(self)
@@ -132,7 +132,7 @@ class DaShowProfiles(QtWidgets.QDialog):
def on_pbn_delete_selected_clicked(self):
us = QtCore.QSettings()
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"
else:
pref_name = "Secure Preferences"

33
main.py
View File

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

View File

@@ -1,6 +1,7 @@
# coding: utf8
import json
from pathlib import Path
from datetime import datetime
from PySide6 import QtWidgets, QtGui, QtCore
from wg_basic import WgBasic
from wg_software import WgSoftware
@@ -81,8 +82,8 @@ class MwDailyCheck(QtWidgets.QMainWindow):
dirname = QtWidgets.QFileDialog.getExistingDirectory(self, "导出未知")
if len(dirname) == 0:
return
ex_file = Path(dirname, f"未知信息.json")
now = datetime.strftime(datetime.now(), "%y%m%d%H%M")
ex_file = Path(dirname, f"未知信息{now}.json")
if accept_warning(self, ex_file.exists(), "警告", "文件已存在,确认覆盖吗?"):
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:]
full_path = Path(profile_path, "Extensions", ext_path, icon_file)
if not full_path.exists():
return ""
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()
user_data_path = str(us.value(f"{browser}Data", ""))
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)
extensions_data: ExtensionsData = {}
if browser == "Chrome" and is_chrome_compat:
if is_compat:
pref_file = "Preferences"
else:
pref_file = "Secure Preferences"
# print(pref_file)
for profile_id in profile_data:
profile_path = Path(user_data_path, profile_id)
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("'", "")
if not os.path.exists(icon):
return default
if not icon.endswith(("exe", "EXE")):
if not icon.endswith(("exe", "EXE", "dll", "DLL")):
return QIcon(icon)
large, small = win32gui.ExtractIconEx(icon, 0)

View File

@@ -24,7 +24,7 @@ class UiWgExtensions(object):
self.cbx_safe.setChecked(True)
self.cbx_unsafe.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_settings = QtWidgets.QPushButton("设置", window)
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_unknown)
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_settings)
@@ -51,17 +51,20 @@ class BaseExtensionsListModel(QtCore.QAbstractListModel):
self.safe_info = {} # type: dict[str, dict]
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
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_extensions.clear()
self.names.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:
name = self.all_extensions[ext_id].name
icon = self.all_extensions[ext_id].icon
@@ -108,20 +111,20 @@ class BaseExtensionsListModel(QtCore.QAbstractListModel):
class ChromeExtensionsListModel(BaseExtensionsListModel):
def update(self, is_chrome_compat=False):
super().update_ext("Chrome", is_chrome_compat)
def update(self, is_compat=False):
super().update_ext("Chrome", is_compat)
class EdgeExtensionsListModel(BaseExtensionsListModel):
def update(self, **kwargs):
super().update_ext("Edge")
def update(self, is_compat=False):
super().update_ext("Edge", is_compat)
class BraveExtensionsListModel(BaseExtensionsListModel):
def update(self, **kwargs):
super().update_ext("Brave")
def update(self, is_compat=False):
super().update_ext("Brave", is_compat)
class BrowsersListModel(QtCore.QAbstractListModel):
@@ -168,7 +171,7 @@ class WgExtensions(QtWidgets.QWidget):
}
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.cbx_safe.clicked.connect(self.on_cbx_safe_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):
model = self.ext_list_models[browser]
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()
def switch_model(self, browser: str):
@@ -207,15 +210,18 @@ class WgExtensions(QtWidgets.QWidget):
self.update_model(browser)
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):
if self.get_current_browser() == "Chrome":
self.update_model("Chrome")
def on_cbx_compat_clicked(self):
self.update_model(self.get_current_browser())
def on_cmbx_browsers_current_text_changed(self, text: str):
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):
model = self.ext_list_models[self.get_current_browser()]
@@ -243,7 +249,7 @@ class WgExtensions(QtWidgets.QWidget):
node = model.all_extensions[ext_id]
da_sp = DaShowProfiles(
self.get_current_browser(),
self.ui.cbx_chrome_compat.isChecked(),
self.ui.cbx_compat.isChecked(),
model.all_profiles,
ext_id,
node.name,