package com.doplgangr.secrecy.jobs; import android.content.Context; import android.net.Uri; import com.doplgangr.secrecy.events.AddingFileDoneEvent; import com.doplgangr.secrecy.events.AddingFileEvent; import com.doplgangr.secrecy.events.NewFileEvent; import com.doplgangr.secrecy.filesystem.encryption.Vault; import com.doplgangr.secrecy.filesystem.files.EncryptedFile; import com.doplgangr.secrecy.filesystem.Storage; import com.doplgangr.secrecy.utils.Util; import com.path.android.jobqueue.Job; import com.path.android.jobqueue.Params; import java.io.File; import de.greenrobot.event.EventBus; import static com.ipaulpro.afilechooser.utils.FileUtils.getPath; public class AddFileJob extends Job { private static final int PRIORITY = 9; //High. Lower than UI jobs private static final int RETRY_LIMIT = 5; //Shouldn't try too much. private final Vault vault; private final Uri uri; private final Context context; public AddFileJob(Context context, Vault vault, Uri uri) { super(new Params(PRIORITY) .groupBy(uri.toString())); this.vault = vault; this.uri = uri; this.context = context; } @Override public void onAdded() { } @Override public void onRun() throws Throwable { EventBus.getDefault().post(new AddingFileEvent(vault, uri.toString())); Util.log("Adding file: ", uri); EncryptedFile returnedEncryptedFile = vault.addFile(context, uri); EventBus.getDefault().post(new NewFileEvent(returnedEncryptedFile)); EventBus.getDefault().post(new AddingFileDoneEvent(vault)); File actualFile = new File(getPath(context, uri)); Storage.purgeFile(actualFile, uri); //Try to delete original file. } @Override protected void onCancel() { } @Override protected boolean shouldReRunOnThrowable(Throwable throwable) { //ignore everything and rerun throwable.printStackTrace(); return true; } @Override protected int getRetryLimit() { return RETRY_LIMIT; } }