Class: Rocksky::Agent
- Inherits:
-
Object
- Object
- Rocksky::Agent
- Defined in:
- lib/rocksky.rb
Overview
---- authenticated agent ----
Records are passed as Hashes with camelCase keys (title, artist, album, albumArtist, durationMs, …), matching the wire record shape.
Class Method Summary collapse
-
.login(session_path, identifier, password, appview: nil, dedup_path: nil) ⇒ Object
dedup_pathenables the local dedup index (needed for #sync_repo / #hydrate_from_jetstream).
Instance Method Summary collapse
-
#close ⇒ Object
Release the native handle.
- #follow(did) ⇒ Object
-
#hydrate_from_jetstream ⇒ Object
Keep the local dedup index hydrated from Jetstream in the background.
-
#initialize(ptr) ⇒ Agent
constructor
A new instance of Agent.
- #like(uri, cid) ⇒ Object
- #refresh_session ⇒ Object
-
#reply_shout_with_gif(subject_uri, subject_cid, parent_uri, parent_cid, message: nil, gif: nil) ⇒ Object
Reply to a shout with an optional GIF/sticker/clip attachment.
-
#scrobble(track) ⇒ Object
Scrobble a play; fans out to artist/album/song/scrobble.
-
#scrobble_match(input) ⇒ Object
Scrobble from just a title + artist (album optional, plus optional mb_id / isrc anchors): resolve full metadata via matchSong, then fan out.
- #shout(subject_uri, subject_cid, message) ⇒ Object
-
#shout_with_gif(subject_uri, subject_cid, message: nil, gif: nil) ⇒ Object
Post a shout with an optional GIF/sticker/clip attachment.
-
#sync_repo ⇒ Object
Download the caller's repo and (re)build the local dedup index (needs a dedup_path at login).
Constructor Details
#initialize(ptr) ⇒ Agent
Returns a new instance of Agent.
187 188 189 |
# File 'lib/rocksky.rb', line 187 def initialize(ptr) @ptr = ptr end |
Class Method Details
.login(session_path, identifier, password, appview: nil, dedup_path: nil) ⇒ Object
dedup_path enables the local dedup index (needed for #sync_repo /
#hydrate_from_jetstream).
180 181 182 183 184 185 |
# File 'lib/rocksky.rb', line 180 def self.login(session_path, identifier, password, appview: nil, dedup_path: nil) ptr = C.rocksky_agent_login(session_path, identifier, password, appview.to_s, dedup_path.to_s) raise Error, (Rocksky.take_string(C.rocksky_last_error()) || "login failed") if ptr.null? new(ptr) end |
Instance Method Details
#close ⇒ Object
Release the native handle. The agent is unusable afterwards.
253 254 255 256 257 258 |
# File 'lib/rocksky.rb', line 253 def close return if @ptr.null? C.rocksky_agent_free(@ptr) @ptr = Fiddle::Pointer.new(0) end |
#follow(did) ⇒ Object
222 223 224 |
# File 'lib/rocksky.rb', line 222 def follow(did) Rocksky.unwrap(C.rocksky_agent_follow(@ptr, did)) end |
#hydrate_from_jetstream ⇒ Object
Keep the local dedup index hydrated from Jetstream in the background.
214 215 216 |
# File 'lib/rocksky.rb', line 214 def hydrate_from_jetstream Rocksky.unwrap(C.rocksky_agent_hydrate_from_jetstream(@ptr)) end |
#like(uri, cid) ⇒ Object
218 219 220 |
# File 'lib/rocksky.rb', line 218 def like(uri, cid) Rocksky.unwrap(C.rocksky_agent_like(@ptr, uri, cid)) end |
#refresh_session ⇒ Object
248 249 250 |
# File 'lib/rocksky.rb', line 248 def refresh_session Rocksky.unwrap(C.rocksky_agent_refresh_session(@ptr)) end |
#reply_shout_with_gif(subject_uri, subject_cid, parent_uri, parent_cid, message: nil, gif: nil) ⇒ Object
Reply to a shout with an optional GIF/sticker/clip attachment. Semantics match #shout_with_gif, plus a parent strong-ref (+parent_uri+/+parent_cid+).
241 242 243 244 245 246 |
# File 'lib/rocksky.rb', line 241 def reply_shout_with_gif(subject_uri, subject_cid, parent_uri, parent_cid, message: nil, gif: nil) Rocksky.unwrap(C.rocksky_agent_reply_shout_with_gif( @ptr, subject_uri, subject_cid, parent_uri, parent_cid, .to_s, gif ? JSON.generate(gif) : "" )) end |
#scrobble(track) ⇒ Object
Scrobble a play; fans out to artist/album/song/scrobble. Returns the URIs.
192 193 194 |
# File 'lib/rocksky.rb', line 192 def scrobble(track) Rocksky.unwrap(C.rocksky_agent_scrobble(@ptr, JSON.generate(track))) end |
#scrobble_match(input) ⇒ Object
Scrobble from just a title + artist (album optional, plus optional mb_id /
isrc anchors): resolve full metadata via matchSong, then fan out.
Scrobble from just a title + artist. input is a Hash with camelCase keys:
required "title"/"artist"; optional "album", "mbId", "isrc" (match anchors),
and "timestamp" (scrobbled-at Unix seconds, default now).
agent.scrobble_match("title" => "Chaser", "artist" => "Calibro 35")
203 204 205 |
# File 'lib/rocksky.rb', line 203 def scrobble_match(input) Rocksky.unwrap(C.rocksky_agent_scrobble_match(@ptr, JSON.generate(input))) end |
#shout(subject_uri, subject_cid, message) ⇒ Object
226 227 228 |
# File 'lib/rocksky.rb', line 226 def shout(subject_uri, subject_cid, ) Rocksky.unwrap(C.rocksky_agent_shout(@ptr, subject_uri, subject_cid, )) end |
#shout_with_gif(subject_uri, subject_cid, message: nil, gif: nil) ⇒ Object
Post a shout with an optional GIF/sticker/clip attachment. Pass at least
one of message / gif. gif is a Hash with camelCase keys ("url"
required, plus "previewUrl", "alt", "width", "height").
233 234 235 236 237 |
# File 'lib/rocksky.rb', line 233 def shout_with_gif(subject_uri, subject_cid, message: nil, gif: nil) Rocksky.unwrap(C.rocksky_agent_shout_with_gif( @ptr, subject_uri, subject_cid, .to_s, gif ? JSON.generate(gif) : "" )) end |