PROJECT - Implement Unified File dialog, Password Change UI, and Implement File dialog for Exclusions
| Contributor | Vandal Byte |
| Sub-Organization | Borg Collective |
| Organization | Python Software Foundation |
| Project Link | Project |
| Mentors | Manuel Riel (m3nu), Dan Helfman (witten) |
Borg is a powerful file backup tool that performs tasks like compression, encryption, authentication, and data deduplication. It is a command-line tool, and is used by many users and organizations to back up their data.
Vorta is a desktop GUI for Borg that makes it easier to interact with it without knowing any CLI commands or other intricacies. It is a cross-platform application that is built using Python and Qt, and is used by beginners and advanced users alike.
Borgmatic is a CLI wrapper around Borg that stores all Borg settings and preferences inside a configuration file and makes it easy to automate backups. It also extends Borg's capabilities by adding support for running pre and post-backup hooks, setting up monitoring, backing up databases, and more.
The primary goal of this GSoC project was to improve the code quality, user experience, and functionality of the Vorta and Borgmatic applications. The project focused on three main areas:
- Add Password Change UI - Add a new UI for changing the passphrase of a borg repository, this has been a long requested feature and once implemented will allow users to directly change the passphrase from vorta UI instead of relying on borg commanline.
- Implement Unified File dialog - Create a custom Qt-based file selector (
VortaFileDialog) to unify file and directory selection. Previously, Vorta used two separate dialogs due to limitations in Qt. This new dialog will streamline the process and improves consistency across the UI. - Implement File dialog for Exclusions - Improve the exclusion dialog in Vorta by allowing users to select files and directories via the new unified file dialog instead of manually typing exclusion patterns.
- Code Refactor, Cleanup, and Maintenance Tasks - Refactored portions of the codebase for better maintainability, fixed broken tests, and reviewed community PRs to improve overall stability and consistency of the application.
- Created and integrated an entire passphrase changing UI in Vorta.
- Added a new dropdown button in the UI to house the less-used functionalities, as well as a button for changing the passphrase.
- Created a new UI based on suggestions from discussions and previous unmerged PRs.
- The new UI was integrated into the main application UI.
- Used existing passphrase fields to reduce code duplication.
- Added tests to cover my implementation and ran existing tests to ensure that no other features were broken as a result of this.
- Built a custom Qt-based file selector (
VortaFileDialog) to support both files and directories withQTree. - Replaced existing separate dialogs to simplify and standardize file selection.
- Added a new UI for file dialog which included features like path selection, goto home button, goto parent button, tree view of the directories and files and an option to view/select hidden files.
- Verified working of the new dialog and it's addition to the source list.
- Improved overall consistency and reduced code duplication in the selection flow.
- Added tests to cover my implementation and ran existing tests to ensure that no other features were broken as a result of this.
- Implemented file dialog support for excluding files and directories from backup using exclusion patterns.
- Allowed users to visually select exclusions rather than typing the patterns manually.
- Integrated with the unified file selector to maintain consistency.
- Ensured excluded paths persist across each backup.
- Added tests to cover my implementation and ran existing tests to ensure that no other features were broken as a result of this.
All proposed tasks except PR #2252 have been successfully completed and merged upstream. The codebase is now cleaner and easier to maintain, and the overall user experience has seen noticeable improvements.
Just need to finalize and merge the new file dialog for exclusions. After that, there's a bit of cleanup to do, tidying up the code and closing out any loose ends, then it'll be time to get things ready for the next Vorta release.
A list of all the pull requests I made before and during GSoC, in chronological order of their creation.
- Improved GUI to clarify the passphrase field
- Made clarity changes to exclude dialog
- Notification timeout removed for critical errors
- Fix bug with incorrect renaming of archives after aborting edit
- Add the change passphrase feature
- Add missing placeholder keys
- Add a new unified file selector
- Add file dialog to exclude patterns
- Fix broken transifex link
- Fix the blank entry in the Custom exclusion
- Add the borg recreate
- Move Pattern and Flag Methods from create.py into their own module
- Add Borg 1.4.1 features
I want to convey my heartfelt thanks to my mentors for their significant assistance throughout this journey. Special thanks to @m3nu for taking me through the Vorta projects and @witten for his technical advice on the Borgmatic work. Your input and feedback were critical to the success of these projects. My gratitude goes to the Python Software Foundation and the Borg Collective for this opportunity. The warm and helpful character of the Borg community was greatly appreciated. I'd also like to thank Google for organizing GSoC and giving a platform to collaborate on relevant projects.