mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-11 11:06:16 -08:00
The startup auto-refresh always opened the `HOME.PLAYLISTS.AUTO_REFRESH_UPDATE_SUCCESS` snackbar, even when the backend had dropped playlists it could not refresh. Isolating per-playlist failures (#1233) means the result set is lossy by design, so an unreachable source that now fails within `PLAYLIST_FETCH_TIMEOUT_MS` produces a false success toast. `autoUpdatePlaylists()` now returns `AutoUpdatePlaylistsResult` — the refreshed playlists plus one outcome per requested playlist (`updated` / `failed` / `skipped`), in request order — on top of the existing bounded-concurrency refresh. The renderer derives the message from those outcomes: - all updated -> `AUTO_REFRESH_UPDATE_SUCCESS` (unchanged) - some failed -> `AUTO_REFRESH_UPDATE_PARTIAL` (error styling, dismissable) - some failed and some skipped -> `AUTO_REFRESH_UPDATE_PARTIAL_WITH_SKIPPED` - none updated -> `AUTO_REFRESH_UPDATE_FAILED` (error styling, dismissable) - only sourceless playlists left over -> `AUTO_REFRESH_UPDATE_SKIPPED` Playlists with neither a URL nor a file path are reported as skipped rather than failed, since there is no source to refresh them from. The mixed failed+skipped message exists because the plain partial text names only updated/total/failed, which would leave the skipped playlists as an unexplained remainder. Titles of unresolved playlists are logged for diagnosability. Tests: five new `electron.service` cases (one per message branch), outcome assertions across the existing `playlist-auto-update` and `playlist.events` specs, and an Electron E2E that restarts the app against a killed playlist server — verified to fail against the old unconditional toast. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
67 lines
3.0 KiB
TypeScript
67 lines
3.0 KiB
TypeScript
export * from './lib/channel-drm.interface';
|
|
export * from './lib/channel.interface';
|
|
export * from './lib/channel.model';
|
|
export * from './lib/dev-logger.util';
|
|
export * from './lib/embedded-mpv-session.interface';
|
|
export * from './lib/electron-api.interface';
|
|
export * from './lib/epg-channel-metadata.model';
|
|
export * from './lib/epg-channel-with-programs.interface';
|
|
export * from './lib/epg-channel.model';
|
|
export * from './lib/epg-item.interface';
|
|
export * from './lib/epg-mapping-key.util';
|
|
export * from './lib/epg-program.model';
|
|
export * from './lib/external-player-arguments.utils';
|
|
export * from './lib/external-player-session.interface';
|
|
export * from './lib/global-search-result.interface';
|
|
export * from './lib/indexed-db.config';
|
|
export * from './lib/ipc-command.class';
|
|
export * from './lib/ipc-commands';
|
|
export * from './lib/language.enum';
|
|
export * from './lib/m3u-favorite-channel.interface';
|
|
export * from './lib/parsed-playlist.interface';
|
|
export * from './lib/playback-position.interface';
|
|
export * from './lib/playlist-auto-update.interface';
|
|
export * from './lib/playlist-backup.interface';
|
|
export * from './lib/playlist-meta.type';
|
|
export * from './lib/playlist-recently-viewed.interface';
|
|
export * from './lib/playlist-recently-viewed.utils';
|
|
export * from './lib/playlist-refresh.interface';
|
|
export * from './lib/playlist.interface';
|
|
export * from './lib/portal-activity-item.interface';
|
|
export * from './lib/portal-debug.interface';
|
|
export * from './lib/portal-playback.interface';
|
|
export * from './lib/security-policy-error.utils';
|
|
export * from './lib/settings.interface';
|
|
export * from './lib/stalker-portal-actions.enum';
|
|
export * from './lib/store-keys.enum';
|
|
export * from './lib/stream-format.enum';
|
|
export * from './lib/catalog-title-match.interface';
|
|
export * from './lib/theme.enum';
|
|
export * from './lib/season-marker.util';
|
|
export * from './lib/title-normalization.util';
|
|
export * from './lib/tmdb.interface';
|
|
export * from './lib/xtream-account-info-dialog-data.interface';
|
|
export * from './lib/xtream-category.interface';
|
|
export * from './lib/xtream-code-actions';
|
|
export * from './lib/xtream-item.interface';
|
|
export * from './lib/xtream-live-stream.interface';
|
|
export * from './lib/xtream-response.interface';
|
|
export * from './lib/xtream-portal.utils';
|
|
export * from './lib/xtream-restore-state.util';
|
|
export * from './lib/xtream-recently-added.utils';
|
|
export * from './lib/xtream-serie-details.interface';
|
|
export * from './lib/xtream-serie-item.interface';
|
|
export * from './lib/xtream-vod-details.interface';
|
|
export * from './lib/xtream-vod-stream.interface';
|
|
|
|
// Stalker interfaces
|
|
export * from './lib/stalker-item.normalizer';
|
|
export * from './lib/stalker-identity.utils';
|
|
export * from './lib/stalker-portal-item.interface';
|
|
export * from './lib/stalker-serial-details.interface';
|
|
export * from './lib/stalker-vod-details.interface';
|
|
|
|
// Unified VOD details (discriminated union + adapters)
|
|
export * from './lib/vod-details-adapters';
|
|
export * from './lib/vod-details-item.interface';
|