= ({
+ performer,
+}) => {
+ return ;
+};
diff --git a/ui/v2.5/src/components/Settings/SettingsScrapersPanel.tsx b/ui/v2.5/src/components/Settings/SettingsScrapersPanel.tsx
index 8f0dfb7ac..b4865f80a 100644
--- a/ui/v2.5/src/components/Settings/SettingsScrapersPanel.tsx
+++ b/ui/v2.5/src/components/Settings/SettingsScrapersPanel.tsx
@@ -5,6 +5,7 @@ import {
useListMovieScrapers,
useListPerformerScrapers,
useListSceneScrapers,
+ useListGalleryScrapers,
} from "src/core/StashService";
import { useToast } from "src/hooks";
import { TextUtils } from "src/utils";
@@ -75,6 +76,10 @@ export const SettingsScrapersPanel: React.FC = () => {
data: sceneScrapers,
loading: loadingScenes,
} = useListSceneScrapers();
+ const {
+ data: galleryScrapers,
+ loading: loadingGalleries,
+ } = useListGalleryScrapers();
const {
data: movieScrapers,
loading: loadingMovies,
@@ -124,6 +129,25 @@ export const SettingsScrapersPanel: React.FC = () => {
);
}
+ function renderGalleryScrapeTypes(types: ScrapeType[]) {
+ const typeStrings = types.map((t) => {
+ switch (t) {
+ case ScrapeType.Fragment:
+ return "Gallery Metadata";
+ default:
+ return t;
+ }
+ });
+
+ return (
+
+ {typeStrings.map((t) => (
+ - {t}
+ ))}
+
+ );
+ }
+
function renderMovieScrapeTypes(types: ScrapeType[]) {
const typeStrings = types.map((t) => {
switch (t) {
@@ -161,6 +185,22 @@ export const SettingsScrapersPanel: React.FC = () => {
return renderTable("Scene scrapers", elements);
}
+ function renderGalleryScrapers() {
+ const elements = (galleryScrapers?.listGalleryScrapers ?? []).map(
+ (scraper) => (
+
+ {scraper.name} |
+
+ {renderGalleryScrapeTypes(scraper.gallery?.supported_scrapes ?? [])}
+ |
+ {renderURLs(scraper.gallery?.urls ?? [])} |
+
+ )
+ );
+
+ return renderTable("Gallery Scrapers", elements);
+ }
+
function renderPerformerScrapers() {
const elements = (performerScrapers?.listPerformerScrapers ?? []).map(
(scraper) => (
@@ -213,7 +253,7 @@ export const SettingsScrapersPanel: React.FC = () => {
}
}
- if (loadingScenes || loadingPerformers || loadingMovies)
+ if (loadingScenes || loadingGalleries || loadingPerformers || loadingMovies)
return ;
return (
@@ -230,6 +270,7 @@ export const SettingsScrapersPanel: React.FC = () => {
{renderSceneScrapers()}
+ {renderGalleryScrapers()}
{renderPerformerScrapers()}
{renderMovieScrapers()}
diff --git a/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx b/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx
index ba2b25f5d..f76c9b3dc 100644
--- a/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx
+++ b/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx
@@ -21,6 +21,7 @@ import {
} from "src/components/Shared";
import { useToast } from "src/hooks";
import { StudioScenesPanel } from "./StudioScenesPanel";
+import { StudioGalleriesPanel } from "./StudioGalleriesPanel";
import { StudioImagesPanel } from "./StudioImagesPanel";
import { StudioChildrenPanel } from "./StudioChildrenPanel";
@@ -233,7 +234,9 @@ export const Studio: React.FC = () => {
}
const activeTabKey =
- tab === "childstudios" || tab === "images" ? tab : "scenes";
+ tab === "childstudios" || tab === "images" || tab === "galleries"
+ ? tab
+ : "scenes";
const setActiveTabKey = (newTab: string | null) => {
if (tab !== newTab) {
const tabParam = newTab === "scenes" ? "" : `/${newTab}`;
@@ -329,6 +332,9 @@ export const Studio: React.FC = () => {
+
+
+
diff --git a/ui/v2.5/src/components/Studios/StudioDetails/StudioGalleriesPanel.tsx b/ui/v2.5/src/components/Studios/StudioDetails/StudioGalleriesPanel.tsx
new file mode 100644
index 000000000..278a3a162
--- /dev/null
+++ b/ui/v2.5/src/components/Studios/StudioDetails/StudioGalleriesPanel.tsx
@@ -0,0 +1,14 @@
+import React from "react";
+import * as GQL from "src/core/generated-graphql";
+import { GalleryList } from "src/components/Galleries/GalleryList";
+import { studioFilterHook } from "src/core/studios";
+
+interface IStudioGalleriesPanel {
+ studio: Partial;
+}
+
+export const StudioGalleriesPanel: React.FC = ({
+ studio,
+}) => {
+ return ;
+};