From b31db76164fef6e736a9831f9345660236db9f4f Mon Sep 17 00:00:00 2001 From: Nixevol Date: Wed, 20 May 2026 08:55:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=B7=A8=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=89=93=E5=8C=85=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 36 + .gitignore | 5 + app/config.py | 13 +- app/main.py | 21 +- build/Dockerfile | 7 +- build/README.md | 64 +- build/build.py | 990 ----- build/capareport-server.spec | 99 + build/docker-compose.yml | 27 +- build/mysql/conf.d/custom.cnf | 16 +- build/mysql/init/01-init-db.sql | 7 +- docs/project_context.md | 13 + frontend/src/api/client.ts | 16 +- scripts/build.bat | 6 + scripts/build.ps1 | 326 ++ scripts/build.sh | 128 + src-tauri/Cargo.lock | 4787 +++++++++++++++++++++++++ src-tauri/Cargo.toml | 16 + src-tauri/build.rs | 3 + src-tauri/capabilities/default.json | 7 + src-tauri/icons/128x128.png | Bin 0 -> 6124 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 11112 bytes src-tauri/icons/32x32.png | Bin 0 -> 1377 bytes src-tauri/icons/64x64.png | Bin 0 -> 2859 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 5452 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 6886 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 7087 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 12399 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 1309 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 13587 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 1972 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 3389 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 4319 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 2381 bytes src-tauri/icons/app-icon.png | Bin 0 -> 103835 bytes src-tauri/icons/icon.icns | Bin 0 -> 110073 bytes src-tauri/icons/icon.ico | Bin 0 -> 23493 bytes src-tauri/icons/icon.png | Bin 0 -> 21548 bytes src-tauri/src/main.rs | 116 + src-tauri/tauri.conf.json | 42 + 40 files changed, 5657 insertions(+), 1088 deletions(-) create mode 100644 .dockerignore delete mode 100644 build/build.py create mode 100644 build/capareport-server.spec create mode 100644 scripts/build.bat create mode 100644 scripts/build.ps1 create mode 100644 scripts/build.sh create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/64x64.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/app-icon.png create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/tauri.conf.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..77566b0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +.git +.gitignore +.venv +venv +ENV +env +__pycache__ +*.pyc +.ruff_cache + +frontend/node_modules +frontend/dist +frontend/.vite + +cache +logs +dist +uploads +CapacityReportData +auth.ini +Configure.json +*.log +*.tmp +*.temp +*.bak + +build/temp +build/pyinstaller +target +src-tauri/target +src-tauri/binaries + +.env +.env.local +.DS_Store +Thumbs.db diff --git a/.gitignore b/.gitignore index 4234151..06854b9 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,12 @@ cache/ logs/ uploads/ build/temp/ +build/pyinstaller/ +src-tauri/target/ +src-tauri/binaries/ +src-tauri/gen/ CapacityReportData/ +.ruff_cache/ # Local configuration and secrets .env diff --git a/app/config.py b/app/config.py index 2e4a6c6..44f28d9 100644 --- a/app/config.py +++ b/app/config.py @@ -2,13 +2,24 @@ 配置管理模块 """ import json +import os +import sys from datetime import datetime from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List -BASE_DIR = Path(__file__).resolve().parent.parent +def _resolve_base_dir() -> Path: + env_base_dir = os.environ.get("CAPAREPORT_BASE_DIR") + if env_base_dir: + return Path(env_base_dir).expanduser().resolve() + if getattr(sys, "frozen", False): + return Path(sys.executable).resolve().parent + return Path(__file__).resolve().parent.parent + + +BASE_DIR = _resolve_base_dir() CACHE_DIR = BASE_DIR / "cache" CONFIG_FILE = BASE_DIR / "Configure.json" SQL_SCRIPT = BASE_DIR / "ReportScript.sql" diff --git a/app/main.py b/app/main.py index 0d66884..4b0c38c 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,5 @@ from pathlib import Path +import argparse import uvicorn from fastapi import FastAPI, HTTPException, Request @@ -117,8 +118,20 @@ def _safe_file(root: Path, path: str) -> Path | None: app = create_app() -if __name__ == "__main__": +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="CapacityReport server") + parser.add_argument("--host", default=APP_HOST, help="Host to bind") + parser.add_argument("--port", default=APP_PORT, type=int, help="Port to bind") + return parser.parse_args() + + +def run_server(host: str = APP_HOST, port: int = APP_PORT) -> None: print(f"CapacityReport v{APP_VERSION}") - print(f"配置更新时间: {state.current_config().update}") - print(f"前端地址: http://localhost:{APP_PORT}") - uvicorn.run(app, host=APP_HOST, port=APP_PORT, reload=False) + print(f"Config update: {state.current_config().update}") + print(f"Frontend: http://localhost:{port}") + uvicorn.run(app, host=host, port=port, reload=False) + + +if __name__ == "__main__": + args = parse_args() + run_server(args.host, args.port) diff --git a/build/Dockerfile b/build/Dockerfile index 26612a8..b5753f8 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,5 +1,5 @@ # CapacityReport Dockerfile -# 内网离线部署镜像,前端在镜像构建阶段编译后交给 FastAPI 托管。 +# The frontend is built in a Node stage and served by the FastAPI runtime. FROM node:22-slim AS frontend-build @@ -15,7 +15,7 @@ RUN npm run build FROM python:3.13.11-slim LABEL maintainer="CapacityReport" -LABEL description="容量报表处理系统" +LABEL description="CapacityReport processing service" WORKDIR /app @@ -30,7 +30,8 @@ RUN pip install --no-cache-dir -r requirements.txt RUN mkdir -p /var/log/supervisor /var/run /app/cache -COPY . . +COPY app ./app +COPY ReportScript.sql start.sh supervisord.conf ./ COPY --from=frontend-build /frontend/dist /app/frontend/dist RUN chmod +x /app/start.sh 2>/dev/null || true diff --git a/build/README.md b/build/README.md index 3156daf..a1d6c67 100644 --- a/build/README.md +++ b/build/README.md @@ -1,58 +1,26 @@ -# 构建脚本 +# Build Notes -## 使用方法 +Use the root scripts for release builds: -在项目根目录运行: - -```bash -python build/build.py +```powershell +scripts\build.bat server +scripts\build.bat docker +scripts\build.bat desktop ``` -选择构建类型: -- `1` - 完整部署包(MySQL + 应用) -- `2` - 更新包(仅应用) +On Linux or macOS: -## 输出 - -构建完成后在 `dist/` 目录生成: -- `capacity-report-full.tar.gz` - 完整部署包 -- `capacity-report-update.tar.gz` - 更新包 - -## 部署包内容 - -**完整部署包**: -- `images/capacity-images.tar` - Docker 镜像 -- `docker-compose.yml` - 编排文件 -- `deploy.sh` - 部署脚本 -- `Configure.json` - 配置文件(已更新为 Docker 环境) -- `ReportScript.sql` - SQL 脚本 -- `mysql/` - MySQL 配置 - -**更新包**: -- `images/capacity-app-update.tar` - 应用镜像 -- `docker-compose.yml` - 编排文件 -- `update.sh` - 更新脚本 - -## 部署 - -**完整部署**: ```bash -tar -xzf capacity-report-full.tar.gz -cd capacity-report-full -sh deploy.sh +sh scripts/build.sh server +sh scripts/build.sh docker +sh scripts/build.sh desktop ``` -**更新应用**: -```bash -tar -xzf capacity-report-update.tar.gz -cd capacity-report-update -sh update.sh -``` +## Targets -## 配置 +- `server`: builds a portable server package for the current OS. +- `docker`: builds the Docker image and validates the compose file. +- `desktop`: builds a Tauri desktop package with the Python server sidecar. +- `all`: runs all targets. -所有配置在 `build/build.py` 文件头部: -- 默认镜像版本 -- 版本要求范围 -- 数据库账号密码 -- 端口映射:前端 `19081 -> 9081` +Native server and desktop packages must be built on the target OS. Build Windows packages on Windows, Linux packages on Linux, and macOS packages on macOS. Docker images can be built from the Windows development host. diff --git a/build/build.py b/build/build.py deleted file mode 100644 index 3803504..0000000 --- a/build/build.py +++ /dev/null @@ -1,990 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -CapacityReport 统一构建脚本 -支持完整部署包和更新包的构建 -""" - -import os -import sys -import json -import platform -import shutil -import subprocess -import re -import tarfile -import traceback -from pathlib import Path - -# ============================================================================ -# 配置常量 - 可根据需要修改 -# ============================================================================ - -# 默认镜像版本 -DEFAULT_MYSQL_VERSION = "8.0.44" -DEFAULT_PYTHON_VERSION = "3.13.11-slim" - -# 版本要求 -MYSQL_MIN_VERSION = (8, 0, 0) # MySQL >= 8.0 -MYSQL_MAX_VERSION = (9, 0, 0) # MySQL < 9.0 -PYTHON_MIN_VERSION = (3, 10, 0) # Python >= 3.10 -PYTHON_MAX_VERSION = (3, 14, 0) # Python < 3.14 - -# 数据库配置 -MYSQL_ROOT_USER = "root" -MYSQL_ROOT_PASSWORD = "gmcc123" -MYSQL_DATABASE = "CapacityReport" -MYSQL_HOST = "capacity-mysql" -MYSQL_PORT = 3306 - -# 应用端口映射 -APP_PORT_HOST = 19081 -MYSQL_PORT_HOST = 13306 - -# ============================================================================ -# 脚本目录配置 -# ============================================================================ - -SCRIPT_DIR = Path(__file__).parent.absolute() -PROJECT_ROOT = SCRIPT_DIR.parent -DIST_DIR = PROJECT_ROOT / "dist" -BUILD_DIR = PROJECT_ROOT / "build" -TEMP_BUILD_DIR = BUILD_DIR / "temp" - -if platform.system() == 'Windows': - try: - import ctypes - kernel32 = ctypes.windll.kernel32 - kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) - except OSError: - pass - -class Colors: - GREEN = '\033[92m' - YELLOW = '\033[93m' - RED = '\033[91m' - BLUE = '\033[94m' - RESET = '\033[0m' - -def print_step(msg): - print(f"\n{Colors.GREEN}{msg}{Colors.RESET}") - -def print_info(msg): - print(f" {msg}") - -def print_warning(msg): - print(f"{Colors.YELLOW}警告: {msg}{Colors.RESET}") - -def print_error(msg): - print(f"{Colors.RED}错误: {msg}{Colors.RESET}") - -def print_choice(msg): - print(f"{Colors.BLUE}{msg}{Colors.RESET}") - -def run_cmd(cmd, check=True, capture_output=False): - """执行命令""" - if isinstance(cmd, str): - cmd = cmd.split() - try: - result = subprocess.run( - cmd, - check=check, - capture_output=capture_output, - text=True - ) - return result - except subprocess.CalledProcessError: - if check: - print_error(f"命令执行失败: {' '.join(cmd)}") - sys.exit(1) - return None - except FileNotFoundError: - print_error(f"命令未找到: {cmd[0]}") - sys.exit(1) - -def check_command(cmd): - """检查命令是否存在""" - try: - if cmd == "docker": - subprocess.run([cmd, "--version"], capture_output=True, check=True) - elif cmd == "docker-compose": - subprocess.run([cmd, "version"], capture_output=True, check=True) - return True - except (subprocess.CalledProcessError, FileNotFoundError): - return False - -def parse_version(version_str): - """解析版本字符串为元组,例如 '8.0.44' -> (8, 0, 44)""" - parts = version_str.split('.') - try: - # 处理带后缀的版本,如 '3.13.11-slim' -> (3, 13, 11) - base_version = parts[0] if len(parts) > 0 else '0' - major = int(base_version) - minor = int(parts[1]) if len(parts) > 1 else 0 - patch_str = parts[2] if len(parts) > 2 else '0' - # 移除后缀,如 '11-slim' -> '11' - patch = int(patch_str.split('-')[0]) - return (major, minor, patch) - except (ValueError, IndexError): - return None - -def check_version_in_range(version_tuple, min_version, max_version): - """检查版本是否在指定范围内 [min, max)""" - if version_tuple is None: - return False - return min_version <= version_tuple < max_version - -def get_python_tag_from_dockerfile(): - """从 Dockerfile 中提取 Python 镜像标签""" - # 从 build 目录读取 Dockerfile - dockerfile_path = BUILD_DIR / "Dockerfile" - if not dockerfile_path.exists(): - print_error(f"Dockerfile 不存在: {dockerfile_path}") - print_error("请确保 build/Dockerfile 文件存在") - sys.exit(1) - - with open(dockerfile_path, 'r', encoding='utf-8') as f: - for line in f: - match = re.match(r'^FROM\s+python:(.+?)(?:\s|$)', line, re.IGNORECASE) - if match: - tag = match.group(1).strip() - return tag - - print_error("无法从 Dockerfile 中找到 Python 镜像标签") - print_error("请确保 Dockerfile 中包含 'FROM python:xxx' 行") - sys.exit(1) - -def check_and_get_python_image(): - """检查并获取符合要求的 Python 镜像""" - dockerfile_tag = get_python_tag_from_dockerfile() - dockerfile_version = parse_version(dockerfile_tag) - - # 检查 Dockerfile 中的版本是否符合要求 - if dockerfile_version and check_version_in_range( - dockerfile_version, PYTHON_MIN_VERSION, PYTHON_MAX_VERSION - ): - print_info(f"Dockerfile 中的 Python 版本符合要求: {dockerfile_tag}") - return f"python:{dockerfile_tag}" - else: - print_warning(f"Dockerfile 中的 Python 版本 {dockerfile_tag} 不符合要求") - print_warning(f"要求: Python >= {'.'.join(map(str, PYTHON_MIN_VERSION))} < {'.'.join(map(str, PYTHON_MAX_VERSION))}") - print_info(f"将使用默认版本: {DEFAULT_PYTHON_VERSION}") - print_info(f"如果镜像不存在,将自动拉取: python:{DEFAULT_PYTHON_VERSION}") - return f"python:{DEFAULT_PYTHON_VERSION}" - -def check_and_get_mysql_image(): - """检查并获取符合要求的 MySQL 镜像""" - # 检查默认版本是否符合要求 - default_version = parse_version(DEFAULT_MYSQL_VERSION) - if default_version and check_version_in_range( - default_version, MYSQL_MIN_VERSION, MYSQL_MAX_VERSION - ): - print_info(f"默认 MySQL 版本符合要求: {DEFAULT_MYSQL_VERSION}") - return f"mysql:{DEFAULT_MYSQL_VERSION}" - else: - print_error(f"默认 MySQL 版本 {DEFAULT_MYSQL_VERSION} 不符合要求") - print_error(f"要求: MySQL >= {'.'.join(map(str, MYSQL_MIN_VERSION))} < {'.'.join(map(str, MYSQL_MAX_VERSION))}") - sys.exit(1) - -def image_exists(image_name): - """检查镜像是否已存在""" - try: - result = subprocess.run( - ["docker", "images", "--format", "{{.Repository}}:{{.Tag}}"], - capture_output=True, - text=True, - check=True - ) - return image_name in result.stdout - except (subprocess.CalledProcessError, FileNotFoundError): - return False - -def format_size(size_bytes): - """格式化文件大小""" - for unit in ['B', 'KB', 'MB', 'GB']: - if size_bytes < 1024.0: - return f"{size_bytes:.1f} {unit}" - size_bytes /= 1024.0 - return f"{size_bytes:.1f} TB" - -def write_sh_script(file_path, content): - """写入 shell 脚本,确保使用 LF 换行和 UTF-8 编码""" - # 确保内容使用 LF 换行 - content = content.replace('\r\n', '\n').replace('\r', '\n') - # 写入文件(二进制模式确保换行符不被转换) - with open(file_path, 'wb') as f: - f.write(content.encode('utf-8')) - # 设置执行权限(在 Linux 上) - if platform.system() != 'Windows': - os.chmod(file_path, 0o755) - -def get_deploy_sh(): - """生成 deploy.sh 脚本内容""" - mysql_version = DEFAULT_MYSQL_VERSION - return f'''#!/bin/bash -# CapacityReport Deployment Script -# Run this script on offline machine to import images and start services - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${{BASH_SOURCE[0]}}")" && pwd)" -cd "$SCRIPT_DIR" - -# Set permissions automatically -chmod -R 0777 "$SCRIPT_DIR" 2>/dev/null || true -find "$SCRIPT_DIR" -type f \\( -name "*.sh" -o -name "*.py" \\) -exec chmod +x {{}} \\; 2>/dev/null || true - -echo "==========================================" -echo "CapacityReport Deployment" -echo "==========================================" -echo "" - -# Check Docker -if ! command -v docker &> /dev/null; then - echo "Error: Docker not found, please install Docker" - exit 1 -fi - -# Check Docker Compose -DOCKER_COMPOSE_CMD="" -if docker compose version &> /dev/null; then - DOCKER_COMPOSE_CMD="docker compose" -elif command -v docker-compose &> /dev/null; then - DOCKER_COMPOSE_CMD="docker-compose" -else - echo "Error: Docker Compose not found, please install Docker Compose" - exit 1 -fi - -# Check image file -if [ ! -f "images/capacity-images.tar" ]; then - echo "Error: Image file not found: images/capacity-images.tar" - exit 1 -fi - -echo "Step 1: Checking ports..." -check_port() {{ - local port=${{1}} - local name=${{2}} - local in_use=false - - if command -v lsof &> /dev/null; then - if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then - in_use=true - fi - elif command -v netstat &> /dev/null; then - if netstat -tuln 2>/dev/null | grep -q ":$port "; then - in_use=true - fi - elif command -v ss &> /dev/null; then - if ss -tuln 2>/dev/null | grep -q ":$port "; then - in_use=true - fi - fi - - if [ "$in_use" = true ]; then - echo "Warning: Port $port ($name) is in use" - read -p "Continue? (y/n) " -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - exit 1 - fi - fi -{{}} - -check_port {APP_PORT_HOST} "Frontend" -check_port {MYSQL_PORT_HOST} "MySQL" - -echo "" -echo "Step 2: Loading images..." -docker load -i images/capacity-images.tar >/dev/null 2>&1 - -echo "" -echo "Step 3: Verifying images..." -if docker images | grep -q "capacity-report-app.*latest"; then - echo " App image: OK" -else - echo " App image: FAILED" - exit 1 -fi - -if docker images | grep -q "capacity-mysql.*{mysql_version}"; then - echo " MySQL image: OK" -else - echo " MySQL image: FAILED" - exit 1 -fi - -echo "" -echo "Step 4: Creating directories..." -mkdir -p cache logs -chmod 777 cache logs 2>/dev/null || true - -echo "" -echo "Step 5: Checking config..." -if [ ! -f "Configure.json" ]; then - echo " Creating default Configure.json..." - cat > Configure.json << 'EOF' -{{ - "MySQL_DBInfo": {{ - "host": "{MYSQL_HOST}", - "port": {MYSQL_PORT}, - "user": "{MYSQL_ROOT_USER}", - "passwd": "{MYSQL_ROOT_PASSWORD}", - "dbname": "{MYSQL_DATABASE}" - }}, - "ExtractField": [] -}} -EOF -else - if command -v python3 &> /dev/null || command -v python &> /dev/null; then - (command -v python3 >/dev/null && python3 || python) << 'PYEOF' -import json -import sys - -try: - with open('Configure.json', 'r', encoding='utf-8') as f: - config = json.load(f) - - db_info = config.get('MySQL_DBInfo', {{}}) - needs_update = False - - if db_info.get('host') != '{MYSQL_HOST}': - db_info['host'] = '{MYSQL_HOST}' - needs_update = True - - if db_info.get('port') != {MYSQL_PORT}: - db_info['port'] = {MYSQL_PORT} - needs_update = True - - if db_info.get('user') != '{MYSQL_ROOT_USER}': - db_info['user'] = '{MYSQL_ROOT_USER}' - needs_update = True - - if db_info.get('passwd') != '{MYSQL_ROOT_PASSWORD}': - db_info['passwd'] = '{MYSQL_ROOT_PASSWORD}' - needs_update = True - - if db_info.get('dbname') != '{MYSQL_DATABASE}': - db_info['dbname'] = '{MYSQL_DATABASE}' - needs_update = True - - if needs_update: - with open('Configure.json', 'w', encoding='utf-8') as f: - json.dump(config, f, ensure_ascii=False, indent=2) - print(" Updated Configure.json") -except: - pass -PYEOF - fi -fi - -if [ ! -f "ReportScript.sql" ]; then - touch ReportScript.sql -fi - -echo "" -echo "Step 6: Starting services..." -$DOCKER_COMPOSE_CMD down 2>/dev/null || true -$DOCKER_COMPOSE_CMD up -d >/dev/null 2>&1 - -echo "" -echo "Step 7: Waiting for services..." -for i in {{1..30}}; do - if docker exec capacity-mysql mysqladmin ping -h localhost -u {MYSQL_ROOT_USER} -p{MYSQL_ROOT_PASSWORD} --silent 2>/dev/null; then - echo " MySQL: Ready" - break - fi - if [ $i -eq 30 ]; then - echo " MySQL: Timeout" - exit 1 - fi - sleep 2 -done - -if command -v curl &> /dev/null; then - for i in {{1..30}}; do - if curl -f http://localhost:{APP_PORT_HOST}/health >/dev/null 2>&1; then - echo " App: Ready" - break - fi - if [ $i -eq 30 ]; then - echo " App: Timeout" - echo " Check logs: $DOCKER_COMPOSE_CMD logs capacity-app" - exit 1 - fi - sleep 2 - done -else - for i in {{1..30}}; do - if docker ps --filter "name=capacity-report-app" --filter "status=running" --format "{{.Names}}" | grep -q "capacity-report-app"; then - if docker inspect capacity-report-app --format='{{.State.Health.Status}}' 2>/dev/null | grep -q "healthy"; then - echo " App: Ready" - break - elif [ $i -gt 10 ]; then - echo " App: Running" - break - fi - fi - if [ $i -eq 30 ]; then - echo " App: Timeout" - exit 1 - fi - sleep 2 - done -fi - -echo "" -echo "==========================================" -echo "Deployment completed!" -echo "==========================================" -echo "" -echo "Frontend: http://localhost:{APP_PORT_HOST}" -echo "" -echo "Commands:" -echo " Logs: $DOCKER_COMPOSE_CMD logs -f" -echo " Stop: $DOCKER_COMPOSE_CMD down" -echo " Restart: $DOCKER_COMPOSE_CMD restart" -echo " Status: $DOCKER_COMPOSE_CMD ps" -echo "" -echo "Database:" -echo " Host: localhost" -echo " Port: {MYSQL_PORT_HOST}" -echo " User: {MYSQL_ROOT_USER}" -echo " Password: {MYSQL_ROOT_PASSWORD}" -echo " Database: {MYSQL_DATABASE}" -echo "" -''' - -def get_update_sh(): - """生成 update.sh 脚本内容""" - return f'''#!/bin/bash -# CapacityReport Update Script -# Update application container without affecting database -# Run this script when you need to update the application - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${{BASH_SOURCE[0]}}")" && pwd)" -cd "$SCRIPT_DIR" - -# Set permissions automatically -chmod -R 0777 "$SCRIPT_DIR" 2>/dev/null || true -find "$SCRIPT_DIR" -type f \\( -name "*.sh" -o -name "*.py" \\) -exec chmod +x {{}} \\; 2>/dev/null || true - -echo "==========================================" -echo "CapacityReport Application Update" -echo "==========================================" -echo "" - -# Check Docker -if ! command -v docker &> /dev/null; then - echo "Error: Docker not found, please install Docker" - exit 1 -fi - -# Check Docker Compose -DOCKER_COMPOSE_CMD="" -if docker compose version &> /dev/null; then - DOCKER_COMPOSE_CMD="docker compose" -elif command -v docker-compose &> /dev/null; then - DOCKER_COMPOSE_CMD="docker-compose" -else - echo "Error: Docker Compose not found, please install Docker Compose" - exit 1 -fi - -# Check if services are running -if ! docker ps --format "{{.Names}}" | grep -q "capacity-report-app"; then - echo "Error: Application container is not running" - echo "Please use deploy.sh for initial deployment" - exit 1 -fi - -echo "Step 1: Checking current status..." -if docker ps --format "{{.Names}}" | grep -q "capacity-mysql"; then - echo " MySQL: Running" -else - echo " Warning: MySQL container is not running" - read -p "Continue? (y/n) " -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - exit 1 - fi -fi - -echo "" -echo "Step 2: Loading new application image..." -if [ -f "images/capacity-app-update.tar" ]; then - echo " Loading images from capacity-app-update.tar..." - docker load -i images/capacity-app-update.tar >/dev/null 2>&1 - - if docker images | grep -q "capacity-report-app.*latest"; then - echo " App image: Loaded" - else - echo " App image: Not found in tar file" - exit 1 - fi -else - echo " Error: Image file not found: images/capacity-app-update.tar" - exit 1 -fi - -echo "" -echo "Step 3: Stopping application container..." -$DOCKER_COMPOSE_CMD stop capacity-app 2>/dev/null || true -$DOCKER_COMPOSE_CMD rm -f capacity-app 2>/dev/null || true -echo " Application stopped" - -echo "" -echo "Step 4: Updating configuration files..." -if [ -f "Configure.json" ]; then - if command -v python3 &> /dev/null || command -v python &> /dev/null; then - (command -v python3 >/dev/null && python3 || python) << 'PYEOF' -import json -import sys - -try: - with open('Configure.json', 'r', encoding='utf-8') as f: - config = json.load(f) - - db_info = config.get('MySQL_DBInfo', {{}}) - needs_update = False - - if db_info.get('host') != '{MYSQL_HOST}': - db_info['host'] = '{MYSQL_HOST}' - needs_update = True - - if db_info.get('port') != {MYSQL_PORT}: - db_info['port'] = {MYSQL_PORT} - needs_update = True - - if needs_update: - with open('Configure.json', 'w', encoding='utf-8') as f: - json.dump(config, f, ensure_ascii=False, indent=2) - print(" Updated Configure.json") -except: - pass -PYEOF - fi -else - echo " Warning: Configure.json not found, creating default..." - cat > Configure.json << 'EOF' -{{ - "MySQL_DBInfo": {{ - "host": "{MYSQL_HOST}", - "port": {MYSQL_PORT}, - "user": "{MYSQL_ROOT_USER}", - "passwd": "{MYSQL_ROOT_PASSWORD}", - "dbname": "{MYSQL_DATABASE}" - }}, - "ExtractField": [] -}} -EOF -fi - -if [ ! -f "ReportScript.sql" ]; then - touch ReportScript.sql -fi - -mkdir -p cache logs -chmod 777 cache logs 2>/dev/null || true - -echo "" -echo "Step 5: Starting application container..." -$DOCKER_COMPOSE_CMD up -d capacity-app >/dev/null 2>&1 -echo " Application started" - -echo "" -echo "Step 6: Waiting for application to be ready..." -if command -v curl &> /dev/null; then - for i in {{1..30}}; do - if curl -f http://localhost:{APP_PORT_HOST}/health >/dev/null 2>&1; then - echo " App: Ready" - break - fi - if [ $i -eq 30 ]; then - echo " App: Timeout (may still be starting)" - echo " Check logs: $DOCKER_COMPOSE_CMD logs capacity-app" - exit 1 - fi - sleep 2 - done -else - for i in {{1..30}}; do - if docker ps --filter "name=capacity-report-app" --filter "status=running" --format "{{.Names}}" | grep -q "capacity-report-app"; then - if docker inspect capacity-report-app --format='{{.State.Health.Status}}' 2>/dev/null | grep -q "healthy"; then - echo " App: Ready" - break - elif [ $i -gt 10 ]; then - echo " App: Running" - break - fi - fi - if [ $i -eq 30 ]; then - echo " App: Timeout" - echo " Check logs: $DOCKER_COMPOSE_CMD logs capacity-app" - exit 1 - fi - sleep 2 - done -fi - -echo "" -echo "==========================================" -echo "Update completed!" -echo "==========================================" -echo "" -echo "Frontend: http://localhost:{APP_PORT_HOST}" -echo "" -echo "Database status:" -if docker ps --format "{{.Names}}" | grep -q "capacity-mysql"; then - echo " MySQL: Running (unchanged)" -else - echo " MySQL: Not running" -fi -echo "" -echo "Useful commands:" -echo " View logs: $DOCKER_COMPOSE_CMD logs -f capacity-app" -echo " Restart app: $DOCKER_COMPOSE_CMD restart capacity-app" -echo " Status: $DOCKER_COMPOSE_CMD ps" -echo "" -''' - -def build_full_package(): - """构建完整部署包""" - print_step("构建完整部署包...") - - # 清理临时目录 - if TEMP_BUILD_DIR.exists(): - shutil.rmtree(TEMP_BUILD_DIR) - TEMP_BUILD_DIR.mkdir(parents=True, exist_ok=True) - - # 检查 Docker - if not check_command("docker"): - print_error("未检测到 Docker,请先安装 Docker Desktop") - sys.exit(1) - - # 检查 Docker Compose - try: - subprocess.run(["docker", "compose", "version"], capture_output=True, check=True) - except (subprocess.CalledProcessError, FileNotFoundError): - if not check_command("docker-compose"): - print_error("未检测到 Docker Compose") - sys.exit(1) - - # 检查并获取符合要求的镜像 - print_step("检查镜像版本...") - python_image = check_and_get_python_image() - mysql_image = check_and_get_mysql_image() - - # 拉取基础镜像(如果不存在则自动拉取) - print_step("拉取基础镜像...") - if not image_exists(python_image): - print_info(f"Python 镜像不存在,正在拉取: {python_image}") - run_cmd(["docker", "pull", python_image]) - print_info("Python 镜像拉取完成") - else: - print_info(f"Python 镜像已存在: {python_image}") - - if not image_exists(mysql_image): - print_info(f"MySQL 镜像不存在,正在拉取: {mysql_image}") - run_cmd(["docker", "pull", mysql_image]) - print_info("MySQL 镜像拉取完成") - else: - print_info(f"MySQL 镜像已存在: {mysql_image}") - - # 构建应用镜像 - print_step("构建应用镜像...") - # 使用 build 目录的 Dockerfile - dockerfile_path = BUILD_DIR / "Dockerfile" - if not dockerfile_path.exists(): - print_error(f"Dockerfile 不存在: {dockerfile_path}") - sys.exit(1) - print_info(f"使用 build 目录的 Dockerfile: {dockerfile_path}") - - # 构建时使用项目根目录作为上下文(因为需要复制应用代码) - os.chdir(PROJECT_ROOT) - # 但使用 build 目录的 Dockerfile - dockerfile_arg = str(dockerfile_path) - # .dockerignore 会自动使用构建上下文根目录的(即 PROJECT_ROOT/.dockerignore) - # 从 build 目录复制 .dockerignore 到根目录(临时,构建时使用) - dockerignore_build = BUILD_DIR / ".dockerignore" - dockerignore_root = PROJECT_ROOT / ".dockerignore" - if dockerignore_build.exists(): - shutil.copy2(dockerignore_build, dockerignore_root) - print_info("已使用 build 目录的 .dockerignore") - run_cmd(["docker", "build", "-t", "capacity-report-app:latest", "-f", dockerfile_arg, "."]) - # 清理临时复制的 .dockerignore(如果根目录原本没有) - if dockerignore_build.exists() and dockerignore_root.exists(): - try: - # 如果内容相同,说明是从 build 目录复制的,可以删除 - if dockerignore_build.read_text() == dockerignore_root.read_text(): - dockerignore_root.unlink() - print_info("已清理临时 .dockerignore") - except OSError: - pass - - # 标记 MySQL 镜像(提取版本号) - mysql_tag = mysql_image.split(':')[1] - mysql_tagged = f"capacity-mysql:{mysql_tag}" - run_cmd(["docker", "tag", mysql_image, mysql_tagged]) - - # 导出镜像 - print_step("导出镜像...") - images_dir = TEMP_BUILD_DIR / "images" - images_dir.mkdir(parents=True, exist_ok=True) - - tar_file = images_dir / "capacity-images.tar" - # 提取 MySQL 标签 - mysql_tag = mysql_image.split(':')[1] - mysql_tagged = f"capacity-mysql:{mysql_tag}" - - run_cmd([ - "docker", "save", - "capacity-report-app:latest", - mysql_tagged, - "-o", str(tar_file) - ]) - print_info(f"镜像导出完成: {format_size(tar_file.stat().st_size)}") - - # 复制配置文件 - print_step("复制配置文件...") - # 优先从 build 目录读取,如果不存在则从根目录读取 - def get_source_path(filename, subdir=None): - """获取源文件路径,优先 build 目录,其次根目录""" - if subdir: - build_path = BUILD_DIR / subdir / filename - root_path = PROJECT_ROOT / subdir / filename - else: - build_path = BUILD_DIR / filename - root_path = PROJECT_ROOT / filename - return build_path if build_path.exists() else root_path - - # Configure.json 和 ReportScript.sql 从项目根目录读取(应用配置文件) - files_to_copy = [ - (PROJECT_ROOT / "Configure.json", TEMP_BUILD_DIR / "Configure.json"), - (PROJECT_ROOT / "ReportScript.sql", TEMP_BUILD_DIR / "ReportScript.sql"), - (get_source_path("docker-compose.yml"), TEMP_BUILD_DIR / "docker-compose.yml"), - (get_source_path("custom.cnf", "mysql/conf.d"), TEMP_BUILD_DIR / "mysql" / "conf.d" / "custom.cnf"), - (get_source_path("01-init-db.sql", "mysql/init"), TEMP_BUILD_DIR / "mysql" / "init" / "01-init-db.sql"), - ] - - for src, dst in files_to_copy: - if src.exists(): - dst.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(src, dst) - else: - print_warning(f"{src.name} 不存在: {src}") - - # 更新 Configure.json - config_file = TEMP_BUILD_DIR / "Configure.json" - if config_file.exists(): - with open(config_file, 'r', encoding='utf-8') as f: - config = json.load(f) - config['MySQL_DBInfo'] = { - 'host': MYSQL_HOST, - 'port': MYSQL_PORT, - 'user': MYSQL_ROOT_USER, - 'passwd': MYSQL_ROOT_PASSWORD, - 'dbname': MYSQL_DATABASE - } - with open(config_file, 'w', encoding='utf-8') as f: - json.dump(config, f, ensure_ascii=False, indent=2) - - # 生成 deploy.sh - print_step("生成部署脚本...") - write_sh_script(TEMP_BUILD_DIR / "deploy.sh", get_deploy_sh()) - - # 打包 - print_step("打包部署包...") - tar_output = DIST_DIR / "capacity-report-full.tar.gz" - DIST_DIR.mkdir(exist_ok=True) - - with tarfile.open(tar_output, 'w:gz') as tar: - tar.add(TEMP_BUILD_DIR, arcname='.') - - print_info(f"部署包已生成: {tar_output}") - print_info(f"文件大小: {format_size(tar_output.stat().st_size)}") - - # 清理临时文件和缓存 - print_step("清理临时文件...") - if TEMP_BUILD_DIR.exists(): - shutil.rmtree(TEMP_BUILD_DIR, ignore_errors=True) - print_info("已清理临时构建目录") - - return tar_output - -def build_update_package(): - """构建更新包""" - print_step("构建更新包...") - - # 清理临时目录 - if TEMP_BUILD_DIR.exists(): - shutil.rmtree(TEMP_BUILD_DIR) - TEMP_BUILD_DIR.mkdir(parents=True, exist_ok=True) - - # 检查 Docker - if not check_command("docker"): - print_error("未检测到 Docker") - sys.exit(1) - - # 检查并获取符合要求的镜像 - print_step("检查镜像版本...") - python_image = check_and_get_python_image() - - # 拉取基础镜像(如果不存在则自动拉取) - print_step("拉取基础镜像...") - if not image_exists(python_image): - print_info(f"Python 镜像不存在,正在拉取: {python_image}") - run_cmd(["docker", "pull", python_image]) - print_info("Python 镜像拉取完成") - else: - print_info(f"Python 镜像已存在: {python_image}") - - # 构建应用镜像 - print_step("构建应用镜像...") - # 使用 build 目录的 Dockerfile - dockerfile_path = BUILD_DIR / "Dockerfile" - if not dockerfile_path.exists(): - print_error(f"Dockerfile 不存在: {dockerfile_path}") - sys.exit(1) - print_info(f"使用 build 目录的 Dockerfile: {dockerfile_path}") - - # 构建时使用项目根目录作为上下文(因为需要复制应用代码) - os.chdir(PROJECT_ROOT) - # 但使用 build 目录的 Dockerfile - dockerfile_arg = str(dockerfile_path) - # .dockerignore 会自动使用构建上下文根目录的(即 PROJECT_ROOT/.dockerignore) - # 从 build 目录复制 .dockerignore 到根目录(临时,构建时使用) - dockerignore_build = BUILD_DIR / ".dockerignore" - dockerignore_root = PROJECT_ROOT / ".dockerignore" - if dockerignore_build.exists(): - shutil.copy2(dockerignore_build, dockerignore_root) - print_info("已使用 build 目录的 .dockerignore") - run_cmd(["docker", "build", "-t", "capacity-report-app:latest", "-f", dockerfile_arg, "."]) - # 清理临时复制的 .dockerignore(如果根目录原本没有) - if dockerignore_build.exists() and dockerignore_root.exists(): - try: - # 如果内容相同,说明是从 build 目录复制的,可以删除 - if dockerignore_build.read_text() == dockerignore_root.read_text(): - dockerignore_root.unlink() - print_info("已清理临时 .dockerignore") - except OSError: - pass - - # 导出镜像 - print_step("导出镜像...") - images_dir = TEMP_BUILD_DIR / "images" - images_dir.mkdir(parents=True, exist_ok=True) - - tar_file = images_dir / "capacity-app-update.tar" - run_cmd([ - "docker", "save", - "capacity-report-app:latest", - "-o", str(tar_file) - ]) - print_info(f"镜像导出完成: {format_size(tar_file.stat().st_size)}") - - # 复制配置文件 - print_step("复制配置文件...") - # 从 build 目录读取配置文件 - def get_source_path(filename, subdir=None): - """获取源文件路径,从 build 目录读取""" - if subdir: - return BUILD_DIR / subdir / filename - else: - return BUILD_DIR / filename - - files_to_copy = [ - (get_source_path("docker-compose.yml"), TEMP_BUILD_DIR / "docker-compose.yml"), - ] - - for src, dst in files_to_copy: - if src.exists(): - dst.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(src, dst) - - # 生成 update.sh - print_step("生成更新脚本...") - write_sh_script(TEMP_BUILD_DIR / "update.sh", get_update_sh()) - - # 打包 - print_step("打包更新包...") - tar_output = DIST_DIR / "capacity-report-update.tar.gz" - DIST_DIR.mkdir(exist_ok=True) - - with tarfile.open(tar_output, 'w:gz') as tar: - tar.add(TEMP_BUILD_DIR, arcname='.') - - print_info(f"更新包已生成: {tar_output}") - print_info(f"文件大小: {format_size(tar_output.stat().st_size)}") - - # 清理临时文件和缓存 - print_step("清理临时文件...") - if TEMP_BUILD_DIR.exists(): - shutil.rmtree(TEMP_BUILD_DIR, ignore_errors=True) - print_info("已清理临时构建目录") - - return tar_output - -def main(): - print("=" * 60) - print("CapacityReport 统一构建脚本") - print("=" * 60) - print() - - print_choice("请选择构建类型:") - print(" 1. 完整部署包 (包含 MySQL + 应用)") - print(" 2. 更新包 (仅应用)") - print() - - while True: - choice = input("请输入选项 (1/2): ").strip() - if choice in ['1', '2']: - break - print_error("无效选项,请输入 1 或 2") - - print() - - if choice == '1': - tar_file = build_full_package() - print() - print("=" * 60) - print("构建完成!") - print("=" * 60) - print() - print(f"部署包位置: {tar_file}") - print() - print("使用方法:") - print("1. 将 tar.gz 文件传输到目标 Linux 机器") - print("2. 解压: tar -xzf capacity-report-full.tar.gz") - print("3. 进入解压目录,执行: sh deploy.sh") - print() - else: - tar_file = build_update_package() - print() - print("=" * 60) - print("构建完成!") - print("=" * 60) - print() - print(f"更新包位置: {tar_file}") - print() - print("使用方法:") - print("1. 将 tar.gz 文件传输到目标 Linux 机器") - print("2. 解压: tar -xzf capacity-report-update.tar.gz") - print("3. 进入解压目录,执行: sh update.sh") - print() - print("注意: 更新包仅用于更新已部署的应用,不包含 MySQL") - print() - -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - print("\n\n构建已取消") - sys.exit(1) - except Exception as e: - print_error(f"构建失败: {e}") - traceback.print_exc() - sys.exit(1) diff --git a/build/capareport-server.spec b/build/capareport-server.spec new file mode 100644 index 0000000..f117c7b --- /dev/null +++ b/build/capareport-server.spec @@ -0,0 +1,99 @@ +# -*- mode: python ; coding: utf-8 -*- + +import os +from pathlib import Path + + +project_root = Path.cwd() +onefile = os.environ.get("CAPAREPORT_ONEFILE") == "1" + +hiddenimports = [ + "uvicorn.logging", + "uvicorn.loops.auto", + "uvicorn.loops.asyncio", + "uvicorn.protocols.http.auto", + "uvicorn.protocols.http.h11_impl", + "uvicorn.protocols.websockets.auto", + "uvicorn.protocols.websockets.websockets_impl", + "uvicorn.lifespan.on", + "pymysql", + "paramiko", + "openpyxl", + "chardet", +] + +excludes = [ + "pytest", + "pandas.tests", + "numpy.tests", + "openpyxl.tests", + "matplotlib", + "IPython", + "notebook", + "tkinter", +] + +a = Analysis( + [str(project_root / "app" / "main.py")], + pathex=[str(project_root)], + binaries=[], + datas=[], + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=excludes, + noarchive=False, + optimize=0, +) + +pyz = PYZ(a.pure) + +if onefile: + exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + exclude_binaries=False, + name="capareport-server", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + ) +else: + exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name="capareport-server", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, + ) + + coll = COLLECT( + exe, + a.binaries, + a.datas, + strip=False, + upx=True, + upx_exclude=[], + name="capareport-server", + ) diff --git a/build/docker-compose.yml b/build/docker-compose.yml index 3421433..a97330e 100644 --- a/build/docker-compose.yml +++ b/build/docker-compose.yml @@ -1,15 +1,4 @@ -# CapacityReport Docker 编排文件 -# 用于内网离线部署 -# -# 使用方法: -# sh deploy.sh # 一键导入镜像并启动服务 -# docker-compose up -d # 启动所有服务 -# docker-compose down # 停止所有服务 - -version: '3.8' - services: - # 容量报表应用 capacity-app: image: capacity-report-app:latest container_name: capacity-report-app @@ -17,12 +6,10 @@ services: ports: - "19081:9081" volumes: - # 持久化数据 - - ./cache:/app/cache - - ./Configure.json:/app/Configure.json - - ./ReportScript.sql:/app/ReportScript.sql - # 日志目录 - - ./logs:/var/log/supervisor + - ../cache:/app/cache + - ../Configure.json:/app/Configure.json + - ../ReportScript.sql:/app/ReportScript.sql + - ../logs:/var/log/supervisor environment: - TZ=Asia/Shanghai - PYTHONUNBUFFERED=1 @@ -33,19 +20,15 @@ services: networks: - capacity-network - # MySQL 数据库 capacity-mysql: - image: capacity-mysql:8.0.44 + image: mysql:8.0.44 container_name: capacity-mysql restart: unless-stopped ports: - "13306:3306" volumes: - # 数据持久化 - capacity-mysql-data:/var/lib/mysql - # 自定义配置(启用 LOAD DATA INFILE) - ./mysql/conf.d:/etc/mysql/conf.d:ro - # 初始化脚本(仅在首次启动时执行) - ./mysql/init:/docker-entrypoint-initdb.d:ro environment: - TZ=Asia/Shanghai diff --git a/build/mysql/conf.d/custom.cnf b/build/mysql/conf.d/custom.cnf index 80ea686..0113937 100644 --- a/build/mysql/conf.d/custom.cnf +++ b/build/mysql/conf.d/custom.cnf @@ -1,33 +1,27 @@ -# MySQL 自定义配置 - CapacityReport -# 启用 LOAD DATA LOCAL INFILE 支持 +# MySQL settings for CapacityReport [mysqld] -# 字符集 +# Charset character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci -# 启用 LOAD DATA LOCAL INFILE +# LOAD DATA LOCAL INFILE local_infile = ON secure_file_priv = "" -# 性能优化 +# Performance max_allowed_packet = 256M innodb_buffer_pool_size = 512M innodb_log_file_size = 128M innodb_flush_log_at_trx_commit = 2 sync_binlog = 0 -# 连接设置 +# Connections max_connections = 200 wait_timeout = 28800 interactive_timeout = 28800 -# 日志(可选,生产环境建议注释掉) -# general_log = 1 -# general_log_file = /var/lib/mysql/general.log - [mysql] -# 客户端设置 local_infile = ON default-character-set = utf8mb4 diff --git a/build/mysql/init/01-init-db.sql b/build/mysql/init/01-init-db.sql index afef3b5..a8efc2c 100644 --- a/build/mysql/init/01-init-db.sql +++ b/build/mysql/init/01-init-db.sql @@ -1,13 +1,10 @@ --- MySQL 初始化脚本 - 确保数据库以正确的字符集创建 --- 此脚本仅在首次初始化时执行(数据目录为空时) +-- MySQL initialization for CapacityReport. +-- This file runs only when the MySQL data directory is empty. --- 如果数据库不存在,则创建(使用 utf8mb4 字符集) CREATE DATABASE IF NOT EXISTS CapacityReport CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --- 切换到数据库 USE CapacityReport; --- 输出确认信息 SELECT 'CapacityReport database initialized with utf8mb4 charset' AS status; diff --git a/docs/project_context.md b/docs/project_context.md index 6fe3bb0..522bd9c 100644 --- a/docs/project_context.md +++ b/docs/project_context.md @@ -378,3 +378,16 @@ - 当前项目按每周整包替换使用,不维护旧版 API 兼容层;但核心处理流程、配置文件和 `ReportScript.sql` 仍沿用现有语义。 - `ReportScript.sql` 是业务处理链路的一部分,重构接口或前端时不要改写 SQL 语义。 - `auth.ini`、`cache/`、`dist/`、`frontend/dist/`、`frontend/node_modules/` 均为本地运行或构建产物,不进入版本库。 + +## 2026-05-20: Cross-platform packaging + +- Added one-command build entry points: `scripts/build.bat`, `scripts/build.ps1`, and `scripts/build.sh`. Targets are `server`, `desktop`, `docker`, and `all`; script output stays ASCII to avoid console encoding issues on Windows. +- Server Portable uses PyInstaller one-dir mode and packages the backend executable with `frontend/dist`, `Configure.json`, `ReportScript.sql`, `cache/`, `logs/`, and launch scripts. The default server port remains `9081`. +- Desktop packaging uses Tauri 2 + Vue + Python sidecar. The build sets `VITE_API_BASE=http://127.0.0.1:19082`, builds a PyInstaller one-file `capareport-server` sidecar, and the desktop app starts it on `127.0.0.1:19082`. +- `app/config.py` supports `CAPAREPORT_BASE_DIR`; frozen PyInstaller server builds default `BASE_DIR` to the executable directory. The Tauri sidecar sets `CAPAREPORT_BASE_DIR` to the app data directory so runtime files are not written into the install directory. +- Tauri startup creates app-data `cache/` and `logs/`, then copies bundled `Configure.json` and `ReportScript.sql` on first run. Resource lookup supports both normal Tauri resources and the `_up_` directory generated for bundled `../` resources. +- Windows desktop shutdown uses `taskkill /F /T /PID` before killing the shell child, which avoids PyInstaller one-file sidecar process leftovers. +- Docker build now copies only required app files and frontend build output. `.dockerignore` excludes local dependencies, caches, build output, and local config; `build/docker-compose.yml` mounts paths relative to the `build/` directory. +- `app/main.py` accepts `--host` and `--port` and exposes `run_server()` so portable launchers, Docker, and the Tauri sidecar share the same backend entry point. +- Windows verification completed: `scripts\build.bat server -NoArchive`, `scripts\build.bat server`, `scripts\build.bat docker`, and `scripts\build.bat desktop`. Server portable `/health`, Docker container `/health`, and desktop sidecar `/health` all returned HTTP 200; desktop first run also copied config and SQL into app data. +- Cleanup verification completed: `.venv\Scripts\python.exe -m compileall app`, `npm run build`, PowerShell AST parse for `scripts/build.ps1`, Docker-hosted `sh -n scripts/build.sh`, and `cargo check --manifest-path src-tauri\Cargo.toml` with a temporary sidecar placeholder all passed. Linux/macOS native server and desktop packages still need native OS verification. diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 37b3cdc..87ed013 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -1,6 +1,7 @@ import type { ApiError } from '../types'; const TOKEN_KEY = 'capacity_report_token'; +const API_BASE = (import.meta.env.VITE_API_BASE || '').replace(/\/$/, ''); let onUnauthorized: (() => void) | null = null; export function getToken(): string { @@ -40,7 +41,7 @@ export async function request(url: string, init: RequestInit = {}): Promise( ): Promise { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); - xhr.open('POST', url); + xhr.open('POST', apiUrl(url)); const token = getToken(); if (token) { @@ -103,7 +104,7 @@ export async function download(url: string, body: unknown, filename: string): Pr headers.set('Authorization', `Bearer ${token}`); } - const response = await fetch(url, { + const response = await fetch(apiUrl(url), { method: 'POST', headers, body: JSON.stringify(body) @@ -123,7 +124,7 @@ export async function downloadGet(url: string, fallbackFilename: string): Promis headers.set('Authorization', `Bearer ${token}`); } - const response = await fetch(url, { headers }); + const response = await fetch(apiUrl(url), { headers }); if (response.status === 401) { clearToken(); onUnauthorized?.(); @@ -177,3 +178,10 @@ function parseFilename(disposition: string | null): string { const plainMatch = disposition.match(/filename="?([^";]+)"?/i); return plainMatch?.[1] || ''; } + +function apiUrl(url: string): string { + if (!API_BASE || /^https?:\/\//i.test(url)) { + return url; + } + return `${API_BASE}${url.startsWith('/') ? url : `/${url}`}`; +} diff --git a/scripts/build.bat b/scripts/build.bat new file mode 100644 index 0000000..59f1147 --- /dev/null +++ b/scripts/build.bat @@ -0,0 +1,6 @@ +@echo off +setlocal + +set SCRIPT_DIR=%~dp0 +powershell -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%build.ps1" %* +exit /b %ERRORLEVEL% diff --git a/scripts/build.ps1 b/scripts/build.ps1 new file mode 100644 index 0000000..f348b16 --- /dev/null +++ b/scripts/build.ps1 @@ -0,0 +1,326 @@ +param( + [ValidateSet("server", "desktop", "docker", "all")] + [string]$Target = "all", + + [ValidateSet("current", "windows", "linux", "macos")] + [string]$Platform = "current", + + [switch]$SkipDockerBuild, + [switch]$SkipDesktopBuild, + [switch]$NoArchive, + [switch]$Clean, + [Alias("h", "?")] + [switch]$Help +) + +$ErrorActionPreference = "Stop" +$ProgressPreference = "SilentlyContinue" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$Root = Resolve-Path (Join-Path $ScriptDir "..") +$DistDir = Join-Path $Root "dist" +$PackageDir = Join-Path $DistDir "packages" +$PyInstallerDir = Join-Path $Root "build\pyinstaller" +$FrontendDir = Join-Path $Root "frontend" +$ServerName = "capareport-server" +$AppVersion = "2.0.2" +$DesktopApiBase = "http://127.0.0.1:19082" + +function Write-Step($Message) { + Write-Host "" + Write-Host "==> $Message" -ForegroundColor Green +} + +function Write-Info($Message) { + Write-Host " $Message" +} + +function Show-Usage { + Write-Host "Usage: scripts\build.bat [server|desktop|docker|all] [options]" + Write-Host "" + Write-Host "Options:" + Write-Host " -Platform current|windows|linux|macos" + Write-Host " -NoArchive" + Write-Host " -Clean" + Write-Host " -SkipDockerBuild" + Write-Host " -SkipDesktopBuild" +} + +function Invoke-Checked($Command, $WorkingDirectory = $Root) { + Write-Info $Command + Push-Location $WorkingDirectory + try { + cmd /c $Command + if ($LASTEXITCODE -ne 0) { + throw "Command failed with exit code $LASTEXITCODE`: $Command" + } + } + finally { + Pop-Location + } +} + +function Get-CurrentPlatform { + if ($Platform -ne "current") { + return $Platform + } + if ($env:OS -eq "Windows_NT") { + return "windows" + } + $uname = (uname -s 2>$null) + if ($uname -eq "Darwin") { + return "macos" + } + return "linux" +} + +function Get-ExecutableName($PlatformName) { + if ($PlatformName -eq "windows") { + return "$ServerName.exe" + } + return $ServerName +} + +function Get-RustHostTriple { + $output = rustc -vV + foreach ($line in $output) { + if ($line -like "host:*") { + return $line.Substring(5).Trim() + } + } + throw "Unable to detect Rust host triple" +} + +function Test-TauriCli { + cmd /c "cargo tauri --version >nul 2>nul" + return $LASTEXITCODE -eq 0 +} + +function Ensure-PythonEnvironment { + Write-Step "Preparing Python environment" + $venvPython = Join-Path $Root ".venv\Scripts\python.exe" + if (!(Test-Path $venvPython)) { + Invoke-Checked "uv venv" $Root + } + Invoke-Checked "uv pip install -r requirements.txt" $Root + Invoke-Checked "uv pip install pyinstaller" $Root +} + +function Build-Frontend($ApiBase) { + Write-Step "Building frontend" + if (!(Test-Path (Join-Path $FrontendDir "node_modules"))) { + Invoke-Checked "npm ci" $FrontendDir + } + + $previousApiBase = $env:VITE_API_BASE + if ($ApiBase) { + $env:VITE_API_BASE = $ApiBase + } + else { + Remove-Item Env:\VITE_API_BASE -ErrorAction SilentlyContinue + } + + try { + Invoke-Checked "npm run build" $FrontendDir + } + finally { + if ($null -ne $previousApiBase) { + $env:VITE_API_BASE = $previousApiBase + } + else { + Remove-Item Env:\VITE_API_BASE -ErrorAction SilentlyContinue + } + } +} + +function Build-ServerBinary([switch]$OneFile) { + Ensure-PythonEnvironment + Write-Step "Building server binary" + Remove-Item -LiteralPath $PyInstallerDir -Recurse -Force -ErrorAction SilentlyContinue + $python = Join-Path $Root ".venv\Scripts\python.exe" + $previousOneFile = $env:CAPAREPORT_ONEFILE + if ($OneFile) { + $env:CAPAREPORT_ONEFILE = "1" + } + else { + Remove-Item Env:\CAPAREPORT_ONEFILE -ErrorAction SilentlyContinue + } + + try { + Invoke-Checked "`"$python`" -m PyInstaller --clean --noconfirm --workpath build\pyinstaller\work --distpath build\pyinstaller\dist build\capareport-server.spec" $Root + } + finally { + if ($null -ne $previousOneFile) { + $env:CAPAREPORT_ONEFILE = $previousOneFile + } + else { + Remove-Item Env:\CAPAREPORT_ONEFILE -ErrorAction SilentlyContinue + } + } + + if ($OneFile) { + $binaryDir = Join-Path $PyInstallerDir "dist" + $binaryPath = Join-Path $binaryDir (Get-ExecutableName (Get-CurrentPlatform)) + if (!(Test-Path $binaryPath)) { + throw "PyInstaller output not found: $binaryPath" + } + } + else { + $binaryDir = Join-Path $PyInstallerDir "dist\$ServerName" + if (!(Test-Path $binaryDir)) { + throw "PyInstaller output not found: $binaryDir" + } + } + return $binaryDir +} + +function Write-TextFile($Path, $Content, [switch]$Lf) { + $parent = Split-Path -Parent $Path + New-Item -ItemType Directory -Force -Path $parent | Out-Null + if ($Lf) { + [System.IO.File]::WriteAllText($Path, $Content.Replace("`r`n", "`n"), [System.Text.UTF8Encoding]::new($false)) + } + else { + [System.IO.File]::WriteAllText($Path, $Content, [System.Text.UTF8Encoding]::new($false)) + } +} + +function Copy-RuntimeFiles($OutputDir) { + Copy-Item -Path (Join-Path $Root "Configure.json") -Destination (Join-Path $OutputDir "Configure.json") -Force + Copy-Item -Path (Join-Path $Root "ReportScript.sql") -Destination (Join-Path $OutputDir "ReportScript.sql") -Force + New-Item -ItemType Directory -Force -Path (Join-Path $OutputDir "cache") | Out-Null + New-Item -ItemType Directory -Force -Path (Join-Path $OutputDir "logs") | Out-Null + + $frontendDist = Join-Path $FrontendDir "dist" + if (!(Test-Path $frontendDist)) { + throw "Frontend dist not found: $frontendDist" + } + New-Item -ItemType Directory -Force -Path (Join-Path $OutputDir "frontend") | Out-Null + Copy-Item -Path $frontendDist -Destination (Join-Path $OutputDir "frontend") -Recurse -Force +} + +function Write-ServerLaunchers($OutputDir, $PlatformName) { + $exe = Get-ExecutableName $PlatformName + $bat = @" +@echo off +setlocal +cd /d "%~dp0" +if not exist cache mkdir cache +if not exist logs mkdir logs +echo Starting CapacityReport server... +echo URL: http://localhost:9081 +"%~dp0$exe" --host 0.0.0.0 --port 9081 +pause +"@ + Write-TextFile (Join-Path $OutputDir "run.bat") $bat + + $sh = @' +#!/usr/bin/env sh +set -eu +SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +cd "$SCRIPT_DIR" +mkdir -p cache logs +chmod +x "./__SERVER_EXE__" 2>/dev/null || true +echo "Starting CapacityReport server..." +echo "URL: http://localhost:9081" +exec "./__SERVER_EXE__" --host 0.0.0.0 --port 9081 +'@ + $sh = $sh.Replace("__SERVER_EXE__", $exe) + Write-TextFile (Join-Path $OutputDir "start.sh") $sh -Lf +} + +function Build-ServerPortable { + $platformName = Get-CurrentPlatform + if ($platformName -ne "windows" -and $env:OS -eq "Windows_NT") { + Write-Host "Native $platformName portable packages must be built on $platformName." -ForegroundColor Yellow + Write-Host "The Windows build will continue for the current host." -ForegroundColor Yellow + $platformName = "windows" + } + + Build-Frontend $null + $binaryDir = Build-ServerBinary + + $outputDir = Join-Path $PackageDir "CapacityReport-Server-$platformName-x64" + Remove-Item -LiteralPath $outputDir -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Force -Path $outputDir | Out-Null + + Copy-Item -Path (Join-Path $binaryDir "*") -Destination $outputDir -Recurse -Force + Copy-RuntimeFiles $outputDir + Write-ServerLaunchers $outputDir $platformName + + if (!$NoArchive) { + $archive = "$outputDir.zip" + Remove-Item -LiteralPath $archive -Force -ErrorAction SilentlyContinue + Compress-Archive -Path (Join-Path $outputDir "*") -DestinationPath $archive -Force + Write-Info "Archive: $archive" + } + + Write-Info "Server package: $outputDir" +} + +function Build-DockerImage { + if ($SkipDockerBuild) { + Write-Host "Docker build skipped." + return + } + + Write-Step "Building Docker image" + Invoke-Checked "docker build --progress=plain -f build\Dockerfile -t capacity-report-app:latest ." $Root + Invoke-Checked "docker compose -f build\docker-compose.yml config" $Root +} + +function Build-DesktopPackage { + if ($SkipDesktopBuild) { + Write-Host "Desktop build skipped." + return + } + + if (!(Get-Command rustc -ErrorAction SilentlyContinue)) { + throw "Rust is required for the Tauri desktop build" + } + + Build-Frontend $DesktopApiBase + $binaryDir = Build-ServerBinary -OneFile + $platformName = Get-CurrentPlatform + $exe = Get-ExecutableName $platformName + $triple = Get-RustHostTriple + $sidecarDir = Join-Path $Root "src-tauri\binaries" + New-Item -ItemType Directory -Force -Path $sidecarDir | Out-Null + $sidecarName = if ($platformName -eq "windows") { "$ServerName-$triple.exe" } else { "$ServerName-$triple" } + Copy-Item -Path (Join-Path $binaryDir $exe) -Destination (Join-Path $sidecarDir $sidecarName) -Force + + if (!(Test-TauriCli)) { + Write-Step "Installing Tauri CLI" + Invoke-Checked "cargo install tauri-cli --locked" $Root + } + + Write-Step "Building Tauri desktop package" + Invoke-Checked "cargo tauri build" (Join-Path $Root "src-tauri") +} + +if ($Help) { + Show-Usage + exit 0 +} + +if ($Clean) { + Write-Step "Cleaning build output" + Remove-Item -LiteralPath $DistDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -LiteralPath $PyInstallerDir -Recurse -Force -ErrorAction SilentlyContinue + Remove-Item -LiteralPath (Join-Path $Root "src-tauri\binaries") -Recurse -Force -ErrorAction SilentlyContinue +} + +New-Item -ItemType Directory -Force -Path $PackageDir | Out-Null + +switch ($Target) { + "server" { Build-ServerPortable } + "docker" { Build-DockerImage } + "desktop" { Build-DesktopPackage } + "all" { + Build-ServerPortable + Build-DockerImage + Build-DesktopPackage + } +} + +Write-Step "Build finished" diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100644 index 0000000..1ce8de7 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,128 @@ +#!/usr/bin/env sh +set -eu + +TARGET="${1:-server}" +SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +ROOT="$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)" +DESKTOP_API_BASE="http://127.0.0.1:19082" +cd "$ROOT" + +log() { + printf '\n==> %s\n' "$1" +} + +run() { + printf ' %s\n' "$*" + "$@" +} + +platform_name() { + case "$(uname -s)" in + Darwin) printf 'macos' ;; + Linux) printf 'linux' ;; + *) printf 'windows' ;; + esac +} + +ensure_python() { + log "Preparing Python environment" + if [ ! -x ".venv/bin/python" ]; then + run uv venv + fi + run uv pip install -r requirements.txt + run uv pip install pyinstaller +} + +build_frontend() { + log "Building frontend" + if [ ! -d "frontend/node_modules" ]; then + (cd frontend && run npm ci) + fi + if [ "${1:-}" = "desktop" ]; then + (cd frontend && VITE_API_BASE="$DESKTOP_API_BASE" run npm run build) + else + (cd frontend && run npm run build) + fi +} + +build_server_binary() { + mode="${1:-onedir}" + ensure_python + log "Building server binary" + rm -rf build/pyinstaller + if [ "$mode" = "onefile" ]; then + CAPAREPORT_ONEFILE=1 + export CAPAREPORT_ONEFILE + run .venv/bin/python -m PyInstaller --clean --noconfirm \ + --workpath build/pyinstaller/work \ + --distpath build/pyinstaller/dist \ + build/capareport-server.spec + unset CAPAREPORT_ONEFILE + else + run .venv/bin/python -m PyInstaller --clean --noconfirm \ + --workpath build/pyinstaller/work \ + --distpath build/pyinstaller/dist \ + build/capareport-server.spec + fi +} + +write_launchers() { + out_dir="$1" + exe_name="$2" + cat > "$out_dir/start.sh" </dev/null || true +echo "Starting CapacityReport server..." +echo "URL: http://localhost:9081" +exec "./$exe_name" --host 0.0.0.0 --port 9081 +EOF + chmod +x "$out_dir/start.sh" +} + +build_server() { + platform="$(platform_name)" + build_frontend server + build_server_binary onedir + + out_dir="dist/packages/CapacityReport-Server-$platform-x64" + rm -rf "$out_dir" + mkdir -p "$out_dir/cache" "$out_dir/logs" "$out_dir/frontend" + cp -R build/pyinstaller/dist/capareport-server/. "$out_dir/" + cp Configure.json ReportScript.sql "$out_dir/" + cp -R frontend/dist "$out_dir/frontend/" + write_launchers "$out_dir" "capareport-server" + (cd "$out_dir/.." && tar -czf "$(basename "$out_dir").tar.gz" "$(basename "$out_dir")") + log "Server package: $out_dir" +} + +build_docker() { + log "Building Docker image" + run docker build --progress=plain -f build/Dockerfile -t capacity-report-app:latest . + run docker compose -f build/docker-compose.yml config +} + +build_desktop() { + build_frontend desktop + build_server_binary onefile + triple="$(rustc -vV | awk '/^host:/ {print $2}')" + mkdir -p src-tauri/binaries + cp build/pyinstaller/dist/capareport-server "src-tauri/binaries/capareport-server-$triple" + if ! cargo tauri --version >/dev/null 2>&1; then + run cargo install tauri-cli --locked + fi + (cd src-tauri && run cargo tauri build) +} + +case "$TARGET" in + server) build_server ;; + docker) build_docker ;; + desktop) build_desktop ;; + all) build_server; build_docker; build_desktop ;; + *) echo "Usage: scripts/build.sh [server|docker|desktop|all]" >&2; exit 1 ;; +esac + +log "Build finished" diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 0000000..12b7a52 --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,4787 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.11.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "capacity-report-desktop" +version = "2.0.2" +dependencies = [ + "tauri", + "tauri-build", + "tauri-plugin-shell", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link 0.2.1", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.11.1", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.1", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dbus" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash 0.2.0", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "embed-resource" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.2+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "js-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.11.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +dependencies = [ + "libc", +] + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "muda" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae8844f63b5b118e334e205585b8c5c17b984121dbdb179d44aeb087ffad3cb" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.18", + "windows-sys 0.61.2", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.11.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "open" +version = "5.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +dependencies = [ + "dunce", + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.11.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.11+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.39.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "reqwest" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.117", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.11.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shared_child" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" +dependencies = [ + "libc", + "sigchld", + "windows-sys 0.60.2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "sigchld" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" +dependencies = [ + "libc", + "os_pipe", + "signal-hook", +] + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.35.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33f7f9e486ade65fcf1e45c440f9236c904f5c1002cdc7fc6ae582777345ce4" +dependencies = [ + "bitflags 2.11.1", + "block2", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437404997acf375d85f1177afa7e11bb971f274ed6a7b83a2a3e339015f4cc28" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.18", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows", +] + +[[package]] +name = "tauri-build" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa1f9055fc23919a54e4e125052bed16ed04aef0487086e758fe01a67b451c7" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a0319528a025a38c4078e7dae2c446f4e63620ddb0659a643ede1cb38f90e9" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.117", + "tauri-utils", + "thiserror 2.0.18", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6cb4e3896c21d2f6da5b31251d2faea0153bba56ed0e970f918115dbee4924" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e126abc9e84e35cdfd01596140a73a1850cdb0df0a23acf0185776c30b469a6e" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8457dbf9e2bab1edd8df22bb2c20857a59a9868e79cb3eac5ed639eec4d0c73b" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars 0.8.22", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48222d7116c8807eaa6fe2f372e023fae125084e61e6eca6d70b7961cdf129ef" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webview2-com", + "windows", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b83849ee63ecb27a8e8d0fe51915ca215076914aca43f96db1179f0f415f6cd9" +dependencies = [ + "gtk", + "http", + "jni", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092379df9a707631978e6c56b1bc2401d387f01e2d4a3c123360d167bbb9aa95" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.2+spec-1.1.0", +] + +[[package]] +name = "tendril" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +dependencies = [ + "new_debug_unreachable", + "utf-8", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.11+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.3", +] + +[[package]] +name = "toml_writer" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "bitflags 2.11.1", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tray-icon" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15edbb0d80583e85ee8df283410038e17314df5cba30da2087a54a85216c0773" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.18", + "windows-sys 0.61.2", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +dependencies = [ + "getrandom 0.4.2", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.117", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.14.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap 2.14.0", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.18", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.14.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.1", + "indexmap 2.14.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.14.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 0000000..3b5eff9 --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "capacity-report-desktop" +version = "2.0.2" +description = "CapacityReport desktop shell" +authors = ["NIXEVOL"] +edition = "2021" + +[build-dependencies] +tauri-build = { version = "2", features = [] } + +[dependencies] +tauri = { version = "2", features = [] } +tauri-plugin-shell = "2" + +[features] +default = [] diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 0000000..0c61c5d --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Default desktop permissions", + "windows": ["main"], + "permissions": ["core:default"] +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..bda2a1028e967586e2fd9acc8845ef309607fd89 GIT binary patch literal 6124 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..3da16ba71f1b127cf7509c9d8b97518b9e02ff7f GIT binary patch literal 1377 zcmV-n1)lneP)~42^VWp{3+k&N{sh}mO4H^`KFC^*%hDc28lZgRMOpHFLFB)Ho@q#|! zgNa5lAw_*K#7l!U8Z8!$Rxz3)RG}Ntr9!*3JA0Yq`OneEPDdbzzsBnF3Uy0g&^&L0M=RV&0sk=X5gK3AwXnTc#0ZjDQo` za%qx=nFZT}uuw)QN%IC{5l;be##$P$tAaKDc5`@Z|7r|v*?^vvtvG*a0Z$K)puHuF zN4MP~6(phGpDy6Q_ykH780MO%y(Crr%%GiDPM(llX8|+#gM}MCd zY}SL-?QK|*%iw`q*W<@CXHl&?xPMbW279|O^wuy^sZ@gkJi?#~4@AHN*YbsG6@6Fb zrSM-0MQnfZ0REaQVP#7b%C#Eq8Ms!y`qc0z7&$h9Gp{{|JJ($!INy|c&l)g*1RjXS zo~B8GS`~wRtK{>(k#U@xE#c}bT2SM4*mhO8SynFWym`Ik_^x~#UJ*QBs#cKC5v40U zU^E&V34xM2aFI^nqN+tdRRKWLgsdIRLBR1+flW7{y*Y=`$y0dtqfcdM+GZ`}kquR`W(uY1a_!-FKEM-)4&$zMy?AJF0O#jR zE(qfanSwVXXeQ8D^+q7&iBH3q@Q7C>vfL z{R)$R7qNfW4h(d4;*to1Avq!3y;6|F`jvU1b@t2z}k*HzWcL) zshNLpZf*{r{dz)p<)ZY+?t>rV$m9uZ?Cz8}iD$?#BP^eKc}y1gn@o>XUOh5~eWPQN z4J(dIL`C81`}V&rJ=Gz+@Izr5+uwK-&6yOMo6T}qs&=c+Yn7jUGo}Osw7wEL$ph=%5!W8ly6({R>u$% z`>*{$!uwbv59lHJzrvH-bt`PO;%mY32v_?7Bzu5ZO%BuZl!tz%F_=1{>nwsNNXwaQ z%b7P46rhXxb}GBny-E}>cFHjpJD%zNM5(eMM%l{_j|cpt7*Q-88mQr*);W4E@R7@c zl8VMEm)OR82NNOuww_*OQ|Z8S7FkYbH99U)HKRj=q))AEMviJw%WBNgOxw?uqnRUx ze=~j3s}rJJcRsnd#tdebYZb|EECF=B<$foVd}?+Q!5Fw*2+vZpBKBH->7|lOXSJoF j9gD;~dEGV82`Ktsq*3|@u+qYn00000NkvXXu0mjfaXgYq literal 0 HcmV?d00001 diff --git a/src-tauri/icons/64x64.png b/src-tauri/icons/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9e19b1349cf8b2958ee21946d2d767d94af728 GIT binary patch literal 2859 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 JPDHLkV1m*Mj^+RW literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..462646620ab22e6b8e279bec82859b8926ea28bd GIT binary patch literal 5452 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..37cc6e5a5e9f0fdf9eab773330df9920fc953839 GIT binary patch literal 7087 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9a409d2038548f35588fbfce33af3198cf983b0 GIT binary patch literal 1972 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 TD;vQt00000NkvXXu0mjfn(S}l literal 0 HcmV?d00001 diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bee19c673fc736f1547da32a52b0edfb0b884a7c GIT binary patch literal 4319 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/app-icon.png b/src-tauri/icons/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e65f1589bb9589f6104b6a27dedc47af4eedf273 GIT binary patch literal 103835 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 Lo$|q?8B6~MB#rhx literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..8425dccfccf7753442cfb868b396cf100fc24996 GIT binary patch literal 110073 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

R|IinPkZw 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%0DPzUZt-F}?7H5P?&S`hIQK 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

BoGj)W4#9rRD*1HT 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%0DM$0ZRY+9X%`c=n4X8dZ4Y&8OVy3R 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 Y?*H)rJwX2#pZ|-`{}zG&zw_h&1MZMD!~g&Q literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e0502024b42b9f8519c858210f21d3d5a4a67ef4 GIT binary patch literal 23493 zcmbq*2UrtZxAp`=4@D3OAQFn8f)a`p1p_ufP*hMU-T6;JUgn-x~3fwVRUETF_w~Y`qAr2qI z|6!m@3J`Q2+#7NHm_9GJ7 zV$JND*Hm;}<5PDdn=I#!x4-{gj!I2DlAWreDm_K@EOhkE4BPAUJ-eH-gu@!_I+0U# zhF!D)qsuO8D}V`(vI8F|l{#?5R)=8)7dO@<%jzB9DkA*h3sxmR6u#RwPLCa-lBmZ# z3dPo)Au*o-A7?UOR@S__XdE3B8ye5=KVLiZONk(%KOVsed89zI#_Y3KRGRGt&`>ax z!l7dS#hgL8TsY55o|kW=9XXZ!aQB7P57`4QX@r;_T3E@C?ok62+E(BUI|7ZYBf*oh z!&8Gx2P-Oln-p*hau){T`TJiI#`#lTp4^#%1yjLKQa<3wcLq9inz&eO<8uEtQL15Xztra8$D;|Z$;=zH(4Mgz6cs2Q?dW`7?3@Zf0hW;Mq z?<1gOl;9>zR-9g@bTA4Cs#mi_H}f<(de zLWd@HnfuR-m#JAT?aFTOb)?suP7m(h;-gx4zrF8AO_Z1a4UqwtsiLsltuC}Tv3 zvqyzomQM0>^bQc|=9ER;n#B}lrMZ8%qDl&rDJv;t&vZyVdj!(4R-U4M3vCv3C|iYr}k)G_~G&1*Yq)$P^fVUq$I z0e}L_K?p>mo}A&zF7JMw5y(5%Jiu^Mz|bcnzgHawJ;F7ukT-dHZTr4qc|v>};r#*c zWpn@SpCl!YN9IJ?fyYxCkab9v5Cm{)FrMMtVF{w|_yhWA+A3@I;xmp}uQZwz{e4)e z5OM9NWQ_uDLay~S!W9_Kd~IoZelTx@lIZ0te&JWmxYlM4X(T`Zz_O?<3&0>64i|CC z^{;sL&4m$COsMr%BcdXnKBFlE^bgKnZsRv1J4?vT**bmOJAK9k1I#JClB<^q^Ytcu zPh8%m*7L5zlrt_DpoxVQMl;%0(NtD(zJN@v_3v_7Qx-)1{PA;C%j;T&g@42Ho88lz zc?G@M)9(^A7_HN`9<8}r(}sdb@MIK1f$2a@-vPK*3~qe>nr*vH6iW*)(&4SfCD~}( zR^d%~N5vuxL2!dadBA7-ITFw_9N~bWF{(cSjDXQpwe;BaF1Bz1=YWF^KmZB0Ab@Bv z3W7bL0{&q73iAk{7j{)F?CJ5qUO+Q2X#Np1U~h+oM5%0Af6%n@59?t=Vj@CjCCI4g*K^#=LL`6;2d<+_-A| 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 literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb666bed32faa61319e1075e7592e8b1eda4a38e GIT binary patch literal 21548 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 kv>N9q^l1EzYtg%OaK4? literal 0 HcmV?d00001 diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 0000000..c9c9884 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,116 @@ +use std::fs; +use std::path::{Path, PathBuf}; +use std::sync::Mutex; +use std::error::Error; + +use tauri::{Manager, Runtime}; +use tauri_plugin_shell::process::CommandChild; +use tauri_plugin_shell::ShellExt; + +struct ServerProcess { + child: CommandChild, + pid: u32, +} + +struct ServerState(Mutex>); + +fn copy_resource( + app: &tauri::App, + name: &str, + data_dir: &Path, +) -> Result<(), Box> { + let target = data_dir.join(name); + if target.exists() { + return Ok(()); + } + + for source in resource_candidates(app, name)? { + if source.exists() { + fs::copy(source, target)?; + return Ok(()); + } + } + + Err(format!("Bundled resource not found: {name}").into()) +} + +fn resource_candidates( + app: &tauri::App, + name: &str, +) -> Result, Box> { + let resource_path = app.path().resolve(name, tauri::path::BaseDirectory::Resource)?; + let escaped_parent_path = app + .path() + .resolve(format!("_up_/{name}"), tauri::path::BaseDirectory::Resource)?; + let exe_dir = std::env::current_exe()? + .parent() + .map(Path::to_path_buf) + .ok_or("Unable to resolve executable directory")?; + + Ok(vec![ + resource_path, + escaped_parent_path, + exe_dir.join(name), + exe_dir.join("_up_").join(name), + ]) +} + +fn start_server(app: &tauri::App) -> Result<(), Box> { + let data_dir = app.path().app_data_dir()?; + fs::create_dir_all(&data_dir)?; + fs::create_dir_all(data_dir.join("cache"))?; + fs::create_dir_all(data_dir.join("logs"))?; + copy_resource(app, "Configure.json", &data_dir)?; + copy_resource(app, "ReportScript.sql", &data_dir)?; + + let (mut rx, child) = app + .shell() + .sidecar("capareport-server")? + .env("CAPAREPORT_BASE_DIR", data_dir.to_string_lossy().to_string()) + .args(["--host", "127.0.0.1", "--port", "19082"]) + .spawn()?; + + tauri::async_runtime::spawn(async move { + while rx.recv().await.is_some() {} + }); + + let pid = child.pid(); + let state = app.state::(); + *state.0.lock().expect("server state lock poisoned") = Some(ServerProcess { child, pid }); + Ok(()) +} + +fn stop_server(app: &tauri::AppHandle) { + let state = app.state::(); + let child = state + .0 + .lock() + .expect("server state lock poisoned") + .take(); + if let Some(process) = child { + #[cfg(target_os = "windows")] + { + let _ = std::process::Command::new("taskkill") + .args(["/F", "/T", "/PID", &process.pid.to_string()]) + .status(); + } + let _ = process.child.kill(); + } +} + +fn main() { + tauri::Builder::default() + .plugin(tauri_plugin_shell::init()) + .manage(ServerState(Mutex::new(None))) + .setup(|app| { + start_server(app)?; + Ok(()) + }) + .on_window_event(|window, event| { + if let tauri::WindowEvent::CloseRequested { .. } = event { + stop_server(window.app_handle()); + } + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 0000000..529918c --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "CapacityReport", + "version": "2.0.2", + "identifier": "com.nixevol.capacityreport", + "build": { + "frontendDist": "../frontend/dist" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "CapacityReport", + "width": 1280, + "height": 820, + "minWidth": 1100, + "minHeight": 720 + } + ], + "security": { + "csp": null + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "externalBin": [ + "binaries/capareport-server" + ], + "resources": [ + "../Configure.json", + "../ReportScript.sql" + ] + } +}