class VkMusic::Audio

Class representing VK audio

Attributes

artist[R]

@return [String] name of artist

client_id[R]
duration[R]

@return [Integer] duration of track in seconds

id[R]
owner_id[R]
secret1[R]
secret2[R]
title[R]

@return [String] title of song

url_decoded[R]
url_encoded[R]

@return [String?] encoded URL which can be manually decoded if client ID is known

Public Class Methods

new(id: nil, owner_id: nil, secret1: nil, secret2: nil, artist: '', title: '', duration: 0, url_encoded: nil, url: nil, client_id: nil) click to toggle source

Initialize new audio @param id [Integer, nil] @param owner_id [Integer, nil] @param secret1 [String, nil] @param secret2 [String, nil] @param artist [String] @param title [String] @param duration [Integer] @param url_encoded [String, nil] @param url [String, nil] decoded URL @param client_id [Integer, nil]

# File lib/vk_music/audio.rb, line 26
def initialize(id: nil, owner_id: nil, secret1: nil, secret2: nil,
               artist: '', title: '', duration: 0,
               url_encoded: nil, url: nil, client_id: nil)
  @id = id
  @owner_id = owner_id
  @secret1 = secret1
  @secret2 = secret2
  @artist = artist.to_s.strip
  @title = title.to_s.strip
  @duration = duration
  @url_encoded = url_encoded
  @url_decoded = url
  @client_id = client_id
end

Public Instance Methods

full_id() click to toggle source

@return [String?]

# File lib/vk_music/audio.rb, line 63
def full_id
  return unless @id && @owner_id && @secret1 && @secret2

  "#{@owner_id}_#{@id}_#{@secret1}_#{@secret2}"
end
id_matches?(data) click to toggle source

@param [Audio, Array(owner_id, audio_id, secret1, secret2), String] @return [Boolean] id-based comparison

# File lib/vk_music/audio.rb, line 92
def id_matches?(data)
  data_owner_id, data_id = case data
  when Audio then [data.owner_id, data.id]
  when Array then data.first(2).reverse.map(&:to_i)
  when String then data.split('_').first(2).map(&:to_i)
  else return false
  end

  owner_id == data_owner_id && id == data_id
end
like?(audio) click to toggle source

@param audio [Audio] @return [Boolean] whether artist, title and duration are same

# File lib/vk_music/audio.rb, line 86
def like?(audio)
  artist == audio.artist && title == audio.title && duration == audio.duration
end
to_s() click to toggle source

@return [String] pretty-printed audio name

# File lib/vk_music/audio.rb, line 104
def to_s
  "#{@artist} - #{@title} [#{@duration}s]"
end
update(audio) click to toggle source

Update audio data from another one

# File lib/vk_music/audio.rb, line 51
def update(audio)
  VkMusic.log.warn('Audio') { "Performing update of #{self} from #{audio}" } unless like?(audio)
  @id = audio.id
  @owner_id = audio.owner_id
  @secret1 = audio.secret1
  @secret2 = audio.secret2
  @url_encoded = audio.url_encoded
  @url_decoded = audio.url_decoded
  @client_id = audio.client_id
end
url() click to toggle source

@return [String?]

# File lib/vk_music/audio.rb, line 42
def url
  return @url_decoded if @url_decoded

  return unless @url_encoded && @client_id

  Utility::LinkDecoder.call(@url_encoded, @client_id)
end
url_accessable?() click to toggle source

@return [Boolean] whether it's possible to get download URL with {Client#from_id}

# File lib/vk_music/audio.rb, line 80
def url_accessable?
  !!full_id
end
url_available?() click to toggle source

@return [Boolean] whether able to get download URL without web requests

# File lib/vk_music/audio.rb, line 75
def url_available?
  url_cached? || !!(@url_encoded && @client_id)
end
url_cached?() click to toggle source

@return [Boolean] whether URL saved into url attribute

# File lib/vk_music/audio.rb, line 70
def url_cached?
  !!@url_decoded
end