diff --git a/src/main/kotlin/app/git/UserInfo.kt b/src/main/kotlin/app/git/UserInfo.kt new file mode 100644 index 0000000..b68e690 --- /dev/null +++ b/src/main/kotlin/app/git/UserInfo.kt @@ -0,0 +1,6 @@ +package app.git + +data class UserInfo( + val name: String?, + val email: String?, +) diff --git a/src/main/kotlin/app/ui/RepositoryOpen.kt b/src/main/kotlin/app/ui/RepositoryOpen.kt index a6c6a8e..23aa766 100644 --- a/src/main/kotlin/app/ui/RepositoryOpen.kt +++ b/src/main/kotlin/app/ui/RepositoryOpen.kt @@ -9,15 +9,16 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.input.pointer.PointerIcon import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import app.git.DiffEntryType -import app.theme.borderColor -import app.theme.primaryTextColor +import app.theme.* import app.ui.dialogs.NewBranchDialog import app.ui.dialogs.RebaseInteractive import app.ui.dialogs.StashWithMessageDialog @@ -42,6 +43,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) { val selectedItem by tabViewModel.selectedItem.collectAsState() val blameState by tabViewModel.blameState.collectAsState() val showHistory by tabViewModel.showHistory.collectAsState() + val userInfo by tabViewModel.userInfo.collectAsState() var showNewBranchDialog by remember { mutableStateOf(false) } var showStashWithMessageDialog by remember { mutableStateOf(false) } @@ -79,19 +81,42 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) { Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor) } } else { - Menu( - modifier = Modifier - .padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top - .fillMaxWidth(), - menuViewModel = tabViewModel.menuViewModel, - onRepositoryOpen = { - openRepositoryDialog(tabViewModel = tabViewModel) - }, - onCreateBranch = { showNewBranchDialog = true }, - onStashWithMessage = { showStashWithMessageDialog = true }, - ) + Column(modifier = Modifier.weight(1f)) { + Menu( + modifier = Modifier + .padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top + .fillMaxWidth(), + menuViewModel = tabViewModel.menuViewModel, + onRepositoryOpen = { + openRepositoryDialog(tabViewModel = tabViewModel) + }, + onCreateBranch = { showNewBranchDialog = true }, + onStashWithMessage = { showStashWithMessageDialog = true }, + ) - RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory) + RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory) + } + } + + Spacer( + modifier = Modifier + .height(1.dp) + .fillMaxWidth() + .background(MaterialTheme.colors.primaryVariant.copy(alpha = 0.2f)) + ) + Row( + modifier = Modifier + .fillMaxWidth() + .height(32.dp) + .background(MaterialTheme.colors.surface) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = "${userInfo.name ?: "Name not set"} <${userInfo.email?: "Email not set"}>", + color = MaterialTheme.colors.primaryTextColor, + fontSize = 12.sp, + ) } } @@ -194,7 +219,7 @@ fun MainContentView( else -> { val diffViewModel = tabViewModel.diffViewModel - if(diffViewModel != null) { + if (diffViewModel != null) { Diff( diffViewModel = diffViewModel, onCloseDiffView = { diff --git a/src/main/kotlin/app/viewmodels/TabViewModel.kt b/src/main/kotlin/app/viewmodels/TabViewModel.kt index 3beb348..86080f3 100644 --- a/src/main/kotlin/app/viewmodels/TabViewModel.kt +++ b/src/main/kotlin/app/viewmodels/TabViewModel.kt @@ -19,6 +19,7 @@ import org.eclipse.jgit.blame.BlameResult import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.lib.RepositoryState import org.eclipse.jgit.revwalk.RevCommit +import org.eclipse.jgit.storage.file.FileBasedConfig import java.io.File import javax.inject.Inject import javax.inject.Provider @@ -87,6 +88,9 @@ class TabViewModel @Inject constructor( private val _showHistory = MutableStateFlow(false) val showHistory: StateFlow = _showHistory + private val _userInfo = MutableStateFlow(UserInfo(null, null)) + val userInfo: StateFlow = _userInfo + var historyViewModel: HistoryViewModel? = null private set @@ -181,9 +185,29 @@ class TabViewModel @Inject constructor( printLog(TAG, "Refreshing repository state $newRepoState") _repositoryState.value = newRepoState + loadConfigInfo(git) + onRepositoryStateChanged(newRepoState) } + private fun loadConfigInfo(git: Git) { + val config = git.repository.config + config.load() + val userName = config.getString("user", null, "name") + val email = config.getString("user", null, "email") + + // TODO Load file-specific config +// val fcfg = FileBasedConfig((config as FileBasedConfig).file, git.repository.fs) +// fcfg.load() +// val fname = fcfg.getString("user", null, "name") +// val fmail = fcfg.getString("user", null, "email") +// println("Fname $fname\nFmail $fmail") + + println(userName) + println(email) + _userInfo.value = UserInfo(userName, email) + } + private fun onRepositoryStateChanged(newRepoState: RepositoryState) { if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) { rebaseInteractiveViewModel?.cancel() @@ -309,7 +333,7 @@ class TabViewModel @Inject constructor( val diffSelected = diffSelected.value if (diffSelected != null) { - if(diffViewModel == null) { // Initialize the view model if required + if (diffViewModel == null) { // Initialize the view model if required diffViewModel = diffViewModelProvider.get() }