π Version 6.2.0: The MVP Revolution - A Monumental Refactor! π
After 2.5 weeks of intensive work, supported by Gemini and Cursor AI, we are thrilled to announce the release of version 6.2.0! This is not just an update; it's the most extensive architectural refactoring the project has ever undergone. We have transitioned the entire application to a robust and modern Model-View-Presenter (MVP) architecture.
This monumental effort has resulted in a fully modular codebase where every component is decoupled and organized. This new foundation is so solid that it has passively resolved an entire class of bugs that were difficult to trace in the old structure. We've also meticulously recreated the UI, replacing the third-party qfluentwidgets
library to gain full creative control, eliminate GPL licensing constraints, and craft a more unique and individual design for the application.
This release lays the groundwork for faster, more stable, and more ambitious feature development in the future.
β¨ Highlights of 6.2.0 β¨
- Robust MVP Architecture: The project has been completely re-engineered into a Model-View-Presenter pattern. Logic, state, and UI are now cleanly separated into distinct modules (
src/core
,src/ui
,src/presenters
), making the codebase significantly easier to maintain, debug, and extend. - Custom Fluent UI: The dependency on the
PyQt-Fluent-Widgets
library has been completely removed. We have manually implemented our own set of custom, lightweight "fluent-style" components (sliders, checkboxes, buttons), freeing the project from GPL v3 obligations and allowing for a truly unique design. - Three-Level Caching System: The caching architecture has been enhanced from a two-level to a three-level system, further improving performance and responsiveness during interactive use by separating raw image data, processed display images, and interactive element caches.
- Reimagined Core Features:
- New Export Dialog: A dedicated, feature-rich export window has been created (
src/ui/dialogs/export_dialog.py
). - Structured Help Window: The help dialog has been redesigned for better clarity and navigation (
src/ui/dialogs/help_dialog.py
). - Two-Panel Image List with Drag & Drop: The image selection flyout is now a powerful two-panel manager that supports intuitive drag-and-drop for reordering items and moving them between lists.
- New Export Dialog: A dedicated, feature-rich export window has been created (
- Enhanced Launcher: The
launcher.sh
script for the git version is now a more powerful command-line utility with new commands for profiling, environment management, and more.
π Changelog (v5.8.24 to v6.2.0)
π New Features
- Dedicated Export Dialog: A brand-new export window provides comprehensive control over output settings, including format, quality, background fill, compression levels, and metadata.
- Two-Panel Image List: The image selection flyout has been completely redesigned into a two-panel interface, showing both lists simultaneously.
- Drag & Drop List Management: Implemented full drag-and-drop functionality (
src/events/drag_drop_handler.py
) within and between the image lists, allowing for effortless reordering and management of loaded files. - Reimagined Help Dialog: The help system is now a multi-page dialog with a navigation pane, making it easier to find information on specific features.
π οΈ Improvements & Refactoring
- Architectural Overhaul (MVP):
- The entire codebase has been restructured to follow the Model-View-Presenter pattern, a massive undertaking that involved splitting monolithic scripts into dozens of dedicated modules.
- Model: Core logic and application state are now managed in
src/core
, with a centralapp_state.py
. - View: All UI components are now located in
src/ui
, with a clear separation of dialogs, atomic widgets, and composite widgets. - Presenter: The
main_window_presenter.py
now orchestrates communication between the Model and the View, containing logic previously scattered across the application.
- Custom UI Components:
- Replaced the external
PyQt-Fluent-Widgets
dependency with a custom-built suite of widgets located insrc/ui/widgets/atomic/
, includingfluent_checkbox.py
,fluent_slider.py
, andfluent_switch.py
. This gives the application a more distinct look and feel.
- Replaced the external
- Enhanced Caching Architecture: The caching mechanism was improved from two to three distinct levels, optimizing memory usage and rendering speed for a smoother user experience.
- Improved Launcher (
launcher.sh
):- The launcher is now more robust and feature-rich, with added support for performance profiling (
profile
command) and more granular environment control (recreate
,delete
). - It now features better visual feedback during dependency installation, including an inline progress bar.
- The launcher is now more robust and feature-rich, with added support for performance profiling (
ποΈ Removals & Changes
- Removed
PyQt-Fluent-Widgets
Dependency: Dropped the third-party GPL v3 licensed UI library. This has led to a reduction in the application's package weight on some distributions. - License Change: As a result of removing GPL-licensed code, the project's license is no longer bound by GPL v3 obligations. (Refer to
readme.md
for the current MIT License).
A Note on the Journey
This update represents a fundamental shift in the project's philosophy, prioritizing long-term health and scalability over short-term feature additions. The move to MVP was a colossal task, but it has already paid dividends by creating a more stable, predictable, and enjoyable development environment. This clean architecture is the launchpad for all future development.
What's Next?
With this robust new foundation in place, the path is clear for implementing more complex features. Future updates will likely focus on advanced comparison tools, such as diff histograms or similar visual analysis features. There are also a couple of remaining large scripts that will be progressively broken down into smaller modules to fully complete the architectural transition.
Thank you for your continued support!
Happy Comparing,
Loganavter