From 54a1ab44364017d1cecb3b02bbfa13358d29e5e4 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Fri, 1 Apr 2022 05:00:06 +0200 Subject: [PATCH] Added loading screen when opening a repository --- build.gradle.kts | 2 +- src/main/kotlin/app/App.kt | 17 +++++++++++++++-- src/main/kotlin/app/ui/AppTab.kt | 9 +++++---- src/main/kotlin/app/ui/RepositoryOpen.kt | 2 +- src/main/kotlin/app/ui/SystemDialogs.kt | 10 +++++----- src/main/kotlin/app/viewmodels/TabViewModel.kt | 8 ++++---- 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e1cfb47..8d60bd9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -68,7 +68,7 @@ compose.desktop { task("fatJar", type = Jar::class) { - archiveBaseName.set("${project.name}-fat") + archiveBaseName.set("$name-$projectVersion") duplicatesStrategy = DuplicatesStrategy.EXCLUDE diff --git a/src/main/kotlin/app/App.kt b/src/main/kotlin/app/App.kt index cf15469..f5ed665 100644 --- a/src/main/kotlin/app/App.kt +++ b/src/main/kotlin/app/App.kt @@ -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, 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) + } + } } \ No newline at end of file diff --git a/src/main/kotlin/app/ui/AppTab.kt b/src/main/kotlin/app/ui/AppTab.kt index 1265366..71be35b 100644 --- a/src/main/kotlin/app/ui/AppTab.kt +++ b/src/main/kotlin/app/ui/AppTab.kt @@ -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) diff --git a/src/main/kotlin/app/ui/RepositoryOpen.kt b/src/main/kotlin/app/ui/RepositoryOpen.kt index 85278bc..42d410c 100644 --- a/src/main/kotlin/app/ui/RepositoryOpen.kt +++ b/src/main/kotlin/app/ui/RepositoryOpen.kt @@ -48,7 +48,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) { Menu( menuViewModel = tabViewModel.menuViewModel, onRepositoryOpen = { - openRepositoryDialog(gitManager = tabViewModel) + openRepositoryDialog(tabViewModel = tabViewModel) }, onCreateBranch = { showNewBranchDialog = true } ) diff --git a/src/main/kotlin/app/ui/SystemDialogs.kt b/src/main/kotlin/app/ui/SystemDialogs.kt index a39b768..4a26d35 100644 --- a/src/main/kotlin/app/ui/SystemDialogs.kt +++ b/src/main/kotlin/app/ui/SystemDialogs.kt @@ -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) } } diff --git a/src/main/kotlin/app/viewmodels/TabViewModel.kt b/src/main/kotlin/app/viewmodels/TabViewModel.kt index 09ba7bd..4d5dd02 100644 --- a/src/main/kotlin/app/viewmodels/TabViewModel.kt +++ b/src/main/kotlin/app/viewmodels/TabViewModel.kt @@ -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() }