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 ISO6391, { LanguageCode } from "iso-639-1";
|
||||
import LanguageSelect from "./LanguageSelect";
|
||||
import DownloadIcon from '@mui/icons-material/Download';
|
||||
import DownloadingIcon from '@mui/icons-material/Downloading';
|
||||
import {
|
||||
useDropzone,
|
||||
DropzoneRootProps,
|
||||
@ -58,6 +60,9 @@ import {
|
||||
showLoading,
|
||||
showSuccess,
|
||||
} from "../../utils/toast";
|
||||
import { RequestQueueWithPromise } from "../../utils/queue";
|
||||
|
||||
export const requestQueueGetStatus = new RequestQueueWithPromise(1);
|
||||
|
||||
|
||||
export interface SubtitleManagerProps {
|
||||
@ -138,13 +143,12 @@ const SubtitleManagerComponent = ({
|
||||
identifier: postIdSearch,
|
||||
name,
|
||||
limit: 0,
|
||||
includeMetadata: true
|
||||
};
|
||||
const res = await lists.fetchResources(
|
||||
searchParams,
|
||||
`subs-${videoId}`,
|
||||
"BASE64"
|
||||
const res = await lists.fetchResourcesResultsOnly(
|
||||
searchParams
|
||||
);
|
||||
lists.addList(`subs-${videoId}`, res || []);
|
||||
lists.addList(`subs-${videoId}`, res?.filter((item)=> !!item?.metadata?.title) || []);
|
||||
console.log("resres2", res);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
@ -215,6 +219,9 @@ const SubtitleManagerComponent = ({
|
||||
name,
|
||||
size: 100,
|
||||
created: Date.now(),
|
||||
metadata: {
|
||||
title: sub.language || undefined,
|
||||
}
|
||||
},
|
||||
data: data,
|
||||
});
|
||||
@ -387,7 +394,7 @@ const SubtitleManagerComponent = ({
|
||||
disabled={showAll}
|
||||
onClick={() => setShowAll(true)}
|
||||
>
|
||||
Load all
|
||||
Load community subs
|
||||
</Button>
|
||||
</Box>
|
||||
{/* <Box>
|
||||
@ -827,17 +834,75 @@ const PublishSubtitles = ({
|
||||
};
|
||||
|
||||
interface SubProps {
|
||||
sub: QortalGetMetadata;
|
||||
sub: QortalMetadata;
|
||||
onSelect: (subtitle: Subtitle) => void;
|
||||
currentSubtrack: null | string;
|
||||
}
|
||||
const subtitlesStatus: Record<string, boolean> = {}
|
||||
|
||||
const Subtitle = ({ sub, onSelect, currentSubtrack }: SubProps) => {
|
||||
const { resource, isLoading, error } = usePublish(2, "JSON", sub);
|
||||
console.log("resource", resource);
|
||||
const [selectedToDownload, setSelectedToDownload] = useState<null | QortalGetMetadata>(null)
|
||||
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 [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 (
|
||||
<ButtonBase
|
||||
onClick={() => onSelect(isSelected ? null : resource?.data)}
|
||||
onClick={() => {
|
||||
if(resource?.data){
|
||||
onSelect(isSelected ? null : resource?.data)
|
||||
|
||||
} else {
|
||||
refetch()
|
||||
}
|
||||
}}
|
||||
sx={{
|
||||
px: 2,
|
||||
py: 1,
|
||||
@ -848,13 +913,14 @@ const Subtitle = ({ sub, onSelect, currentSubtrack }: SubProps) => {
|
||||
justifyContent: "space-between",
|
||||
}}
|
||||
>
|
||||
{isLoading && <Skeleton variant="text" sx={{ fontSize: "1.25rem", width: '100%' }} />}
|
||||
{!isLoading && !error && (
|
||||
{isGettingStatus && <Skeleton variant="text" sx={{ fontSize: "1.25rem", width: '100%' }} />}
|
||||
{!isGettingStatus && (
|
||||
<>
|
||||
<Typography>{resource?.data?.language}</Typography>
|
||||
{isSelected ? <CheckIcon /> : <ArrowForwardIosIcon />}
|
||||
<Typography>{sub?.metadata?.title}</Typography>
|
||||
{(!isLoading && !error && !resource?.data) ? <DownloadIcon /> : isLoading ? <DownloadingIcon /> : isSelected ? <CheckIcon /> : <ArrowForwardIosIcon />}
|
||||
</>
|
||||
)}
|
||||
|
||||
</ButtonBase>
|
||||
);
|
||||
};
|
||||
@ -865,7 +931,6 @@ interface MySubtitleProps {
|
||||
}
|
||||
const MySubtitle = ({ sub, onDelete }: MySubtitleProps) => {
|
||||
const { resource, isLoading, error } = usePublish(2, "JSON", sub);
|
||||
console.log("resource", resource);
|
||||
return (
|
||||
<Card
|
||||
sx={{
|
||||
|
@ -1,9 +1,9 @@
|
||||
import React, { useMemo } from "react";
|
||||
import { useListStore } from "../state/lists";
|
||||
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 filterOutDeletedResources = useCacheStore((s) => s.filterOutDeletedResources);
|
||||
const deletedResources = useCacheStore((s) => s.deletedResources);
|
||||
|
@ -22,7 +22,7 @@ interface StoredPublish {
|
||||
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
||||
error: string | null;
|
||||
}>
|
||||
fetchPublish: (metadataProp: QortalGetMetadata) => Promise<{
|
||||
fetchPublish: (metadataProp: QortalGetMetadata, disableFetch?: boolean) => Promise<{
|
||||
hasResource: boolean | null;
|
||||
resource: { qortalMetadata: QortalMetadata; data: any } | null;
|
||||
error: string | null;
|
||||
@ -44,7 +44,8 @@ interface StoredPublish {
|
||||
export function usePublish(
|
||||
maxFetchTries: number,
|
||||
returnType: ReturnType,
|
||||
metadata: QortalGetMetadata
|
||||
metadata: QortalGetMetadata,
|
||||
disableFetch?: boolean
|
||||
): UsePublishWithMetadata;
|
||||
|
||||
export function usePublish(
|
||||
@ -57,7 +58,8 @@ interface StoredPublish {
|
||||
export function usePublish(
|
||||
maxFetchTries: number = 3,
|
||||
returnType: ReturnType = "JSON",
|
||||
metadata?: QortalGetMetadata | null
|
||||
metadata?: QortalGetMetadata | null,
|
||||
disableFetch?: boolean
|
||||
): UsePublishWithMetadata | UsePublishWithoutMetadata {
|
||||
const {auth, appInfo} = useGlobal()
|
||||
const username = auth?.name
|
||||
@ -92,6 +94,7 @@ interface StoredPublish {
|
||||
const fetchPublish = useCallback(
|
||||
async (
|
||||
metadataProp: QortalGetMetadata,
|
||||
disableFetch?: boolean
|
||||
) => {
|
||||
let hasResource = null;
|
||||
let resource = null;
|
||||
@ -127,6 +130,13 @@ interface StoredPublish {
|
||||
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 responseMetadata = await fetch(url, {
|
||||
method: "GET",
|
||||
@ -202,9 +212,9 @@ interface StoredPublish {
|
||||
useEffect(() => {
|
||||
|
||||
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 ()=> {
|
||||
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 filteredResults: QortalMetadata[] = [];
|
||||
let lastCreated = params.before || undefined;
|
||||
const targetLimit = params.limit ?? 20;
|
||||
|
||||
while (filteredResults.length < targetLimit) {
|
||||
const targetLimit = params.limit ?? 20; // Use `params.limit` if provided, else default to 20
|
||||
const isUnlimited = params.limit === 0;
|
||||
while (isUnlimited || filteredResults.length < targetLimit) {
|
||||
|
||||
const response = await qortalRequest({
|
||||
action: "SEARCH_QDN_RESOURCES",
|
||||
mode: "ALL",
|
||||
@ -293,12 +294,13 @@ export const useResources = (retryAttempts: number = 2, maxSize = 5242880) => {
|
||||
const validResults = responseData.filter((item) => item.size !== 32);
|
||||
filteredResults = [...filteredResults, ...validResults];
|
||||
|
||||
if (filteredResults.length >= targetLimit) {
|
||||
if (filteredResults.length >= targetLimit && !isUnlimited) {
|
||||
filteredResults = filteredResults.slice(0, targetLimit);
|
||||
break;
|
||||
}
|
||||
|
||||
lastCreated = responseData[responseData.length - 1]?.created;
|
||||
if (isUnlimited) break;
|
||||
if (!lastCreated) break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user