From 8e14696bdf82f0e7154a23d0af11492133a6c7a0 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Sat, 8 Apr 2023 21:25:32 +0200 Subject: [PATCH] Submodules UI now calls methods to sync, update and deinit --- .../com/jetpackduba/gitnuro/ui/SidePanel.kt | 25 +++++++++++----- .../ui/context_menu/SubmoduleContextMenu.kt | 15 ++++++---- .../sidepanel/SubmodulesViewModel.kt | 29 +++++++++++++++++-- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/ui/SidePanel.kt b/src/main/kotlin/com/jetpackduba/gitnuro/ui/SidePanel.kt index 79e9c34..ef1e0e4 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/ui/SidePanel.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/ui/SidePanel.kt @@ -320,8 +320,11 @@ fun LazyListScope.submodules( if (isExpanded) { items(submodules, key = { it.first }) { submodule -> Submodule( - submodule, - onInitializeModule = { submodulesViewModel.initializeSubmodule(submodule.first) }, + submodule = submodule, + onInitializeSubmodule = { submodulesViewModel.initializeSubmodule(submodule.first) }, + onDeinitializeSubmodule = { submodulesViewModel.onDeinitializeSubmodule(submodule.first) }, + onSyncSubmodule = { submodulesViewModel.onSyncSubmodule(submodule.first) }, + onUpdateSubmodule = { submodulesViewModel.onUpdateSubmodule(submodule.first) }, onOpenSubmoduleInTab = { submodulesViewModel.onOpenSubmoduleInTab(submodule.first) }, ) } @@ -463,24 +466,30 @@ private fun Stash( @Composable private fun Submodule( - submodulePair: Pair, - onInitializeModule: () -> Unit, + submodule: Pair, + onInitializeSubmodule: () -> Unit, + onDeinitializeSubmodule: () -> Unit, + onSyncSubmodule: () -> Unit, + onUpdateSubmodule: () -> Unit, onOpenSubmoduleInTab: () -> Unit, ) { ContextMenu( items = { submoduleContextMenuItems( - submodulePair.second, - onInitializeModule = onInitializeModule, + submodule.second, + onInitializeSubmodule = onInitializeSubmodule, + onDeinitializeSubmodule = onDeinitializeSubmodule, + onSyncSubmodule = onSyncSubmodule, + onUpdateSubmodule = onUpdateSubmodule, onOpenSubmoduleInTab = onOpenSubmoduleInTab, ) } ) { SideMenuSubentry( - text = submodulePair.first, + text = submodule.first, iconResourcePath = AppIcons.TOPIC, ) { - val stateName = submodulePair.second.type.toString() + val stateName = submodule.second.type.toString() Tooltip(stateName) { Text( text = stateName.first().toString(), diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/ui/context_menu/SubmoduleContextMenu.kt b/src/main/kotlin/com/jetpackduba/gitnuro/ui/context_menu/SubmoduleContextMenu.kt index 706e782..60736ed 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/ui/context_menu/SubmoduleContextMenu.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/ui/context_menu/SubmoduleContextMenu.kt @@ -5,7 +5,10 @@ import org.eclipse.jgit.submodule.SubmoduleStatusType fun submoduleContextMenuItems( submoduleStatus: SubmoduleStatus, - onInitializeModule: () -> Unit, + onInitializeSubmodule: () -> Unit, + onDeinitializeSubmodule: () -> Unit, + onSyncSubmodule: () -> Unit, + onUpdateSubmodule: () -> Unit, onOpenSubmoduleInTab: () -> Unit, ): List { return mutableListOf().apply { @@ -13,7 +16,7 @@ fun submoduleContextMenuItems( add( ContextMenuElement.ContextTextEntry( label = "Initialize submodule", - onClick = onInitializeModule + onClick = onInitializeSubmodule, ) ) } @@ -21,27 +24,27 @@ fun submoduleContextMenuItems( add( ContextMenuElement.ContextTextEntry( label = "Open submodule in new tab", - onClick = onOpenSubmoduleInTab + onClick = onOpenSubmoduleInTab, ) ) add( ContextMenuElement.ContextTextEntry( label = "Sync submodule", - onClick = onInitializeModule + onClick = onSyncSubmodule, ) ) add( ContextMenuElement.ContextTextEntry( label = "Update submodule", - onClick = onInitializeModule + onClick = onUpdateSubmodule, ) ) add( ContextMenuElement.ContextTextEntry( label = "DeInitialize submodule", - onClick = onInitializeModule + onClick = onDeinitializeSubmodule, ) ) } diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/sidepanel/SubmodulesViewModel.kt b/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/sidepanel/SubmodulesViewModel.kt index c4778c6..30e3fd7 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/sidepanel/SubmodulesViewModel.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/sidepanel/SubmodulesViewModel.kt @@ -3,9 +3,7 @@ package com.jetpackduba.gitnuro.viewmodels.sidepanel import com.jetpackduba.gitnuro.extensions.lowercaseContains import com.jetpackduba.gitnuro.git.RefreshType import com.jetpackduba.gitnuro.git.TabState -import com.jetpackduba.gitnuro.git.submodules.GetSubmodulesUseCase -import com.jetpackduba.gitnuro.git.submodules.InitializeSubmoduleUseCase -import com.jetpackduba.gitnuro.git.submodules.UpdateSubmoduleUseCase +import com.jetpackduba.gitnuro.git.submodules.* import com.jetpackduba.gitnuro.ui.TabsManager import dagger.assisted.Assisted import dagger.assisted.AssistedInject @@ -20,6 +18,8 @@ class SubmodulesViewModel @AssistedInject constructor( private val getSubmodulesUseCase: GetSubmodulesUseCase, private val initializeSubmoduleUseCase: InitializeSubmoduleUseCase, private val updateSubmoduleUseCase: UpdateSubmoduleUseCase, + private val syncSubmoduleUseCase: SyncSubmoduleUseCase, + private val deInitializeSubmoduleUseCase: DeInitializeSubmoduleUseCase, private val tabScope: CoroutineScope, private val tabsManager: TabsManager, @Assisted @@ -67,6 +67,29 @@ class SubmodulesViewModel @AssistedInject constructor( fun onOpenSubmoduleInTab(path: String) = tabState.runOperation(refreshType = RefreshType.NONE) { git -> tabsManager.addNewTabFromPath("${git.repository.directory.parent}/$path", true) } + + fun onDeinitializeSubmodule(path: String) = tabState.safeProcessing( + refreshType = RefreshType.SUBMODULES, + title = "Deinitializing submodule $path", + ){ git -> + deInitializeSubmoduleUseCase(git, path) + } + + fun onSyncSubmodule(path: String) = tabState.safeProcessing( + refreshType = RefreshType.SUBMODULES, + title = "Syncing submodule $path", + subtitle = "Please wait until synchronization has finished", + ){ git -> + syncSubmoduleUseCase(git, path) + } + + fun onUpdateSubmodule(path: String) = tabState.safeProcessing( + refreshType = RefreshType.SUBMODULES, + title = "Updating submodule $path", + subtitle = "Please wait until update has finished", + ){ git -> + updateSubmoduleUseCase(git, path) + } } data class SubmodulesState(val submodules: List>, val isExpanded: Boolean) \ No newline at end of file