Added loading screen when opening a repository
This commit is contained in:
parent
2dd6fb106e
commit
54a1ab4436
@ -68,7 +68,7 @@ compose.desktop {
|
||||
|
||||
|
||||
task("fatJar", type = Jar::class) {
|
||||
archiveBaseName.set("${project.name}-fat")
|
||||
archiveBaseName.set("$name-$projectVersion")
|
||||
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -48,7 +48,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
|
||||
Menu(
|
||||
menuViewModel = tabViewModel.menuViewModel,
|
||||
onRepositoryOpen = {
|
||||
openRepositoryDialog(gitManager = tabViewModel)
|
||||
openRepositoryDialog(tabViewModel = tabViewModel)
|
||||
},
|
||||
onCreateBranch = { showNewBranchDialog = true }
|
||||
)
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user