|
80 | 80 | import java.util.ArrayList; |
81 | 81 | import java.util.Date; |
82 | 82 | import java.util.List; |
| 83 | +import java.util.concurrent.TimeUnit; |
83 | 84 |
|
84 | 85 | /** |
85 | 86 | * Asynchronous task for exporting transactions. |
@@ -276,62 +277,50 @@ protected void onPostExecute(Boolean exportResult) { |
276 | 277 |
|
277 | 278 | private void moveExportToGoogleDrive(){ |
278 | 279 | Log.i(TAG, "Moving exported file to Google Drive"); |
| 280 | + final long TIMEOUT = 5; // seconds |
279 | 281 | final GoogleApiClient googleApiClient = BackupPreferenceFragment.getGoogleApiClient(GnuCashApplication.getAppContext()); |
280 | 282 | googleApiClient.blockingConnect(); |
281 | | - final ResultCallback<DriveFolder.DriveFileResult> fileCallback = new |
282 | | - ResultCallback<DriveFolder.DriveFileResult>() { |
283 | | - @Override |
284 | | - public void onResult(DriveFolder.DriveFileResult result) { |
285 | | - if (!result.getStatus().isSuccess()) |
286 | | - Log.e(TAG, "Error while trying to sync to Google Drive"); |
287 | | - else |
288 | | - Log.i(TAG, "Created a file with content: " + result.getDriveFile().getDriveId()); |
289 | | - } |
290 | | - }; |
291 | | - |
292 | | - Drive.DriveApi.newDriveContents(googleApiClient).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() { |
293 | | - @Override |
294 | | - public void onResult(DriveApi.DriveContentsResult result) { |
295 | | - if (!result.getStatus().isSuccess()) { |
296 | | - Log.e(TAG, "Error while trying to create new file contents"); |
297 | | - return; |
298 | | - } |
299 | | - final DriveContents driveContents = result.getDriveContents(); |
300 | | - try { |
301 | | - // write content to DriveContents |
302 | | - OutputStream outputStream = driveContents.getOutputStream(); |
303 | | - for (String exportedFilePath : mExportedFiles) { |
304 | | - File exportedFile = new File(exportedFilePath); |
305 | | - FileInputStream fileInputStream = new FileInputStream(exportedFile); |
306 | | - byte[] buffer = new byte[1024]; |
307 | | - int count; |
308 | | - |
309 | | - while ((count = fileInputStream.read(buffer)) >= 0) { |
310 | | - outputStream.write(buffer, 0, count); |
311 | | - } |
312 | | - fileInputStream.close(); |
313 | | - outputStream.flush(); |
314 | | - exportedFile.delete(); |
315 | | - |
316 | | - MetadataChangeSet changeSet = new MetadataChangeSet.Builder() |
317 | | - .setTitle(exportedFile.getName()) |
318 | | - .setMimeType(mExporter.getExportMimeType()) |
319 | | - .build(); |
320 | | - |
321 | | - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); |
322 | | - String folderId = sharedPreferences.getString(mContext.getString(R.string.key_google_drive_app_folder_id), ""); |
323 | | - DriveFolder folder = Drive.DriveApi.getFolder(googleApiClient, DriveId.decodeFromString(folderId)); |
324 | | - // create a file on root folder |
325 | | - folder.createFile(googleApiClient, changeSet, driveContents) |
326 | | - .setResultCallback(fileCallback); |
327 | | - } |
328 | 283 |
|
329 | | - } catch (IOException e) { |
330 | | - Crashlytics.logException(e); |
331 | | - Log.e(TAG, e.getMessage()); |
| 284 | + DriveApi.DriveContentsResult driveContentsResult = |
| 285 | + Drive.DriveApi.newDriveContents(googleApiClient).await(TIMEOUT, TimeUnit.SECONDS); |
| 286 | + if (!driveContentsResult.getStatus().isSuccess()) { |
| 287 | + Log.e(TAG, "Error while trying to create new file contents"); |
| 288 | + return; |
| 289 | + } |
| 290 | + final DriveContents driveContents = driveContentsResult.getDriveContents(); |
| 291 | + DriveFolder.DriveFileResult driveFileResult = null; |
| 292 | + try { |
| 293 | + // write content to DriveContents |
| 294 | + OutputStream outputStream = driveContents.getOutputStream(); |
| 295 | + for (String exportedFilePath : mExportedFiles) { |
| 296 | + File exportedFile = new File(exportedFilePath); |
| 297 | + FileInputStream fileInputStream = new FileInputStream(exportedFile); |
| 298 | + byte[] buffer = new byte[1024]; |
| 299 | + int count; |
| 300 | + |
| 301 | + while ((count = fileInputStream.read(buffer)) >= 0) { |
| 302 | + outputStream.write(buffer, 0, count); |
332 | 303 | } |
| 304 | + fileInputStream.close(); |
| 305 | + outputStream.flush(); |
| 306 | + exportedFile.delete(); |
| 307 | + |
| 308 | + MetadataChangeSet changeSet = new MetadataChangeSet.Builder() |
| 309 | + .setTitle(exportedFile.getName()) |
| 310 | + .setMimeType(mExporter.getExportMimeType()) |
| 311 | + .build(); |
| 312 | + |
| 313 | + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); |
| 314 | + String folderId = sharedPreferences.getString(mContext.getString(R.string.key_google_drive_app_folder_id), ""); |
| 315 | + DriveFolder folder = Drive.DriveApi.getFolder(googleApiClient, DriveId.decodeFromString(folderId)); |
| 316 | + // create a file on root folder |
| 317 | + driveFileResult = folder.createFile(googleApiClient, changeSet, driveContents) |
| 318 | + .await(TIMEOUT, TimeUnit.SECONDS); |
333 | 319 | } |
334 | | - }); |
| 320 | + } catch (IOException e) { |
| 321 | + Crashlytics.logException(e); |
| 322 | + Log.e(TAG, e.getMessage()); |
| 323 | + } |
335 | 324 | } |
336 | 325 |
|
337 | 326 | private void moveExportToDropbox() { |
|
0 commit comments