Gitnuro/src/main/kotlin/com/jetpackduba/gitnuro/extensions/DiffEntryExtensions.kt
2022-09-28 01:56:21 +02:00

129 lines
4.0 KiB
Kotlin

package com.jetpackduba.gitnuro.extensions
import androidx.compose.material.MaterialTheme
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import com.jetpackduba.gitnuro.git.workspace.StatusEntry
import com.jetpackduba.gitnuro.git.workspace.StatusType
import com.jetpackduba.gitnuro.theme.addFile
import com.jetpackduba.gitnuro.theme.conflictFile
import com.jetpackduba.gitnuro.theme.modifyFile
import org.eclipse.jgit.diff.DiffEntry
val DiffEntry.parentDirectoryPath: String
get() {
val path = if (this.changeType == DiffEntry.ChangeType.DELETE) {
this.oldPath
} else
this.newPath
val pathSplit = path.split("/").toMutableList()
pathSplit.removeLast()
val directoryPath = pathSplit.joinToString("/")
return if (directoryPath.isEmpty())
""
else
"${directoryPath}/"
}
val StatusEntry.parentDirectoryPath: String
get() {
val pathSplit = this.filePath.split("/").toMutableList()
pathSplit.removeLast()
val directoryPath = pathSplit.joinToString("/")
return if (directoryPath.isEmpty())
""
else
"${directoryPath}/"
}
val StatusEntry.fileName: String
get() {
val pathSplit = filePath.split("/")
return pathSplit.lastOrNull() ?: ""
}
val DiffEntry.fileName: String
get() {
val path = if (this.changeType == DiffEntry.ChangeType.DELETE) {
this.oldPath
} else
this.newPath
val pathSplit = path.split("/")
return pathSplit.lastOrNull() ?: ""
}
val DiffEntry.filePath: String
get() {
val path = if (this.changeType == DiffEntry.ChangeType.DELETE) {
this.oldPath
} else
this.newPath
return path
}
val StatusType.icon: ImageVector
get() {
return when (this) {
StatusType.ADDED -> Icons.Default.Add
StatusType.MODIFIED -> Icons.Default.Edit
StatusType.REMOVED -> Icons.Default.Delete
StatusType.CONFLICTING -> Icons.Default.Warning
}
}
val DiffEntry.icon: ImageVector
get() {
return when (this.changeType) {
DiffEntry.ChangeType.ADD -> Icons.Default.Add
DiffEntry.ChangeType.MODIFY -> Icons.Default.Edit
DiffEntry.ChangeType.DELETE -> Icons.Default.Delete
DiffEntry.ChangeType.COPY -> Icons.Default.Add
DiffEntry.ChangeType.RENAME -> Icons.Default.Refresh
else -> throw NotImplementedError("Unexpected ChangeType")
}
}
val StatusType.iconColor: Color
@Composable
get() {
return when (this) {
StatusType.ADDED -> MaterialTheme.colors.addFile
StatusType.MODIFIED -> MaterialTheme.colors.modifyFile
StatusType.REMOVED -> MaterialTheme.colors.error
StatusType.CONFLICTING -> MaterialTheme.colors.conflictFile
}
}
val DiffEntry.iconColor: Color
@Composable
get() {
return when (this.changeType) {
DiffEntry.ChangeType.ADD -> MaterialTheme.colors.addFile
DiffEntry.ChangeType.MODIFY -> MaterialTheme.colors.modifyFile
DiffEntry.ChangeType.DELETE -> MaterialTheme.colors.error
DiffEntry.ChangeType.COPY -> MaterialTheme.colors.addFile
DiffEntry.ChangeType.RENAME -> MaterialTheme.colors.modifyFile
else -> throw NotImplementedError("Unexpected ChangeType")
}
}
fun DiffEntry.toStatusType(): StatusType = when (this.changeType) {
DiffEntry.ChangeType.ADD -> StatusType.ADDED
DiffEntry.ChangeType.MODIFY -> StatusType.MODIFIED
DiffEntry.ChangeType.DELETE -> StatusType.REMOVED
DiffEntry.ChangeType.COPY -> StatusType.ADDED
DiffEntry.ChangeType.RENAME -> StatusType.MODIFIED
else -> throw NotImplementedError("Unexpected ChangeType")
}