Class: ListenBrainz::Listen

Inherits:
Base
  • Object
show all
Defined in:
lib/listenbrainz/models/listen.rb

Overview

Model class for listens.

Defined Under Namespace

Classes: Payload, TrackMetadata

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#as_json

Instance Attribute Details

#inserted_atTime? (readonly)

Returns:

  • (Time, nil)


113
# File 'lib/listenbrainz/models/listen.rb', line 113

attribute? :inserted_at, Types::Timestamp

#listened_atTime? (readonly)

Returns:

  • (Time, nil)


117
# File 'lib/listenbrainz/models/listen.rb', line 117

attribute? :listened_at, Types::Timestamp

#recording_msidString? (readonly)

Returns:

  • (String, nil)


121
# File 'lib/listenbrainz/models/listen.rb', line 121

attribute? :recording_msid, Types::String

#track_metadataTrackMetadata (readonly)

Returns:



188
# File 'lib/listenbrainz/models/listen.rb', line 188

attribute :track_metadata, TrackMetadata

Class Method Details

.get(username = ListenBrainz.client.username, count: nil, before: nil, after: nil) ⇒ Payload

Retrieves listens for a given user.

Parameters:

  • username (String) (defaults to: ListenBrainz.client.username)
  • count (Integer, nil) (defaults to: nil)

    Number of listens to retrieve

  • before (Time, Integer, nil) (defaults to: nil)

    Only retrieve listens before this time

  • after (Time, Integer, nil) (defaults to: nil)

    Only retrieve listens after this time

Returns:



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/listenbrainz/models/listen.rb', line 18

def self.get(
  username = ListenBrainz.client.username, count: nil, before: nil,
  after: nil
)
  max_ts = before && Types::Timestamp[before].to_i
  min_ts = after && Types::Timestamp[after].to_i
  params = { count:, min_ts:, max_ts: }.compact

  ListenBrainz.client.query(:get, "1/user/#{username}/listens", params:)
    .fetch(:payload).then { Payload.new(_1) }
end

.now_playing(username = ListenBrainz.client.username) ⇒ Payload

Retrieves the “now playing” listens for a given user.

Parameters:

  • username (String) (defaults to: ListenBrainz.client.username)

Returns:



36
37
38
39
# File 'lib/listenbrainz/models/listen.rb', line 36

def self.now_playing(username = ListenBrainz.client.username)
  ListenBrainz.client.query(:get, "1/user/#{username}/playing-now")
    .fetch(:payload).then { Payload.new(_1) }
end

.submit(listens, mode: :import) ⇒ Void

Imports a batch of listens.

Parameters:

  • listens (Listen, Array<Listen>)
  • mode (Symbol) (defaults to: :import)

    single, playing_now or import

Returns:

  • (Void)


48
49
50
51
# File 'lib/listenbrainz/models/listen.rb', line 48

def self.submit(listens, mode: :import)
  ListenBrainz.client.query(:post, '1/submit-listens',
    json: { listen_type: mode, payload: Array(listens).map(&:as_json) })
end

Instance Method Details

#submit(mode: :single) ⇒ Void

Submits the listen to ListenBrainz.

Parameters:

  • mode (Symbol) (defaults to: :single)

    single or playing_now

Returns:

  • (Void)


59
60
61
# File 'lib/listenbrainz/models/listen.rb', line 59

def submit(mode: :single)
  self.class.submit(self, mode:)
end