import { MediaList } from '../components/MediaList'; import { useJellyfinTracksData } from '../hooks/Jellyfin/Infinite/useJellyfinTracksData'; import { usePullToRefresh } from '../hooks/usePullToRefresh'; import { PullToRefreshIndicator } from '../components/PullToRefreshIndicator'; import { usePageTitle } from '../context/PageTitleContext/PageTitleContext'; import { useEffect, type MutableRefObject } from 'react'; import { useScrollRestore } from '../hooks/useScrollRestore'; export const Tracks = () => { const { setPageTitle } = usePageTitle(); const { items, infiniteData, isLoading, error, reviver, loadMore, refetch } = useJellyfinTracksData(); useEffect(() => { setPageTitle('Tracks'); }, [setPageTitle]); // Enhanced refresh function that triggers both UI refresh and backend Jellyfin scan const enhancedRefresh = async () => { // Trigger Jellyfin library scan try { // Determine the correct backend URL based on environment let backendUrl; if (window.location.hostname === 'music.samcloud.ca') { // Use relative URL for live site (will use the same domain with reverse proxy) backendUrl = ''; } else { // Use development backend URL for localhost backendUrl = import.meta.env.VITE_BACKEND_URL || 'http://localhost:5140'; } const response = await fetch(`${backendUrl}/api/trigger-jellyfin-scan`, { method: 'POST' }); if (!response.ok) { console.error('Failed to trigger Jellyfin scan:', response.status); } } catch (error) { console.error('Error triggering Jellyfin scan:', error); } // Refresh UI data await refetch(); }; const { containerRef, isRefreshing, pullDistance, refreshThreshold } = usePullToRefresh({ onRefresh: enhancedRefresh }); // Restore scroll position when navigating back to Tracks useScrollRestore(containerRef as unknown as MutableRefObject, 'tracks') return (
{(pullDistance > 0 || isRefreshing) && (
)} {error &&
{error}
}
) }