mirror of
https://github.com/mudabbir-ahmad/Media-Aggregation-and-Sorting-System.git
synced 2026-10-07 19:40:20 +00:00
feat: enhance Google Photos integration; add platform-specific handling and user alerts for picker errors
This commit is contained in:
1 parent
882571d53b
commit
183e33cbfa
2 files changed
+46
-1
No files matched your search
+32
-1
@@ -5,6 +5,7 @@ import { File, Directory, Paths } from 'expo-file-system';
|
|||||||
import { AuthServiceBase } from './AuthServiceBase';
|
import { AuthServiceBase } from './AuthServiceBase';
|
||||||
import MediaMetadataService from '../services/MediaMetadataService';
|
import MediaMetadataService from '../services/MediaMetadataService';
|
||||||
import { logError } from '../services/ErrorHandler';
|
import { logError } from '../services/ErrorHandler';
|
||||||
|
import { Platform, Linking } from 'react-native';
|
||||||
|
|
||||||
WebBrowser.maybeCompleteAuthSession();
|
WebBrowser.maybeCompleteAuthSession();
|
||||||
|
|
||||||
@@ -392,11 +393,41 @@ class GoogleAUTH extends AuthServiceBase {
|
|||||||
|
|
||||||
console.log('Picker session created:', session.id);
|
console.log('Picker session created:', session.id);
|
||||||
console.log('Opening picker for user selection…');
|
console.log('Opening picker for user selection…');
|
||||||
|
console.log('Platform:', Platform.OS);
|
||||||
|
console.log('Picker URI:', session.pickerUri.substring(0, 100) + '...');
|
||||||
|
|
||||||
await WebBrowser.openBrowserAsync(session.pickerUri, {
|
// Try WebBrowser first
|
||||||
|
let browserOpened = false;
|
||||||
|
try {
|
||||||
|
const result = await WebBrowser.openBrowserAsync(session.pickerUri, {
|
||||||
dismissButtonStyle: 'done',
|
dismissButtonStyle: 'done',
|
||||||
presentationStyle: 'pageSheet',
|
presentationStyle: 'pageSheet',
|
||||||
});
|
});
|
||||||
|
browserOpened = true;
|
||||||
|
console.log('WebBrowser closed with result:', result?.type);
|
||||||
|
} catch (webBrowserErr) {
|
||||||
|
console.warn('WebBrowser failed:', webBrowserErr.message);
|
||||||
|
// Fallback: try direct URL linking on Android APK builds
|
||||||
|
if (Platform.OS === 'android') {
|
||||||
|
console.log('Attempting fallback with Linking.openURL...');
|
||||||
|
try {
|
||||||
|
const canOpen = await Linking.canOpenURL(session.pickerUri);
|
||||||
|
console.log('Can open URL:', canOpen);
|
||||||
|
if (canOpen) {
|
||||||
|
await Linking.openURL(session.pickerUri);
|
||||||
|
browserOpened = true;
|
||||||
|
} else {
|
||||||
|
console.warn('System cannot open picker URL');
|
||||||
|
}
|
||||||
|
} catch (linkErr) {
|
||||||
|
console.warn('Linking.openURL failed:', linkErr.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!browserOpened) {
|
||||||
|
return this._buildPickerError(0, 'Failed to open browser/picker. Please check your internet connection and try again.');
|
||||||
|
}
|
||||||
|
|
||||||
console.log('Browser closed — polling for selected photos…');
|
console.log('Browser closed — polling for selected photos…');
|
||||||
|
|
||||||
|
|||||||
@@ -272,6 +272,7 @@ const HomeScreen = ({ navigation, route }) => {
|
|||||||
const googleAccount = linkedAccounts.find((a) => a.service_type === 'GOOGLE_PHOTOS');
|
const googleAccount = linkedAccounts.find((a) => a.service_type === 'GOOGLE_PHOTOS');
|
||||||
if (!googleAccount) {
|
if (!googleAccount) {
|
||||||
console.warn('No Google account linked');
|
console.warn('No Google account linked');
|
||||||
|
Alert.alert('Error', 'No Google account linked. Please link your Google account in Settings.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,6 +298,11 @@ const HomeScreen = ({ navigation, route }) => {
|
|||||||
|
|
||||||
if (result?.error) {
|
if (result?.error) {
|
||||||
logError('Import Google Photos', result.error.message);
|
logError('Import Google Photos', result.error.message);
|
||||||
|
Alert.alert(
|
||||||
|
'Google Photos Picker Error',
|
||||||
|
result.error.message || 'Failed to open Google Photos picker. Please try again.',
|
||||||
|
[{ text: 'OK' }]
|
||||||
|
);
|
||||||
} else if (result?.mediaItems?.length) {
|
} else if (result?.mediaItems?.length) {
|
||||||
await Promise.all(result.mediaItems.map((item) => DatabaseService.saveMediaItem(userId, item)));
|
await Promise.all(result.mediaItems.map((item) => DatabaseService.saveMediaItem(userId, item)));
|
||||||
|
|
||||||
@@ -306,6 +312,9 @@ const HomeScreen = ({ navigation, route }) => {
|
|||||||
setAllMedia((prev) => mergeMediaAcrossServices([...prev, ...result.mediaItems]));
|
setAllMedia((prev) => mergeMediaAcrossServices([...prev, ...result.mediaItems]));
|
||||||
|
|
||||||
console.log(`Imported ${result.mediaItems.length} photos from Google`);
|
console.log(`Imported ${result.mediaItems.length} photos from Google`);
|
||||||
|
Alert.alert('Success', `Imported ${result.mediaItems.length} photos from Google Photos`);
|
||||||
|
} else {
|
||||||
|
console.log('No photos selected');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (googleAuth.accessToken && googleAuth.accessToken !== data.accessToken) {
|
if (googleAuth.accessToken && googleAuth.accessToken !== data.accessToken) {
|
||||||
@@ -318,6 +327,11 @@ const HomeScreen = ({ navigation, route }) => {
|
|||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logError('Import Google Photos', err);
|
logError('Import Google Photos', err);
|
||||||
|
Alert.alert(
|
||||||
|
'Error',
|
||||||
|
`Failed to import from Google Photos: ${err.message}`,
|
||||||
|
[{ text: 'OK' }]
|
||||||
|
);
|
||||||
} finally {
|
} finally {
|
||||||
setImporting(false);
|
setImporting(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user