class VkMusic::Audio
Class representing VK audio
Attributes
@return [String] name of artist
@return [Integer] duration of track in seconds
@return [String] title of song
@return [String?] encoded URL which can be manually decoded if client ID is known
Public Class Methods
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
@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
@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
@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
@return [String] pretty-printed audio name
# File lib/vk_music/audio.rb, line 104 def to_s "#{@artist} - #{@title} [#{@duration}s]" end
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
@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
@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
@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
@return [Boolean] whether URL saved into url attribute
# File lib/vk_music/audio.rb, line 70 def url_cached? !!@url_decoded end