commit e18243ff792a260c840f3783a1b43effa5fed00c parent deae5f301387c48ed16c46c9a9ab8a67293a26dd Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:31:27 +0200 fix(composer): first created username Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com> Diffstat:
5 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/composer/src/main/ts/imports.ts b/composer/src/main/ts/imports.ts @@ -1,4 +1,4 @@ -import { Config, FriendInfo } from "./types"; +import { Config } from "./types"; declare var _getImportsFunctionName: string; declare var _runtimeName: boolean; @@ -17,8 +17,6 @@ export const getConfig = () => callRemoteFunction("getConfig") as Config; export const downloadLastOperaMedia = (isLongPress: boolean) => callRemoteFunction("downloadLastOperaMedia", isLongPress); -export function getFriendInfoByUsername(username: string): FriendInfo | null { - const friendInfo = callRemoteFunction("getFriendInfoByUsername", username); - if (!friendInfo) return null; - return JSON.parse(friendInfo); +export function getFriendOriginalUsername(username: string): string | null { + return callRemoteFunction("getFriendOriginalUsername", username); } diff --git a/composer/src/main/ts/modules/firstCreatedUsername.ts b/composer/src/main/ts/modules/firstCreatedUsername.ts @@ -1,5 +1,5 @@ import { defineModule } from "../types"; -import { getFriendInfoByUsername } from "../imports"; +import { getFriendOriginalUsername } from "../imports"; import { interceptComponent } from "../utils"; export default defineModule({ @@ -12,9 +12,8 @@ export default defineModule({ { onRender: (component: any, _args: any[], render: () => void) => { if (component.viewModel) { - let userInfo = getFriendInfoByUsername(component.viewModel.username); - if (userInfo) { - let firstCreatedUsername = userInfo.username.split("|")[0]; + let firstCreatedUsername = getFriendOriginalUsername(component.viewModel.username); + if (firstCreatedUsername) { if (firstCreatedUsername != component.viewModel.username) { component.viewModel.username += " (" + firstCreatedUsername + ")"; } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/database/DatabaseAccess.kt @@ -6,12 +6,7 @@ import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase.OpenParams import android.database.sqlite.SQLiteDatabaseCorruptException import me.rhunk.snapenhance.common.database.DatabaseObject -import me.rhunk.snapenhance.common.database.impl.ConversationMessage -import me.rhunk.snapenhance.common.database.impl.FriendFeedEntry -import me.rhunk.snapenhance.common.database.impl.FriendInfo -import me.rhunk.snapenhance.common.database.impl.StoryEntry -import me.rhunk.snapenhance.common.database.impl.StorySnapEntry -import me.rhunk.snapenhance.common.database.impl.UserConversationLink +import me.rhunk.snapenhance.common.database.impl.* import me.rhunk.snapenhance.common.util.ktx.getBlobOrNull import me.rhunk.snapenhance.common.util.ktx.getIntOrNull import me.rhunk.snapenhance.common.util.ktx.getInteger @@ -198,6 +193,20 @@ class DatabaseAccess( } } + fun getFriendOriginalUsername(mutableUsername: String): String? { + return useDatabase(DatabaseType.MAIN)?.performOperation { + safeRawQuery( + "SELECT originalUsername FROM CombinedUsername WHERE mutableUsername = ?", + arrayOf(mutableUsername) + )?.use { query -> + if (!query.moveToFirst()) { + return@performOperation null + } + query.getStringOrNull("originalUsername") + } + } + } + fun getFriendInfoByUsername(username: String): FriendInfo? { return useDatabase(DatabaseType.MAIN)?.performOperation { readDatabaseObject( diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/ComposerHooks.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/ComposerHooks.kt @@ -133,13 +133,12 @@ class ComposerHooks: Feature("ComposerHooks") { context.feature(MediaDownloader::class).downloadLastOperaMediaAsync(getUntyped(0) == true) } - composerFunction("getFriendInfoByUsername") { + composerFunction("getFriendOriginalUsername") { if (getSize() < 1) return@composerFunction val username = getUntyped(0) as? String ?: return@composerFunction + runCatching { - pushUntyped(context.database.getFriendInfoByUsername(username)?.let { - context.gson.toJson(it) - }) + pushUntyped(context.database.getFriendOriginalUsername(username)) }.onFailure { pushUntyped(null) } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/menu/impl/FriendFeedInfoMenu.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/menu/impl/FriendFeedInfoMenu.kt @@ -98,6 +98,7 @@ class FriendFeedInfoMenu : AbstractMenu() { } val finalIcon = icon val translation = context.translation.getCategory("profile_info") + val firstCreatedUsername = context.database.getFriendOriginalUsername(profile.mutableUsername.toString()) ?: profile.firstCreatedUsername context.runOnUiThread { val addedTimestamp: Long = profile.addedTimestamp.coerceAtLeast(profile.reverseAddedTimestamp) @@ -109,7 +110,7 @@ class FriendFeedInfoMenu : AbstractMenu() { birthday[Calendar.MONTH] = (profile.birthday shr 32).toInt() - 1 builder.setMessage(mapOf( - translation["first_created_username"] to profile.firstCreatedUsername, + translation["first_created_username"] to firstCreatedUsername, translation["mutable_username"] to profile.mutableUsername, translation["display_name"] to profile.displayName, translation["added_date"] to formatDate(addedTimestamp).takeIf { addedTimestamp > 0 },