.manual check

This commit is contained in:
afkarxyz
2026-04-19 21:54:56 +07:00
parent 043f3f07f3
commit a3e780587b
4 changed files with 7 additions and 21 deletions
-2
View File
@@ -32,7 +32,6 @@ import { useMetadata } from "@/hooks/useMetadata";
import { useLyrics } from "@/hooks/useLyrics"; import { useLyrics } from "@/hooks/useLyrics";
import { useCover } from "@/hooks/useCover"; import { useCover } from "@/hooks/useCover";
import { useAvailability } from "@/hooks/useAvailability"; import { useAvailability } from "@/hooks/useAvailability";
import { ensureApiStatusCheckStarted } from "@/lib/api-status";
import { useDownloadQueueDialog } from "@/hooks/useDownloadQueueDialog"; import { useDownloadQueueDialog } from "@/hooks/useDownloadQueueDialog";
import { useDownloadProgress } from "@/hooks/useDownloadProgress"; import { useDownloadProgress } from "@/hooks/useDownloadProgress";
import { buildPlaylistFolderName } from "@/lib/playlist"; import { buildPlaylistFolderName } from "@/lib/playlist";
@@ -198,7 +197,6 @@ function App() {
}; };
mediaQuery.addEventListener("change", handleChange); mediaQuery.addEventListener("change", handleChange);
checkForUpdates(); checkForUpdates();
ensureApiStatusCheckStarted();
void loadHistory(); void loadHistory();
return () => { return () => {
mediaQuery.removeEventListener("change", handleChange); mediaQuery.removeEventListener("change", handleChange);
+5 -5
View File
@@ -1,14 +1,14 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { RefreshCw, CheckCircle2, XCircle, Loader2 } from "lucide-react"; import { SearchCheck, CheckCircle2, XCircle, Loader2 } from "lucide-react";
import { TidalIcon, QobuzIcon, AmazonIcon, LrclibIcon, MusicBrainzIcon } from "./PlatformIcons"; import { TidalIcon, QobuzIcon, AmazonIcon, LrclibIcon, MusicBrainzIcon } from "./PlatformIcons";
import { useApiStatus } from "@/hooks/useApiStatus"; import { useApiStatus } from "@/hooks/useApiStatus";
export function ApiStatusTab() { export function ApiStatusTab() {
const { sources, statuses, isCheckingAll, refreshAll } = useApiStatus(); const { sources, statuses, isCheckingAll, checkAll } = useApiStatus();
return (<div className="space-y-6"> return (<div className="space-y-6">
<div className="flex items-center justify-end"> <div className="flex items-center justify-end">
<Button variant="outline" onClick={() => void refreshAll()} disabled={isCheckingAll} className="gap-2"> <Button variant="outline" onClick={() => void checkAll()} disabled={isCheckingAll} className="gap-2">
<RefreshCw className={`h-4 w-4 ${isCheckingAll ? "animate-spin" : ""}`}/> {isCheckingAll ? <Loader2 className="h-4 w-4 animate-spin"/> : <SearchCheck className="h-4 w-4"/>}
Refresh All Check
</Button> </Button>
</div> </div>
+2 -3
View File
@@ -1,9 +1,8 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { API_SOURCES, checkAllApiStatuses, ensureApiStatusCheckStarted, getApiStatusState, subscribeApiStatus, } from "@/lib/api-status"; import { API_SOURCES, checkAllApiStatuses, getApiStatusState, subscribeApiStatus, } from "@/lib/api-status";
export function useApiStatus() { export function useApiStatus() {
const [state, setState] = useState(getApiStatusState); const [state, setState] = useState(getApiStatusState);
useEffect(() => { useEffect(() => {
ensureApiStatusCheckStarted();
return subscribeApiStatus(() => { return subscribeApiStatus(() => {
setState(getApiStatusState()); setState(getApiStatusState());
}); });
@@ -11,6 +10,6 @@ export function useApiStatus() {
return { return {
...state, ...state,
sources: API_SOURCES, sources: API_SOURCES,
refreshAll: () => checkAllApiStatuses(true), checkAll: () => checkAllApiStatuses(false),
}; };
} }
-11
View File
@@ -91,17 +91,6 @@ export function subscribeApiStatus(listener: () => void): () => void {
listeners.delete(listener); listeners.delete(listener);
}; };
} }
export function hasApiStatusResults(): boolean {
return API_SOURCES.some((source) => {
const status = apiStatusState.statuses[source.id];
return status === "online" || status === "offline";
});
}
export function ensureApiStatusCheckStarted(): void {
if (!activeCheckAll && !hasApiStatusResults()) {
void checkAllApiStatuses(false);
}
}
export async function checkAllApiStatuses(forceRefresh: boolean = false): Promise<void> { export async function checkAllApiStatuses(forceRefresh: boolean = false): Promise<void> {
if (activeCheckAll) { if (activeCheckAll) {
return activeCheckAll; return activeCheckAll;