Added loading screen when opening a repository

This commit is contained in:
Abdelilah El Aissaoui 2022-04-01 05:00:06 +02:00
parent 2dd6fb106e
commit 54a1ab4436
6 changed files with 31 additions and 17 deletions

View File

@ -68,7 +68,7 @@ compose.desktop {
task("fatJar", type = Jar::class) {
archiveBaseName.set("${project.name}-fat")
archiveBaseName.set("$name-$projectVersion")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE

View File

@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
@ -17,6 +18,7 @@ import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowPlacement
import androidx.compose.ui.window.application
@ -24,6 +26,8 @@ import androidx.compose.ui.window.rememberWindowState
import androidx.compose.ui.zIndex
import app.di.DaggerAppComponent
import app.theme.AppTheme
import app.theme.primaryTextColor
import app.theme.secondaryTextColor
import app.ui.components.RepositoriesTabPanel
import app.ui.components.TabInformation
import app.ui.dialogs.SettingsDialog
@ -257,6 +261,15 @@ private fun TabsContent(tabs: List<TabInformation>, selectedTabKey: Int) {
}
@Composable
fun LoadingRepository() {
Box { }
fun LoadingRepository(repoPath: String) {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
Text("Opening repository", fontSize = 36.sp, color = MaterialTheme.colors.primaryTextColor)
Text(repoPath, fontSize = 24.sp, color = MaterialTheme.colors.secondaryTextColor)
}
}
}

View File

@ -46,7 +46,8 @@ fun AppTab(
}
}
val repositorySelectionStatus by tabViewModel.repositorySelectionStatus.collectAsState()
val repositorySelectionStatus = tabViewModel.repositorySelectionStatus.collectAsState()
val repositorySelectionStatusValue = repositorySelectionStatus.value
val isProcessing by tabViewModel.processing.collectAsState()
Box {
@ -71,12 +72,12 @@ fun AppTab(
Box(modifier = Modifier.fillMaxSize()) {
Crossfade(targetState = repositorySelectionStatus) {
@Suppress("UnnecessaryVariable") // Don't inline it because smart cast won't work
when (repositorySelectionStatus) {
when (repositorySelectionStatusValue) {
RepositorySelectionStatus.None -> {
WelcomePage(tabViewModel = tabViewModel)
}
RepositorySelectionStatus.Loading -> {
LoadingRepository()
is RepositorySelectionStatus.Opening -> {
LoadingRepository(repositorySelectionStatusValue.path)
}
is RepositorySelectionStatus.Open -> {
RepositoryOpenPage(tabViewModel = tabViewModel)

View File

@ -48,7 +48,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
Menu(
menuViewModel = tabViewModel.menuViewModel,
onRepositoryOpen = {
openRepositoryDialog(gitManager = tabViewModel)
openRepositoryDialog(tabViewModel = tabViewModel)
},
onCreateBranch = { showNewBranchDialog = true }
)

View File

@ -4,9 +4,9 @@ import javax.swing.JFileChooser
import javax.swing.UIManager
fun openRepositoryDialog(gitManager: TabViewModel) {
fun openRepositoryDialog(tabViewModel: TabViewModel) {
val os = System.getProperty("os.name")
val appStateManager = gitManager.appStateManager
val appStateManager = tabViewModel.appStateManager
val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath
@ -20,11 +20,11 @@ fun openRepositoryDialog(gitManager: TabViewModel) {
)?.replace("\n", "")
if (!openDirectory.isNullOrEmpty())
gitManager.openRepository(openDirectory)
tabViewModel.openRepository(openDirectory)
} else
openRepositoryDialog(gitManager, latestDirectoryOpened, true)
openRepositoryDialog(tabViewModel, latestDirectoryOpened, true)
} else {
openRepositoryDialog(gitManager, latestDirectoryOpened, false)
openRepositoryDialog(tabViewModel, latestDirectoryOpened, false)
}
}

View File

@ -12,11 +12,8 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collect
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.ObjectId
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.RepositoryState
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.storage.file.FileRepositoryBuilder
import java.io.File
import javax.inject.Inject
@ -106,6 +103,8 @@ class TabViewModel @Inject constructor(
fun openRepository(directory: File) = tabState.safeProcessingWihoutGit {
println("Trying to open repository ${directory.absoluteFile}")
_repositorySelectionStatus.value = RepositorySelectionStatus.Opening(directory.absolutePath)
val repository: Repository = repositoryManager.openRepository(directory)
try {
@ -122,6 +121,7 @@ class TabViewModel @Inject constructor(
ex.printStackTrace()
onRepositoryChanged(null)
errorsManager.addError(newErrorNow(ex, ex.localizedMessage))
_repositorySelectionStatus.value = RepositorySelectionStatus.None
}
}
@ -259,6 +259,6 @@ class TabViewModel @Inject constructor(
sealed class RepositorySelectionStatus {
object None : RepositorySelectionStatus()
object Loading : RepositorySelectionStatus()
data class Opening(val path: String) : RepositorySelectionStatus()
data class Open(val repository: Repository) : RepositorySelectionStatus()
}