## ADDED Requirements ### Requirement: Upload backup to WebDAV The system SHALL allow users to upload a playlist backup JSON file to a selected WebDAV account. The backup file SHALL be stored at the path `/TTMusic/backups/` on the WebDAV server. The system SHALL create the directory if it does not exist. #### Scenario: Successful WebDAV backup upload - **WHEN** the user triggers "Backup to WebDAV" and selects a WebDAV account - **THEN** the system SHALL generate a backup JSON from the current playlist database - **THEN** the system SHALL create the `/TTMusic/backups/` directory on the WebDAV server if absent - **THEN** the system SHALL upload the file with name `playlist_backup_YYYYMMDD_HHmmss.json` - **THEN** the system SHALL display a success toast with the backup file name #### Scenario: WebDAV account selection - **WHEN** the user triggers "Backup to WebDAV" - **AND** multiple WebDAV accounts are configured - **THEN** the system SHALL present a picker dialog listing only WebDAV-type accounts - **THEN** the user SHALL select the target account before upload proceeds #### Scenario: No WebDAV account configured - **WHEN** the user triggers "Backup to WebDAV" - **AND** no WebDAV accounts are configured - **THEN** the system SHALL display a message prompting the user to add a WebDAV account first #### Scenario: WebDAV upload failure - **WHEN** a network error or authentication failure occurs during upload - **THEN** the system SHALL display an error toast with the failure reason - **THEN** no incomplete file SHALL remain on the server ### Requirement: Download and restore backup from WebDAV The system SHALL allow users to browse and download backup files from a WebDAV account's `/TTMusic/backups/` directory and restore playlists from the selected file. #### Scenario: Successful WebDAV restore - **WHEN** the user triggers "Restore from WebDAV" and selects a WebDAV account - **THEN** the system SHALL list all `.json` files in the `/TTMusic/backups/` directory - **THEN** the user SHALL select a backup file from the list - **THEN** the system SHALL download and parse the file - **THEN** the system SHALL import the playlists using the same conflict resolution logic as local import #### Scenario: No backups found on WebDAV - **WHEN** the `/TTMusic/backups/` directory is empty or does not exist on the WebDAV server - **THEN** the system SHALL display a message indicating no backups were found #### Scenario: WebDAV download failure - **WHEN** a network error occurs during backup file download - **THEN** the system SHALL display an error toast with the failure reason - **THEN** no data SHALL be imported ### Requirement: Server auto-backup for VIP users The system SHALL provide VIP users with automatic server backup functionality. When enabled, the system SHALL upload the playlist backup to the server API after playlist changes, using a 5-minute debounce window to merge consecutive changes into a single upload. #### Scenario: VIP user enables auto-backup - **WHEN** a VIP user toggles the auto-backup switch ON in backup settings - **THEN** the system SHALL persist the preference - **THEN** the system SHALL begin monitoring playlist changes (create, delete, update, add/remove songs) #### Scenario: Auto-backup triggered by playlist change - **WHEN** auto-backup is enabled and a playlist change occurs - **THEN** the system SHALL start a 5-minute debounce timer - **WHEN** additional changes occur within the 5-minute window - **THEN** the system SHALL reset the timer - **WHEN** the timer expires with no further changes - **THEN** the system SHALL generate a backup JSON and upload it to `POST /backup/playlist/upload` with the user's token #### Scenario: Non-VIP user attempts to enable auto-backup - **WHEN** a non-VIP user attempts to toggle the auto-backup switch - **THEN** the system SHALL display a prompt directing the user to the VIP subscription page - **THEN** the auto-backup switch SHALL remain OFF #### Scenario: VIP subscription expires while auto-backup is enabled - **WHEN** a user's VIP subscription expires - **THEN** the system SHALL disable auto-backup - **THEN** the system SHALL display a notification informing the user that auto-backup has been disabled ### Requirement: Restore from server backup The system SHALL allow VIP users to download and restore their latest server backup or select from backup history. #### Scenario: VIP user restores latest server backup - **WHEN** a VIP user triggers "Restore from Server" - **THEN** the system SHALL call `GET /backup/playlist/list` to retrieve backup history - **THEN** the system SHALL display the list of available backups with timestamps - **THEN** the user SHALL select a backup to restore - **THEN** the system SHALL call `GET /backup/playlist/download` with the selected backup identifier - **THEN** the system SHALL import playlists using the standard conflict resolution logic #### Scenario: No server backups available - **WHEN** a VIP user triggers "Restore from Server" - **AND** no backups exist on the server - **THEN** the system SHALL display a message indicating no server backups are available #### Scenario: Non-VIP user attempts server restore - **WHEN** a non-VIP user attempts to access "Restore from Server" - **THEN** the system SHALL display a prompt directing the user to the VIP subscription page ### Requirement: Server backup upload with authentication All server backup API requests SHALL include the user's `userToken` for authentication. The system SHALL handle token expiry or invalid token responses by prompting the user to re-login. #### Scenario: Successful authenticated upload - **WHEN** the system uploads a backup to the server - **THEN** the request SHALL include the `userToken` in the request parameters - **THEN** the server SHALL respond with a success confirmation #### Scenario: Token expired during upload - **WHEN** the server returns an authentication error (invalid or expired token) - **THEN** the system SHALL display a message prompting the user to re-login - **THEN** the auto-backup timer SHALL be paused until the user re-authenticates ### Requirement: Backup history display The backup management page SHALL display a history of recent backups, showing the backup source (local/WebDAV/server), timestamp, and playlist count for each entry. #### Scenario: View backup history - **WHEN** the user opens the backup management page - **THEN** the system SHALL display a list of recent backup operations - **THEN** each entry SHALL show: backup type icon (local/WebDAV/server), date and time, and number of playlists in the backup #### Scenario: Empty backup history - **WHEN** the user has never performed a backup - **THEN** the system SHALL display a placeholder message encouraging the user to create their first backup