scrapbox-storage
用途
読み込みを待たなくて済む
他にもあったはずなんだけど思い出せない
実装
DB構造は変えない
リンク数とかの統計は消す。結局使わなかった
各ページのリンク一覧を入れようかは検討中
データサイズが増えるので、多分入れない
入れるもの
title
空ページの場合、どのタイトルを採用するかはscrapbox.ioに準拠する
hasIcon
updated
updated < 0で空ページを表す
linksLc
まあいれてもいいか
入れないもの
titleLc
このscriptではリンクの同一性確認が不要
もし必要なら、このscriptを使用する側で作成する
機能
データ読み込み
networkからは更新しない
もしcacheにより新しいデータがあれば、読み込んでおく
自動更新
指定されたprojectsのリンクを定期的に更新する
間隔
from cache
データ読込時に随時行う
すでに読み込み中なら飛ばす
from network
project更新確認→リンクデータ取得の順
手動更新
更新周り
cache更新よりnetwork更新を優先する?
interface
load
データ取得
呼び出したprojectsは更新対象に登録される
subscribe
リンクデータ更新で呼び出されるlistenerを登録する
戻り値の函数で解除
checkUpdatecheck
手動更新
formatencode/decode
DB用に圧縮したデータを、object形式でわかりやすく変換する
実装したいこと
リアルタイム更新?
Indexed DBはつかわなくていい
responseを合体するなど、linkのような加工が不要なので
都度cacheから読み込むだけで十分
commitIdなどの更新がむずい
script側で作ったresponseはisTrusted: falseを組み込んでおくか
websocket経由でやるには、コードを書くのに時間がかかりそう
intefaces
Pages.load
pageを取得する
loadのタイミング毎にcache APIで問い合わせる
fetchは強制reloadされない限り叩かない
Pages.subscribe
更新される度に呼び出す
各タブは、各タブでloadされたpageのresponseのみ取り込む
他は無視する
2024-11-29 やること
✅️.values()を減らす
project nameはcase insensitiveで、一意なキーにしにくい
✅️本番DBに戻す
2024-11-29
DB nameを本番用に戻し忘れてた
00:09:09 更新情報がないときはemitChangeしない
00:23:53 実装完了。問題なさげ
2024-11-28
23:46 jsr移行時のデータ構造変更で、バグが有ることがわかった
データ更新周りのバグは少し前に直した
2024-11-28 23:55:24 messageが別のタブに送信される条件がわからないtakker.icon
chromeだと、タブがinactiveになっているとmessageが送信されない?
windowを並列に開いてもだめそう
00:01:00 適当なサイトで試したらうまく動いた
タブが隠れていても関係ない
Mapなど、複雑なobjectも転送できる
ということは、takker.iconのコード側の問題かtakker.icon
正常にpostMessageされているか確かめよう
00:03:24 単にsubscribeを実行してないだけだった
そりゃ通知されないぜ
2024-08-02
2023-09-04
12:36:24 mod.tsからsetDebugModeをexportした
11:33:18 cacheから読み込む機能も作ろうとしたけど、どうしようかな
全部読み込めなかったら更新を中断するようプログラムしたいが……やってる暇あるかな?
コードを見て、すぐできそうか判断しよう
今度にしよう
11:13:05 subscribeを別ファイルに分離した
2023-08-15
機能毎にファイルを分けて整理した
自動更新はまだ実装していない
とりあえずここでreleaseしようと思う
2023-08-14
2023-08-13
08:46:48 名前を「scrapbox-links-db」から「scrapbox-storage」に変更
一般名すぎるかな
まあいいや
code:mod.ts
export * from "jsr:@takker/cosense-storage@0.1";