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) {
|
task("fatJar", type = Jar::class) {
|
||||||
archiveBaseName.set("${project.name}-fat")
|
archiveBaseName.set("$name-$projectVersion")
|
||||||
|
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.items
|
|||||||
import androidx.compose.material.Icon
|
import androidx.compose.material.Icon
|
||||||
import androidx.compose.material.IconButton
|
import androidx.compose.material.IconButton
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
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.res.painterResource
|
||||||
import androidx.compose.ui.unit.DpSize
|
import androidx.compose.ui.unit.DpSize
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.window.Window
|
import androidx.compose.ui.window.Window
|
||||||
import androidx.compose.ui.window.WindowPlacement
|
import androidx.compose.ui.window.WindowPlacement
|
||||||
import androidx.compose.ui.window.application
|
import androidx.compose.ui.window.application
|
||||||
@ -24,6 +26,8 @@ import androidx.compose.ui.window.rememberWindowState
|
|||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import app.di.DaggerAppComponent
|
import app.di.DaggerAppComponent
|
||||||
import app.theme.AppTheme
|
import app.theme.AppTheme
|
||||||
|
import app.theme.primaryTextColor
|
||||||
|
import app.theme.secondaryTextColor
|
||||||
import app.ui.components.RepositoriesTabPanel
|
import app.ui.components.RepositoriesTabPanel
|
||||||
import app.ui.components.TabInformation
|
import app.ui.components.TabInformation
|
||||||
import app.ui.dialogs.SettingsDialog
|
import app.ui.dialogs.SettingsDialog
|
||||||
@ -257,6 +261,15 @@ private fun TabsContent(tabs: List<TabInformation>, selectedTabKey: Int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LoadingRepository() {
|
fun LoadingRepository(repoPath: String) {
|
||||||
Box { }
|
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()
|
val isProcessing by tabViewModel.processing.collectAsState()
|
||||||
|
|
||||||
Box {
|
Box {
|
||||||
@ -71,12 +72,12 @@ fun AppTab(
|
|||||||
Box(modifier = Modifier.fillMaxSize()) {
|
Box(modifier = Modifier.fillMaxSize()) {
|
||||||
Crossfade(targetState = repositorySelectionStatus) {
|
Crossfade(targetState = repositorySelectionStatus) {
|
||||||
@Suppress("UnnecessaryVariable") // Don't inline it because smart cast won't work
|
@Suppress("UnnecessaryVariable") // Don't inline it because smart cast won't work
|
||||||
when (repositorySelectionStatus) {
|
when (repositorySelectionStatusValue) {
|
||||||
RepositorySelectionStatus.None -> {
|
RepositorySelectionStatus.None -> {
|
||||||
WelcomePage(tabViewModel = tabViewModel)
|
WelcomePage(tabViewModel = tabViewModel)
|
||||||
}
|
}
|
||||||
RepositorySelectionStatus.Loading -> {
|
is RepositorySelectionStatus.Opening -> {
|
||||||
LoadingRepository()
|
LoadingRepository(repositorySelectionStatusValue.path)
|
||||||
}
|
}
|
||||||
is RepositorySelectionStatus.Open -> {
|
is RepositorySelectionStatus.Open -> {
|
||||||
RepositoryOpenPage(tabViewModel = tabViewModel)
|
RepositoryOpenPage(tabViewModel = tabViewModel)
|
||||||
|
@ -48,7 +48,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
|
|||||||
Menu(
|
Menu(
|
||||||
menuViewModel = tabViewModel.menuViewModel,
|
menuViewModel = tabViewModel.menuViewModel,
|
||||||
onRepositoryOpen = {
|
onRepositoryOpen = {
|
||||||
openRepositoryDialog(gitManager = tabViewModel)
|
openRepositoryDialog(tabViewModel = tabViewModel)
|
||||||
},
|
},
|
||||||
onCreateBranch = { showNewBranchDialog = true }
|
onCreateBranch = { showNewBranchDialog = true }
|
||||||
)
|
)
|
||||||
|
@ -4,9 +4,9 @@ import javax.swing.JFileChooser
|
|||||||
import javax.swing.UIManager
|
import javax.swing.UIManager
|
||||||
|
|
||||||
|
|
||||||
fun openRepositoryDialog(gitManager: TabViewModel) {
|
fun openRepositoryDialog(tabViewModel: TabViewModel) {
|
||||||
val os = System.getProperty("os.name")
|
val os = System.getProperty("os.name")
|
||||||
val appStateManager = gitManager.appStateManager
|
val appStateManager = tabViewModel.appStateManager
|
||||||
val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath
|
val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath
|
||||||
|
|
||||||
|
|
||||||
@ -20,11 +20,11 @@ fun openRepositoryDialog(gitManager: TabViewModel) {
|
|||||||
)?.replace("\n", "")
|
)?.replace("\n", "")
|
||||||
|
|
||||||
if (!openDirectory.isNullOrEmpty())
|
if (!openDirectory.isNullOrEmpty())
|
||||||
gitManager.openRepository(openDirectory)
|
tabViewModel.openRepository(openDirectory)
|
||||||
} else
|
} else
|
||||||
openRepositoryDialog(gitManager, latestDirectoryOpened, true)
|
openRepositoryDialog(tabViewModel, latestDirectoryOpened, true)
|
||||||
} else {
|
} 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.StateFlow
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.api.Git
|
||||||
import org.eclipse.jgit.lib.ObjectId
|
|
||||||
import org.eclipse.jgit.lib.Repository
|
import org.eclipse.jgit.lib.Repository
|
||||||
import org.eclipse.jgit.lib.RepositoryState
|
import org.eclipse.jgit.lib.RepositoryState
|
||||||
import org.eclipse.jgit.revwalk.RevCommit
|
|
||||||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -106,6 +103,8 @@ class TabViewModel @Inject constructor(
|
|||||||
fun openRepository(directory: File) = tabState.safeProcessingWihoutGit {
|
fun openRepository(directory: File) = tabState.safeProcessingWihoutGit {
|
||||||
println("Trying to open repository ${directory.absoluteFile}")
|
println("Trying to open repository ${directory.absoluteFile}")
|
||||||
|
|
||||||
|
_repositorySelectionStatus.value = RepositorySelectionStatus.Opening(directory.absolutePath)
|
||||||
|
|
||||||
val repository: Repository = repositoryManager.openRepository(directory)
|
val repository: Repository = repositoryManager.openRepository(directory)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -122,6 +121,7 @@ class TabViewModel @Inject constructor(
|
|||||||
ex.printStackTrace()
|
ex.printStackTrace()
|
||||||
onRepositoryChanged(null)
|
onRepositoryChanged(null)
|
||||||
errorsManager.addError(newErrorNow(ex, ex.localizedMessage))
|
errorsManager.addError(newErrorNow(ex, ex.localizedMessage))
|
||||||
|
_repositorySelectionStatus.value = RepositorySelectionStatus.None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,6 +259,6 @@ class TabViewModel @Inject constructor(
|
|||||||
|
|
||||||
sealed class RepositorySelectionStatus {
|
sealed class RepositorySelectionStatus {
|
||||||
object None : RepositorySelectionStatus()
|
object None : RepositorySelectionStatus()
|
||||||
object Loading : RepositorySelectionStatus()
|
data class Opening(val path: String) : RepositorySelectionStatus()
|
||||||
data class Open(val repository: Repository) : RepositorySelectionStatus()
|
data class Open(val repository: Repository) : RepositorySelectionStatus()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user