Submodules UI now calls methods to sync, update and deinit

This commit is contained in:
Abdelilah El Aissaoui 2023-04-08 21:25:32 +02:00
parent 5359f58a67
commit 8e14696bdf
No known key found for this signature in database
GPG Key ID: 7587FC860F594869
3 changed files with 52 additions and 17 deletions

View File

@ -320,8 +320,11 @@ fun LazyListScope.submodules(
if (isExpanded) { if (isExpanded) {
items(submodules, key = { it.first }) { submodule -> items(submodules, key = { it.first }) { submodule ->
Submodule( Submodule(
submodule, submodule = submodule,
onInitializeModule = { submodulesViewModel.initializeSubmodule(submodule.first) }, 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) }, onOpenSubmoduleInTab = { submodulesViewModel.onOpenSubmoduleInTab(submodule.first) },
) )
} }
@ -463,24 +466,30 @@ private fun Stash(
@Composable @Composable
private fun Submodule( private fun Submodule(
submodulePair: Pair<String, SubmoduleStatus>, submodule: Pair<String, SubmoduleStatus>,
onInitializeModule: () -> Unit, onInitializeSubmodule: () -> Unit,
onDeinitializeSubmodule: () -> Unit,
onSyncSubmodule: () -> Unit,
onUpdateSubmodule: () -> Unit,
onOpenSubmoduleInTab: () -> Unit, onOpenSubmoduleInTab: () -> Unit,
) { ) {
ContextMenu( ContextMenu(
items = { items = {
submoduleContextMenuItems( submoduleContextMenuItems(
submodulePair.second, submodule.second,
onInitializeModule = onInitializeModule, onInitializeSubmodule = onInitializeSubmodule,
onDeinitializeSubmodule = onDeinitializeSubmodule,
onSyncSubmodule = onSyncSubmodule,
onUpdateSubmodule = onUpdateSubmodule,
onOpenSubmoduleInTab = onOpenSubmoduleInTab, onOpenSubmoduleInTab = onOpenSubmoduleInTab,
) )
} }
) { ) {
SideMenuSubentry( SideMenuSubentry(
text = submodulePair.first, text = submodule.first,
iconResourcePath = AppIcons.TOPIC, iconResourcePath = AppIcons.TOPIC,
) { ) {
val stateName = submodulePair.second.type.toString() val stateName = submodule.second.type.toString()
Tooltip(stateName) { Tooltip(stateName) {
Text( Text(
text = stateName.first().toString(), text = stateName.first().toString(),

View File

@ -5,7 +5,10 @@ import org.eclipse.jgit.submodule.SubmoduleStatusType
fun submoduleContextMenuItems( fun submoduleContextMenuItems(
submoduleStatus: SubmoduleStatus, submoduleStatus: SubmoduleStatus,
onInitializeModule: () -> Unit, onInitializeSubmodule: () -> Unit,
onDeinitializeSubmodule: () -> Unit,
onSyncSubmodule: () -> Unit,
onUpdateSubmodule: () -> Unit,
onOpenSubmoduleInTab: () -> Unit, onOpenSubmoduleInTab: () -> Unit,
): List<ContextMenuElement> { ): List<ContextMenuElement> {
return mutableListOf<ContextMenuElement>().apply { return mutableListOf<ContextMenuElement>().apply {
@ -13,7 +16,7 @@ fun submoduleContextMenuItems(
add( add(
ContextMenuElement.ContextTextEntry( ContextMenuElement.ContextTextEntry(
label = "Initialize submodule", label = "Initialize submodule",
onClick = onInitializeModule onClick = onInitializeSubmodule,
) )
) )
} }
@ -21,27 +24,27 @@ fun submoduleContextMenuItems(
add( add(
ContextMenuElement.ContextTextEntry( ContextMenuElement.ContextTextEntry(
label = "Open submodule in new tab", label = "Open submodule in new tab",
onClick = onOpenSubmoduleInTab onClick = onOpenSubmoduleInTab,
) )
) )
add( add(
ContextMenuElement.ContextTextEntry( ContextMenuElement.ContextTextEntry(
label = "Sync submodule", label = "Sync submodule",
onClick = onInitializeModule onClick = onSyncSubmodule,
) )
) )
add( add(
ContextMenuElement.ContextTextEntry( ContextMenuElement.ContextTextEntry(
label = "Update submodule", label = "Update submodule",
onClick = onInitializeModule onClick = onUpdateSubmodule,
) )
) )
add( add(
ContextMenuElement.ContextTextEntry( ContextMenuElement.ContextTextEntry(
label = "DeInitialize submodule", label = "DeInitialize submodule",
onClick = onInitializeModule onClick = onDeinitializeSubmodule,
) )
) )
} }

View File

@ -3,9 +3,7 @@ package com.jetpackduba.gitnuro.viewmodels.sidepanel
import com.jetpackduba.gitnuro.extensions.lowercaseContains import com.jetpackduba.gitnuro.extensions.lowercaseContains
import com.jetpackduba.gitnuro.git.RefreshType import com.jetpackduba.gitnuro.git.RefreshType
import com.jetpackduba.gitnuro.git.TabState import com.jetpackduba.gitnuro.git.TabState
import com.jetpackduba.gitnuro.git.submodules.GetSubmodulesUseCase import com.jetpackduba.gitnuro.git.submodules.*
import com.jetpackduba.gitnuro.git.submodules.InitializeSubmoduleUseCase
import com.jetpackduba.gitnuro.git.submodules.UpdateSubmoduleUseCase
import com.jetpackduba.gitnuro.ui.TabsManager import com.jetpackduba.gitnuro.ui.TabsManager
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
@ -20,6 +18,8 @@ class SubmodulesViewModel @AssistedInject constructor(
private val getSubmodulesUseCase: GetSubmodulesUseCase, private val getSubmodulesUseCase: GetSubmodulesUseCase,
private val initializeSubmoduleUseCase: InitializeSubmoduleUseCase, private val initializeSubmoduleUseCase: InitializeSubmoduleUseCase,
private val updateSubmoduleUseCase: UpdateSubmoduleUseCase, private val updateSubmoduleUseCase: UpdateSubmoduleUseCase,
private val syncSubmoduleUseCase: SyncSubmoduleUseCase,
private val deInitializeSubmoduleUseCase: DeInitializeSubmoduleUseCase,
private val tabScope: CoroutineScope, private val tabScope: CoroutineScope,
private val tabsManager: TabsManager, private val tabsManager: TabsManager,
@Assisted @Assisted
@ -67,6 +67,29 @@ class SubmodulesViewModel @AssistedInject constructor(
fun onOpenSubmoduleInTab(path: String) = tabState.runOperation(refreshType = RefreshType.NONE) { git -> fun onOpenSubmoduleInTab(path: String) = tabState.runOperation(refreshType = RefreshType.NONE) { git ->
tabsManager.addNewTabFromPath("${git.repository.directory.parent}/$path", true) 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<Pair<String, SubmoduleStatus>>, val isExpanded: Boolean) data class SubmodulesState(val submodules: List<Pair<String, SubmoduleStatus>>, val isExpanded: Boolean)