92 lines
No EOL
4.8 KiB
Markdown
92 lines
No EOL
4.8 KiB
Markdown
# 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
|
|
- 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 |