76 lines
3.0 KiB
Kotlin
76 lines
3.0 KiB
Kotlin
package com.jetpackduba.gitnuro.viewmodels
|
|
|
|
import com.jetpackduba.gitnuro.TaskType
|
|
import com.jetpackduba.gitnuro.extensions.simpleName
|
|
import com.jetpackduba.gitnuro.git.RefreshType
|
|
import com.jetpackduba.gitnuro.git.TabState
|
|
import com.jetpackduba.gitnuro.git.branches.CheckoutRefUseCase
|
|
import com.jetpackduba.gitnuro.git.remote_operations.DeleteRemoteBranchUseCase
|
|
import com.jetpackduba.gitnuro.git.remote_operations.PullFromSpecificBranchUseCase
|
|
import com.jetpackduba.gitnuro.git.remote_operations.PushToSpecificBranchUseCase
|
|
import kotlinx.coroutines.Job
|
|
import org.eclipse.jgit.lib.Ref
|
|
import javax.inject.Inject
|
|
|
|
interface ISharedRemotesViewModel {
|
|
fun deleteRemoteBranch(ref: Ref): Job
|
|
fun checkoutRemoteBranch(remoteBranch: Ref): Job
|
|
fun pushToRemoteBranch(branch: Ref): Job
|
|
fun pullFromRemoteBranch(branch: Ref): Job
|
|
}
|
|
|
|
class SharedRemotesViewModel @Inject constructor(
|
|
private val tabState: TabState,
|
|
private val deleteRemoteBranchUseCase: DeleteRemoteBranchUseCase,
|
|
private val checkoutRefUseCase: CheckoutRefUseCase,
|
|
private val pushToSpecificBranchUseCase: PushToSpecificBranchUseCase,
|
|
private val pullFromSpecificBranchUseCase: PullFromSpecificBranchUseCase,
|
|
) : ISharedRemotesViewModel {
|
|
override fun deleteRemoteBranch(ref: Ref) = tabState.safeProcessing(
|
|
refreshType = RefreshType.ALL_DATA,
|
|
title = "Deleting remote branch",
|
|
subtitle = "Remote branch ${ref.simpleName} will be deleted from the remote",
|
|
taskType = TaskType.DELETE_REMOTE_BRANCH,
|
|
positiveFeedbackText = "Remote branch \"${ref.simpleName}\" deleted",
|
|
) { git ->
|
|
deleteRemoteBranchUseCase(git, ref)
|
|
}
|
|
|
|
override fun checkoutRemoteBranch(remoteBranch: Ref) = tabState.safeProcessing(
|
|
refreshType = RefreshType.ALL_DATA,
|
|
taskType = TaskType.CHECKOUT_REMOTE_BRANCH,
|
|
positiveFeedbackText = "\"${remoteBranch.simpleName}\" checked out",
|
|
) { git ->
|
|
checkoutRefUseCase(git, remoteBranch)
|
|
}
|
|
|
|
override fun pushToRemoteBranch(branch: Ref) = tabState.safeProcessing(
|
|
refreshType = RefreshType.ALL_DATA,
|
|
title = "Push",
|
|
subtitle = "Pushing current branch to ${branch.simpleName}",
|
|
taskType = TaskType.PUSH_TO_BRANCH,
|
|
positiveFeedbackText = "Pushed to \"${branch.simpleName}\"",
|
|
) { git ->
|
|
pushToSpecificBranchUseCase(
|
|
git = git,
|
|
force = false,
|
|
pushTags = false,
|
|
remoteBranch = branch,
|
|
)
|
|
}
|
|
|
|
override fun pullFromRemoteBranch(branch: Ref) = tabState.safeProcessing(
|
|
refreshType = RefreshType.ALL_DATA,
|
|
title = "Pull",
|
|
subtitle = "Pulling changes from ${branch.simpleName} to the current branch",
|
|
taskType = TaskType.PULL_FROM_BRANCH,
|
|
positiveFeedbackText = "Pulled from \"${branch.simpleName}\"",
|
|
) { git ->
|
|
pullFromSpecificBranchUseCase(
|
|
git = git,
|
|
rebase = false,
|
|
remoteBranch = branch,
|
|
)
|
|
}
|
|
}
|