瀏覽代碼

fix: Improve Google Drive picker initialization and error handling

Taylor Wilsdon (aider) 4 月之前
父節點
當前提交
85508106a8
共有 2 個文件被更改,包括 13 次插入4 次删除
  1. 4 0
      src/lib/components/chat/MessageInput.svelte
  2. 9 4
      src/lib/utils/google-drive-picker.ts

+ 4 - 0
src/lib/components/chat/MessageInput.svelte

@@ -498,11 +498,15 @@
 										}}
 										uploadGoogleDriveHandler={async () => {
 											try {
+												if (!import.meta.env.VITE_GOOGLE_API_KEY || !import.meta.env.VITE_GOOGLE_CLIENT_ID) {
+													throw new Error('Google Drive API credentials not configured');
+												}
 												const fileData = await createPicker();
 												if (fileData) {
 													dispatch('upload', { type: 'google-drive', data: fileData });
 												}
 											} catch (error) {
+												console.error('Google Drive Error:', error);
 												toast.error('Error accessing Google Drive: ' + error.message);
 											}
 										}}

+ 9 - 4
src/lib/utils/google-drive-picker.ts

@@ -5,6 +5,7 @@ const SCOPE = ['https://www.googleapis.com/auth/drive.readonly'];
 
 let pickerApiLoaded = false;
 let oauthToken: string | null = null;
+let initialized = false;
 
 export const loadGoogleDriveApi = () => {
     return new Promise((resolve, reject) => {
@@ -62,13 +63,17 @@ export const getAuthToken = async () => {
     return oauthToken;
 };
 
+const initialize = async () => {
+    if (!initialized) {
+        await Promise.all([loadGoogleDriveApi(), loadGoogleAuthApi()]);
+        initialized = true;
+    }
+};
+
 export const createPicker = () => {
     return new Promise(async (resolve, reject) => {
         try {
-            if (!pickerApiLoaded) {
-                await loadGoogleDriveApi();
-            }
-
+            await initialize();
             const token = await getAuthToken();
             if (!token) {
                 throw new Error('Unable to get OAuth token');