mirror of https://github.com/tasks/tasks
Google Drive updates
* Use work manager for uploads * Clean up auto backupspull/795/head
parent
e3ed0934ca
commit
faff1dcc08
@ -0,0 +1,68 @@
|
||||
package org.tasks.jobs;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.google.api.services.drive.model.File;
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import org.tasks.R;
|
||||
import org.tasks.analytics.Tracker;
|
||||
import org.tasks.drive.DriveInvoker;
|
||||
import org.tasks.injection.ForApplication;
|
||||
import org.tasks.injection.InjectingWorker;
|
||||
import org.tasks.injection.JobComponent;
|
||||
import org.tasks.preferences.Preferences;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.work.Data;
|
||||
import androidx.work.WorkerParameters;
|
||||
|
||||
public class DriveUploader extends InjectingWorker {
|
||||
|
||||
private static final String FOLDER_NAME = "Tasks Backups";
|
||||
private static final String EXTRA_URI = "extra_uri";
|
||||
|
||||
@Inject @ForApplication Context context;
|
||||
@Inject DriveInvoker drive;
|
||||
@Inject Preferences preferences;
|
||||
@Inject Tracker tracker;
|
||||
|
||||
static Data getInputData(Uri uri) {
|
||||
return new Data.Builder().putString(EXTRA_URI, uri.toString()).build();
|
||||
}
|
||||
|
||||
public DriveUploader(@NonNull Context context, @NonNull WorkerParameters workerParams) {
|
||||
super(context, workerParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Result run() {
|
||||
Data inputData = getInputData();
|
||||
Uri uri = Uri.parse(inputData.getString(EXTRA_URI));
|
||||
try {
|
||||
File folder = getFolder();
|
||||
preferences.setString(R.string.p_google_drive_backup_folder, folder.getId());
|
||||
drive.createFile(folder.getId(), uri);
|
||||
return Result.SUCCESS;
|
||||
} catch (IOException e) {
|
||||
tracker.reportException(e);
|
||||
return Result.FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
private File getFolder() throws IOException {
|
||||
String folderId = preferences.getStringValue(R.string.p_google_drive_backup_folder);
|
||||
File file = Strings.isNullOrEmpty(folderId) ? null : drive.getFile(folderId);
|
||||
return file == null || file.getTrashed() ? drive.createFolder(FOLDER_NAME) : file;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void inject(JobComponent component) {
|
||||
component.inject(this);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue