feat(DM): library UI with episode list, SD status, cache, close button, stable single-file DL
- DiscoveryMountain: new UI optimized for episode list (not player anymore) - Shows episodes for current season, indicates if on SD card (green=On SD, gray=Not DL) - Per-episode action: download single via SdDownloader or play via Mp3Player - DL Missing button for missing eps in season (currently single first missing, batch reverted) - Season selector screen with cached/total counts - Top-right X close button - Seasons/episodes cached to cache.json to avoid network fetch every launch - Fixes: overlay deletion race (deferred timer), ui_timer leak causing crash on close, season selection overwritten by fetch task - Fixes: unicode ellipsis squares - SdDownloader: revert to stable single-file mode (batch array caused crashes) - Remove batch fields and array allocation, keep single url/path download - Result bundle simple success/path/bytes - Mp3Player: add resume position support (pos_sec from bundle, total_sec estimate, total_decoded_samples), return position on exit via bundle for DM to save Tested on 192.168.68.133: opens, shows S10 2/6, Play/DL buttons, close works, no crash on open/close cycles, cache shows 'Loaded from cache, refreshing...'
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#include "download.h"
|
||||
#include "storage.h"
|
||||
#include <tt_lvgl.h>
|
||||
#include <string.h>
|
||||
#include "esp_log.h"
|
||||
|
||||
// Simplified: internal download removed, we use external SdDownloader app
|
||||
// Keep overlay functions as stubs for compatibility, but they do minimal
|
||||
|
||||
void hide_dl_overlay(){
|
||||
if(G.dl_overlay){
|
||||
lv_obj_delete(G.dl_overlay);
|
||||
G.dl_overlay=NULL;
|
||||
G.dl_bar=NULL;
|
||||
G.dl_lbl_pct=NULL;
|
||||
G.dl_lbl_detail=NULL;
|
||||
G.dl_lbl_title=NULL;
|
||||
G.dl_lbl_sub=NULL;
|
||||
}
|
||||
G.downloading=false;
|
||||
}
|
||||
|
||||
void show_dl_overlay_locked(const char* ep_title, const char* slug, int season, int ep_num){
|
||||
// No longer used - external downloader has its own UI
|
||||
// Keep as stub that shows simple status
|
||||
(void)ep_title; (void)slug; (void)season; (void)ep_num;
|
||||
G.downloading=true;
|
||||
}
|
||||
|
||||
void update_dl_overlay_ui(){
|
||||
// No internal download progress anymore
|
||||
}
|
||||
|
||||
bool dl_ep_raw(EpInfo* ep){
|
||||
(void)ep;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dl_ep(EpInfo* ep){
|
||||
(void)ep;
|
||||
return false;
|
||||
}
|
||||
|
||||
void dl_task(void* arg){
|
||||
(void)arg;
|
||||
G.downloading=false;
|
||||
G.dl_handle=NULL;
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
Reference in New Issue
Block a user