Scrapboxに通知ボックスを実装するUserScript
from 2022/09/04
Scrapboxに通知ボックスを実装するUserScript
プロジェクト内のページに通知を受け取るメニューを追加する
ここから通知を受け取りたいページを登録する
cookieに(登録した)ページの最終閲覧日時を記録する
lastAccessedからとれるtakker.icon
でしたらどれを登録したかのみを記録すれば良さそうですねMijikko.icon
プロジェクトを開いた時点で毎回ページの最終更新日時を確認し、最終閲覧日時より新しければScrapboxの右上のメニューボタンの周りを光らせる
Scrapboxって見たいと思ったページを探して見るのには向いているけれど、同じページを継続的に見るのには向いてないよなぁって最近思ってるMijikko.icon
2022/08/30#630df15f7838e30000aa87a2
これを解決できないかなって
ただ、デバイスにリアルタイムに通知を送るようにすると普通にうざいので、あくまでScrapboxを開いた時に確認しやすくする程度に留めた方がよさそう
Date modified by (icon)との違いがわからなかったtakker.icon
特定のページの未読だけ検知したい、ということだろうか?
そういうことですMijikko.icon
それに加えて、自分が知らない更新があることに気づけるようにしたいということです
@ページとか、その他自分が頻繁にwatchしているページとか
ピン留めでどうにかならないかとも最初は思ったのですが、ページカードのサムネイルって更新があったかどうかはわかりにくいので
personal-pinと↓を組み合わせればわかりやすくなりそう?takker.icon
未読のpinの色を変える
わりとアリMijikko.icon*3
code:今日の日記の更新取得サンプル.js
import { detect } from "./detectUnread.js";
/** @type {(date: Date) => string} */
const format = (date) =>
${date.getFullYear()}/${${date.getMonth()}.padStart(2, "0")}/${${date.getDate()}.padStart(2, "0")};
// 10分ごとにpolling
setInterval(
async () => {
const project = "villagepump";
const title = format(new Date());
const result = await detect(project, title);
if (!result.ok) return;
if (!result.value) return;
alert("今日の日記が更新されたよ");
},
10 * 60 * 1000,
);
code:detectUnread.js
/**
*
* @param {string} project
* @param {string} title
* @return {Promise<{ ok: false; value: unknown; } | { ok: true, value: boolean; }>}
*/
export const detect = async (project, title) => {
const res = await fetch(
/api/pages/${project}/${encodeURIComponent(title)}
);
if (!res.ok) return {
ok: false,
value: await res.json(),
};
const { lastAccessed, updated } = await res.json();
return { ok: true, value: lastAccessed < updated };
};
あざす!Mijikko.icon
これを自分好みにいじれば、わりと簡単に作れそう(死亡フラグ)