diff options
Diffstat (limited to 'app/src/main/java')
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() } |