clutterxp 1.2.2__tar.gz → 1.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {clutterxp-1.2.2 → clutterxp-1.2.3}/PKG-INFO +1 -1
- clutterxp-1.2.3/assets/clutterxp_logo.png +0 -0
- clutterxp-1.2.3/assets/orbiting_green_folder_icon.png +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/__init__.py +1 -1
- clutterxp-1.2.3/src/clutterxp/assets/clutterxp_logo.png +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/app.py +12 -1
- clutterxp-1.2.2/assets/clutterxp_logo.png +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/.github/workflows/ci.yml +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/.gitignore +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/CHANGELOG.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/README.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/assets/clutterxp_logo.svg +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/config.example.yaml +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/00_PROJECT_PLAN.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/01_ARCHITECTURE.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/02_RULE_ENGINE.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/03_CONFIG.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/04_SAFE_MOVER.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/05_HISTORY_UNDO.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/06_WATCHER.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/07_DUPLICATES.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/08_CLI.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/09_SAFETY.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/10_TESTING.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/11_PACKAGING.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/12_GUI.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/13_ROADMAP.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/14_DECISIONS.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/15_ACCEPTANCE.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/16_RISKS.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/reviews/.gitkeep +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/reviews/acceptance_matrix.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/reviews/perf_report.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/docs/reviews/security_review.md +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/packaging/clutterxp.service +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/pyproject.toml +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/.gitkeep +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/check_contracts.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/check_ownership.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/contracts.lock.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/e2e.sh +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/scripts/smoke_readme.sh +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/app.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_config.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_doctor.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_duplicates.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_gui.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_history.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_init.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_organize.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_rules.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_scan.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_undo.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/cmd_watch.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/errors.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/cli/render.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/jsonschema.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/loader.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/placeholders.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/runtime.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/schema.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/validate.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/config/writer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/detector.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/hashcache.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/namenorm.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/quarantine.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/duplicates/report.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/api.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/models_qt.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/theme.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/dashboard.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/duplicates.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/folders.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/history.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/preview.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/rules.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/views/settings.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/gui/workers.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/db.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/pathcodec.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/recovery.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/schema.sql +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/history/undo.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/interfaces.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/locking.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/logging_setup.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/models.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/mover/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/mover/collision.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/mover/fsops.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/mover/safe_move.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/organizer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/paths.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/planner.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/py.typed +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/rules/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/rules/engine.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/rules/matcher.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/rules/template.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/rules/tokenizer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/safety.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/scanner.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/service_install.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/units.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/debounce.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/events.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/ignore.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/src/clutterxp/watch/settle.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/.gitkeep +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/doctor.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/duplicates.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/history.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/organize.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/rules_list.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/rules_test.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/schemas/scan.json +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_config.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_doctor.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_duplicates.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_general.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_gui.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_history.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_init.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_organize.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_rules.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_scan.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_undo.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/cli/test_watch.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_jsonschema_and_logging.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_loader.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_paths.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_placeholders.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_runtime.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_validate.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/config/test_writer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/duplicates/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/duplicates/test_detector.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/duplicates/test_hashcache.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/duplicates/test_namenorm.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/duplicates/test_quarantine.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A81_gui_launches_and_cli_never_imports_qt.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A82_dashboard_shows_watcher_and_recent_operations.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A83_folders_view_edits_watch_folders_and_settings.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A84_rules_editor_includes_live_trace.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A85_preview_data_equals_cli_json_plan.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A86_history_view_undo_shows_exact_refusal_reasons.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A87_duplicates_view_progress_and_cancel.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A88_duplicates_quarantine_gui.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A89_ui_thread_never_blocks_worker_cancellation.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A90_gui_extra_documented.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_api_extra.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_models_qt.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/helpers.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/test_db.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/test_pathcodec.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/test_recovery.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/test_service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/history/test_undo.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/integration/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/integration/test_acceptance_sweep.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/integration/test_fault_injection.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/integration/test_properties.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/integration/test_scenarios.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/test_collision.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/test_fsops.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/test_locking.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/mover/test_safe_move.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/organizer/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/organizer/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/organizer/test_organizer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/organizer/test_planner.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/organizer/test_scanner.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/perf/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/perf/test_perf_budgets.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/test_engine.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/test_matcher.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/test_template.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/test_tokenizer.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/rules/test_vectors.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/safety/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/safety/test_invariants_full.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/safety/test_safety_module.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/test_harness.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/test_service_install.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/__init__.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/conftest.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_acceptance.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_debounce.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_events.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_ignore.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_invariants.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_service.py +0 -0
- {clutterxp-1.2.2 → clutterxp-1.2.3}/tests/watch/test_settle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: clutterxp
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: Configurable, safe, lightweight file organizer: rules, preview, undo, watch, duplicates.
|
|
5
5
|
Project-URL: Homepage, https://github.com/aigo-admin/clutterxp
|
|
6
6
|
Project-URL: Documentation, https://github.com/aigo-admin/clutterxp#readme
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -16,7 +16,7 @@ from pathlib import Path
|
|
|
16
16
|
from typing import Any
|
|
17
17
|
|
|
18
18
|
from PySide6.QtCore import QTimer
|
|
19
|
-
from PySide6.QtGui import QAction
|
|
19
|
+
from PySide6.QtGui import QAction, QIcon
|
|
20
20
|
from PySide6.QtWidgets import (
|
|
21
21
|
QApplication,
|
|
22
22
|
QMainWindow,
|
|
@@ -50,6 +50,17 @@ class ClutterXPMainWindow(QMainWindow):
|
|
|
50
50
|
self.resize(1080, 720)
|
|
51
51
|
self.setMinimumSize(880, 580)
|
|
52
52
|
|
|
53
|
+
# Set application and window icon
|
|
54
|
+
icon_path = Path(__file__).resolve().parent.parent / "assets" / "clutterxp_logo.png"
|
|
55
|
+
if not icon_path.exists():
|
|
56
|
+
icon_path = Path(__file__).resolve().parents[3] / "assets" / "clutterxp_logo.png"
|
|
57
|
+
if icon_path.exists():
|
|
58
|
+
icon = QIcon(str(icon_path))
|
|
59
|
+
self.setWindowIcon(icon)
|
|
60
|
+
app_inst = QApplication.instance()
|
|
61
|
+
if app_inst is not None:
|
|
62
|
+
app_inst.setWindowIcon(icon)
|
|
63
|
+
|
|
53
64
|
app_instance = QApplication.instance()
|
|
54
65
|
if app_instance is not None:
|
|
55
66
|
apply_theme(app_instance)
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A81_gui_launches_and_cli_never_imports_qt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A87_duplicates_view_progress_and_cancel.py
RENAMED
|
File without changes
|
|
File without changes
|
{clutterxp-1.2.2 → clutterxp-1.2.3}/tests/gui/test_A89_ui_thread_never_blocks_worker_cancellation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|