4.8 KiB
4.8 KiB
Major goals
- Provide a simple and configurable way to automatically backup WoW's config data
- Provide a way to restore backed up data
Scope
- This is a desktop application, supporting both MacOS and Windows
- This uses Kotlin Compose Multiplatform to share as much code as possible
- This is a GUI application, which the user can interact with primarily through a dialog, accessible through the system tray
- The UI should be as native-looking as possible to each platform
- The UX should be as intuitive as possible
- This should be simple, straightforward to use, but configurable
Non-functional requirements
Logging
- All app operations should be logged to a file
- The log should be human-readable and timestamped
- Log files should be rotated and archived to keep sizes manageable
Native look and feel
- The app should use native components for the UI, whenever possible
- The app should leverage native APIs, like the MacOS system tray, whenever possible
- If needed, prioritise MacOS over Windows
Permissions
- The app should request the minimum permissions it needs to run, as proactively as possible
- The app should not request any permissions it doesn't need
- The app should gracefully handle missing permissions, showing a warning to the user explaining the reasoning for needing those permissions
- We must pay special attention to file and directory access permissions, particularly on MacOS
Features
1. System Tray Icon
- Show a system tray icon when the app is active
2. Configuration screen
- A configuration screen needs to be accessible
- Should be accessible through the system tray icon
- Should appear when the app is run, if any configuration is missing
2.1 Configuration options
- Run at startup
- User should be able to enable/disable this
- If enabled, the app should run automatically when the user logs in
- WoW install location
- User should be able to pick the location within their file system
- The app should try to scan default locations for an existing install, potentially saving the user some clicks
- Backup location
- User should be able to pick the destination location within their file system
- Destination should be a folder
- Backup frequency
- User should be able to define a schedule for their backups
- A small message warning that the backup will run only if WoW isn't running
- User should be able to define how much backup history to keep
- Force backup
- A checkbox to force the backup to run even when WoW is running
- A confirmation dialog should be shown if the user enables this
- Folder selection
- The user should be able to toggle the WTF and Interface folders for backup
- Each folder should have a small description of why it can be important to backup
- Notifications
- User should be able to toggle notifications for backup progress
- Notifications should be native to the platform
- Compression
- User should be able to toggle compression for backup files
- A description should inform the user what the consequences of compression are
3. Backup
- The actual backup process should happen in the background
- Backup only happens when the app is configured
- Backup is automatic, following the configured schedule
- The folders and all their contents should be backed up reliably
- If compression is enabled, the backup should be compressed in order to save space
- The result of the backup should be stored in the configured backup location, with a human-readable timestamped folder name
- If enabled, notifications should be shown to the user:
- When backup starts
- When backup finishes
- When backup fails
4. Status screen
- Accessible when clicking the system tray icon
- Should show the status of the backup process, including:
- Time and status (failed/success) of last backup
- If failed, show the reason for the failure
- Time of next scheduled backup
- Is WoW running, and is 'force backup' enabled?
- Is the backup currently running? If so, show the progress of the backup
- Time and status (failed/success) of last backup
- Should show a button to open the backup location
- Should show a button to open the configuration screen
- Should show a button to start the restore process
- Should show a message if configuration is missing or incomplete
5. Restore screen
- Should show a button to open the backup location
- Should display a list of all existing backups, and their date in a human-readable format
- Should allow the user to select a backup to restore
- Confirmation dialog should be shown before restoring, informing all current WoW data will be replaced
5.1 Restore process
- The restore process should happen in the foreground, with a proper dialog displaying the progress and ETA to finish
- The restore should be done in a way that is as transparent as possible to the user
- The restore process should be cancellable by the user