From 546e9fd1d06759af08b94f2a758148cf4d105ae0 Mon Sep 17 00:00:00 2001 From: ManiMatter <124743318+ManiMatter@users.noreply.github.com> Date: Mon, 2 Sep 2024 22:24:55 +0200 Subject: [PATCH] New: Last Searched column on Wanted screens --- frontend/src/Episode/Episode.ts | 1 + frontend/src/Store/Actions/wantedActions.js | 12 ++++++++++++ .../src/Wanted/CutoffUnmet/CutoffUnmetConnector.js | 6 ++++-- frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js | 12 ++++++++++++ frontend/src/Wanted/Missing/MissingConnector.js | 6 ++++-- frontend/src/Wanted/Missing/MissingRow.js | 12 ++++++++++++ src/NzbDrone.Core/Localization/Core/en.json | 1 + src/Sonarr.Api.V3/Episodes/EpisodeResource.cs | 3 ++- 8 files changed, 48 insertions(+), 5 deletions(-) diff --git a/frontend/src/Episode/Episode.ts b/frontend/src/Episode/Episode.ts index 87ae86657..c154e0278 100644 --- a/frontend/src/Episode/Episode.ts +++ b/frontend/src/Episode/Episode.ts @@ -9,6 +9,7 @@ interface Episode extends ModelBase { episodeNumber: number; airDate: string; airDateUtc?: string; + lastSearchTime?: string; runtime: number; absoluteEpisodeNumber?: number; sceneSeasonNumber?: number; diff --git a/frontend/src/Store/Actions/wantedActions.js b/frontend/src/Store/Actions/wantedActions.js index bb39416aa..dac4d0c8d 100644 --- a/frontend/src/Store/Actions/wantedActions.js +++ b/frontend/src/Store/Actions/wantedActions.js @@ -50,6 +50,12 @@ export const defaultState = { isSortable: true, isVisible: true }, + { + name: 'episodes.lastSearchTime', + label: () => translate('LastSearched'), + isSortable: true, + isVisible: false + }, { name: 'status', label: () => translate('Status'), @@ -122,6 +128,12 @@ export const defaultState = { isSortable: true, isVisible: true }, + { + name: 'episodes.lastSearchTime', + label: () => translate('LastSearched'), + isSortable: true, + isVisible: false + }, { name: 'languages', label: () => translate('Languages'), diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js index 002365f3a..6b52df496 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js @@ -126,14 +126,16 @@ class CutoffUnmetConnector extends Component { onSearchSelectedPress = (selected) => { this.props.executeCommand({ name: commandNames.EPISODE_SEARCH, - episodeIds: selected + episodeIds: selected, + commandFinished: this.repopulate }); }; onSearchAllCutoffUnmetPress = (monitored) => { this.props.executeCommand({ name: commandNames.CUTOFF_UNMET_EPISODE_SEARCH, - monitored + monitored, + commandFinished: this.repopulate }); }; diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js index a51ead746..05fed682c 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js @@ -26,6 +26,7 @@ function CutoffUnmetRow(props) { sceneAbsoluteEpisodeNumber, unverifiedSceneNumbering, airDateUtc, + lastSearchTime, title, isSelected, columns, @@ -106,6 +107,16 @@ function CutoffUnmetRow(props) { ); } + if (name === 'episodes.lastSearchTime') { + return ( + + ); + } + if (name === 'languages') { return ( { this.props.executeCommand({ name: commandNames.EPISODE_SEARCH, - episodeIds: selected + episodeIds: selected, + commandFinished: this.repopulate }); }; onSearchAllMissingPress = (monitored) => { this.props.executeCommand({ name: commandNames.MISSING_EPISODE_SEARCH, - monitored + monitored, + commandFinished: this.repopulate }); }; diff --git a/frontend/src/Wanted/Missing/MissingRow.js b/frontend/src/Wanted/Missing/MissingRow.js index 0831a2bc3..b5d02db21 100644 --- a/frontend/src/Wanted/Missing/MissingRow.js +++ b/frontend/src/Wanted/Missing/MissingRow.js @@ -25,6 +25,7 @@ function MissingRow(props) { sceneAbsoluteEpisodeNumber, unverifiedSceneNumbering, airDateUtc, + lastSearchTime, title, isSelected, columns, @@ -109,6 +110,16 @@ function MissingRow(props) { ); } + if (name === 'episodes.lastSearchTime') { + return ( + + ); + } + if (name === 'status') { return ( Images { get; set; } // Hiding this so people don't think its usable (only used to set the initial state) @@ -68,6 +68,7 @@ namespace Sonarr.Api.V3.Episodes Runtime = model.Runtime, FinaleType = model.FinaleType, Overview = model.Overview, + LastSearchTime = model.LastSearchTime, // EpisodeFile