From 83b893bc8ca7359925c4be048aa149c59fbdb4af Mon Sep 17 00:00:00 2001 From: knuthy Date: Sun, 21 Sep 2014 18:29:37 +0200 Subject: took off duplicate code CloneAsyncTask into GitAsyncTask --- .../main/java/com/zeapo/pwdstore/GitHandler.java | 110 ++------------------- 1 file changed, 6 insertions(+), 104 deletions(-) (limited to 'app/src/main/java/com/zeapo/pwdstore/GitHandler.java') diff --git a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java index ba42f867..cbb816c1 100644 --- a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java @@ -32,6 +32,8 @@ import org.eclipse.jgit.api.Git; import org.apache.commons.io.FileUtils; import org.eclipse.jgit.api.GitCommand; +import org.eclipse.jgit.api.PullCommand; +import org.eclipse.jgit.api.PushCommand; import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.api.errors.TransportException; @@ -200,99 +202,6 @@ public class GitHandler extends Activity { return super.onOptionsItemSelected(item); } - /* The clone process has to be on a different thread than the main one */ - private class CloneTask extends AsyncTask { - private ProgressDialog dialog; - - public CloneTask(Activity activity) { - context = activity; - dialog = new ProgressDialog(context); - } - - protected void onPreExecute() { - this.dialog.setMessage("Cloning..."); - this.dialog.setCancelable(false); - // TODO: Handle a dialog leak when there is no error - this.dialog.show(); - } - - protected void onPostExecute(Integer result) { - switch (result) { - case -1: - new AlertDialog.Builder(activity). - setTitle("Please check that the repository path is correct."). - setMessage("Did you forget to specify the path after the hostname?"). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - case -2: - new AlertDialog.Builder(activity). - setTitle("Communication error"). - setMessage("JGit said that the server didn't like our request. Either an authentication issue or the host is not reachable. Check the debug messages."). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - case -99: - new AlertDialog.Builder(activity). - setTitle("JGit raised an internal exception"). - setMessage("OUPS, JGit didn't like what you did... Check that you provided it with a correct URI. Check also debug messages."). - setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - - } - }).show(); - break; - default: - this.dialog.dismiss(); - setResult(RESULT_OK); - finish(); - return; - } - this.dialog.dismiss(); - - // if we were unable to finish the job - try { - FileUtils.deleteDirectory(localDir); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - protected Integer doInBackground(CloneCommand... cmd) { - int count = cmd.length; - Integer totalSize = 0; - for (int i = 0; i < count; i++) { - try { - cmd[i].call(); - } catch (JGitInternalException e) { - e.printStackTrace(); - return -99; - } catch (InvalidRemoteException e) { - e.printStackTrace(); - return -1; - } catch (TransportException e) { - e.printStackTrace(); - return -2; - } catch (Exception e) { - e.printStackTrace(); - return -99; - } - totalSize++; - } - return totalSize; - } - } - protected class GitConfigSessionFactory extends JschConfigSessionFactory { protected void configure(OpenSshConfig.Host hc, Session session) { @@ -452,7 +361,7 @@ public class GitHandler extends Activity { setDirectory(localDir). setURI(hostname); - new CloneTask(activity).execute(cmd); + new GitAsyncTask(activity, true, false, CloneCommand.class).execute(cmd); } public void pullOperation(UsernamePasswordCredentialsProvider provider) { @@ -500,7 +409,7 @@ public class GitHandler extends Activity { .setRebase(true) .setRemote("origin"); - new GitAsyncTask(activity, true, false).execute(cmd); + new GitAsyncTask(activity, true, false, PullCommand.class).execute(cmd); } } @@ -550,7 +459,7 @@ public class GitHandler extends Activity { .setRemote("origin"); - new GitAsyncTask(activity, true, false).execute(cmd); + new GitAsyncTask(activity, true, false, PushCommand.class).execute(cmd); } } @@ -661,14 +570,7 @@ public class GitHandler extends Activity { } }).show(); } else { - CloneCommand cmd = Git.cloneRepository() - .setDirectory(localDir) - .setURI(hostname) - .setBare(false) - .setNoCheckout(false) - .setCloneAllBranches(true); - - new CloneTask(activity).execute(cmd); + // BUG: we do not support HTTP yet... } } } -- cgit v1.2.3 From da8ec72655f3009df83ec0a5c0945f8735863e4e Mon Sep 17 00:00:00 2001 From: knuthy Date: Tue, 23 Sep 2014 00:23:55 +0200 Subject: Take into account subdirectories Fix #9 --- app/app-release.apk | Bin 1717723 -> 1717230 bytes app/build.gradle | 4 ++-- .../main/java/com/zeapo/pwdstore/GitHandler.java | 5 ----- .../java/com/zeapo/pwdstore/PasswordStore.java | 1 + .../zeapo/pwdstore/utils/PasswordRepository.java | 25 +++++++++++++-------- 5 files changed, 19 insertions(+), 16 deletions(-) (limited to 'app/src/main/java/com/zeapo/pwdstore/GitHandler.java') diff --git a/app/app-release.apk b/app/app-release.apk index 25ec5480..0937a8f1 100644 Binary files a/app/app-release.apk and b/app/app-release.apk differ diff --git a/app/build.gradle b/app/build.gradle index c2842999..a78291ca 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.zeapo.pwdstore" minSdkVersion 15 targetSdkVersion 19 - versionCode 11 - versionName "1.1-b5" + versionCode 12 + versionName "1.1-b6" } buildTypes { release { diff --git a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java index cbb816c1..c487ce0f 100644 --- a/app/src/main/java/com/zeapo/pwdstore/GitHandler.java +++ b/app/src/main/java/com/zeapo/pwdstore/GitHandler.java @@ -2,12 +2,10 @@ package com.zeapo.pwdstore; import android.app.Activity; import android.app.AlertDialog; -import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; -import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.InputType; @@ -34,9 +32,6 @@ import org.apache.commons.io.FileUtils; import org.eclipse.jgit.api.GitCommand; import org.eclipse.jgit.api.PullCommand; import org.eclipse.jgit.api.PushCommand; -import org.eclipse.jgit.api.errors.InvalidRemoteException; -import org.eclipse.jgit.api.errors.JGitInternalException; -import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.UnsupportedCredentialItem; import org.eclipse.jgit.transport.CredentialItem; import org.eclipse.jgit.transport.CredentialsProvider; diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java index 71954859..4fadb65e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java @@ -215,6 +215,7 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI } private void checkLocalRepository(File localDir) { + Log.d("PASS", localDir.getAbsolutePath()); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); diff --git a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java index eda32b0a..289f9f43 100644 --- a/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java +++ b/app/src/main/java/com/zeapo/pwdstore/utils/PasswordRepository.java @@ -1,6 +1,9 @@ package com.zeapo.pwdstore.utils; +import android.util.Log; + import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.FileFilterUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.StoredConfig; import org.eclipse.jgit.lib.Repository; @@ -10,7 +13,10 @@ import org.eclipse.jgit.transport.RemoteConfig; import org.eclipse.jgit.transport.URIish; import java.io.File; +import java.io.FileFilter; +import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; @@ -115,7 +121,10 @@ public class PasswordRepository { public static ArrayList getFilesList(File path){ if (!path.exists()) return new ArrayList(); - List files = (List) FileUtils.listFiles(path, new String[] {"gpg"}, true); + Log.d("REPO", path.getAbsolutePath()); + ArrayList files = new ArrayList(Arrays.asList(path.listFiles((FileFilter) FileFilterUtils.directoryFileFilter()))); + files.addAll( new ArrayList((List)FileUtils.listFiles(path, new String[] {"gpg"}, false))); + return new ArrayList(files); } @@ -129,15 +138,13 @@ public class PasswordRepository { ArrayList passwordList = new ArrayList(); for (File file : passList) { - String fileName = file.getAbsolutePath().replace(path.getAbsolutePath() + "/", ""); - - String[] parts = fileName.split("/"); - if (parts.length == 1) { - passwordList.add(PasswordItem.newPassword(parts[0], file)); + if (file.isFile()) { + passwordList.add(PasswordItem.newPassword(file.getName(), file)); } else { - if (!passwordList.contains(PasswordItem.newCategory(parts[0], file.getParentFile()))) { - passwordList.add(PasswordItem.newCategory(parts[0], file.getParentFile())); - } + // ignore .git directory + if (file.getName().equals(".git")) + continue; + passwordList.add(PasswordItem.newCategory(file.getName(), file)); } } sort(passwordList); -- cgit v1.2.3