mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-03-02 07:52:34 +00:00
feat: refresh metadata for item
This commit is contained in:
@@ -35,6 +35,7 @@ import { ItemTechnicalDetails } from "./ItemTechnicalDetails";
|
||||
import { MediaSourceSheet } from "./MediaSourceSheet";
|
||||
import { MoreMoviesWithActor } from "./MoreMoviesWithActor";
|
||||
import { PlayInRemoteSessionButton } from "./PlayInRemoteSession";
|
||||
import { RefreshMetadata } from "./RefreshMetadata";
|
||||
import { TrackSheet } from "./TrackSheet";
|
||||
|
||||
const Chromecast = !Platform.isTV ? require("./Chromecast") : null;
|
||||
@@ -115,7 +116,10 @@ export const ItemContent: React.FC<ItemContentProps> = React.memo(
|
||||
<DownloadSingleItem item={item} size='large' />
|
||||
)}
|
||||
{user?.Policy?.IsAdministrator && (
|
||||
<PlayInRemoteSessionButton item={item} size='large' />
|
||||
<>
|
||||
<PlayInRemoteSessionButton item={item} size='large' />
|
||||
<RefreshMetadata item={item} />
|
||||
</>
|
||||
)}
|
||||
|
||||
<PlayedStatus items={[item]} size='large' />
|
||||
@@ -132,7 +136,10 @@ export const ItemContent: React.FC<ItemContentProps> = React.memo(
|
||||
<DownloadSingleItem item={item} size='large' />
|
||||
)}
|
||||
{user?.Policy?.IsAdministrator && (
|
||||
<PlayInRemoteSessionButton item={item} size='large' />
|
||||
<>
|
||||
<PlayInRemoteSessionButton item={item} size='large' />
|
||||
<RefreshMetadata item={item} />
|
||||
</>
|
||||
)}
|
||||
|
||||
<PlayedStatus items={[item]} size='large' />
|
||||
|
||||
37
components/RefreshMetadata.tsx
Normal file
37
components/RefreshMetadata.tsx
Normal file
@@ -0,0 +1,37 @@
|
||||
import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
|
||||
import type { FC } from "react";
|
||||
import { Platform, View, type ViewProps } from "react-native";
|
||||
import { RoundButton } from "@/components/RoundButton";
|
||||
import { useRefreshMetadata } from "@/hooks/useRefreshMetadata";
|
||||
|
||||
interface Props extends ViewProps {
|
||||
item: BaseItemDto;
|
||||
}
|
||||
|
||||
export const RefreshMetadata: FC<Props> = ({ item, ...props }) => {
|
||||
const { refreshMetadata, isRefreshing } = useRefreshMetadata(item);
|
||||
|
||||
if (Platform.OS === "ios") {
|
||||
return (
|
||||
<View {...props}>
|
||||
<RoundButton
|
||||
size='large'
|
||||
icon='reload-outline'
|
||||
onPress={refreshMetadata}
|
||||
hapticFeedback={!isRefreshing}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View {...props}>
|
||||
<RoundButton
|
||||
size='large'
|
||||
icon='reload-outline'
|
||||
onPress={refreshMetadata}
|
||||
hapticFeedback={!isRefreshing}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
40
hooks/useRefreshMetadata.ts
Normal file
40
hooks/useRefreshMetadata.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
|
||||
import { getItemRefreshApi } from "@jellyfin/sdk/lib/utils/api";
|
||||
import { useMutation, useQueryClient } from "@tanstack/react-query";
|
||||
import { useAtom } from "jotai";
|
||||
import { toast } from "sonner-native";
|
||||
import { apiAtom } from "@/providers/JellyfinProvider";
|
||||
|
||||
export const useRefreshMetadata = (item: BaseItemDto) => {
|
||||
const queryClient = useQueryClient();
|
||||
const [api] = useAtom(apiAtom);
|
||||
const type = "item";
|
||||
|
||||
const refreshMetadataMutation = useMutation({
|
||||
mutationFn: async () => {
|
||||
if (api && item.Id) {
|
||||
await getItemRefreshApi(api).refreshItem({
|
||||
itemId: item.Id,
|
||||
});
|
||||
}
|
||||
},
|
||||
onSuccess: () => {
|
||||
toast.success("Metadata refresh triggered");
|
||||
queryClient.invalidateQueries({ queryKey: [type, item.Id] });
|
||||
},
|
||||
onError: (error) => {
|
||||
console.error("Failed to refresh metadata:", error);
|
||||
toast.error("Failed to refresh metadata");
|
||||
},
|
||||
});
|
||||
|
||||
const refreshMetadata = () => {
|
||||
refreshMetadataMutation.mutate();
|
||||
};
|
||||
|
||||
return {
|
||||
refreshMetadata,
|
||||
isRefreshing: refreshMetadataMutation.isPending,
|
||||
refreshMetadataMutation,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user