diff --git a/app/src/main/java/chat/revolt/api/internals/ULID.kt b/app/src/main/java/chat/revolt/api/internals/ULID.kt index 9a263936..af6bd303 100644 --- a/app/src/main/java/chat/revolt/api/internals/ULID.kt +++ b/app/src/main/java/chat/revolt/api/internals/ULID.kt @@ -145,29 +145,4 @@ object ULID { return timestamp } - - /** Like asTimestamp, but for the entire ULID including the entropy, as an integer. - Note that the number you receive will not be reversible to the original ULID, because - it will overflow the `Int` type! Used for generating Android notification IDs. - */ - fun asInteger(ulid: String): Int { - if (ulid.length != len) { - throw IllegalArgumentException("ULID must be exactly $len characters") - } - - var integer = 0 - - for (i in 0 until len) { - val char = ulid[i] - val value = b32chars.indexOf(char) - - if (value == -1) { - throw IllegalArgumentException("Invalid character '$char' at position $i") - } - - integer = integer or (value shl (len - i - 1) * 5) - } - - return integer - } } diff --git a/app/src/main/java/chat/revolt/c2dm/HandlerService.kt b/app/src/main/java/chat/revolt/c2dm/HandlerService.kt index e84fe876..4971eb51 100644 --- a/app/src/main/java/chat/revolt/c2dm/HandlerService.kt +++ b/app/src/main/java/chat/revolt/c2dm/HandlerService.kt @@ -29,6 +29,10 @@ import kotlinx.serialization.json.contentOrNull import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonPrimitive +object NotificationID { + const val NEW_MESSAGE = 0 +} + class HandlerService : FirebaseMessagingService() { override fun onNewToken(token: String) { super.onNewToken(token) @@ -72,18 +76,13 @@ class HandlerService : FirebaseMessagingService() { return } - val notificationId = message.channel?.let { ULID.asInteger(it) } ?: run { - Log.e("HandlerService", "No channel in message, abort") - return - } - if (authorIcon == null) { authorIcon = "$REVOLT_BASE/users/${message.author?.ifBlank { "0".repeat(26) }}/default_avatar" } val db = Database(SqlStorage.driver) - val channelName = message.channel.let { + val channelName = message.channel?.let { db.channelQueries.findById(it).executeAsOneOrNull() }?.let { when (it.channelType) { @@ -123,6 +122,11 @@ class HandlerService : FirebaseMessagingService() { .setName(user.displayName ?: user.username) .build() + if (message.channel == null) { + Log.e("HandlerService", "No channel in message, abort") + return + } + val remoteInput = RemoteInput.Builder("content").run { setLabel(getString(R.string.message_context_sheet_actions_reply)) build() @@ -167,7 +171,7 @@ class HandlerService : FirebaseMessagingService() { ) { return } - notify(notificationId, builder.build()) + notify(message.channel, NotificationID.NEW_MESSAGE, builder.build()) } /// END TEMPORARY CODE }