mirror of
https://gh-proxy.org/https://github.com/tiajinsha/JKVideo
synced 2026-07-07 23:18:38 +08:00
feat: 性能优化 + Bug修复 + 搜索增强
- expo-image 替换 RN Image(VideoCard/LiveCard/BigVideoCard/CommentItem,recyclingKey) - DanmakuList Animated.Value 对象池,减少 GC 压力 - FlatList 性能参数:windowSize=7 / maxToRenderPerBatch=6 / removeClippedSubviews - bilibili.ts 请求去重(getVideoDetail/getPlayUrl) - SESSDATA 迁移至 expo-secure-store(utils/secureStorage.ts,启动自动迁移) - 主题系统扩展:新增 sheetBg/modalBg/modalText/placeholder/iconDefault/danger 等 token - 多组件深色模式适配:DownloadSheet/LivePlayer/NativeVideoPlayer/DownloadProgressBtn/CommentItem/LoginModal - 搜索页增强:搜索建议 + 热搜榜(hooks/useSearch.ts + app/search.tsx) - LoginModal 修复轮询竞态(cancelled flag + try-catch) - 修复 downloads.tsx 冗余三元表达式
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { create } from 'zustand';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import { getUserInfo } from '../services/bilibili';
|
||||
import { getSecure, setSecure, deleteSecure } from '../utils/secureStorage';
|
||||
|
||||
interface AuthState {
|
||||
sessdata: string | null;
|
||||
@@ -22,21 +23,33 @@ export const useAuthStore = create<AuthState>((set) => ({
|
||||
isLoggedIn: false,
|
||||
|
||||
login: async (sessdata, uid, username) => {
|
||||
await setSecure('SESSDATA', sessdata);
|
||||
await AsyncStorage.multiSet([
|
||||
['SESSDATA', sessdata],
|
||||
['UID', uid],
|
||||
['USERNAME', username ?? ''],
|
||||
]);
|
||||
// Migrate: remove SESSDATA from AsyncStorage if it was there before
|
||||
await AsyncStorage.removeItem('SESSDATA').catch(() => {});
|
||||
set({ sessdata, uid, username: username ?? null, isLoggedIn: true });
|
||||
},
|
||||
|
||||
logout: async () => {
|
||||
await AsyncStorage.multiRemove(['SESSDATA', 'UID', 'USERNAME', 'FACE']);
|
||||
await deleteSecure('SESSDATA');
|
||||
await AsyncStorage.multiRemove(['UID', 'USERNAME', 'FACE']);
|
||||
set({ sessdata: null, uid: null, username: null, face: null, isLoggedIn: false });
|
||||
},
|
||||
|
||||
restore: async () => {
|
||||
const sessdata = await AsyncStorage.getItem('SESSDATA');
|
||||
// Try SecureStore first, fallback to AsyncStorage for migration
|
||||
let sessdata = await getSecure('SESSDATA');
|
||||
if (!sessdata) {
|
||||
sessdata = await AsyncStorage.getItem('SESSDATA');
|
||||
if (sessdata) {
|
||||
// Migrate from AsyncStorage to SecureStore
|
||||
await setSecure('SESSDATA', sessdata);
|
||||
await AsyncStorage.removeItem('SESSDATA');
|
||||
}
|
||||
}
|
||||
if (sessdata) {
|
||||
set({ sessdata, isLoggedIn: true });
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user