From cce859f223c0304cb36732849e075a39a5f199ed Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 21:36:18 +0530 Subject: [PATCH 01/16] Fix mainpage and shoko panel scrollbars in FF --- src/components/Panels/ShokoPanel.tsx | 2 +- src/pages/main/MainPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Panels/ShokoPanel.tsx b/src/components/Panels/ShokoPanel.tsx index 731255270..b3618be73 100644 --- a/src/components/Panels/ShokoPanel.tsx +++ b/src/components/Panels/ShokoPanel.tsx @@ -25,7 +25,7 @@ const ShokoPanel = ({ className, title, options, children, isFetching, disableCl -
+
{isFetching ?
: children}
diff --git a/src/pages/main/MainPage.tsx b/src/pages/main/MainPage.tsx index c497bdd35..129101681 100644 --- a/src/pages/main/MainPage.tsx +++ b/src/pages/main/MainPage.tsx @@ -52,7 +52,7 @@ function MainPage() {
-
+
From 70f52e7a15d32ebdb03c31a18b840de91eecb05f Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 21:37:51 +0530 Subject: [PATCH 02/16] Use themeable SVG logos everywhere --- public/logo.png | Bin 17399 -> 0 bytes public/logo.svg | 29 ---------------------------- src/pages/firstrun/FirstRunPage.tsx | 3 ++- src/pages/login/LoginPage.tsx | 3 ++- 4 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 public/logo.png delete mode 100644 public/logo.svg diff --git a/public/logo.png b/public/logo.png deleted file mode 100644 index 9cba262c8df0125ebfaeaca413c7d76f06b9f9da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17399 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 diff --git a/public/logo.svg b/public/logo.svg deleted file mode 100644 index d8f1bfab6..000000000 --- a/public/logo.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - S - diff --git a/src/pages/firstrun/FirstRunPage.tsx b/src/pages/firstrun/FirstRunPage.tsx index 58ece280d..5ef09d08c 100644 --- a/src/pages/firstrun/FirstRunPage.tsx +++ b/src/pages/firstrun/FirstRunPage.tsx @@ -11,6 +11,7 @@ import { } from '@mdi/js'; import { siDiscord } from 'simple-icons/icons'; import Button from '../../components/Input/Button'; +import ShokoIcon from '../../components/ShokoIcon'; import { RootState } from '../../core/store'; @@ -74,7 +75,7 @@ function FirstRunPage() {
- logo +
Version: {version.isFetching ? : version.data?.find(obj => obj.Name === 'Server')?.Version}
diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index 2994efab1..5f1eefdf1 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -11,6 +11,7 @@ import { RootState } from '../../core/store'; import Button from '../../components/Input/Button'; import Input from '../../components/Input/Input'; import Checkbox from '../../components/Input/Checkbox'; +import ShokoIcon from '../../components/ShokoIcon'; import { useGetInitVersionQuery, useGetInitStatusQuery } from '../../core/rtkQuery/initApi'; import { usePostAuthMutation } from '../../core/rtkQuery/authApi'; @@ -67,7 +68,7 @@ function LoginPage() {
- logo +
Version: {version.isFetching ? : version.data?.find(obj => obj.Name === 'Server')?.Version}
From 87cf334dd541ce4a1315e43126ab96ff2ac1638e Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 23:00:45 +0530 Subject: [PATCH 03/16] Add border to panels in layout edit mode --- css/common.scss | 3 +-- src/components/Panels/ShokoPanel.tsx | 6 +++--- src/pages/dashboard/DashboardPage.tsx | 9 +++++++++ src/pages/dashboard/panels/CollectionBreakdown.tsx | 2 +- src/pages/dashboard/panels/ContinueWatching.tsx | 2 +- src/pages/dashboard/panels/ImportBreakdown.tsx | 2 +- src/pages/dashboard/panels/ImportFolders.tsx | 2 +- src/pages/dashboard/panels/NextUp.tsx | 2 +- src/pages/dashboard/panels/QueueProcessor.tsx | 2 +- src/pages/dashboard/panels/RecentlyImported.tsx | 2 +- src/pages/dashboard/panels/SeriesBreakdown.tsx | 2 +- src/pages/dashboard/panels/ShokoNews.tsx | 2 +- src/pages/dashboard/panels/UpcomingAnime.tsx | 2 +- 13 files changed, 23 insertions(+), 15 deletions(-) diff --git a/css/common.scss b/css/common.scss index f708ade95..4844f87a2 100644 --- a/css/common.scss +++ b/css/common.scss @@ -110,6 +110,5 @@ body { } .react-grid-item > .react-resizable-handle::after { - border-bottom: 2px solid theme('colors.highlight-1') !important; - border-right: 2px solid theme('colors.highlight-1') !important; + border: 0; } diff --git a/src/components/Panels/ShokoPanel.tsx b/src/components/Panels/ShokoPanel.tsx index b3618be73..36e845007 100644 --- a/src/components/Panels/ShokoPanel.tsx +++ b/src/components/Panels/ShokoPanel.tsx @@ -9,11 +9,11 @@ type Props = { options?: any; className?: string; isFetching?: boolean; - disableClick?: boolean; + editMode?: boolean; }; -const ShokoPanel = ({ className, title, options, children, isFetching, disableClick }: Props) => ( -
+const ShokoPanel = ({ className, title, options, children, isFetching, editMode }: Props) => ( +
{title}
( +
+ +
+ ); + return ( setCurrentLayout(layouts)} isDraggable={layoutEditMode} isResizable={layoutEditMode} + resizeHandle={renderResizeHandle()} >
diff --git a/src/pages/dashboard/panels/CollectionBreakdown.tsx b/src/pages/dashboard/panels/CollectionBreakdown.tsx index 636b0ed0b..a4aa385a5 100644 --- a/src/pages/dashboard/panels/CollectionBreakdown.tsx +++ b/src/pages/dashboard/panels/CollectionBreakdown.tsx @@ -47,7 +47,7 @@ function CollectionBreakdown() { ]; return ( - +
{childrenFirst}
diff --git a/src/pages/dashboard/panels/ContinueWatching.tsx b/src/pages/dashboard/panels/ContinueWatching.tsx index a94f2dadc..ba3fcf932 100644 --- a/src/pages/dashboard/panels/ContinueWatching.tsx +++ b/src/pages/dashboard/panels/ContinueWatching.tsx @@ -13,7 +13,7 @@ const ContinueWatching = () => { const items = useGetDashboardContinueWatchingEpisodesQuery({ pageSize: 20 }); return ( - +
{items.data?.map(item => )}
); diff --git a/src/pages/dashboard/panels/ImportBreakdown.tsx b/src/pages/dashboard/panels/ImportBreakdown.tsx index c6afb0038..45226f768 100644 --- a/src/pages/dashboard/panels/ImportBreakdown.tsx +++ b/src/pages/dashboard/panels/ImportBreakdown.tsx @@ -13,7 +13,7 @@ function ImportBreakdown() { const items = useGetFileUnrecognizedQuery({ pageSize: 0 }); return ( - + ); diff --git a/src/pages/dashboard/panels/ImportFolders.tsx b/src/pages/dashboard/panels/ImportFolders.tsx index fe05fd4bf..35fd88158 100644 --- a/src/pages/dashboard/panels/ImportFolders.tsx +++ b/src/pages/dashboard/panels/ImportFolders.tsx @@ -83,7 +83,7 @@ function ImportFolders() { ); return ( - + {importFolders.length === 0 ? (
No import folders added!
) : importFolders.map(importFolder => renderFolder(importFolder))} diff --git a/src/pages/dashboard/panels/NextUp.tsx b/src/pages/dashboard/panels/NextUp.tsx index c3cfa4cf4..27e9caf03 100644 --- a/src/pages/dashboard/panels/NextUp.tsx +++ b/src/pages/dashboard/panels/NextUp.tsx @@ -13,7 +13,7 @@ const NextUp = () => { const items = useGetDashboardNextUpEpisodesQuery({ pageSize: 20 }); return ( - +
{items.data?.map(item => )}
); diff --git a/src/pages/dashboard/panels/QueueProcessor.tsx b/src/pages/dashboard/panels/QueueProcessor.tsx index 21db8658d..fbcd63ba7 100644 --- a/src/pages/dashboard/panels/QueueProcessor.tsx +++ b/src/pages/dashboard/panels/QueueProcessor.tsx @@ -93,7 +93,7 @@ function QueueProcessor() { } return ( - +
{commands}
diff --git a/src/pages/dashboard/panels/RecentlyImported.tsx b/src/pages/dashboard/panels/RecentlyImported.tsx index bd6c7b44d..bd02d4dc5 100644 --- a/src/pages/dashboard/panels/RecentlyImported.tsx +++ b/src/pages/dashboard/panels/RecentlyImported.tsx @@ -20,7 +20,7 @@ const RecentlyImported = () => { const episodes = useGetDashboardRecentlyAddedEpisodesQuery({ pageSize: 30 }); return ( - } disableClick={layoutEditMode}> + } editMode={layoutEditMode}>
{showSeries ? ( series.data?.map(item => ) ) : ( diff --git a/src/pages/dashboard/panels/SeriesBreakdown.tsx b/src/pages/dashboard/panels/SeriesBreakdown.tsx index 8be04d910..d7cf83211 100644 --- a/src/pages/dashboard/panels/SeriesBreakdown.tsx +++ b/src/pages/dashboard/panels/SeriesBreakdown.tsx @@ -53,7 +53,7 @@ function SeriesBreakdown() { }); return ( - + {items} ); diff --git a/src/pages/dashboard/panels/ShokoNews.tsx b/src/pages/dashboard/panels/ShokoNews.tsx index 54d65068c..38ef69309 100644 --- a/src/pages/dashboard/panels/ShokoNews.tsx +++ b/src/pages/dashboard/panels/ShokoNews.tsx @@ -27,7 +27,7 @@ function ShokoNews() { ); return ( - +
{items.data?.slice(0, 2).map(item => renderRow(item))}
diff --git a/src/pages/dashboard/panels/UpcomingAnime.tsx b/src/pages/dashboard/panels/UpcomingAnime.tsx index 8fdc074ca..965c61eeb 100644 --- a/src/pages/dashboard/panels/UpcomingAnime.tsx +++ b/src/pages/dashboard/panels/UpcomingAnime.tsx @@ -15,7 +15,7 @@ const UpcomingAnime = () => { const items = useGetDashboardAniDBCalendarQuery({ showAll }); return ( - } disableClick={layoutEditMode}> + } editMode={layoutEditMode}>
{items.data?.length === 0 &&
It looks like you are not watching anything currently airing.
} {items.data?.map(item => )} From 19852f50f820e597e6342cdc1a00d0a72cba3c3e Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 23:15:21 +0530 Subject: [PATCH 04/16] Add transitions and empty message to "Recently Imported" panel --- src/pages/dashboard/panels/RecentlyImported.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/dashboard/panels/RecentlyImported.tsx b/src/pages/dashboard/panels/RecentlyImported.tsx index bd02d4dc5..ac50402ed 100644 --- a/src/pages/dashboard/panels/RecentlyImported.tsx +++ b/src/pages/dashboard/panels/RecentlyImported.tsx @@ -11,6 +11,7 @@ import { useGetDashboardRecentlyAddedEpisodesQuery, useGetDashboardRecentlyAddedSeriesQuery, } from '../../../core/rtkQuery/dashboardApi'; +import TransitionDiv from '../../../components/TransitionDiv'; const RecentlyImported = () => { const layoutEditMode = useSelector((state: RootState) => state.mainpage.layoutEditMode); @@ -21,11 +22,12 @@ const RecentlyImported = () => { return ( } editMode={layoutEditMode}> -
{showSeries ? ( - series.data?.map(item => ) - ) : ( - episodes.data?.map(item => ) - )}
+ + {(episodes.data?.length ?? 0) > 0 ? episodes.data?.map(item => ) :
No recently imported episodes!
} +
+ + {(series.data?.length ?? 0) > 0 ? series.data?.map(item => ) :
No recently imported series!
} +
); }; From 1338f843ad4243371f699adcecf66cf8ee8983a5 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 23:16:35 +0530 Subject: [PATCH 05/16] Fix font weight for empty message in "Import Folders" panel --- src/pages/dashboard/panels/ImportFolders.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/dashboard/panels/ImportFolders.tsx b/src/pages/dashboard/panels/ImportFolders.tsx index 35fd88158..b86f9a8ca 100644 --- a/src/pages/dashboard/panels/ImportFolders.tsx +++ b/src/pages/dashboard/panels/ImportFolders.tsx @@ -85,7 +85,7 @@ function ImportFolders() { return ( {importFolders.length === 0 - ? (
No import folders added!
) + ? (
No import folders added!
) : importFolders.map(importFolder => renderFolder(importFolder))}
); From ab7c14fa145930adc44d29ccb1023224c03a3ef6 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Thu, 10 Nov 2022 23:57:35 +0530 Subject: [PATCH 06/16] Add empty messages and transitions to remaining dashboard panels --- src/pages/dashboard/panels/ContinueWatching.tsx | 7 ++++++- src/pages/dashboard/panels/NextUp.tsx | 7 ++++++- src/pages/dashboard/panels/RecentlyImported.tsx | 12 +++++++++--- src/pages/dashboard/panels/UpcomingAnime.tsx | 17 ++++++++++++++++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/pages/dashboard/panels/ContinueWatching.tsx b/src/pages/dashboard/panels/ContinueWatching.tsx index ba3fcf932..1dc9061c9 100644 --- a/src/pages/dashboard/panels/ContinueWatching.tsx +++ b/src/pages/dashboard/panels/ContinueWatching.tsx @@ -14,7 +14,12 @@ const ContinueWatching = () => { return ( -
{items.data?.map(item => )}
+
+ {(items.data?.length ?? 0) > 0 + ? items.data?.map(item => ) + :
No episodes in-progress to continue watching!
+ } +
); }; diff --git a/src/pages/dashboard/panels/NextUp.tsx b/src/pages/dashboard/panels/NextUp.tsx index 27e9caf03..068a719b6 100644 --- a/src/pages/dashboard/panels/NextUp.tsx +++ b/src/pages/dashboard/panels/NextUp.tsx @@ -14,7 +14,12 @@ const NextUp = () => { return ( -
{items.data?.map(item => )}
+
+ {(items.data?.length ?? 0) > 0 + ? items.data?.map(item => ) + :
No next up episodes!
+ } +
); }; diff --git a/src/pages/dashboard/panels/RecentlyImported.tsx b/src/pages/dashboard/panels/RecentlyImported.tsx index ac50402ed..47b196d8e 100644 --- a/src/pages/dashboard/panels/RecentlyImported.tsx +++ b/src/pages/dashboard/panels/RecentlyImported.tsx @@ -6,12 +6,12 @@ import ShokoPanel from '../../../components/Panels/ShokoPanel'; import DashboardTitleToggle from '../components/DashboardTitleToggle'; import EpisodeDetails from '../components/EpisodeDetails'; import SeriesDetails from '../components/SeriesDetails'; +import TransitionDiv from '../../../components/TransitionDiv'; import { useGetDashboardRecentlyAddedEpisodesQuery, useGetDashboardRecentlyAddedSeriesQuery, } from '../../../core/rtkQuery/dashboardApi'; -import TransitionDiv from '../../../components/TransitionDiv'; const RecentlyImported = () => { const layoutEditMode = useSelector((state: RootState) => state.mainpage.layoutEditMode); @@ -23,10 +23,16 @@ const RecentlyImported = () => { return ( } editMode={layoutEditMode}> - {(episodes.data?.length ?? 0) > 0 ? episodes.data?.map(item => ) :
No recently imported episodes!
} + {(episodes.data?.length ?? 0) > 0 + ? episodes.data?.map(item => ) + :
No recently imported episodes!
+ }
- {(series.data?.length ?? 0) > 0 ? series.data?.map(item => ) :
No recently imported series!
} + {(series.data?.length ?? 0) > 0 + ? series.data?.map(item => ) + :
No recently imported series!
+ }
); diff --git a/src/pages/dashboard/panels/UpcomingAnime.tsx b/src/pages/dashboard/panels/UpcomingAnime.tsx index 965c61eeb..2b862e83d 100644 --- a/src/pages/dashboard/panels/UpcomingAnime.tsx +++ b/src/pages/dashboard/panels/UpcomingAnime.tsx @@ -5,6 +5,7 @@ import { RootState } from '../../../core/store'; import ShokoPanel from '../../../components/Panels/ShokoPanel'; import DashboardTitleToggle from '../components/DashboardTitleToggle'; import EpisodeDetails from '../components/EpisodeDetails'; +import TransitionDiv from '../../../components/TransitionDiv'; import { useGetDashboardAniDBCalendarQuery } from '../../../core/rtkQuery/dashboardApi'; @@ -12,13 +13,27 @@ const UpcomingAnime = () => { const layoutEditMode = useSelector((state: RootState) => state.mainpage.layoutEditMode); const [showAll, setShowAll] = useState(false); - const items = useGetDashboardAniDBCalendarQuery({ showAll }); + const localItems = useGetDashboardAniDBCalendarQuery({ showAll: false }); + const items = useGetDashboardAniDBCalendarQuery({ showAll: true }); return ( } editMode={layoutEditMode}>
{items.data?.length === 0 &&
It looks like you are not watching anything currently airing.
} {items.data?.map(item => )} + + + {(localItems.data?.length ?? 0) > 0 + ? localItems.data?.map(item => ) + :
No upcoming anime!
+ } +
+ + {(items.data?.length ?? 0) > 0 + ? items.data?.map(item =>) + :
No upcoming anime!
+ } +
); From 04d64b6a4b2c3a570cad92066bc0bbb1e359daa0 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 00:24:25 +0530 Subject: [PATCH 07/16] Fix upcoming anime panel --- src/pages/dashboard/panels/UpcomingAnime.tsx | 29 ++++++++------------ 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/pages/dashboard/panels/UpcomingAnime.tsx b/src/pages/dashboard/panels/UpcomingAnime.tsx index 2b862e83d..6a26892d5 100644 --- a/src/pages/dashboard/panels/UpcomingAnime.tsx +++ b/src/pages/dashboard/panels/UpcomingAnime.tsx @@ -18,23 +18,18 @@ const UpcomingAnime = () => { return ( } editMode={layoutEditMode}> -
- {items.data?.length === 0 &&
It looks like you are not watching anything currently airing.
} - {items.data?.map(item => )} - - - {(localItems.data?.length ?? 0) > 0 - ? localItems.data?.map(item => ) - :
No upcoming anime!
- } -
- - {(items.data?.length ?? 0) > 0 - ? items.data?.map(item =>) - :
No upcoming anime!
- } -
-
+ + {(localItems.data?.length ?? 0) > 0 + ? localItems.data?.map(item => ) + :
No upcoming anime!
+ } +
+ + {(items.data?.length ?? 0) > 0 + ? items.data?.map(item =>) + :
No upcoming anime!
+ } +
); }; From ffc7cb4c5e1761db869a66ce30aeca81bc65c459 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 00:52:47 +0530 Subject: [PATCH 08/16] Add "Recommended Anime" panel to dashboard --- src/core/rtkQuery/seriesApi.ts | 9 ++++- src/core/rtkQuery/settingsApi.ts | 4 ++- src/core/types/api/series.ts | 5 +++ src/pages/dashboard/DashboardPage.tsx | 4 +++ .../dashboard/panels/RecommendedAnime.tsx | 35 +++++++++++++++++++ src/pages/settings/SettingsPage.tsx | 2 ++ 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/pages/dashboard/panels/RecommendedAnime.tsx diff --git a/src/core/rtkQuery/seriesApi.ts b/src/core/rtkQuery/seriesApi.ts index d3ee9967a..8ebedd625 100644 --- a/src/core/rtkQuery/seriesApi.ts +++ b/src/core/rtkQuery/seriesApi.ts @@ -1,6 +1,6 @@ import { splitV3Api } from './splitV3Api'; -import type { SeriesAniDBSearchResult, SeriesType } from '../types/api/series'; +import type { SeriesAniDBSearchResult, SeriesType, SeriesRecommendedType } from '../types/api/series'; import type { ListResultType, PaginationType } from '../types/api'; import { EpisodeType } from '../types/api/episode'; @@ -41,6 +41,12 @@ const seriesApi = splitV3Api.injectEndpoints({ query: params => ({ url: `Series/AniDB/${params.anidbID}` }), transformResponse: (response: any) => response.List, }), + + // Gets anidb recommendation for the user + getAniDBRecommendedAnime: build.query, PaginationType>({ + query: params => ({ url: 'Series/AniDB/RecommendedForYou', params }), + transformResponse: (response: any) => response.List, + }), }), }); @@ -51,4 +57,5 @@ export const { useLazyGetSeriesEpisodesQuery, useRefreshAnidbSeriesMutation, useLazyGetSeriesAniDBQuery, + useGetAniDBRecommendedAnimeQuery, } = seriesApi; diff --git a/src/core/rtkQuery/settingsApi.ts b/src/core/rtkQuery/settingsApi.ts index 8a75c1b4e..ab2321c1e 100644 --- a/src/core/rtkQuery/settingsApi.ts +++ b/src/core/rtkQuery/settingsApi.ts @@ -13,7 +13,9 @@ const settingsApi = splitV3Api.injectEndpoints({ transformResponse: (response: SettingsServerType) => { let webuiSettings = JSON.parse(response.WebUI_Settings === '' ? '{}' : response.WebUI_Settings); const settingsRevision = webuiSettings.settingsRevision ?? 0; - if (settingsRevision !== 2) webuiSettings = { ...initialSettings.WebUI_Settings, settingsRevision: 2 }; // TO-DO: Move the settings revision number somewhere else + const newSettingsRevision = 3; + if (settingsRevision !== newSettingsRevision) webuiSettings = { ...initialSettings.WebUI_Settings, settingsRevision: newSettingsRevision }; // TO-DO: Move the settings revision number somewhere else + else webuiSettings = Object.assign({}, initialSettings.WebUI_Settings, webuiSettings); return { ...response, WebUI_Settings: webuiSettings }; }, providesTags: ['Settings'], diff --git a/src/core/types/api/series.ts b/src/core/types/api/series.ts index adc21b5fb..a1900f1ba 100644 --- a/src/core/types/api/series.ts +++ b/src/core/types/api/series.ts @@ -147,3 +147,8 @@ export type SeriesSizesEpisodeCountsType = { Parodies: number; Others: number; }; + +export type SeriesRecommendedType = { + Anime: SeriesAniDBType, + SimilarTo: number, +}; diff --git a/src/pages/dashboard/DashboardPage.tsx b/src/pages/dashboard/DashboardPage.tsx index c9fafcea7..89cc3153c 100644 --- a/src/pages/dashboard/DashboardPage.tsx +++ b/src/pages/dashboard/DashboardPage.tsx @@ -16,6 +16,7 @@ import ImportFolders from './panels/ImportFolders'; import ContinueWatching from './panels/ContinueWatching'; import NextUp from './panels/NextUp'; import UpcomingAnime from './panels/UpcomingAnime'; +import RecommendedAnime from './panels/RecommendedAnime'; import Button from '../../components/Input/Button'; import { setLayoutEditMode } from '../../core/slices/mainpage'; @@ -137,6 +138,9 @@ function DashboardPage() {
+
+ +
); } diff --git a/src/pages/dashboard/panels/RecommendedAnime.tsx b/src/pages/dashboard/panels/RecommendedAnime.tsx new file mode 100644 index 000000000..7d62d66fe --- /dev/null +++ b/src/pages/dashboard/panels/RecommendedAnime.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; + +import { RootState } from '../../../core/store'; +import ShokoPanel from '../../../components/Panels/ShokoPanel'; + +import { useGetAniDBRecommendedAnimeQuery } from '../../../core/rtkQuery/seriesApi'; +import type { SeriesAniDBType } from '../../../core/types/api/series'; + +const RecommendedAnime = () => { + const layoutEditMode = useSelector((state: RootState) => state.mainpage.layoutEditMode); + + const items = useGetAniDBRecommendedAnimeQuery({ pageSize: 20 }); + + const renderItem = (series: SeriesAniDBType, matches: number) => ( +
+
+

{series.Title}

+

{matches} Matches

+
+ ); + + return ( + +
+ {(items.data?.length ?? 0) > 0 + ? items.data?.map(item => renderItem(item.Anime, item.SimilarTo)) + :
No episodes in-progress to continue watching!
+ } +
+
+ ); +}; + +export default RecommendedAnime; diff --git a/src/pages/settings/SettingsPage.tsx b/src/pages/settings/SettingsPage.tsx index a2dd80b54..cde520d2c 100644 --- a/src/pages/settings/SettingsPage.tsx +++ b/src/pages/settings/SettingsPage.tsx @@ -52,6 +52,8 @@ export const initialSettings = { i: 'nextUp', x: 0, y: 61, w: 12, h: 19, minW: 2, minH: 19, moved: false, static: false, }, { i: 'upcomingAnime', x: 0, y: 73, w: 12, h: 20, minW: 2, minH: 2, moved: false, static: false, + }, { + i: 'recommendedAnime', x: 0, y: 93, w: 12, h: 20, minW: 2, minH: 2, moved: false, static: false, }], }, }, From 51cee55243cb158301f640bb1ee06023d4714b55 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 00:59:22 +0530 Subject: [PATCH 09/16] Set webui update channel to 'unstable' if on prerelease version --- src/core/rtkQuery/settingsApi.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/rtkQuery/settingsApi.ts b/src/core/rtkQuery/settingsApi.ts index ab2321c1e..41b35d58a 100644 --- a/src/core/rtkQuery/settingsApi.ts +++ b/src/core/rtkQuery/settingsApi.ts @@ -1,9 +1,12 @@ +import jsonpatch from 'fast-json-patch'; +import semver from 'semver'; + import { splitV3Api } from './splitV3Api'; import type { SettingsServerType, SettingsType } from '../types/api/settings'; -import jsonpatch from 'fast-json-patch'; import { SettingsAnidbLoginType } from '../types/api/settings'; import { initialSettings } from '../../pages/settings/SettingsPage'; +import { uiVersion } from '../util'; const settingsApi = splitV3Api.injectEndpoints({ endpoints: build => ({ @@ -16,6 +19,7 @@ const settingsApi = splitV3Api.injectEndpoints({ const newSettingsRevision = 3; if (settingsRevision !== newSettingsRevision) webuiSettings = { ...initialSettings.WebUI_Settings, settingsRevision: newSettingsRevision }; // TO-DO: Move the settings revision number somewhere else else webuiSettings = Object.assign({}, initialSettings.WebUI_Settings, webuiSettings); + if (semver.prerelease(uiVersion()) !== null) webuiSettings.updateChannel = 'unstable'; return { ...response, WebUI_Settings: webuiSettings }; }, providesTags: ['Settings'], From e9c7fcd5d34051ed024a8c964d6c8c23ead4bfd2 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 01:04:17 +0530 Subject: [PATCH 10/16] Fix "Recommended Anime" panel --- src/core/rtkQuery/seriesApi.ts | 2 +- src/pages/dashboard/panels/RecommendedAnime.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/rtkQuery/seriesApi.ts b/src/core/rtkQuery/seriesApi.ts index 8ebedd625..cad60f368 100644 --- a/src/core/rtkQuery/seriesApi.ts +++ b/src/core/rtkQuery/seriesApi.ts @@ -44,7 +44,7 @@ const seriesApi = splitV3Api.injectEndpoints({ // Gets anidb recommendation for the user getAniDBRecommendedAnime: build.query, PaginationType>({ - query: params => ({ url: 'Series/AniDB/RecommendedForYou', params }), + query: params => ({ url: 'Series/AniDB/RecommendedForYou', params: { ...params, showAll: true } }), transformResponse: (response: any) => response.List, }), }), diff --git a/src/pages/dashboard/panels/RecommendedAnime.tsx b/src/pages/dashboard/panels/RecommendedAnime.tsx index 7d62d66fe..fbec6e879 100644 --- a/src/pages/dashboard/panels/RecommendedAnime.tsx +++ b/src/pages/dashboard/panels/RecommendedAnime.tsx @@ -21,11 +21,11 @@ const RecommendedAnime = () => { ); return ( - -
+ +
{(items.data?.length ?? 0) > 0 ? items.data?.map(item => renderItem(item.Anime, item.SimilarTo)) - :
No episodes in-progress to continue watching!
+ :
No recommended anime!
}
From e0554b355078f7c3ccb59713612354696c9cfda4 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 01:08:00 +0530 Subject: [PATCH 11/16] Increase width of "Collection Breakdown" --- src/pages/settings/SettingsPage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/settings/SettingsPage.tsx b/src/pages/settings/SettingsPage.tsx index cde520d2c..43cf73713 100644 --- a/src/pages/settings/SettingsPage.tsx +++ b/src/pages/settings/SettingsPage.tsx @@ -33,11 +33,11 @@ export const initialSettings = { layout: { dashboard: { lg: [{ - i: 'collectionBreakdown', x: 0, y: 0, w: 2, h: 16, minW: 2, minH: 2, moved: false, static: false, + i: 'collectionBreakdown', x: 0, y: 0, w: 3, h: 16, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'collectionTypeBreakdown', x: 2, y: 0, w: 2, h: 16, minW: 2, minH: 2, moved: false, static: false, + i: 'collectionTypeBreakdown', x: 3, y: 0, w: 2, h: 16, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'queueProcessor', x: 4, y: 0, w: 8, h: 16, minW: 2, minH: 2, moved: false, static: false, + i: 'queueProcessor', x: 5, y: 0, w: 5, h: 16, minW: 2, minH: 2, moved: false, static: false, }, { i: 'recentlyImported', x: 0, y: 16, w: 12, h: 19, minW: 2, minH: 2, moved: false, static: false, }, { From 861adb0a24fe3532631cb48f37cf70064ebe07f1 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 01:30:28 +0530 Subject: [PATCH 12/16] Fix dashboard layout again.. --- .../dashboard/panels/ContinueWatching.tsx | 2 +- src/pages/dashboard/panels/NextUp.tsx | 2 +- .../dashboard/panels/RecentlyImported.tsx | 26 ++++++++++--------- .../dashboard/panels/RecommendedAnime.tsx | 2 +- src/pages/dashboard/panels/UpcomingAnime.tsx | 26 ++++++++++--------- src/pages/settings/SettingsPage.tsx | 6 ++--- 6 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/pages/dashboard/panels/ContinueWatching.tsx b/src/pages/dashboard/panels/ContinueWatching.tsx index 1dc9061c9..41f8aee91 100644 --- a/src/pages/dashboard/panels/ContinueWatching.tsx +++ b/src/pages/dashboard/panels/ContinueWatching.tsx @@ -14,7 +14,7 @@ const ContinueWatching = () => { return ( -
+
{(items.data?.length ?? 0) > 0 ? items.data?.map(item => ) :
No episodes in-progress to continue watching!
diff --git a/src/pages/dashboard/panels/NextUp.tsx b/src/pages/dashboard/panels/NextUp.tsx index 068a719b6..c2726a40c 100644 --- a/src/pages/dashboard/panels/NextUp.tsx +++ b/src/pages/dashboard/panels/NextUp.tsx @@ -14,7 +14,7 @@ const NextUp = () => { return ( -
+
{(items.data?.length ?? 0) > 0 ? items.data?.map(item => ) :
No next up episodes!
diff --git a/src/pages/dashboard/panels/RecentlyImported.tsx b/src/pages/dashboard/panels/RecentlyImported.tsx index 47b196d8e..ab2b4efe1 100644 --- a/src/pages/dashboard/panels/RecentlyImported.tsx +++ b/src/pages/dashboard/panels/RecentlyImported.tsx @@ -22,18 +22,20 @@ const RecentlyImported = () => { return ( } editMode={layoutEditMode}> - - {(episodes.data?.length ?? 0) > 0 - ? episodes.data?.map(item => ) - :
No recently imported episodes!
- } -
- - {(series.data?.length ?? 0) > 0 - ? series.data?.map(item => ) - :
No recently imported series!
- } -
+
+ + {(episodes.data?.length ?? 0) > 0 + ? episodes.data?.map(item => ) + :
No recently imported episodes!
+ } +
+ + {(series.data?.length ?? 0) > 0 + ? series.data?.map(item => ) + :
No recently imported series!
+ } +
+
); }; diff --git a/src/pages/dashboard/panels/RecommendedAnime.tsx b/src/pages/dashboard/panels/RecommendedAnime.tsx index fbec6e879..963eabaa7 100644 --- a/src/pages/dashboard/panels/RecommendedAnime.tsx +++ b/src/pages/dashboard/panels/RecommendedAnime.tsx @@ -22,7 +22,7 @@ const RecommendedAnime = () => { return ( -
+
{(items.data?.length ?? 0) > 0 ? items.data?.map(item => renderItem(item.Anime, item.SimilarTo)) :
No recommended anime!
diff --git a/src/pages/dashboard/panels/UpcomingAnime.tsx b/src/pages/dashboard/panels/UpcomingAnime.tsx index 6a26892d5..a10e87e15 100644 --- a/src/pages/dashboard/panels/UpcomingAnime.tsx +++ b/src/pages/dashboard/panels/UpcomingAnime.tsx @@ -18,18 +18,20 @@ const UpcomingAnime = () => { return ( } editMode={layoutEditMode}> - - {(localItems.data?.length ?? 0) > 0 - ? localItems.data?.map(item => ) - :
No upcoming anime!
- } -
- - {(items.data?.length ?? 0) > 0 - ? items.data?.map(item =>) - :
No upcoming anime!
- } -
+
+ + {(localItems.data?.length ?? 0) > 0 + ? localItems.data?.map(item => ) + :
No upcoming anime!
+ } +
+ + {(items.data?.length ?? 0) > 0 + ? items.data?.map(item =>) + :
No upcoming anime!
+ } +
+
); }; diff --git a/src/pages/settings/SettingsPage.tsx b/src/pages/settings/SettingsPage.tsx index 43cf73713..795584e6a 100644 --- a/src/pages/settings/SettingsPage.tsx +++ b/src/pages/settings/SettingsPage.tsx @@ -49,11 +49,11 @@ export const initialSettings = { }, { i: 'continueWatching', x: 0, y: 49, w: 12, h: 19, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'nextUp', x: 0, y: 61, w: 12, h: 19, minW: 2, minH: 19, moved: false, static: false, + i: 'nextUp', x: 0, y: 61, w: 12, h: 19, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'upcomingAnime', x: 0, y: 73, w: 12, h: 20, minW: 2, minH: 2, moved: false, static: false, + i: 'upcomingAnime', x: 0, y: 73, w: 12, h: 21, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'recommendedAnime', x: 0, y: 93, w: 12, h: 20, minW: 2, minH: 2, moved: false, static: false, + i: 'recommendedAnime', x: 0, y: 94, w: 12, h: 19, minW: 2, minH: 2, moved: false, static: false, }], }, }, From ff2dd591a5e683f5cf523cfea030dbe9afa1cbc7 Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 01:43:50 +0530 Subject: [PATCH 13/16] Fix console errors --- src/core/slices/mainpage.ts | 18 +++++++++++++++++- .../ImportBreakdownTabs/UnrecognizedTab.tsx | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/core/slices/mainpage.ts b/src/core/slices/mainpage.ts index ac2255f74..7beb6e75d 100644 --- a/src/core/slices/mainpage.ts +++ b/src/core/slices/mainpage.ts @@ -15,7 +15,23 @@ const mainpageSlice = createSlice({ name: 'mainpage', initialState: { fetched: {}, - queueStatus: {} as QueueStatusType, + queueStatus: { + HasherQueueState: { + state: 17, + description: '', + }, + GeneralQueueState: { + state: 17, + description: '', + }, + ImageQueueState: { + state: 17, + description: '', + }, + HasherQueueCount: 0, + GeneralQueueCount: 0, + ImageQueueCount: 0, + }, banStatus: { http: { updateType: 2, diff --git a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx index 8f9310abb..2fe21672a 100644 --- a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx +++ b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx @@ -77,7 +77,7 @@ function UnrecognizedTab() { }); if (files.length === 0) { - files.push(
No Unrecognized Files, Good Job!
); + files.push(
No Unrecognized Files, Good Job!
); } return ({files}); From 52dcd0f6f77ea2a47474d17fbe7d3d8e6eb6ae1c Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 14:23:02 +0530 Subject: [PATCH 14/16] Sync unrecognized panel on dashboard with utilities --- .../UnrecognizedAvdumpedItem.tsx | 4 +- .../ImportBreakdownTabs/UnrecognizedTab.tsx | 55 ++++++++----------- src/pages/settings/SettingsPage.tsx | 2 +- 3 files changed, 25 insertions(+), 36 deletions(-) diff --git a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedAvdumpedItem.tsx b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedAvdumpedItem.tsx index f9d04638d..5d81fdf76 100644 --- a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedAvdumpedItem.tsx +++ b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedAvdumpedItem.tsx @@ -15,9 +15,9 @@ function UnrecognizedAvdumpedItem(props: Props) { return (
- { setActiveTab('date');}}>{moment(item.Created).format('yyyy-MM-DD')} / {moment(item.Created).format('hh:mm A')} + { setActiveTab('date');}}>{moment(item.Created).format('yyyy-MM-DD')} / {moment(item.Created).format('hh:mm A')} | - { setActiveTab('ed2k');}}>ED2KHash + { setActiveTab('ed2k');}}>ED2KHash
{activeTab === 'date' && {item.Locations?.[0].RelativePath ?? ''}} {activeTab === 'ed2k' && {hash}} diff --git a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx index 2fe21672a..a618a9dae 100644 --- a/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx +++ b/src/pages/dashboard/panels/ImportBreakdownTabs/UnrecognizedTab.tsx @@ -1,49 +1,38 @@ -import React, { useState } from 'react'; -// import { useDispatch, useSelector } from 'react-redux'; +import React from 'react'; +import { useDispatch, useSelector } from 'react-redux'; import { forEach, orderBy } from 'lodash'; import moment from 'moment'; import CopyToClipboard from 'react-copy-to-clipboard'; +import { Icon } from '@mdi/react'; +import { mdiHelpCircleOutline, mdiClipboardTextMultipleOutline } from '@mdi/js'; -import toast from '../../../../components/Toast'; -// import { RootState } from '../../../../core/store'; +import { RootState } from '../../../../core/store'; import Button from '../../../../components/Input/Button'; +import UnrecognizedAvdumpedItem from './UnrecognizedAvdumpedItem'; +import { setItem as setAvdumpItem } from '../../../../core/slices/utilities/avdump'; +import toast from '../../../../components/Toast'; import type { FileType } from '../../../../core/types/api/file'; -import { mdiHelpCircleOutline, mdiClipboardTextMultipleOutline } from '@mdi/js'; -import { Icon } from '@mdi/react'; -// import Checkbox from '../../../../components/Input/Checkbox'; -// import { markUnrecognizedFile } from '../../../../core/slices/mainpage'; -import UnrecognizedAvdumpedItem from './UnrecognizedAvdumpedItem'; import { useGetFileUnrecognizedQuery, useLazyPostFileAVDumpQuery } from '../../../../core/rtkQuery/fileApi'; function UnrecognizedTab() { - // const dispatch = useDispatch(); - - const [avdumpList, setAvdumpList] = useState([] as Array); + const dispatch = useDispatch(); const items = useGetFileUnrecognizedQuery({ pageSize: 20 }); - // const itemsMarked = useSelector((state: RootState) => state.mainpage.unrecognizedMark); - const [avdumpTrigger, avdumpResult] = useLazyPostFileAVDumpQuery(); + const [avdumpTrigger] = useLazyPostFileAVDumpQuery(); - const runAvdump = async (fileId: number) => { + const avdumpList = useSelector((state: RootState) => state.utilities.avdump); + + const avdumpFile = async (fileId: number) => { + dispatch(setAvdumpItem({ id: fileId, hash: '', fetching: true })); const result = await avdumpTrigger(fileId); - if (result.data?.Ed2k) { - const tempAvdumpList = [...avdumpList]; - tempAvdumpList[fileId] = result.data.Ed2k; - setAvdumpList(tempAvdumpList); - } + dispatch(setAvdumpItem({ id: fileId, hash: result.data?.Ed2k ?? 'x', fetching: false })); }; - // const markFile = (id: string) => { - // const state = itemsMarked.indexOf(id) === -1; - // dispatch(markUnrecognizedFile({ id, state })); - // }; - const renderItem = (item: FileType) => (
- {/* {markFile(`${item.ID}`);}} className="mr-4" />*/} - {avdumpList[item.ID] && } + {avdumpList[item.ID] && } {avdumpList[item.ID] === undefined && (
{moment(item.Created).format('yyyy-MM-DD')} / {moment(item.Created).format('hh:mm A')} @@ -51,15 +40,15 @@ function UnrecognizedTab() {
)}
- {avdumpList[item.ID] === undefined && ( - )} - {avdumpList[item.ID] && ( + {(avdumpList[item.ID] && !avdumpList[item.ID].fetching) && (
- toast.success('Copied to clipboard!')}> - + toast.success('Copied to clipboard!')}> +
)} diff --git a/src/pages/settings/SettingsPage.tsx b/src/pages/settings/SettingsPage.tsx index 795584e6a..9ed607715 100644 --- a/src/pages/settings/SettingsPage.tsx +++ b/src/pages/settings/SettingsPage.tsx @@ -37,7 +37,7 @@ export const initialSettings = { }, { i: 'collectionTypeBreakdown', x: 3, y: 0, w: 2, h: 16, minW: 2, minH: 2, moved: false, static: false, }, { - i: 'queueProcessor', x: 5, y: 0, w: 5, h: 16, minW: 2, minH: 2, moved: false, static: false, + i: 'queueProcessor', x: 5, y: 0, w: 7, h: 16, minW: 2, minH: 2, moved: false, static: false, }, { i: 'recentlyImported', x: 0, y: 16, w: 12, h: 19, minW: 2, minH: 2, moved: false, static: false, }, { From 34aede3da8aa4f22f6bf55f93b72e3ff0ccdde1b Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 19:53:26 +0530 Subject: [PATCH 15/16] Hide layout edit mode when not required --- src/components/Layout/Sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Layout/Sidebar.tsx b/src/components/Layout/Sidebar.tsx index 4b94cb4a5..5f17b3f9f 100644 --- a/src/components/Layout/Sidebar.tsx +++ b/src/components/Layout/Sidebar.tsx @@ -95,7 +95,7 @@ function Sidebar() { {text} {(key === 'dashboard') && ( -
dispatch(setLayoutEditMode(true))} className={cx('cursor-pointer transition-opacity', layoutEditMode && 'text-highlight-1', pathname !== '/webui/dashboard' && 'opacity-50 pointer-events-none')}> +
dispatch(setLayoutEditMode(true))} className={cx('cursor-pointer transition-opacity', (pathname !== '/webui/dashboard' || layoutEditMode) && 'opacity-0 pointer-events-none')}>
)} From 16f7204e7227710530e4442d7b7a3ae51d7f168c Mon Sep 17 00:00:00 2001 From: harshithmohan Date: Fri, 11 Nov 2022 20:59:05 +0530 Subject: [PATCH 16/16] Reset row selection in unrecognized panel on files refresh --- .../utilities/UnrecognizedUtilityTabs/UnrecognizedTab.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/utilities/UnrecognizedUtilityTabs/UnrecognizedTab.tsx b/src/pages/utilities/UnrecognizedUtilityTabs/UnrecognizedTab.tsx index 63fd498d6..e00a1d9bb 100644 --- a/src/pages/utilities/UnrecognizedUtilityTabs/UnrecognizedTab.tsx +++ b/src/pages/utilities/UnrecognizedUtilityTabs/UnrecognizedTab.tsx @@ -160,6 +160,10 @@ function UnrecognizedTab({ columns: tempColumns, show, setFilesCount }: Props) { dispatch(setSelectedRows(table.getSelectedRowModel().rows.map(row => row.original))); }, [table.getSelectedRowModel()]); + useEffect(() => { + table.resetRowSelection(); + }, [files.List]); + const rescanFiles = (selected = false) => { if (selected) { forEach(selectedRows, (row) => {