Closed pantasystem closed 9 months ago
User.InstanceInfoクラス
data class InstanceInfo(
val faviconUrl: String?,
val iconUrl: String?,
val name: String?,
val softwareName: String?,
val softwareVersion: String?,
val themeColor: String?,
) {
val themeColorNumber: Result<Int?> by lazy {
runCancellableCatching {
themeColor?.let {
Color.parseColor(it)
}
}
}
}
themeColorってどうやって取得するんだ?・・・
マニフェストを取得してるっぽい
インスタンスというかそのサーバのテーマカラーの取得方法としては htmlのヘッダー部分のmeta部分からmanifest.jsonへのURLを取得して、 manifest.jsonからテーマカラーを取得すれば良いっぽい ただこれをフロントエンド上で実行するのは問題があるか?・・・
CMSでインスタンスの情報を管理するようにして Cloudflare workerとかでJSONファイルに書き出して静的なファイルとしてホスティングしておくのが良いかもしれない。 フロントエンドからはWi-Fi接続時などにホスティングしておいたファイルをダウンロードしておくようなアーキテクチャが扱いやすいかも 書き出すJSONは100ずつぐらいの件数に細切れにして展開しておけばいいかも paging.jsonと各種JSONのファイルに対応するURLのマッピングを作っておくといいかも
この方式であれば一日に一回とかビルドを実行するようにすれば CMSをホスティングしているシステムへの負荷をある程度少なくできる
Cloudflare workerの無料枠で十分耐えられそうだと思ったので Cloudflare workerで実装した。 バックエンドの実装自体は完了しているのでフロントエンドを実素するだけ
ノート取得時にネットワーク経由でインスタンス情報を取得する処理を実行してしまうと 時間がかかりすぎてしまうので、キャッシュ済みであればInstance Tickerを表示するようにする。 反対にキャッシュ済みでなければ、別スレッドでインスタンス取得処理を実行するようにして、 次回以降にユーザを取得したりユーザをJSONからデータベースにキャッシュするときに、 キャッシュ済みのインスタンスデータを関連づけて保持するようにする。