129 lines
4.0 KiB
Kotlin
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")
|
|
} |