Compare commits

..

No commits in common. "01bc0588b8aca9c0bf4d3667d0c979578a0fbe73" and "3904f8da66852ed9fbb16a8e0c9daf063acba47d" have entirely different histories.

6 changed files with 11 additions and 31 deletions

0
.env Normal file
View File

1
.gitignore vendored
View File

@ -43,4 +43,3 @@ android/
ios/ ios/
build* build*
.env

View File

@ -1,3 +0,0 @@
{
"theme": "Qwen Light"
}

View File

@ -1,6 +1,8 @@
import ReturnArrow from "@/assets/icons/svg/returnArrow.svg";
import Chat from "@/components/ask/chat"; import Chat from "@/components/ask/chat";
import AskHello from "@/components/ask/hello"; import AskHello from "@/components/ask/hello";
import SendMessage from "@/components/ask/send"; import SendMessage from "@/components/ask/send";
import { ThemedText } from "@/components/ThemedText";
import { fetchApi } from "@/lib/server-api-util"; import { fetchApi } from "@/lib/server-api-util";
import { getWebSocketErrorMessage, webSocketManager, WsMessage } from "@/lib/websocket-util"; import { getWebSocketErrorMessage, webSocketManager, WsMessage } from "@/lib/websocket-util";
import { Assistant, Message } from "@/types/ask"; import { Assistant, Message } from "@/types/ask";
@ -14,6 +16,8 @@ import {
KeyboardAvoidingView, KeyboardAvoidingView,
Platform, Platform,
StyleSheet, StyleSheet,
TextInput,
TouchableOpacity,
View View
} from 'react-native'; } from 'react-native';
import { Gesture, GestureDetector } from "react-native-gesture-handler"; import { Gesture, GestureDetector } from "react-native-gesture-handler";
@ -58,8 +62,7 @@ export default function AskScreen() {
} }
}) })
.minPointers(1) .minPointers(1)
.activeOffsetX([-20, 20]) // 扩大触发范围避免与ScrollView冲突 .activeOffsetX([-10, 10]); // 在 X 方向触发的范围
.failOffsetY([-10, 10]); // 限制Y轴的偏移避免垂直滚动时触发
useEffect(() => { useEffect(() => {
if (!isHello && userMessages.length > 0) { if (!isHello && userMessages.length > 0) {
@ -254,7 +257,7 @@ export default function AskScreen() {
useCallback(() => { useCallback(() => {
if (!sessionId) { if (!sessionId) {
setIsHello(true); setIsHello(true);
setUserMessages([]); setUserMessages([])
} }
}, [sessionId]) }, [sessionId])
); );
@ -306,7 +309,7 @@ export default function AskScreen() {
{/* 输入框区域 */} {/* 输入框区域 */}
<KeyboardAvoidingView <KeyboardAvoidingView
behavior={Platform.OS === "ios" ? "padding" : "height"} behavior={Platform.OS === "ios" ? "padding" : "height"}
keyboardVerticalOffset={Platform.OS === "ios" ? 90 : 0}> keyboardVerticalOffset={0} >
<View style={styles.inputContainer} key={conversationId}> <View style={styles.inputContainer} key={conversationId}>
<SendMessage <SendMessage
setIsHello={setIsHello} setIsHello={setIsHello}

View File

@ -1,13 +1,11 @@
import { PermissionProvider } from '@/context/PermissionContext'; import { PermissionProvider } from '@/context/PermissionContext';
import { useColorScheme } from '@/hooks/useColorScheme'; import { useColorScheme } from '@/hooks/useColorScheme';
import { registerBackgroundUploadTask } from '@/lib/background-uploader/automatic'; import { registerBackgroundUploadTask } from '@/lib/background-uploader/automatic';
import { webSocketManager } from '@/lib/websocket-util';
import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native'; import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
import * as MediaLibrary from 'expo-media-library'; import * as MediaLibrary from 'expo-media-library';
import { Stack } from 'expo-router'; import { Stack } from 'expo-router';
import { StatusBar } from 'expo-status-bar'; import { StatusBar } from 'expo-status-bar';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { AppState } from 'react-native';
import 'react-native-reanimated'; import 'react-native-reanimated';
import '../global.css'; import '../global.css';
import { Provider } from "../provider"; import { Provider } from "../provider";
@ -31,24 +29,6 @@ export default function RootLayout() {
setupBackgroundUpload(); setupBackgroundUpload();
}, []); }, []);
useEffect(() => {
const handleAppStateChange = (nextAppState: string) => {
if (nextAppState === 'background') {
// 应用进入后台时断开WebSocket连接
webSocketManager.disconnect();
} else if (nextAppState === 'active') {
// 应用回到前台时重新连接WebSocket
webSocketManager.connect();
}
};
const subscription = AppState.addEventListener('change', handleAppStateChange);
return () => {
subscription?.remove();
};
}, []);
return ( return (
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}> <ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
<PermissionProvider> <PermissionProvider>

View File

@ -3,6 +3,7 @@ import Constants from 'expo-constants';
import * as SecureStore from 'expo-secure-store'; import * as SecureStore from 'expo-secure-store';
import { Platform } from 'react-native'; import { Platform } from 'react-native';
import Toast from 'react-native-toast-message'; import Toast from 'react-native-toast-message';
import { useAuth } from '../contexts/auth-context';
import { store } from '../store'; import { store } from '../store';
import { User } from '../types/user'; import { User } from '../types/user';
@ -55,7 +56,7 @@ export const useAuthToken = async<T>(message: string | null, login: (user: User,
} }
// 使用Redux存储token的刷新token函数 // 使用Redux存储token的刷新token函数
export const refreshAuthToken = async<T>(message: string | null): Promise<User | null> => { export const refreshAuthToken = async<T>(message: string | null): Promise<User> => {
try { try {
let cookie = ""; let cookie = "";
let userId = ""; let userId = "";
@ -85,7 +86,7 @@ export const refreshAuthToken = async<T>(message: string | null): Promise<User |
// 如果没有必要的数据,抛出错误 // 如果没有必要的数据,抛出错误
if (!cookie || !userId) { if (!cookie || !userId) {
return null; throw new Error("Missing refresh token or user ID");
} }
// 退出刷新会重新填充数据 // 退出刷新会重新填充数据