2.6 KiB
2.6 KiB
Project Status: Completed
The application is fully implemented and tested for Windows 11 background operation.
Current Architecture (Finalized)
The project is structured as a proper Python package to ensure compatibility with PyInstaller and robust path handling.
auto-git/
├── run.py # Main entry point for Python/PyInstaller
├── git_monitor/ # Main package
│ ├── __init__.py # Package marker
│ ├── main.py # Application lifecycle
│ ├── tray_app.py # System tray (pystray) + UI (tkinter)
│ ├── git_manager.py # Git operations (GitPython)
│ ├── file_watcher.py # Filesystem monitoring (watchdog)
│ ├── notifier.py # Windows notifications (plyer + win10toast fallback)
│ ├── config.py # Persistent configuration (config.json)
│ ├── logger.py # Application logging (git_monitor.log)
│ └── requirements.txt # Dependency list
└── .gitignore # Project ignore rules
Implemented Solutions & Fixes
1. UI Responsive Fix (Windows 11)
To prevent the application from freezing during folder selection:
- Threading:
pystrayruns in a separate background thread. - Main Loop:
tkinter.mainloop()runs in the main thread to handle system dialogs properly. - Non-blocking Dialogs: Folder selection is scheduled via
root.after(0, ...)to ensure it doesn't block the tray icon.
2. PyInstaller Compatibility
- Package Imports: All internal imports use absolute paths (e.g.,
from git_monitor.logger import ...). - Path Management:
logger.pyandconfig.pyusesys.frozendetection to ensure data files are always located relative to the.exefile, not temporary directories. - Notification Robustness: Added a fallback mechanism in
notifier.py. Ifplyerfails to find a platform implementation (common in isolated environments), it automatically switches towin10toast.
Build Instructions
To generate the standalone executable, use the following command from the project root:
pyinstaller.exe --onefile --noconsole --name git-monitor --hidden-import="plyer.platforms.win.notification" run.py
Build Parameters:
--onefile: Packages everything into a single.exe.--noconsole: Hides the command prompt window during execution.--hidden-import: Manually includes the dynamic notification module for Windows.
Runtime Files
- Log File:
git_monitor.log(created in the same folder as the.exe). - Config File:
config.json(created in the same folder as the.exe).