aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/git/GitCommandExecutor.kt29
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt22
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/git/operation/GitOperation.kt30
3 files changed, 30 insertions, 51 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/git/GitCommandExecutor.kt b/app/src/main/java/dev/msfjarvis/aps/util/git/GitCommandExecutor.kt
index b3997b52..429ea2c5 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/git/GitCommandExecutor.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/git/GitCommandExecutor.kt
@@ -5,12 +5,17 @@
package dev.msfjarvis.aps.util.git
+import android.widget.Toast
+import androidx.fragment.app.FragmentActivity
+import com.github.michaelbull.result.Result
+import com.github.michaelbull.result.runCatching
+import com.google.android.material.snackbar.Snackbar
+import dev.msfjarvis.aps.R
import dev.msfjarvis.aps.util.git.GitException.PullException
import dev.msfjarvis.aps.util.git.GitException.PushException
-import dev.msfjarvis.aps.util.git.operation.GitOperation
import dev.msfjarvis.aps.util.settings.GitSettings
-import com.github.michaelbull.result.Result
-import com.github.michaelbull.result.runCatching
+import dev.msfjarvis.aps.util.git.operation.GitOperation
+import dev.msfjarvis.aps.util.extensions.snackbar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.CommitCommand
@@ -22,10 +27,15 @@ import org.eclipse.jgit.lib.PersonIdent
import org.eclipse.jgit.transport.RemoteRefUpdate
class GitCommandExecutor(
+ private val activity: FragmentActivity,
private val operation: GitOperation,
) {
- suspend fun execute(): Result<GitResult, Throwable> {
+ suspend fun execute(): Result<Unit, Throwable> {
+ val snackbar = activity.snackbar(
+ message = activity.resources.getString(R.string.git_operation_running),
+ length = Snackbar.LENGTH_INDEFINITE,
+ )
// Count the number of uncommitted files
var nbChanges = 0
return runCatching {
@@ -79,7 +89,13 @@ class GitCommandExecutor(
}
}
RemoteRefUpdate.Status.UP_TO_DATE -> {
- return@runCatching GitResult.AlreadyUpToDate
+ withContext(Dispatchers.Main) {
+ Toast.makeText(
+ activity.applicationContext,
+ activity.applicationContext.getString(R.string.git_push_up_to_date),
+ Toast.LENGTH_SHORT
+ ).show()
+ }
}
else -> {
}
@@ -94,7 +110,8 @@ class GitCommandExecutor(
}
}
}
- GitResult.OK
+ }.also {
+ snackbar.dismiss()
}
}
}
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt b/app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt
deleted file mode 100644
index cd1faa45..00000000
--- a/app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
- * SPDX-License-Identifier: GPL-3.0-only
- */
-
-package dev.msfjarvis.aps.util.git
-
-/**
- * Result of a Git operation executed by [GitCommandExecutor]
- */
-sealed class GitResult {
-
- /**
- * All good!
- */
- object OK : GitResult()
-
- /**
- * Push operation succeeded and HEAD is already in sync with remote.
- */
- object AlreadyUpToDate : GitResult()
-}
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/git/operation/GitOperation.kt b/app/src/main/java/dev/msfjarvis/aps/util/git/operation/GitOperation.kt
index 1ef168e4..44292fc6 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/git/operation/GitOperation.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/git/operation/GitOperation.kt
@@ -25,10 +25,6 @@ import dev.msfjarvis.aps.util.git.sshj.SshKey
import dev.msfjarvis.aps.util.git.sshj.SshjSessionFactory
import dev.msfjarvis.aps.util.auth.BiometricAuthenticator
import dev.msfjarvis.aps.data.repo.PasswordRepository
-import dev.msfjarvis.aps.util.extensions.snackbar
-import dev.msfjarvis.aps.util.git.GitResult
-import com.github.michaelbull.result.get
-import com.google.android.material.snackbar.Snackbar
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import kotlinx.coroutines.Dispatchers
@@ -123,14 +119,12 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
if (!preExecute()) {
return Ok(Unit)
}
- val snackbar = callingActivity.snackbar(
- message = callingActivity.resources.getString(R.string.git_operation_running),
- length = Snackbar.LENGTH_INDEFINITE,
- )
- val operationResult = GitCommandExecutor(this).execute()
- snackbar.dismiss()
- postExecute(operationResult)
- return Ok(Unit)
+ val operationResult = GitCommandExecutor(
+ callingActivity,
+ this,
+ ).execute()
+ postExecute()
+ return operationResult
}
private fun onMissingSshKeyFile() {
@@ -206,17 +200,7 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) {
*/
open fun preExecute() = true
- private suspend fun postExecute(result: Result<GitResult, Throwable>) {
- when (result.get()) {
- GitResult.OK -> {}
- GitResult.AlreadyUpToDate -> {
- Toast.makeText(
- callingActivity,
- callingActivity.getString(R.string.git_push_up_to_date),
- Toast.LENGTH_SHORT
- ).show()
- }
- }
+ private suspend fun postExecute() {
withContext(Dispatchers.IO) {
sshSessionFactory?.close()
}