diff --git a/app/src/model/parser.ts b/app/src/model/parser.ts index dd58f07..27bfd43 100644 --- a/app/src/model/parser.ts +++ b/app/src/model/parser.ts @@ -39,7 +39,7 @@ const getListenedArtists = (streams: stream[], startDate: string, endDate: strin const artistMap: Record = {}; streams.forEach(stream => { - if (stream.ts < startDate || stream.ts > endDate) { + if (stream.ts < startDate || stream.ts > endDate || !stream.master_metadata_album_artist_name) { return; // Skip streams outside the date range } diff --git a/app/src/pages/StatView.tsx b/app/src/pages/StatView.tsx index 33bfbe6..17663c8 100644 --- a/app/src/pages/StatView.tsx +++ b/app/src/pages/StatView.tsx @@ -48,8 +48,13 @@ const StatView = () => {

Track Statistics

@@ -59,8 +64,13 @@ const StatView = () => {

Artist Statistics

@@ -80,9 +90,47 @@ const StatView = () => { className="w-full" /> -

- {dateRange[0].toUTCString()} - {dateRange[1].toUTCString()} ({getDaysBetween(dateRange[0], dateRange[1])} days) -

+
+ { + if (new Date(e.target.value) > dateRange[1]) { + alert('Start date cannot be after end date'); + return; + } + + + // check if valid date + if (isNaN(new Date(e.target.value).getTime())) { + return; + } + + setDateRange([new Date(e.target.value), dateRange[1]]) + }} + className="mr-2" + /> + { + if (new Date(e.target.value) < dateRange[0]) { + alert('End date cannot be before start date'); + return; + } + + // check if valid date + if (isNaN(new Date(e.target.value).getTime())) { + return; + } + + setDateRange([dateRange[0], new Date(e.target.value)]); + }} + className="ml-2" + /> + +

({getDaysBetween(dateRange[0], dateRange[1])} days)

+
) } diff --git a/app/src/util/time.ts b/app/src/util/time.ts index b7aa2f0..f0cc304 100644 --- a/app/src/util/time.ts +++ b/app/src/util/time.ts @@ -4,9 +4,9 @@ const formatSeconds = (seconds: number): string => { const secs = Math.floor(seconds % 60); return [ - hours > 0 ? `${hours}h` : '', - minutes > 0 ? `${minutes}m` : '', - secs > 0 ? `${secs}s` : '' + hours > 0 ? `${hours}h` : '0h', + minutes > 0 ? `${minutes}m` : '0m', + secs > 0 ? `${secs}s` : '0s' ].filter(Boolean).join(' '); }