From 93d3cbc8bf3e45b5eb6fa1f743f47121a39ea59b Mon Sep 17 00:00:00 2001 From: MathieuG-P <40181755+Zagrios@users.noreply.github.com> Date: Mon, 15 Jul 2024 20:59:26 +0200 Subject: [PATCH] [bugfix] Bsm crashs when loading playlists with an invalid playlist file --- .../local-playlists-manager.service.ts | 11 ++++++++++- .../local-playlists-list-panel.component.tsx | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/services/additional-content/local-playlists-manager.service.ts b/src/main/services/additional-content/local-playlists-manager.service.ts index 9404b720..8df31ddb 100644 --- a/src/main/services/additional-content/local-playlists-manager.service.ts +++ b/src/main/services/additional-content/local-playlists-manager.service.ts @@ -23,6 +23,7 @@ import { isValidUrl } from "shared/helpers/url.helpers"; import { Archive } from "main/models/archive.class"; import { CustomError } from "shared/models/exceptions/custom-error.class"; import { BsmLocalMap } from "shared/models/maps/bsm-local-map.interface"; +import { tryit } from "shared/helpers/error.helpers"; export class LocalPlaylistsManagerService { private static instance: LocalPlaylistsManagerService; @@ -136,6 +137,10 @@ export class LocalPlaylistsManagerService { const bpList: BPList = isLocalFile ? JSON.parse(readFileSync(source).toString()) : await this.request.getJSON(source); + if(!bpList?.playlistTitle){ + throw new Error(`Invalid playlist file ${source}`); + } + return bpList; } @@ -160,8 +165,12 @@ export class LocalPlaylistsManagerService { for (const playlist of playlists) { const playlistPath = path.join(folerPath, playlist); - const bpList = await this.readPlaylistFromSource(playlistPath); + const { result: bpList, error } = await tryit(() => this.readPlaylistFromSource(playlistPath)); + if(error) { + log.error(error); + continue; + } const localBpList: LocalBPList = { ...bpList, path: playlistPath }; bpLists.push(localBpList); diff --git a/src/renderer/components/maps-playlists-panel/playlists/local-playlists-list-panel.component.tsx b/src/renderer/components/maps-playlists-panel/playlists/local-playlists-list-panel.component.tsx index 3a1094ed..e5e8d91f 100644 --- a/src/renderer/components/maps-playlists-panel/playlists/local-playlists-list-panel.component.tsx +++ b/src/renderer/components/maps-playlists-panel/playlists/local-playlists-list-panel.component.tsx @@ -379,8 +379,8 @@ export const LocalPlaylistsListPanel = forwardRef( if(!playlists){ return []; } return playlists.filter(p => { - if(!p.playlistTitle.toLowerCase().includes(search.toLowerCase())){ return false; } - if(!p.playlistAuthor.toLowerCase().includes(search.toLowerCase())){ return false; } + if(!p.playlistTitle?.toLowerCase().includes(search.toLowerCase())){ return false; } + if(!p.playlistAuthor?.toLowerCase().includes(search.toLowerCase())){ return false; } if(typeof p.nbMaps === "number" && (typeof playlistFiler?.minNbMaps === "number" || typeof playlistFiler?.maxNbMaps === "number")){ if(playlistFiler?.minNbMaps && p.nbMaps < playlistFiler.minNbMaps){ return false; }