From a2e315ee1ac5722d6ee0eb02e19c7eedfdcefca6 Mon Sep 17 00:00:00 2001 From: 4gray Date: Sun, 26 Nov 2023 18:02:07 +0100 Subject: [PATCH] refactor: improve error handling --- electron/api.ts | 6 ++++++ src/app/services/playlists.service.ts | 28 +++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/electron/api.ts b/electron/api.ts index 0843c3009..d28574886 100644 --- a/electron/api.ts +++ b/electron/api.ts @@ -113,6 +113,12 @@ export class Api { event.sender.send(PLAYLIST_PARSE_RESPONSE, { payload: playlistObject, }); + }) + .catch((err) => { + event.sender.send(ERROR, { + message: err.response.statusText, + status: err.response.status, + }); }); } catch (err) { event.sender.send(ERROR, { diff --git a/src/app/services/playlists.service.ts b/src/app/services/playlists.service.ts index e0a0d8264..97cedcdbe 100644 --- a/src/app/services/playlists.service.ts +++ b/src/app/services/playlists.service.ts @@ -1,5 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { TranslateService } from '@ngx-translate/core'; import { parse } from 'iptv-playlist-parser'; import { NgxIndexedDBService } from 'ngx-indexed-db'; import { combineLatest, map, switchMap } from 'rxjs'; @@ -23,7 +25,11 @@ import { PlaylistMeta } from '../shared/playlist-meta.type'; providedIn: 'root', }) export class PlaylistsService { - constructor(private dbService: NgxIndexedDBService) {} + constructor( + private dbService: NgxIndexedDBService, + private snackBar: MatSnackBar, + private translateService: TranslateService + ) {} getAllPlaylists() { return this.dbService.getAll(DbStores.Playlists).pipe( @@ -198,8 +204,22 @@ export class PlaylistsService { title: string, path?: string ) { - const parsedPlaylist = parse(playlist); - return createPlaylistObject(title, parsedPlaylist, path, uploadType); + try { + const parsedPlaylist = parse(playlist); + return createPlaylistObject( + title, + parsedPlaylist, + path, + uploadType + ); + } catch (error) { + this.snackBar.open( + this.translateService.instant('HOME.PARSING_ERROR'), + null, + { duration: 2000 } + ); // TODO: translate + throw new Error(`Parsing failed, not a valid playlist: ${error}`); + } } getPlaylistWithGlobalFavorites() { @@ -213,7 +233,7 @@ export class PlaylistsService { } addManyPlaylists(playlists: Playlist[]) { - return this.dbService.bulkAdd(DbStores.Playlists, playlists as any); // TODO: update ngx-indexed-db + return this.dbService.bulkAdd(DbStores.Playlists, playlists as any); } getPlaylistsForAutoUpdate() {