From c34d08b094e80e2fd683e988f5e7ac98ad254e81 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 20 Dec 2020 05:52:30 -0800 Subject: Refactor GitCommandExecutor (#1255) Signed-off-by: Harsh Shandilya --- .../msfjarvis/aps/util/git/GitCommandExecutor.kt | 29 +++++---------------- .../java/dev/msfjarvis/aps/util/git/GitResult.kt | 22 ++++++++++++++++ .../aps/util/git/operation/GitOperation.kt | 30 +++++++++++++++++----- 3 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt 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 429ea2c5..b3997b52 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,17 +5,12 @@ 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.settings.GitSettings import dev.msfjarvis.aps.util.git.operation.GitOperation -import dev.msfjarvis.aps.util.extensions.snackbar +import dev.msfjarvis.aps.util.settings.GitSettings +import com.github.michaelbull.result.Result +import com.github.michaelbull.result.runCatching import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.eclipse.jgit.api.CommitCommand @@ -27,15 +22,10 @@ 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 { - val snackbar = activity.snackbar( - message = activity.resources.getString(R.string.git_operation_running), - length = Snackbar.LENGTH_INDEFINITE, - ) + suspend fun execute(): Result { // Count the number of uncommitted files var nbChanges = 0 return runCatching { @@ -89,13 +79,7 @@ class GitCommandExecutor( } } RemoteRefUpdate.Status.UP_TO_DATE -> { - withContext(Dispatchers.Main) { - Toast.makeText( - activity.applicationContext, - activity.applicationContext.getString(R.string.git_push_up_to_date), - Toast.LENGTH_SHORT - ).show() - } + return@runCatching GitResult.AlreadyUpToDate } else -> { } @@ -110,8 +94,7 @@ class GitCommandExecutor( } } } - }.also { - snackbar.dismiss() + GitResult.OK } } } 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 new file mode 100644 index 00000000..cd1faa45 --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/aps/util/git/GitResult.kt @@ -0,0 +1,22 @@ +/* + * 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 44292fc6..1ef168e4 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,6 +25,10 @@ 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 @@ -119,12 +123,14 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) { if (!preExecute()) { return Ok(Unit) } - val operationResult = GitCommandExecutor( - callingActivity, - this, - ).execute() - postExecute() - return operationResult + 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) } private fun onMissingSshKeyFile() { @@ -200,7 +206,17 @@ abstract class GitOperation(protected val callingActivity: FragmentActivity) { */ open fun preExecute() = true - private suspend fun postExecute() { + private suspend fun postExecute(result: Result) { + when (result.get()) { + GitResult.OK -> {} + GitResult.AlreadyUpToDate -> { + Toast.makeText( + callingActivity, + callingActivity.getString(R.string.git_push_up_to_date), + Toast.LENGTH_SHORT + ).show() + } + } withContext(Dispatchers.IO) { sshSessionFactory?.close() } -- cgit v1.2.3