import IP from '@/assets/icons/svg/ip.svg'; import { registerBackgroundUploadTask, triggerManualUpload } from '@/components/file-upload/backgroundUploader'; import * as MediaLibrary from 'expo-media-library'; import { useRouter } from 'expo-router'; import * as SecureStore from 'expo-secure-store'; import { useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Platform, Text, TouchableOpacity, View } from 'react-native'; import { useSafeAreaInsets } from "react-native-safe-area-context"; import MemoList from './memo-list'; export default function HomeScreen() { const router = useRouter(); const { t } = useTranslation(); const insets = useSafeAreaInsets(); const [isLoading, setIsLoading] = useState(true); const [isLoggedIn, setIsLoggedIn] = useState(false); const [token, setToken] = useState(''); const tokenInterval = useRef(null); const isMounted = useRef(true); const getAuthToken = async (): Promise => { let tokenValue = ''; if (Platform.OS === 'web') { tokenValue = localStorage.getItem('token') || ''; } else { tokenValue = (await SecureStore.getItemAsync('token')) || ''; } setToken(tokenValue); // 只在获取到新token时更新状态 return tokenValue; }; useEffect(() => { const checkAuthStatus = async () => { try { const loggedIn = !!token; setIsLoggedIn(loggedIn); if (loggedIn) { // 已登录,请求必要的权限 const { status } = await MediaLibrary.requestPermissionsAsync(); if (status === 'granted') { await registerBackgroundUploadTask(); const now = new Date(); const oneDayAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); await triggerManualUpload(oneDayAgo, now); } router.replace('/ask'); } setIsLoading(false); } catch (error) { console.error('检查登录状态出错:', error); setIsLoading(false); } finally { setIsLoading(false); } }; checkAuthStatus(); }, []); // 轮询获取token useEffect(() => { // 如果已经有token,直接返回 if (token) { if (tokenInterval.current) { clearInterval(tokenInterval.current); } return; } if (!tokenInterval.current) return; // 设置轮询 tokenInterval.current = setInterval(async () => { if (isMounted.current) { const currentToken = await getAuthToken(); // 如果获取到token,清除定时器 if (currentToken && tokenInterval.current) { clearInterval(tokenInterval.current); } } }, 5000); // 返回清理函数 return () => { if (tokenInterval.current) { clearInterval(tokenInterval.current); } }; }, [token]); // 添加token作为依赖 if (isLoading) { return ( 加载中... ); } return ( { isLoggedIn ? : {/* 标题区域 */} {t('auth.welcomeAwaken.awaken', { ns: 'login' })} {"\n"} {t('auth.welcomeAwaken.your', { ns: 'login' })} {"\n"} {t('auth.welcomeAwaken.pm', { ns: 'login' })} {t('auth.welcomeAwaken.slogan', { ns: 'login' })} {/* Memo 形象区域 */} {/* 介绍文本 */} {t('auth.welcomeAwaken.gallery', { ns: 'login' })} {"\n"} {t('auth.welcomeAwaken.back', { ns: 'login' })} {/* 唤醒按钮 */} { router.push('/login') }} activeOpacity={0.8} > {t('auth.welcomeAwaken.awake', { ns: 'login' })} } ); }