generateSharableLink method

  1. @override
Future<Uri?> generateSharableLink(
  1. String path
)
override

Implementation

@override
Future<Uri?> generateSharableLink(String path) async {
  _checkAuth();

  final drive.File? file = await _getFileByPath(path);
  if (file == null || file.id == null) {
    debugPrint("GoogleDriveProvider: File not found at $path");
    return null;
  }

  final permission = drive.Permission()
    ..type = 'anyone'
    ..role = 'writer';

  try {
    await driveApi.permissions.create(
      permission,
      file.id!,
      $fields: 'id',
    );
  } catch (e) {
    debugPrint("Error setting permission for sharing: $e");
    return null;
  }

  try {
    final fileMetadata = await driveApi.files.get(
      file.id!,
      $fields: 'id, name, webViewLink',
    ) as drive.File;

    if (fileMetadata.webViewLink == null) {
      debugPrint("No webViewLink returned by API.");
      return null;
    }

    final shareableUri = Uri.parse(fileMetadata.webViewLink!).replace(
      queryParameters: {
        ...Uri.parse(fileMetadata.webViewLink!).queryParameters,
        'originalPath': path,
      },
    );

    return shareableUri;
  } catch (e) {
    debugPrint("Error getting shareable link: $e");
    return null;
  }
}