mirror of
https://github.com/Qortal/qapp-core.git
synced 2025-06-19 03:11:20 +00:00
added disableFetch for usePublish
This commit is contained in:
parent
945f5b7d83
commit
2c3b8a6472
@ -42,6 +42,8 @@ import { useGlobal } from "../../context/GlobalProvider";
|
|||||||
import { ENTITY_SUBTITLE, SERVICE_SUBTITLE } from "./video-player-constants";
|
import { ENTITY_SUBTITLE, SERVICE_SUBTITLE } from "./video-player-constants";
|
||||||
import ISO6391, { LanguageCode } from "iso-639-1";
|
import ISO6391, { LanguageCode } from "iso-639-1";
|
||||||
import LanguageSelect from "./LanguageSelect";
|
import LanguageSelect from "./LanguageSelect";
|
||||||
|
import DownloadIcon from '@mui/icons-material/Download';
|
||||||
|
import DownloadingIcon from '@mui/icons-material/Downloading';
|
||||||
import {
|
import {
|
||||||
useDropzone,
|
useDropzone,
|
||||||
DropzoneRootProps,
|
DropzoneRootProps,
|
||||||
@ -58,6 +60,9 @@ import {
|
|||||||
showLoading,
|
showLoading,
|
||||||
showSuccess,
|
showSuccess,
|
||||||
} from "../../utils/toast";
|
} from "../../utils/toast";
|
||||||
|
import { RequestQueueWithPromise } from "../../utils/queue";
|
||||||
|
|
||||||
|
export const requestQueueGetStatus = new RequestQueueWithPromise(1);
|
||||||
|
|
||||||
|
|
||||||
export interface SubtitleManagerProps {
|
export interface SubtitleManagerProps {
|
||||||
@ -138,13 +143,12 @@ const SubtitleManagerComponent = ({
|
|||||||
identifier: postIdSearch,
|
identifier: postIdSearch,
|
||||||
name,
|
name,
|
||||||
limit: 0,
|
limit: 0,
|
||||||
|
includeMetadata: true
|
||||||
};
|
};
|
||||||
const res = await lists.fetchResources(
|
const res = await lists.fetchResourcesResultsOnly(
|
||||||
searchParams,
|
searchParams
|
||||||
`subs-${videoId}`,
|
|
||||||
"BASE64"
|
|
||||||
);
|
);
|
||||||
lists.addList(`subs-${videoId}`, res || []);
|
lists.addList(`subs-${videoId}`, res?.filter((item)=> !!item?.metadata?.title) || []);
|
||||||
console.log("resres2", res);
|
console.log("resres2", res);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@ -215,6 +219,9 @@ const SubtitleManagerComponent = ({
|
|||||||
name,
|
name,
|
||||||
size: 100,
|
size: 100,
|
||||||
created: Date.now(),
|
created: Date.now(),
|
||||||
|
metadata: {
|
||||||
|
title: sub.language || undefined,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
data: data,
|
data: data,
|
||||||
});
|
});
|
||||||
@ -387,7 +394,7 @@ const SubtitleManagerComponent = ({
|
|||||||
disabled={showAll}
|
disabled={showAll}
|
||||||
onClick={() => setShowAll(true)}
|
onClick={() => setShowAll(true)}
|
||||||
>
|
>
|
||||||
Load all
|
Load community subs
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
{/* <Box>
|
{/* <Box>
|
||||||
@ -827,17 +834,75 @@ const PublishSubtitles = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
interface SubProps {
|
interface SubProps {
|
||||||
sub: QortalGetMetadata;
|
sub: QortalMetadata;
|
||||||
onSelect: (subtitle: Subtitle) => void;
|
onSelect: (subtitle: Subtitle) => void;
|
||||||
currentSubtrack: null | string;
|
currentSubtrack: null | string;
|
||||||
}
|
}
|
||||||
|
const subtitlesStatus: Record<string, boolean> = {}
|
||||||
|
|
||||||
const Subtitle = ({ sub, onSelect, currentSubtrack }: SubProps) => {
|
const Subtitle = ({ sub, onSelect, currentSubtrack }: SubProps) => {
|
||||||
const { resource, isLoading, error } = usePublish(2, "JSON", sub);
|
const [selectedToDownload, setSelectedToDownload] = useState<null | QortalGetMetadata>(null)
|
||||||
console.log("resource", resource);
|
const [isReady, setIsReady] = useState(false)
|
||||||
|
const { resource, isLoading, error, refetch } = usePublish(2, "JSON", sub, true);
|
||||||
|
console.log("resource", resource, isLoading);
|
||||||
const isSelected = currentSubtrack === resource?.data?.language;
|
const isSelected = currentSubtrack === resource?.data?.language;
|
||||||
|
const [isGettingStatus, setIsGettingStatus] = useState(true)
|
||||||
|
// useEffect(()=> {
|
||||||
|
// if(resource?.data){
|
||||||
|
// console.log('onselectdone')
|
||||||
|
// onSelect(resource?.data)
|
||||||
|
// }
|
||||||
|
// }, [isSelected, resource?.data])
|
||||||
|
console.log('isReady', resource?.data)
|
||||||
|
const getStatus = useCallback(async (service: Service, name: string, identifier: string)=> {
|
||||||
|
try {
|
||||||
|
if(subtitlesStatus[`${service}-${name}-${identifier}`]){
|
||||||
|
setIsReady(true)
|
||||||
|
refetch()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await requestQueueGetStatus.enqueue(
|
||||||
|
(): Promise<string> => {
|
||||||
|
return qortalRequest({
|
||||||
|
action: 'GET_QDN_RESOURCE_STATUS',
|
||||||
|
identifier,
|
||||||
|
service,
|
||||||
|
name,
|
||||||
|
build: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if(response?.status === 'READY'){
|
||||||
|
setIsReady(true)
|
||||||
|
subtitlesStatus[`${service}-${name}-${identifier}`] = true
|
||||||
|
refetch()
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
setIsGettingStatus(false)
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
useEffect(()=> {
|
||||||
|
if(sub?.service && sub?.name && sub?.identifier){
|
||||||
|
getStatus(sub?.service, sub?.name, sub?.identifier)
|
||||||
|
}
|
||||||
|
}, [sub?.identifier, sub?.name, sub?.service])
|
||||||
|
console.log('tester', isReady,isLoading,error,resource?.data)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ButtonBase
|
<ButtonBase
|
||||||
onClick={() => onSelect(isSelected ? null : resource?.data)}
|
onClick={() => {
|
||||||
|
if(resource?.data){
|
||||||
|
onSelect(isSelected ? null : resource?.data)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
refetch()
|
||||||
|
}
|
||||||
|
}}
|
||||||
sx={{
|
sx={{
|
||||||
px: 2,
|
px: 2,
|
||||||
py: 1,
|
py: 1,
|
||||||
@ -848,13 +913,14 @@ const Subtitle = ({ sub, onSelect, currentSubtrack }: SubProps) => {
|
|||||||
justifyContent: "space-between",
|
justifyContent: "space-between",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{isLoading && <Skeleton variant="text" sx={{ fontSize: "1.25rem", width: '100%' }} />}
|
{isGettingStatus && <Skeleton variant="text" sx={{ fontSize: "1.25rem", width: '100%' }} />}
|
||||||
{!isLoading && !error && (
|
{!isGettingStatus && (
|
||||||
<>
|
<>
|
||||||
<Typography>{resource?.data?.language}</Typography>
|
<Typography>{sub?.metadata?.title}</Typography>
|
||||||
{isSelected ? <CheckIcon /> : <ArrowForwardIosIcon />}
|
{(!isLoading && !error && !resource?.data) ? <DownloadIcon /> : isLoading ? <DownloadingIcon /> : isSelected ? <CheckIcon /> : <ArrowForwardIosIcon />}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
</ButtonBase>
|
</ButtonBase>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -865,7 +931,6 @@ interface MySubtitleProps {
|
|||||||
}
|
}
|
||||||
const MySubtitle = ({ sub, onDelete }: MySubtitleProps) => {
|
const MySubtitle = ({ sub, onDelete }: MySubtitleProps) => {
|
||||||
const { resource, isLoading, error } = usePublish(2, "JSON", sub);
|
const { resource, isLoading, error } = usePublish(2, "JSON", sub);
|
||||||
console.log("resource", resource);
|
|
||||||
return (
|
return (
|
||||||
<Card
|
<Card
|
||||||
sx={{
|
sx={{
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import React, { useMemo } from "react";
|
import React, { useMemo } from "react";
|
||||||
import { useListStore } from "../state/lists";
|
import { useListStore } from "../state/lists";
|
||||||
import { useCacheStore } from "../state/cache"; // Assuming you export getResourceCache
|
import { useCacheStore } from "../state/cache"; // Assuming you export getResourceCache
|
||||||
import { QortalGetMetadata } from "../types/interfaces/resources";
|
import { QortalMetadata } from "../types/interfaces/resources";
|
||||||
|
|
||||||
export function useListReturn(listName: string): QortalGetMetadata[] {
|
export function useListReturn(listName: string): QortalMetadata[] {
|
||||||
const list = useListStore((state) => state.lists[listName]?.items) || [];
|
const list = useListStore((state) => state.lists[listName]?.items) || [];
|
||||||
const filterOutDeletedResources = useCacheStore((s) => s.filterOutDeletedResources);
|
const filterOutDeletedResources = useCacheStore((s) => s.filterOutDeletedResources);
|
||||||
const deletedResources = useCacheStore((s) => s.deletedResources);
|
const deletedResources = useCacheStore((s) => s.deletedResources);
|
||||||
|
@ -22,7 +22,7 @@ interface StoredPublish {
|
|||||||
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
||||||
error: string | null;
|
error: string | null;
|
||||||
}>
|
}>
|
||||||
fetchPublish: (metadataProp: QortalGetMetadata) => Promise<{
|
fetchPublish: (metadataProp: QortalGetMetadata, disableFetch?: boolean) => Promise<{
|
||||||
hasResource: boolean | null;
|
hasResource: boolean | null;
|
||||||
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
||||||
error: string | null;
|
error: string | null;
|
||||||
@ -44,7 +44,8 @@ interface StoredPublish {
|
|||||||
export function usePublish(
|
export function usePublish(
|
||||||
maxFetchTries: number,
|
maxFetchTries: number,
|
||||||
returnType: ReturnType,
|
returnType: ReturnType,
|
||||||
metadata: QortalGetMetadata
|
metadata: QortalGetMetadata,
|
||||||
|
disableFetch?: boolean
|
||||||
): UsePublishWithMetadata;
|
): UsePublishWithMetadata;
|
||||||
|
|
||||||
export function usePublish(
|
export function usePublish(
|
||||||
@ -57,7 +58,8 @@ interface StoredPublish {
|
|||||||
export function usePublish(
|
export function usePublish(
|
||||||
maxFetchTries: number = 3,
|
maxFetchTries: number = 3,
|
||||||
returnType: ReturnType = "JSON",
|
returnType: ReturnType = "JSON",
|
||||||
metadata?: QortalGetMetadata | null
|
metadata?: QortalGetMetadata | null,
|
||||||
|
disableFetch?: boolean
|
||||||
): UsePublishWithMetadata | UsePublishWithoutMetadata {
|
): UsePublishWithMetadata | UsePublishWithoutMetadata {
|
||||||
const {auth, appInfo} = useGlobal()
|
const {auth, appInfo} = useGlobal()
|
||||||
const username = auth?.name
|
const username = auth?.name
|
||||||
@ -92,6 +94,7 @@ interface StoredPublish {
|
|||||||
const fetchPublish = useCallback(
|
const fetchPublish = useCallback(
|
||||||
async (
|
async (
|
||||||
metadataProp: QortalGetMetadata,
|
metadataProp: QortalGetMetadata,
|
||||||
|
disableFetch?: boolean
|
||||||
) => {
|
) => {
|
||||||
let hasResource = null;
|
let hasResource = null;
|
||||||
let resource = null;
|
let resource = null;
|
||||||
@ -127,6 +130,13 @@ interface StoredPublish {
|
|||||||
hasResource: true
|
hasResource: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(metadata && disableFetch){
|
||||||
|
return {
|
||||||
|
resource: null,
|
||||||
|
error: null,
|
||||||
|
hasResource: null
|
||||||
|
}
|
||||||
|
}
|
||||||
const url = `/arbitrary/resources/search?mode=ALL&service=${metadataProp?.service}&limit=1&includemetadata=true&reverse=true&excludeblocked=true&name=${encodeURIComponent(metadataProp?.name)}&exactmatchnames=true&offset=0&identifier=${encodeURIComponent(metadataProp?.identifier)}`;
|
const url = `/arbitrary/resources/search?mode=ALL&service=${metadataProp?.service}&limit=1&includemetadata=true&reverse=true&excludeblocked=true&name=${encodeURIComponent(metadataProp?.name)}&exactmatchnames=true&offset=0&identifier=${encodeURIComponent(metadataProp?.identifier)}`;
|
||||||
const responseMetadata = await fetch(url, {
|
const responseMetadata = await fetch(url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
@ -202,9 +212,9 @@ interface StoredPublish {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
||||||
if (metadata?.identifier && metadata?.name && metadata?.service) {
|
if (metadata?.identifier && metadata?.name && metadata?.service) {
|
||||||
fetchPublish(metadata);
|
fetchPublish(metadata, disableFetch);
|
||||||
}
|
}
|
||||||
}, [metadata?.identifier, metadata?.service, metadata?.identifier, returnType]);
|
}, [metadata?.identifier, metadata?.service, metadata?.identifier, returnType, disableFetch]);
|
||||||
|
|
||||||
const refetchData = useCallback(async ()=> {
|
const refetchData = useCallback(async ()=> {
|
||||||
if(!metadata) throw new Error('usePublish is missing metadata')
|
if(!metadata) throw new Error('usePublish is missing metadata')
|
||||||
|
@ -276,9 +276,10 @@ export const useResources = (retryAttempts: number = 2, maxSize = 5242880) => {
|
|||||||
let responseData: QortalMetadata[] = [];
|
let responseData: QortalMetadata[] = [];
|
||||||
let filteredResults: QortalMetadata[] = [];
|
let filteredResults: QortalMetadata[] = [];
|
||||||
let lastCreated = params.before || undefined;
|
let lastCreated = params.before || undefined;
|
||||||
const targetLimit = params.limit ?? 20;
|
const targetLimit = params.limit ?? 20; // Use `params.limit` if provided, else default to 20
|
||||||
|
const isUnlimited = params.limit === 0;
|
||||||
while (filteredResults.length < targetLimit) {
|
while (isUnlimited || filteredResults.length < targetLimit) {
|
||||||
|
|
||||||
const response = await qortalRequest({
|
const response = await qortalRequest({
|
||||||
action: "SEARCH_QDN_RESOURCES",
|
action: "SEARCH_QDN_RESOURCES",
|
||||||
mode: "ALL",
|
mode: "ALL",
|
||||||
@ -293,12 +294,13 @@ export const useResources = (retryAttempts: number = 2, maxSize = 5242880) => {
|
|||||||
const validResults = responseData.filter((item) => item.size !== 32);
|
const validResults = responseData.filter((item) => item.size !== 32);
|
||||||
filteredResults = [...filteredResults, ...validResults];
|
filteredResults = [...filteredResults, ...validResults];
|
||||||
|
|
||||||
if (filteredResults.length >= targetLimit) {
|
if (filteredResults.length >= targetLimit && !isUnlimited) {
|
||||||
filteredResults = filteredResults.slice(0, targetLimit);
|
filteredResults = filteredResults.slice(0, targetLimit);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastCreated = responseData[responseData.length - 1]?.created;
|
lastCreated = responseData[responseData.length - 1]?.created;
|
||||||
|
if (isUnlimited) break;
|
||||||
if (!lastCreated) break;
|
if (!lastCreated) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user