From b96d0170af4831f811d5a636ea35a89326421cbd Mon Sep 17 00:00:00 2001 From: hitalin Date: Tue, 4 Aug 2026 08:37:22 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20notecli=20=E3=82=92=20V6=20(=E5=AE=9F?= =?UTF-8?q?=E4=BD=93/=E6=89=80=E5=B1=9E=E5=88=86=E9=9B=A2)=20=E3=81=AB=20b?= =?UTF-8?q?ump?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit notecli#30 の V6 migration により旧 rev のままでは volume 共有の notecli.db が開けなくなるため追随する。 - subscribe_timeline(TimelineType) → subscribe_notes(TimelineKey) - FrontendEmitter の typed StreamEvent 化に追随 (ChannelEmitter は kind()/payload_value() で従来の (名前, JSON) チャネルへ変換 — parse_event / catch-up 再注入の経路は不変) - NoteDeckError::Api の api_code フィールド追加にテスト fixture を追随 Co-Authored-By: Claude Opus 4.8 --- Cargo.toml | 2 +- src/bot.rs | 6 +++--- src/event.rs | 11 ++++++++--- src/gate.rs | 2 ++ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d68ef5e..deda4e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ keyring = ["notecli/keyring"] [dependencies] # semver 未安定のため rev ピン。更新は意図的に rev を進める (ARCHITECTURE.md §10) -notecli = { git = "https://github.com/notedeck-dev/notecli.git", rev = "f1931af84a384c749efa2cd5b9aa478d22d19393", default-features = false } +notecli = { git = "https://github.com/notedeck-dev/notecli.git", rev = "1f68a91a52894c9950bdb107faae61b346f6e260", default-features = false } tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal", "sync", "time"] } serde = { version = "1", features = ["derive"] } serde_json = "1" diff --git a/src/bot.rs b/src/bot.rs index c274f37..b2e04fb 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -9,7 +9,7 @@ use std::sync::Arc; use notecli::api::MisskeyClient; use notecli::db::Database; use notecli::event_bus::EventBus; -use notecli::models::{Account, NormalizedNote, NormalizedUser, TimelineType}; +use notecli::models::{Account, NormalizedNote, NormalizedUser, TimelineKey}; use notecli::streaming::StreamingManager; use serde_json::Value; use tokio::sync::mpsc; @@ -246,9 +246,9 @@ impl Bot { std::collections::HashMap::new(); for (timeline, handler) in &self.on_note { let sub_id = manager - .subscribe_timeline( + .subscribe_notes( &creds.account_id, - TimelineType::new(timeline.as_str()), + TimelineKey::parse(timeline.as_str())?, None, ) .await?; diff --git a/src/event.rs b/src/event.rs index 1d34f30..a789de6 100644 --- a/src/event.rs +++ b/src/event.rs @@ -4,7 +4,7 @@ //! ここでは emit された JSON payload から必要な部分だけを取り出す。 use notecli::models::{NormalizedNote, NormalizedNotification}; -use notecli::streaming::FrontendEmitter; +use notecli::streaming::{FrontendEmitter, StreamEvent}; use serde_json::Value; use tokio::sync::mpsc; @@ -21,9 +21,14 @@ impl ChannelEmitter { } impl FrontendEmitter for ChannelEmitter { - fn emit(&self, event: &str, payload: Value) { + fn emit(&self, event: StreamEvent) { + // typed StreamEvent を (イベント名, payload JSON) に落として流す。 + // parse_event / catch-up 再注入 (stream-mention + Value) の経路を + // そのまま維持するため、名前と payload は notecli の正本メソッドから取る。 // 受信側 drop 後の send 失敗は shutdown 中なので無視してよい - let _ = self.0.send((event.to_string(), payload)); + let _ = self + .0 + .send((event.kind().to_string(), event.payload_value())); } } diff --git a/src/gate.rs b/src/gate.rs index f463b3f..f5f03b4 100644 --- a/src/gate.rs +++ b/src/gate.rs @@ -75,6 +75,7 @@ mod tests { NoteDeckError::Api { endpoint: "notes/create".to_string(), status: 429, + api_code: Some("RATE_LIMIT_EXCEEDED".to_string()), message: "notes/create: RATE_LIMIT_EXCEEDED: Rate limit exceeded".to_string(), } } @@ -83,6 +84,7 @@ mod tests { NoteDeckError::Api { endpoint: "notes/create".to_string(), status: 400, + api_code: Some("NO_SUCH_NOTE".to_string()), message: "notes/create: NO_SUCH_NOTE".to_string(), } }