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(), } }