package com.doplgangr.secrecy.Jobs; import android.content.Context; import android.net.Uri; import com.doplgangr.secrecy.FileSystem.File; import com.doplgangr.secrecy.FileSystem.Vault; import com.doplgangr.secrecy.FileSystem.storage; import com.doplgangr.secrecy.Util; import com.path.android.jobqueue.Job; import com.path.android.jobqueue.Params; import de.greenrobot.event.EventBus; import static com.ipaulpro.afilechooser.utils.FileUtils.getPath; public class AddFileJob extends Job { public static final int PRIORITY = 9; //High. Lower than UI jobs private Vault vault; private Uri data; private Context context; private Boolean alreadyDeleting = false; public AddFileJob(Context context, Vault vault, Uri uri) { super(new Params(PRIORITY) .groupBy(uri.toString())); this.vault = vault; this.data = uri; this.context = context; } @Override public void onAdded() { } @Override public void onRun() throws Throwable { Util.log("Adding file", data); if (!alreadyDeleting) { String filename = vault.addFile(context, data); Uri thumbnail = storage.saveThumbnail(context, data, filename); if (thumbnail != null) { vault.addFile(context, thumbnail); storage.purgeFile(new java.io.File(thumbnail.getPath())); } File returnedFile = vault.getFileInstance(filename); EventBus.getDefault().post(new NewFileEvent(returnedFile)); alreadyDeleting = true; } java.io.File actualFile = new java.io.File(getPath(context, data)); storage.purgeFile(actualFile, data); //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 5; //Shouldn't try too much. } public class NewFileEvent { public File file; public NewFileEvent(File file) { this.file = file; } } }