Implement Cache Songs, Cancel Loading, Admin Panel, Custom Category, Localization

This commit is contained in:
2025-12-28 11:54:47 +08:00
parent 92c1261f6f
commit ae4a0f823e
13 changed files with 375 additions and 27 deletions

View File

@@ -0,0 +1,57 @@
# Implementation Plan
## 1. Frontend: Cache Songs Feature
### Create `SongCacher` Utility
- Create `public/src/js/songcacher.js` containing the `SongCacher` class.
- Implement methods:
- `cacheAll()`: Iterates all songs in `assets.songs` and fetches their assets.
- `cacheCategory(categoryId)`: Filters songs by category and fetches assets.
- `cacheSong(songId)`: Fetches assets for a single song.
- Use `loader.ajax` (or `fetch`) to download files (`main.tja`, music file, etc.) so they are cached by the browser/service worker.
### Update Assets & Settings
- Modify `public/src/js/assets.js` to include `songcacher.js` in the load list.
- Modify `public/src/js/settings.js`:
- Add a "Cache Songs" option to the settings menu.
- Use a selection interface (e.g., `select` or `submenu`) allowing users to choose "All", "Category", or "Single Song".
- Trigger `SongCacher` methods based on selection.
## 2. Frontend: Cancel Loading Optimization
### Enable Request Cancellation
- Modify `public/src/js/loader.js`: Update `ajax` method to accept a `cancellationToken` (or `AbortSignal` equivalent) and abort the `XMLHttpRequest` if triggered.
- Modify `public/src/js/abstractfile.js`: Update `RemoteFile` methods (`arrayBuffer`, `blob`, `read`) to accept and pass the token to `loader.ajax`.
- Modify `public/src/js/soundbuffer.js`: Update `load` method to accept and pass the token.
### Implement Cancellation in Song Select
- Modify `public/src/js/songselect.js`:
- In `startPreview`, create a new cancellation token.
- Store the current token.
- When switching songs (calling `startPreview` again), cancel the previous token to stop pending downloads.
## 3. Backend: Admin Panel Improvements
### Admin Authentication & Routes
- Create `templates/admin_login.html` for the password-only login.
- Modify `app.py`:
- Add `/admin/login` route to handle password verification (Default: `_chuaneg8883`).
- Set a session variable (e.g., `admin_logged_in`) upon success.
- Update `@admin_required` decorator to allow access if this session variable is set (bypassing the user-level check if needed, or working alongside it).
### Admin Features (Stats & Management)
- Modify `app.py`:
- In `route_api_scores_save`, increment a `play_count` field in the `db.songs` collection for the played song.
- Create `templates/admin_stats.html` (or update `admin_songs.html`) to display:
- User statistics.
- Song statistics (including the new `play_count`).
## 4. Backend: New Category
- Modify `tools/categories.json`: Add a new category entry for "Custom Charts" (自制谱面).
## 5. Localization
- Modify `public/src/js/strings.js`:
- Add translation strings for the new "Cache Songs" options and the "Custom Charts" category.
- Ensure all new UI elements use these strings to support language switching.
## 6. Git Operations
- Create and checkout new branch `Utra-Ver`.
- Commit all changes.
- Push to remote repository (User: `AnthonyDuan`, Pass: `_chuaneg8883`).