第一步优化勾选功能
81
build.py
@@ -1,81 +0,0 @@
|
||||
"""
|
||||
打包脚本 - 使用 PyInstaller 打包 Python 代码
|
||||
只打包 Python 代码,不包含其他资源文件
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
def build():
|
||||
"""使用 PyInstaller 打包应用"""
|
||||
|
||||
# 检查是否安装了 PyInstaller
|
||||
try:
|
||||
import PyInstaller
|
||||
except ImportError:
|
||||
print("正在安装 PyInstaller...")
|
||||
subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
|
||||
|
||||
# PyInstaller 命令参数
|
||||
cmd = [
|
||||
"pyinstaller",
|
||||
"--name=GUI应用", # 可执行文件名
|
||||
"--onefile", # 打包成单个文件
|
||||
"--windowed", # Windows 下不显示控制台窗口(GUI应用)
|
||||
"--clean", # 清理临时文件
|
||||
"--noconfirm", # 不询问覆盖
|
||||
|
||||
# 隐藏导入(PyInstaller 可能无法自动检测的模块)
|
||||
"--hidden-import=PyQt5",
|
||||
"--hidden-import=PyQt5.QtCore",
|
||||
"--hidden-import=PyQt5.QtGui",
|
||||
"--hidden-import=PyQt5.QtWidgets",
|
||||
"--hidden-import=qfluentwidgets",
|
||||
"--hidden-import=pandas",
|
||||
"--hidden-import=openpyxl",
|
||||
"--hidden-import=loguru",
|
||||
"--hidden-import=beautifulsoup4",
|
||||
"--hidden-import=curl_cffi",
|
||||
"--hidden-import=DrissionPage",
|
||||
"--hidden-import=requests",
|
||||
"--hidden-import=main", # 导入 main 模块
|
||||
|
||||
# 排除不需要的模块(减小体积)
|
||||
"--exclude-module=matplotlib",
|
||||
"--exclude-module=numpy.distutils",
|
||||
"--exclude-module=scipy",
|
||||
"--exclude-module=IPython",
|
||||
"--exclude-module=jupyter",
|
||||
|
||||
# 主入口文件
|
||||
"gui_app.py"
|
||||
]
|
||||
|
||||
print("=" * 60)
|
||||
print("开始打包...")
|
||||
print("=" * 60)
|
||||
print(f"执行命令: {' '.join(cmd)}")
|
||||
print("=" * 60)
|
||||
|
||||
try:
|
||||
# 执行打包命令
|
||||
result = subprocess.run(cmd, check=True)
|
||||
print("\n" + "=" * 60)
|
||||
print("打包完成!")
|
||||
print("=" * 60)
|
||||
print(f"可执行文件位置: dist/GUI应用.exe")
|
||||
print("=" * 60)
|
||||
return True
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"\n打包失败: {e}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"\n打包过程中出现错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = build()
|
||||
sys.exit(0 if success else 1)
|
||||
@@ -161,7 +161,6 @@ imports:
|
||||
• <a href="#gui_worker">gui_worker</a>
|
||||
• <a href="#heapq">heapq</a>
|
||||
• <a href="#io">io</a>
|
||||
• <a href="#json">json</a>
|
||||
• <a href="#keyword">keyword</a>
|
||||
• <a href="#linecache">linecache</a>
|
||||
• <a href="#locale">locale</a>
|
||||
@@ -194,7 +193,6 @@ imports:
|
||||
• <a href="#sre_parse">sre_parse</a>
|
||||
• <a href="#stat">stat</a>
|
||||
• <a href="#sys">sys</a>
|
||||
• <a href="#time">time</a>
|
||||
• <a href="#traceback">traceback</a>
|
||||
• <a href="#types">types</a>
|
||||
• <a href="#typing">typing</a>
|
||||
@@ -18335,7 +18333,6 @@ imported by:
|
||||
• <a href="#curl_cffi.requests.utils">curl_cffi.requests.utils</a>
|
||||
• <a href="#curl_cffi.requests.websockets">curl_cffi.requests.websockets</a>
|
||||
• <a href="#dateutil.zoneinfo">dateutil.zoneinfo</a>
|
||||
• <a href="#gui_app.py">gui_app.py</a>
|
||||
• <a href="#importlib.metadata">importlib.metadata</a>
|
||||
• <a href="#json.decoder">json.decoder</a>
|
||||
• <a href="#json.encoder">json.encoder</a>
|
||||
@@ -56594,7 +56591,6 @@ imported by:
|
||||
• <a href="#filelock._api">filelock._api</a>
|
||||
• <a href="#filelock.asyncio">filelock.asyncio</a>
|
||||
• <a href="#gc">gc</a>
|
||||
• <a href="#gui_app.py">gui_app.py</a>
|
||||
• <a href="#gui_worker">gui_worker</a>
|
||||
• <a href="#gzip">gzip</a>
|
||||
• <a href="#http.cookiejar">http.cookiejar</a>
|
||||
|
||||
BIN
dist/多多自动化发文助手.exe
vendored
606
gui_app.py
@@ -76,15 +76,20 @@ class WorkerThread(QThread):
|
||||
self.log_message.emit(f"使用预查找的文件列表,共 {len(self.prepared_files)} 个文件")
|
||||
self.progress.emit(30)
|
||||
|
||||
first_file = self.prepared_files[0]
|
||||
if first_file['path'].is_file():
|
||||
folder_path = str(first_file['path'].parent.parent)
|
||||
else:
|
||||
folder_path = str(first_file['path'].parent.parent)
|
||||
# 将预查找的文件按类型分类,直接传递给 action(),跳过文件夹扫描
|
||||
prepared_video_files = [f['path'] for f in self.prepared_files
|
||||
if f['path'].is_file() and any(
|
||||
f['path'].suffix.lower() == ext for ext in VIDEO_EXTENSIONS)]
|
||||
prepared_image_folders = [f['path'] for f in self.prepared_files
|
||||
if f['path'].is_dir()]
|
||||
|
||||
self.log_message.emit(f"使用文件夹路径: {folder_path}")
|
||||
self.log_message.emit(f"预查找文件: {len(prepared_video_files)} 个视频, {len(prepared_image_folders)} 个图片文件夹")
|
||||
try:
|
||||
result = pdd.action(folder_path=folder_path, collect_all_videos=False)
|
||||
result = pdd.action(
|
||||
prepared_video_files=prepared_video_files,
|
||||
prepared_image_folders=prepared_image_folders,
|
||||
collect_all_videos=False
|
||||
)
|
||||
ok = bool(result.get("ok")) if isinstance(result, dict) else True
|
||||
if not ok:
|
||||
self.log_message.emit(f"失败原因: {result.get('reason') if isinstance(result, dict) else ''}")
|
||||
@@ -222,9 +227,10 @@ class WorkerThread(QThread):
|
||||
for idx, image_folder_info in enumerate(image_folders):
|
||||
if not self.is_running:
|
||||
break
|
||||
image_folder = str(image_folder_info['path'])
|
||||
self.log_message.emit(f"处理第 {idx + 1}/{len(image_folders)} 个图片文件夹: {image_folder}")
|
||||
pdd.action(folder_path=image_folder)
|
||||
image_folder_path = image_folder_info['path']
|
||||
self.log_message.emit(f"处理第 {idx + 1}/{len(image_folders)} 个图片文件夹: {image_folder_path}")
|
||||
# 直接传递图片文件夹路径,跳过文件夹扫描
|
||||
pdd.action(prepared_image_folders=[image_folder_path])
|
||||
self.log_message.emit(f"图片文件夹 {idx + 1} 上传完成")
|
||||
|
||||
self.log_message.emit(f"所有图片文件夹上传完成,共处理 {len(image_folders)} 个文件夹")
|
||||
@@ -264,7 +270,8 @@ class WorkerThread(QThread):
|
||||
if not self.is_running:
|
||||
break
|
||||
self.log_message.emit(f"处理第 {idx + 1}/{len(image_folders)} 个图片文件夹: {image_folder}")
|
||||
pdd.action(folder_path=image_folder)
|
||||
# 直接传递图片文件夹路径,跳过文件夹扫描
|
||||
pdd.action(prepared_image_folders=[Path(image_folder)])
|
||||
self.log_message.emit(f"图片文件夹 {idx + 1} 上传完成")
|
||||
|
||||
self.log_message.emit(f"所有图片文件夹上传完成,共处理 {len(image_folders)} 个文件夹")
|
||||
|
||||
54
main.py
@@ -364,12 +364,15 @@ class Pdd:
|
||||
print(f"下载失败: {e}")
|
||||
return None
|
||||
|
||||
def action(self, folder_path=None, collect_all_videos=False):
|
||||
def action(self, folder_path=None, collect_all_videos=False, prepared_video_files=None,
|
||||
prepared_image_folders=None):
|
||||
logger.info("=" * 50)
|
||||
logger.info("开始执行 action 方法(单个/批量上传模式)")
|
||||
logger.info(f"多多ID: {self.user_id}, 序号: {self.index}")
|
||||
logger.info(f"文件夹路径: {folder_path}")
|
||||
logger.info(f"批量上传模式: {collect_all_videos}")
|
||||
logger.info(
|
||||
f"使用预查找文件: 视频={len(prepared_video_files) if prepared_video_files else 0}, 图片文件夹={len(prepared_image_folders) if prepared_image_folders else 0}")
|
||||
|
||||
logger.info("=" * 50)
|
||||
logger.info("步骤1: 创建浏览器页面...")
|
||||
@@ -388,14 +391,11 @@ class Pdd:
|
||||
logger.info(" ✓ 已打开登录页面")
|
||||
|
||||
for i in range(100):
|
||||
if self.page.ele("x://*[text()='登录']", timeout=5):
|
||||
logger.warning(" 请登录》》》")
|
||||
elif self.page.ele("x://*[text()='主播/作者管理']", timeout=5):
|
||||
if self.page.ele("x://*[text()='主播/作者管理']", timeout=5):
|
||||
logger.info(" ✓ 检测到已登录")
|
||||
break
|
||||
|
||||
if i in [5,10,15,20,35,30]:
|
||||
self.page.get(url="https://mcn.pinduoduo.com/register")
|
||||
else:
|
||||
time.sleep(2 * 60)
|
||||
else:
|
||||
logger.error(" ✗ 未登录!!!")
|
||||
return {"ok": False, "reason": "未登录"}
|
||||
@@ -441,15 +441,28 @@ class Pdd:
|
||||
# 从文件夹读取文件
|
||||
video_file_paths = [] # 视频文件列表
|
||||
image_folder_paths = [] # 图片文件夹列表(用于存储图片文件夹路径)
|
||||
if folder_path and os.path.exists(folder_path):
|
||||
logger.info(f"开始读取文件夹: {folder_path}")
|
||||
logger.info(f"查找序号为 '{self.index}' 的文件")
|
||||
|
||||
# 支持的视频格式
|
||||
video_extensions = ['.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv', '.webm']
|
||||
# 支持的图片格式
|
||||
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']
|
||||
|
||||
if prepared_video_files is not None or prepared_image_folders is not None:
|
||||
# 使用 GUI "更新数据"按钮预查找的文件,跳过文件夹扫描
|
||||
video_file_paths = list(prepared_video_files) if prepared_video_files else []
|
||||
image_folder_paths = list(prepared_image_folders) if prepared_image_folders else []
|
||||
logger.info("=" * 50)
|
||||
logger.info("使用预查找的文件列表,跳过文件夹扫描")
|
||||
logger.info(f" 视频文件数量: {len(video_file_paths)}")
|
||||
logger.info(f" 图片文件夹数量: {len(image_folder_paths)}")
|
||||
if video_file_paths:
|
||||
logger.info("视频文件列表:")
|
||||
for idx, video_path in enumerate(video_file_paths, 1):
|
||||
logger.info(f" {idx}. {video_path}")
|
||||
elif folder_path and os.path.exists(folder_path):
|
||||
logger.info(f"开始读取文件夹: {folder_path}")
|
||||
logger.info(f"查找序号为 '{self.index}' 的文件")
|
||||
|
||||
# 第一步:先收集所有匹配的视频文件和图片文件夹
|
||||
logger.info("=" * 50)
|
||||
if collect_all_videos:
|
||||
@@ -549,7 +562,7 @@ class Pdd:
|
||||
for idx, video_path in enumerate(video_file_paths, 1):
|
||||
logger.info(f" {idx}. {video_path}")
|
||||
|
||||
# 第二步:如果有视频文件,批量上传所有视频
|
||||
# 第二步:如果有视频文件,批量上传所有视频(此段代码在 if/elif 外面,对预查找和扫描两种方式都生效)
|
||||
if video_file_paths:
|
||||
logger.info("=" * 50)
|
||||
logger.info(f"第二步:开始批量上传 {len(video_file_paths)} 个视频文件...")
|
||||
@@ -636,16 +649,6 @@ class Pdd:
|
||||
creator_tab.ele(f'x:{new_path}').input(vals=file_names[2] + " " + self.ht, clear=True)
|
||||
logger.info(f"已上传图片文件夹: {folder_name}")
|
||||
|
||||
# if ".mp4" in file_path:
|
||||
# # 上传视频
|
||||
# creator_tab.ele("x://*[text()='添加视频']").click.to_upload(file_path)
|
||||
# else:
|
||||
# # 上传图片
|
||||
# image_files = [f for f in files if os.path.splitext(f)[1].lower() in image_extensions]
|
||||
# path_datas = image_files
|
||||
# if path_datas:
|
||||
# creator_tab.ele('x://*[text()="添加图片"]').click.to_upload(path_datas)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
if self.time_start and self._is_schedule_time_expired(self.time_start):
|
||||
@@ -945,14 +948,11 @@ class Pdd:
|
||||
logger.info(" ✓ 已打开登录页面")
|
||||
|
||||
for i in range(100):
|
||||
if self.page.ele("x://*[text()='登录']", timeout=5):
|
||||
logger.warning(" 请登录》》》")
|
||||
elif self.page.ele("x://*[text()='主播/作者管理']", timeout=5):
|
||||
if self.page.ele("x://*[text()='主播/作者管理']", timeout=5):
|
||||
logger.info(" ✓ 检测到已登录")
|
||||
break
|
||||
|
||||
if i in [5, 10, 15, 20, 35, 30]:
|
||||
self.page.get(url="https://mcn.pinduoduo.com/register")
|
||||
else:
|
||||
time.sleep(5 * 60)
|
||||
else:
|
||||
logger.error(" ✗ 未登录!!!")
|
||||
return {"ok": False, "results": [], "reason": "未登录"}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiIyaUpyeWQ0NlRvUGxPYWxPb3l1RmExT2hrVzBIMHlVQnlvV3NvdDlTOWpNIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6Ik8tcnZVcExmSk9sb1FDeDlaWVpScjdjUHlkWVhEVEY0dms0bGNlMi1zSUUifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwMzI2IiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"S-w8zKp-2whgHXEXNExGRf9tHgnQLRg0JOhoIL9SdD3WQwR8wlXXaoMqI9Ex10hxs5CiNr3SneL7uuxTmi_R4wrxV4FlXTqaPpY1bwzXRXoVeuOgsqvONYlmkgLbIboQp-BRfS9BRHjj9fTgCArM8CXbqf2MYcoltBRtkOhu_WBEuykkE-5KfruOspjbBrbgkQFnSZ6MhjHxw2WRchSP2BLGp_Lhix-Na7ORyIZR5sRfABjubAp28DNF0nZ4-j4Ic-Cxi4V2An6SeAuum_JI1-rKg1VO1wqvk2sq493-w9ByO72zR4i53ztq383TWkUOtYzKU3GFPu5NdAuDBTRErw"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"MXk8uIFz1lA6bNw1JRoi9IT9Afxzk1sEb4jvFNG8vxDStZ0pHTg5U1Wp4VulDg1xxFZcCbjRAifH3LDs8SEnJhhQ_LO7rfNil36g8_7RWS_45l3V8gfHo7A45lRzRfH8ofJOFu6z6vyPAslZ7NYTYvCDHEQODfky3m8_AxSnkYPWD9ZooraVABzvf39BChyl58e0ehpRalk0APEVlxGzKmuePjTLpSGU_pbwauXCtsNKob1gnV4NWuPNubngR_kNGzxhN7aZmJxySH10Qpne9xCGrrU9j8V2RtiR84MWvrd4Uwow0qw57Rgvu_aZQicejqvbbrymGyp1skpdTNlo9w"}]}}]
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "crl-set-816998340439263387.data",
|
||||
"version": "10326"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJMSUNFTlNFIiwicm9vdF9oYXNoIjoiUGIwc2tBVUxaUzFqWldTQnctV0hIRkltRlhVcExiZDlUcVkwR2ZHSHBWcyJ9LHsicGF0aCI6ImNybC1zZXQiLCJyb290X2hhc2giOiJObVhQUWc1WTZvZ09OUjJSTHNzdTQtcEJNRXBLcGlKSk5QTjRMbFJqU1E0In0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6InpPcGlYNXJrNFp1NFlLSUUyUkVwS1dXZWFJUDNtS0hsak5ObkdycDJuUmMifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJoZm5rcGltbGhoZ2llYWRkZ2ZlbWpob2ZtZmJsbW5pYiIsIml0ZW1fdmVyc2lvbiI6IjEwMzMxIiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"Z4e0tOPYmXmWA1r-dqISL5iVnQN7tTTW_yUoUfh0mmuxrvSC7uBWcsPh7Tc7AFyj43bgIM4FQAdmQW72N-Vuj9fLdC1O-HFYhjrP1WR3WnaFxl7KEqEg76IAHlk7BIVuW0TpZr-v5S5yCfVBAoVXcMKsZvVJLbDejlbdTfdNLbyjewkVsmpksyTS1vbIPkQx0g-XbpmnHKu_i5ed5SVXCjWjAC1SMSUL1asei_7VYucxXE8Jez59fW6n7T1P7iTlw8R2-HMVSvmItFQPu3XtjO3gp5pnKHmmsrEq-FIhnOsb5RwqZxm7udhlLsItrBVBwYlTG7G-NAIl82xdPMxrFA"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"PGAIGHVxTb6u8O3khEmgWcGRi4yljbZSSRK3k2BSy51jKwNN27bCeuBwvkt99utaoiJs3hTtxnNu2SD-uXZU7i7Dyb_ddXL02TdCjtkLZfWcXKtzfEQyyUaVhkewok24bytwPTuBBJ3Rv1oEbsGJA3VvzFfct71iZHn6aNUnRYY92o0ydSzJnYqiOvWEEJIWQWj-Co8I4apo0QRKnnz-j7_EVQszXH8-dBtZwp2mmf80BHCOueyiAlFrSjGB-91SVo3u4LkHnCOxUcSifjKKdvamu1ipXfR3JyiVp9Gval-AIuLBGbnTObM3irV6cHFNrEFcI8TbbknXBN3OCSpTpg"}]}}]
|
||||
5
user/user_data/CertificateRevocation/10331/manifest.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "crl-set-12388884131062641242.data",
|
||||
"version": "10331"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJQcmVsb2FkIERhdGEiLCJyb290X2hhc2giOiI5MFptcFJQTGh3c2xxbXBka2hMclUzODgzSHVTYXJkUFBkYVZfSWF2ZUtZIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6Imh5Z0tCY2hTMXhKTXRvV2tIWURCaDZmYVBGaU1haFFlMkxFb3o1cWxTREkifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJnZ2trZWhnYm5manBlZ2dmcGxlZWFrcGlkYmtpYmJtbiIsIml0ZW1fdmVyc2lvbiI6IjIwMjYuMi4yLjEyMSIsInByb3RvY29sX3ZlcnNpb24iOjF9","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"IG_xMeVVGDbd9FINYr7EcsO1rObec7fteiBx7PwXXzKnxGyRYlwkRCHb-baFAcLekoUCL780XLPjMbkQVnb7PqsTyrXfX7-MCSjLM1kcNIiCpm9GoXg_m0SH2TgmsX8RR3xLNgpvwhu3ulyzIXnzvD_xEed_6vgqSbjMhqPv9VsV3clh_NzFqPIz1J_uJkcicPKxQ7xJAZBKhF6UZLdY2Pqewr2q4Moiz2RhraeDCfhTy0iaio994QXKd1Eu4yIQINQw-zyBut4rFlCNdZT8xjcpukpvfxgSt-J07R6sFuvMZESu3-NGjIKoEzZckLisOCtGYnF75Lp-tDkxCDy6PwOhfAneodxYpO-swCQjaNz1oKfjvXpJTi0r9FoNYfKHKEsZEBOLejpTj3pQsp-ZMNnd77W0daCr3avNOCjEqRXjnc7IfoaJgLK9xXhj8D8WihQnpLTE3Wih3KHzgqaU0LJ0GPGb0rXvAvtvKExBzuiClTpcwWdJwaut1aL7-YbkdPGQ2qYm0IMAMb7QiSpR48zjKyXt_97fjSvXMt75I1fpkxbBLmU2wVO6LiPTXMPSaDM_Uz0KPd8ToCg1xJd5n-n-BHHHFLeNlV0wYoR-N2wgCUpF0YMEcBplKeyeEVw3A_wnQRd6TzyWz0vZE1SLpusHaVvn404mrrU8EIoeLao"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"CR_JAvPr3BrvEdRIKZ2FxmoxYoBWnZWhgSl5Ush_kT5S3DZu_e-OOVHhpIZI4vM7cYfaChgG72LNI2E_-g7HCf1nEaM5_smP0TxWKXH15X1zvW0SqSPYaXR3An_2TDh9dg2PQoyxk3CxWFFG2OiZfdA3sCBW6ezL_PfGrVK5YT00uKs0o4cXSqRbtNRDsYf18NyEw-z2VAS9qAbjMTZ4NqZTz8A9r1OvSrZPzONB4kwmfDc7wzzBne0cJbmUAeU1VETFaqyfH4HV3WnIM-9Rux0OAX2zqLuff_JUQKJ0He399JYsfsRIlGZl3_u3Hfj9oMNfOplRTrmvBl7cMFtdlw"}]}}]
|
||||
@@ -0,0 +1 @@
|
||||
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJQcmVsb2FkIERhdGEiLCJyb290X2hhc2giOiJoekY1UkNteUtTbXM5UFpCRWxRMGZyaUtyQVJEcVdwLWppbG02Z2hCRjBzIn0seyJwYXRoIjoibWFuaWZlc3QuanNvbiIsInJvb3RfaGFzaCI6IkhhZjZ6WmU5Y3lOSG10aEM4eDI3ZUg4aG5pN0dHUC1HMTFVYTlVMVV1aXcifV0sImZvcm1hdCI6InRyZWVoYXNoIiwiaGFzaF9ibG9ja19zaXplIjo0MDk2fV0sIml0ZW1faWQiOiJnZ2trZWhnYm5manBlZ2dmcGxlZWFrcGlkYmtpYmJtbiIsIml0ZW1fdmVyc2lvbiI6IjIwMjYuMi41LjEyMSIsInByb3RvY29sX3ZlcnNpb24iOjF9","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"eVJJF-PSQ3jAPfMh2Dbrzkft-cpwj6HWMYUXJTFAReyynTotCOghPOzytVefekiDF2kvyE5Xv0jS0Nnfxib4lOh-ANN1w1rPX5YkHJEQJAbw9Gs7r1gPMfYNEpcCCZVgSZrhixcQTd0I-Hz2BXNlOKKfHu8erxD9vYXpOty13J8amhWkMeFc_OXx6mujUh8dTbNA8A2IXIf9GHdm_P72nqYgDYi6ctF2uzoBjgAYgJhoNet0K0eAbYop7YXFOSEsdJCyRqeo1bC8uQACp-aIiYItvxBWgHEdY3tBe-M2eiQbNEcaP00c20BBIEP9-FE5kDhXSQTmnxD3SvD5mmtqHsmPOlnwNMyKKoRLWVFrlemVuuvPJ-woW044SqEAJZw8qGrnABanerLHfNwrN2DKPr2lJdcUz2GTIhEsQggYP-QgZSLvfQBzdvfx0QmJPV8CXAfAiGcri6lxMda2nouzjkR0Bcergoij87co3V3xvH132EgFLC4u3htrvgAq-byuJICK3a9w-enUNUQOmFpeX7hwsmNzh7gnZKehZpi9TulCPmNfiwhIfazH4Gaa-iqDkfQx4zb0P_wNxO3tazaDjDpfuYdbwg35ixZ_Xw6w5ehNNwu95LPHs1kQixys8URcNFm6q72XyYjeCi_ukOrAUROSNR2BezGjL-SNHmILtHQ"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"M-2Vet11iRJ-SJPwHqhbjf-pCmQEWop3VBUAnVDIpPtxbSY7Nbhr0ZMWjO0uSyqYYpxNkzsYHG6mhckLzmK3ZEOwv51BLYTvHfEZYPVGno_5u42XVLYdSQJ6yX3DFNUbePDfjyilv5IOvybFtkyP6KNjT6q29vUFRUzdQ-UtkxNc42VmBD3L7gvbscGJTVIlRTfrrhytffYRoUGsFvSQSiWt-PZODTqnHsQTG0QUjTWNkQhDMcxqev1ZY8ZhkAqpfAaHEyeqefZNdlmdNy_AsNyJ9tEFxCMv9HttaqbNbx1PZwandPKUiSKu1W-iwObnLLlVU-nF_f8aXVKt-sxR7Q"}]}}]
|
||||
@@ -2,5 +2,5 @@
|
||||
"manifest_version": 2,
|
||||
"name": "Crowd Deny",
|
||||
"preload_data_format": 1,
|
||||
"version": "2026.2.2.121"
|
||||
"version": "2026.2.5.121"
|
||||
}
|
||||
@@ -20,7 +20,14 @@
|
||||
"padded_top_topics_start_index": 0,
|
||||
"taxonomy_version": 0,
|
||||
"top_topics_and_observing_domains": [ ]
|
||||
}, {
|
||||
"calculation_time": "13414941052302885",
|
||||
"config_version": 0,
|
||||
"model_version": "0",
|
||||
"padded_top_topics_start_index": 0,
|
||||
"taxonomy_version": 0,
|
||||
"top_topics_and_observing_domains": [ ]
|
||||
} ],
|
||||
"hex_encoded_hmac_key": "434BF7DBD7DA573B45E0A11AD9045A61B6221D14AE2F9A341E2FEF659AF071F6",
|
||||
"next_scheduled_calculation_time": "13414862793247092"
|
||||
"next_scheduled_calculation_time": "13415545852303557"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 572 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 354 KiB |
|
Before Width: | Height: | Size: 572 KiB After Width: | Height: | Size: 243 KiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 458 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 55 KiB |
BIN
user/user_data/Default/Cache/Cache_Data/f_000014
Normal file
BIN
user/user_data/Default/Cache/Cache_Data/f_000017
Normal file
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 28 KiB |
BIN
user/user_data/Default/Cache/Cache_Data/f_000026
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 308 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 239 KiB |
BIN
user/user_data/Default/Cache/Cache_Data/f_000029
Normal file
|
After Width: | Height: | Size: 203 KiB |
BIN
user/user_data/Default/Cache/Cache_Data/f_00002a
Normal file
|
After Width: | Height: | Size: 572 KiB |
BIN
user/user_data/Default/Cache/Cache_Data/f_00002b
Normal file
|
After Width: | Height: | Size: 433 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 325 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 109 KiB |