1
0
Timothy Jaeryang Baek 5 өдөр өмнө
parent
commit
abe70d1793

+ 81 - 79
src/routes/(app)/+layout.svelte

@@ -56,106 +56,108 @@
 
 	let version;
 
-	onMount(async () => {
-		if ($user === undefined || $user === null) {
-			await goto('/auth');
-			return;
-		}
-		if (!['user', 'admin'].includes($user?.role)) {
-			return;
-		}
-
+	const clearChatInputStorage = () => {
 		const chatInputKeys = Object.keys(localStorage).filter((key) => key.startsWith('chat-input'));
 		if (chatInputKeys.length > 0) {
 			chatInputKeys.forEach((key) => {
 				localStorage.removeItem(key);
 			});
 		}
+	};
 
-		const loadChatsFromDB = async () => {
-			try {
-				// Check if IndexedDB exists
-				DB = await openDB('Chats', 1);
+	const checkLocalDBChats = async () => {
+		try {
+			// Check if IndexedDB exists
+			DB = await openDB('Chats', 1);
 
-				if (!DB) {
-					return;
-				}
+			if (!DB) {
+				return;
+			}
 
-				const chats = await DB.getAllFromIndex('chats', 'timestamp');
-				localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]);
+			const chats = await DB.getAllFromIndex('chats', 'timestamp');
+			localDBChats = chats.map((item, idx) => chats[chats.length - 1 - idx]);
 
-				if (localDBChats.length === 0) {
-					await deleteDB('Chats');
-				}
-			} catch (error) {
-				// IndexedDB Not Found
+			if (localDBChats.length === 0) {
+				await deleteDB('Chats');
 			}
-		};
+		} catch (error) {
+			// IndexedDB Not Found
+		}
+	};
 
-		const loadUserSettings = async (): Promise<Parameters<(typeof settings)['set']>[0]> => {
-			const userSettings = await getUserSettings(localStorage.token).catch((error) => {
-				console.error(error);
-				return null;
-			});
+	const setUserSettings = async (cb) => {
+		const userSettings = await getUserSettings(localStorage.token).catch((error) => {
+			console.error(error);
+			return null;
+		});
 
-			if (userSettings) {
-				return userSettings.ui;
-			}
+		if (userSettings) {
+			await settings.set(userSettings.ui);
 
-			try {
-				return JSON.parse(localStorage.getItem('settings') ?? '{}');
-			} catch (e: unknown) {
-				console.error('Failed to parse settings from localStorage', e);
-				return {};
+			if (cb) {
+				await cb();
 			}
-		};
+		}
 
-		const loadModels = async () => {
-			models.set(
-				await getModels(
-					localStorage.token,
-					$config?.features?.enable_direct_connections
-						? ($settings?.directConnections ?? null)
-						: null
-				)
-			);
-		};
+		try {
+			return JSON.parse(localStorage.getItem('settings') ?? '{}');
+		} catch (e: unknown) {
+			console.error('Failed to parse settings from localStorage', e);
+			return {};
+		}
+	};
 
-		const loadToolServers = async () => {
-			let toolServersData = await getToolServersData($settings?.toolServers ?? []);
-			toolServersData = toolServersData.filter((data) => {
-				if (!data || data.error) {
-					toast.error(
-						$i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, {
-							URL: data?.url
-						})
-					);
-					return false;
-				}
-				return true;
-			});
-			toolServers.set(toolServersData);
-		};
+	const setModels = async () => {
+		models.set(
+			await getModels(
+				localStorage.token,
+				$config?.features?.enable_direct_connections ? ($settings?.directConnections ?? null) : null
+			)
+		);
+	};
 
-		const loadBanners = async () => {
-			const bannersData = await getBanners(localStorage.token);
-			banners.set(bannersData);
-		};
+	const setToolServers = async () => {
+		let toolServersData = await getToolServersData($settings?.toolServers ?? []);
+		toolServersData = toolServersData.filter((data) => {
+			if (!data || data.error) {
+				toast.error(
+					$i18n.t(`Failed to connect to {{URL}} OpenAPI tool server`, {
+						URL: data?.url
+					})
+				);
+				return false;
+			}
+			return true;
+		});
+		toolServers.set(toolServersData);
+	};
 
-		const loadTools = async () => {
-			const toolsData = await getTools(localStorage.token);
-			tools.set(toolsData);
-		};
+	const setBanners = async () => {
+		const bannersData = await getBanners(localStorage.token);
+		banners.set(bannersData);
+	};
+
+	const setTools = async () => {
+		const toolsData = await getTools(localStorage.token);
+		tools.set(toolsData);
+	};
+
+	onMount(async () => {
+		if ($user === undefined || $user === null) {
+			await goto('/auth');
+			return;
+		}
+		if (!['user', 'admin'].includes($user?.role)) {
+			return;
+		}
 
-		// Parallel loading
+		clearChatInputStorage();
 		await Promise.all([
-			loadChatsFromDB(),
-			loadBanners(),
-			loadTools(),
-			loadUserSettings().then((loadedSettings) => {
-				settings.set(loadedSettings);
-				// The following functions are dependent on the settings
-				return Promise.all([loadModels(), loadToolServers()]);
+			checkLocalDBChats(),
+			setBanners(),
+			setTools(),
+			setUserSettings(async () => {
+				await Promise.all([setModels(), setToolServers()]);
 			})
 		]);