feat: experimental message sending time view

This commit is contained in:
Infi 2023-01-06 04:40:40 +01:00
parent c7e5795ca9
commit 56d1c4ff57
3 changed files with 54 additions and 4 deletions

View File

@ -88,4 +88,25 @@ object ULID {
fun makeNext(): String {
return makeSpecial(System.currentTimeMillis(), fetchEntropy())
}
fun asTimestamp(ulid: String): Long {
if (ulid.length != len) {
throw IllegalArgumentException("ULID must be exactly $len characters")
}
var timestamp = 0L
for (i in 0..9) {
val char = ulid[i]
val value = b32chars.indexOf(char)
if (value == -1) {
throw IllegalArgumentException("Invalid character '$char' at position $i")
}
timestamp = timestamp or (value.toLong() shl (9 - i) * 5)
}
return timestamp
}
}

View File

@ -21,7 +21,7 @@ data class ServerUserChoice(
@Serializable
data class Member(
@SerialName("_id")
val id: ServerUserChoice? = null,
val id: ServerUserChoice,
@SerialName("joined_at")
val joinedAt: String? = null,

View File

@ -10,15 +10,19 @@ import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.revolt.api.REVOLT_BASE
import chat.revolt.api.REVOLT_FILES
import chat.revolt.api.RevoltAPI
import chat.revolt.api.internals.ULID
import chat.revolt.api.schemas.AutumnResource
import chat.revolt.components.generic.RemoteImage
import chat.revolt.api.schemas.Message as MessageSchema
@ -33,6 +37,15 @@ fun viewAttachmentInBrowser(ctx: android.content.Context, attachment: AutumnReso
)
}
fun formatLongAsTime(time: Long): String {
// TODO: look into using a library like kotlinx.datetime
val date = java.util.Date(time)
val format =
java.text.SimpleDateFormat("dd.MM.yyyy HH:mm:ss", java.util.Locale.getDefault())
return format.format(date)
}
@Composable
fun Message(
message: MessageSchema
@ -47,6 +60,7 @@ fun Message(
modifier = Modifier
.size(50.dp)
.clip(CircleShape),
crossfade = false,
description = "Avatar for ${author.username}"
)
} else {
@ -55,17 +69,31 @@ fun Message(
modifier = Modifier
.size(50.dp)
.clip(CircleShape),
crossfade = false,
description = "Avatar for ${author.username}"
)
}
Column(modifier = Modifier.padding(start = 10.dp)) {
author.username?.let {
Row(verticalAlignment = Alignment.CenterVertically) {
author.username?.let {
Text(
text = it,
fontWeight = FontWeight.Bold,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
Spacer(modifier = Modifier.width(5.dp))
Text(
text = it,
fontWeight = FontWeight.Bold
text = formatLongAsTime(ULID.asTimestamp(message.id!!)),
fontSize = 12.sp,
color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.5f),
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
message.content?.let {
Text(
text = it
@ -86,6 +114,7 @@ fun Message(
width = attachment.metadata.width?.toInt() ?: 0,
height = attachment.metadata.height?.toInt() ?: 0,
contentScale = ContentScale.Fit,
crossfade = true,
description = "Attached image ${attachment.filename}"
)
} else {