hallon 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rspec +1 -1
- data/CHANGELOG.md +12 -1
- data/README.markdown +13 -5
- data/Rakefile +23 -74
- data/examples/example_support.rb +2 -0
- data/hallon.gemspec +1 -1
- data/lib/hallon.rb +1 -6
- data/lib/hallon/album.rb +4 -4
- data/lib/hallon/album_browse.rb +6 -6
- data/lib/hallon/artist.rb +3 -3
- data/lib/hallon/artist_browse.rb +9 -9
- data/lib/hallon/audio_queue.rb +2 -1
- data/lib/hallon/base.rb +10 -10
- data/lib/hallon/enumerator.rb +3 -3
- data/lib/hallon/ext/spotify.rb +1 -47
- data/lib/hallon/image.rb +4 -4
- data/lib/hallon/link.rb +4 -4
- data/lib/hallon/linkable.rb +10 -10
- data/lib/hallon/observable/playlist.rb +2 -3
- data/lib/hallon/observable/playlist_container.rb +3 -12
- data/lib/hallon/player.rb +2 -2
- data/lib/hallon/playlist.rb +6 -6
- data/lib/hallon/playlist_container.rb +8 -8
- data/lib/hallon/scrobbler.rb +4 -4
- data/lib/hallon/search.rb +20 -5
- data/lib/hallon/session.rb +18 -17
- data/lib/hallon/toplist.rb +4 -4
- data/lib/hallon/track.rb +5 -5
- data/lib/hallon/user.rb +7 -7
- data/lib/hallon/version.rb +1 -1
- data/spec/hallon/album_browse_spec.rb +1 -1
- data/spec/hallon/artist_browse_spec.rb +1 -1
- data/spec/hallon/base_spec.rb +6 -3
- data/spec/hallon/enumerator_spec.rb +2 -2
- data/spec/hallon/hallon_spec.rb +0 -4
- data/spec/hallon/link_spec.rb +1 -1
- data/spec/hallon/linkable_spec.rb +4 -4
- data/spec/hallon/observable/playlist_container_spec.rb +3 -3
- data/spec/hallon/observable/playlist_spec.rb +1 -1
- data/spec/hallon/player_spec.rb +9 -9
- data/spec/hallon/playlist_container_spec.rb +2 -2
- data/spec/hallon/playlist_spec.rb +8 -8
- data/spec/hallon/scrobbler_spec.rb +8 -7
- data/spec/hallon/search_spec.rb +3 -3
- data/spec/hallon/session_spec.rb +10 -10
- data/spec/hallon/toplist_spec.rb +4 -4
- data/spec/hallon/track_spec.rb +6 -6
- data/spec/hallon/user_post_spec.rb +1 -1
- data/spec/hallon/user_spec.rb +1 -1
- data/spec/mockspotify.rb +36 -42
- data/spec/mockspotify/mockspotify_spec.rb +15 -15
- data/spec/spec_helper.rb +25 -21
- data/spec/support/album_mocks.rb +4 -4
- data/spec/support/artist_mocks.rb +5 -5
- data/spec/support/image_mocks.rb +4 -4
- data/spec/support/playlist_container_mocks.rb +4 -4
- data/spec/support/playlist_mocks.rb +6 -6
- data/spec/support/search_mocks.rb +2 -2
- data/spec/support/session_mocks.rb +1 -1
- data/spec/support/shared_for_callbacks.rb +1 -1
- data/spec/support/shared_for_linkable_objects.rb +3 -2
- data/spec/support/toplist_mocks.rb +2 -2
- data/spec/support/track_mocks.rb +4 -4
- data/spec/support/user_mocks.rb +2 -2
- metadata +5 -5
data/lib/hallon/enumerator.rb
CHANGED
@@ -8,7 +8,7 @@ module Hallon
|
|
8
8
|
class Enumerator
|
9
9
|
include Enumerable
|
10
10
|
|
11
|
-
# @return [Spotify::
|
11
|
+
# @return [Spotify::ManagedPointer]
|
12
12
|
attr_reader :pointer
|
13
13
|
|
14
14
|
# @macro [attach] size
|
@@ -26,7 +26,7 @@ module Hallon
|
|
26
26
|
end
|
27
27
|
|
28
28
|
# @example modifying result with a block
|
29
|
-
# item :playlist_track
|
29
|
+
# item :playlist_track do |track|
|
30
30
|
# Track.from(track)
|
31
31
|
# end
|
32
32
|
#
|
@@ -35,7 +35,7 @@ module Hallon
|
|
35
35
|
# @yield [item, index, pointer] item from calling Spotify#item_method
|
36
36
|
# @yieldparam item
|
37
37
|
# @yieldparam [Integer] index
|
38
|
-
# @yieldparam [Spotify::
|
38
|
+
# @yieldparam [Spotify::ManagedPointer] pointer
|
39
39
|
#
|
40
40
|
# @macro [attach] item
|
41
41
|
# @method at(index)
|
data/lib/hallon/ext/spotify.rb
CHANGED
@@ -2,54 +2,8 @@
|
|
2
2
|
|
3
3
|
# Extensions to the Spotify gem.
|
4
4
|
#
|
5
|
-
# @see https://github.com/Burgestrand/
|
5
|
+
# @see https://github.com/Burgestrand/spotify
|
6
6
|
module Spotify
|
7
|
-
# Extensions to SessionConfig, allowing more sensible configuration names.
|
8
|
-
SessionConfig.class_eval do
|
9
|
-
[:cache_location, :settings_location, :user_agent, :device_id, :proxy, :proxy_username, :proxy_password, :tracefile].each do |field|
|
10
|
-
method = field.to_s.gsub('location', 'path')
|
11
|
-
|
12
|
-
define_method(:"#{method}") { self[field].read_string }
|
13
|
-
define_method(:"#{method}=") do |string|
|
14
|
-
string &&= FFI::MemoryPointer.from_string(string)
|
15
|
-
self[field] = string
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# @note Also sets application_key_size.
|
20
|
-
# @param [#to_s]
|
21
|
-
def application_key=(appkey)
|
22
|
-
self[:application_key] = FFI::MemoryPointer.from_string(appkey)
|
23
|
-
self[:application_key_size] = appkey.bytesize
|
24
|
-
end
|
25
|
-
|
26
|
-
# Allows setting compress_playlists using a boolean.
|
27
|
-
#
|
28
|
-
# @param [Boolean]
|
29
|
-
# @return [Boolean]
|
30
|
-
def compress_playlists=(bool)
|
31
|
-
self[:compress_playlists] = !! bool
|
32
|
-
end
|
33
|
-
|
34
|
-
# Allows setting initially_unload_playlists using a boolean.
|
35
|
-
#
|
36
|
-
# @note Set to the inverse of the requested value.
|
37
|
-
# @param [Boolean]
|
38
|
-
# @return [Boolean]
|
39
|
-
def load_playlists=(bool)
|
40
|
-
self[:initially_unload_playlists] = ! bool
|
41
|
-
end
|
42
|
-
|
43
|
-
# Allows setting dont_save_metadata_for_playlists using a boolean.
|
44
|
-
#
|
45
|
-
# @note Set to the inverse of the requested value.
|
46
|
-
# @param [Boolean]
|
47
|
-
# @return [Boolean]
|
48
|
-
def cache_playlist_metadata=(bool)
|
49
|
-
self[:dont_save_metadata_for_playlists] = ! bool
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
7
|
# Makes it easier binding callbacks safely to callback structs.
|
54
8
|
#
|
55
9
|
# @see add
|
data/lib/hallon/image.rb
CHANGED
@@ -7,7 +7,7 @@ module Hallon
|
|
7
7
|
include Linkable
|
8
8
|
|
9
9
|
from_link :as_image do |link|
|
10
|
-
Spotify.image_create_from_link
|
10
|
+
Spotify.image_create_from_link(session.pointer, link)
|
11
11
|
end
|
12
12
|
|
13
13
|
to_link :from_image
|
@@ -31,14 +31,14 @@ module Hallon
|
|
31
31
|
# @example from an image id
|
32
32
|
# image = Hallon::Image.new("3ad93423add99766e02d563605c6e76ed2b0e450")
|
33
33
|
#
|
34
|
-
# @param [String, Link, Spotify::
|
34
|
+
# @param [String, Link, Spotify::Image] link link or image id
|
35
35
|
def initialize(link)
|
36
36
|
if link.respond_to?(:=~) and link =~ %r~(?:image[:/]|\A)([a-fA-F0-9]{40})\z~
|
37
37
|
link = to_id($1)
|
38
38
|
end
|
39
39
|
|
40
|
-
@pointer = to_pointer(link,
|
41
|
-
Spotify.image_create
|
40
|
+
@pointer = to_pointer(link, Spotify::Image) do
|
41
|
+
Spotify.image_create(session.pointer, link)
|
42
42
|
end
|
43
43
|
|
44
44
|
subscribe_for_callbacks do |callbacks|
|
data/lib/hallon/link.rb
CHANGED
@@ -19,7 +19,7 @@ module Hallon
|
|
19
19
|
return false
|
20
20
|
end
|
21
21
|
|
22
|
-
link = Spotify.link_create_from_string
|
22
|
+
link = Spotify.link_create_from_string(spotify_uri.to_s)
|
23
23
|
not link.null?
|
24
24
|
end
|
25
25
|
|
@@ -38,8 +38,8 @@ module Hallon
|
|
38
38
|
uri = uri.to_link.pointer
|
39
39
|
end
|
40
40
|
|
41
|
-
@pointer = to_pointer(uri,
|
42
|
-
Spotify.link_create_from_string
|
41
|
+
@pointer = to_pointer(uri, Spotify::Link) do
|
42
|
+
Spotify.link_create_from_string(uri.to_str)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -87,7 +87,7 @@ module Hallon
|
|
87
87
|
end
|
88
88
|
|
89
89
|
# @param [Symbol] expected_type if given, makes sure the link is of this type
|
90
|
-
# @return [Spotify::
|
90
|
+
# @return [Spotify::ManagedPointer] the underlying Spotify::ManagedPointer.
|
91
91
|
# @raise ArgumentError if `type` is given and does not match link {#type}
|
92
92
|
def pointer(expected_type = nil)
|
93
93
|
unless type == expected_type or (expected_type == :playlist and type == :starred)
|
data/lib/hallon/linkable.rb
CHANGED
@@ -26,11 +26,11 @@ module Hallon
|
|
26
26
|
# from_link :as_album # => Spotify.link_as_album(pointer, *args)
|
27
27
|
# # ^ is roughly equivalent to:
|
28
28
|
# def from_link(link, *args)
|
29
|
-
# unless
|
29
|
+
# unless link.is_a?(Spotify::Link)
|
30
30
|
# link = Link.new(link).pointer(:album)
|
31
31
|
# end
|
32
32
|
#
|
33
|
-
# Spotify.link_as_album
|
33
|
+
# Spotify.link_as_album(link)
|
34
34
|
# end
|
35
35
|
# end
|
36
36
|
#
|
@@ -46,30 +46,30 @@ module Hallon
|
|
46
46
|
# include Linkable
|
47
47
|
#
|
48
48
|
# from_link :profile do |pointer|
|
49
|
-
# Spotify.link_as_user
|
49
|
+
# Spotify.link_as_user(pointer)
|
50
50
|
# end
|
51
51
|
# # ^ is roughly equivalent to:
|
52
52
|
# def from_link(link, *args)
|
53
|
-
# unless
|
53
|
+
# unless link.is_a?(Spotify::Link)
|
54
54
|
# link = Link.new(link).pointer(:profile)
|
55
55
|
# end
|
56
56
|
#
|
57
|
-
# Spotify.link_as_user
|
57
|
+
# Spotify.link_as_user(link)
|
58
58
|
# end
|
59
59
|
# end
|
60
60
|
#
|
61
61
|
# @param [#to_s] type link type
|
62
62
|
# @yield [link, *args] called when conversion is needed from Link pointer
|
63
|
-
# @yieldparam [Spotify::
|
63
|
+
# @yieldparam [Spotify::Link] link
|
64
64
|
# @yieldparam *args any extra arguments given to `#from_link`
|
65
65
|
#
|
66
66
|
# @note Private API. You probably do not need to care about this method.
|
67
67
|
def from_link(as_object, &block)
|
68
|
-
block ||= Spotify.method(:"link_#{as_object}
|
68
|
+
block ||= Spotify.method(:"link_#{as_object}")
|
69
69
|
type = as_object.to_s[/^(as_)?([^_]+)/, 2].to_sym
|
70
70
|
|
71
71
|
define_method(:from_link) do |link, *args|
|
72
|
-
unless
|
72
|
+
unless link.is_a?(Spotify::Link)
|
73
73
|
link = Link.new(link).pointer(type)
|
74
74
|
end
|
75
75
|
|
@@ -88,7 +88,7 @@ module Hallon
|
|
88
88
|
# to_link :from_artist
|
89
89
|
# # ^ is the same as:
|
90
90
|
# def to_link(*args)
|
91
|
-
# link = Spotify.link_create_from_artist
|
91
|
+
# link = Spotify.link_create_from_artist(pointer, *args)
|
92
92
|
# Link.new(link)
|
93
93
|
# end
|
94
94
|
# end
|
@@ -97,7 +97,7 @@ module Hallon
|
|
97
97
|
# @return [Link, nil]
|
98
98
|
def to_link(cmethod)
|
99
99
|
define_method(:to_link) do |*args|
|
100
|
-
link = Spotify.__send__(:"link_create_#{cmethod}
|
100
|
+
link = Spotify.__send__(:"link_create_#{cmethod}", pointer, *args)
|
101
101
|
Link.from(link)
|
102
102
|
end
|
103
103
|
end
|
@@ -27,7 +27,7 @@ module Hallon::Observable
|
|
27
27
|
# @yieldparam [Integer] position
|
28
28
|
def tracks_added_callback(pointer, tracks, num_tracks, position, userdata)
|
29
29
|
tracks_ary = tracks.read_array_of_pointer(num_tracks).map do |track|
|
30
|
-
ptr = Spotify::
|
30
|
+
ptr = Spotify::Track.retaining_class.new(track)
|
31
31
|
Hallon::Track.new(ptr)
|
32
32
|
end
|
33
33
|
|
@@ -109,8 +109,7 @@ module Hallon::Observable
|
|
109
109
|
# @yieldparam [User] user
|
110
110
|
# @yieldparam [Time] created_at
|
111
111
|
def track_created_changed_callback(pointer, position, user, created_at, userdata)
|
112
|
-
|
113
|
-
trigger(pointer, :track_created_changed, position, Hallon::User.new(user), Time.at(created_at))
|
112
|
+
trigger(pointer, :track_created_changed, position, Hallon::User.from(user), Time.at(created_at))
|
114
113
|
end
|
115
114
|
|
116
115
|
# @example listening to this event
|
@@ -26,7 +26,7 @@ module Hallon::Observable
|
|
26
26
|
# @yieldparam [Playlist] playlist
|
27
27
|
# @yieldparam [Integer] position
|
28
28
|
def playlist_added_callback(pointer, playlist, position, userdata)
|
29
|
-
trigger(pointer, :playlist_added,
|
29
|
+
trigger(pointer, :playlist_added, Hallon::Playlist.from(playlist), position)
|
30
30
|
end
|
31
31
|
|
32
32
|
# @example listening to this event
|
@@ -38,7 +38,7 @@ module Hallon::Observable
|
|
38
38
|
# @yieldparam [Playlist] playlist
|
39
39
|
# @yieldparam [Integer] position
|
40
40
|
def playlist_removed_callback(pointer, playlist, position, userdata)
|
41
|
-
trigger(pointer, :playlist_removed,
|
41
|
+
trigger(pointer, :playlist_removed, Hallon::Playlist.from(playlist), position)
|
42
42
|
end
|
43
43
|
|
44
44
|
# @example listening to this event
|
@@ -51,7 +51,7 @@ module Hallon::Observable
|
|
51
51
|
# @yieldparam [Integer] position
|
52
52
|
# @yieldparam [Integer] new_position
|
53
53
|
def playlist_moved_callback(pointer, playlist, position, new_position, userdata)
|
54
|
-
trigger(pointer, :playlist_moved,
|
54
|
+
trigger(pointer, :playlist_moved, Hallon::Playlist.from(playlist), position, new_position)
|
55
55
|
end
|
56
56
|
|
57
57
|
# @example listening to this event
|
@@ -63,14 +63,5 @@ module Hallon::Observable
|
|
63
63
|
def container_loaded_callback(pointer, userdata)
|
64
64
|
trigger(pointer, :container_loaded)
|
65
65
|
end
|
66
|
-
|
67
|
-
protected
|
68
|
-
|
69
|
-
# @param [Spotify::Pointer] playlist
|
70
|
-
# @return [Hallon::Playlist] a playlist for the given pointer.
|
71
|
-
def playlist_from(playlist)
|
72
|
-
pointer = Spotify::Pointer.new(playlist, :playlist, true)
|
73
|
-
Hallon::Playlist.new(pointer)
|
74
|
-
end
|
75
66
|
end
|
76
67
|
end
|
data/lib/hallon/player.rb
CHANGED
@@ -10,7 +10,7 @@ module Hallon
|
|
10
10
|
# meep?
|
11
11
|
extend Observable::Player
|
12
12
|
|
13
|
-
# @return [Spotify::
|
13
|
+
# @return [Spotify::Session] session pointer
|
14
14
|
attr_reader :pointer
|
15
15
|
|
16
16
|
# @return [Symbol] one of :playing, :paused, :stopped
|
@@ -208,7 +208,7 @@ module Hallon
|
|
208
208
|
# @raise [Spotify::Error] if libspotify does not accept the given bitrate
|
209
209
|
# @param [Symbol] bitrate one of :96k, :160k, :320k
|
210
210
|
def bitrate=(bitrate)
|
211
|
-
Spotify.session_preferred_bitrate
|
211
|
+
Spotify.try(:session_preferred_bitrate, pointer, bitrate)
|
212
212
|
end
|
213
213
|
|
214
214
|
# Loads a Track for playing.
|
data/lib/hallon/playlist.rb
CHANGED
@@ -11,7 +11,7 @@ module Hallon
|
|
11
11
|
size :playlist_num_tracks
|
12
12
|
|
13
13
|
# @return [Track, nil]
|
14
|
-
item :playlist_track
|
14
|
+
item :playlist_track do |track, index, pointer|
|
15
15
|
Playlist::Track.from(track, pointer, index)
|
16
16
|
end
|
17
17
|
end
|
@@ -33,12 +33,12 @@ module Hallon
|
|
33
33
|
@seen = Spotify.playlist_track_seen(playlist_ptr, index)
|
34
34
|
@added_at = Time.at(Spotify.playlist_track_create_time(playlist_ptr, index)).utc
|
35
35
|
@adder = begin
|
36
|
-
creator = Spotify.playlist_track_creator
|
36
|
+
creator = Spotify.playlist_track_creator(playlist_ptr, index)
|
37
37
|
User.from(creator)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
# @return [Spotify::
|
41
|
+
# @return [Spotify::Playlist] playlist pointer this track was created from.
|
42
42
|
attr_reader :playlist_ptr
|
43
43
|
private :playlist_ptr
|
44
44
|
|
@@ -99,7 +99,7 @@ module Hallon
|
|
99
99
|
extend Observable::Playlist
|
100
100
|
|
101
101
|
from_link :playlist do |pointer|
|
102
|
-
Spotify.playlist_create
|
102
|
+
Spotify.playlist_create(session.pointer, pointer)
|
103
103
|
end
|
104
104
|
|
105
105
|
to_link :from_playlist
|
@@ -126,7 +126,7 @@ module Hallon
|
|
126
126
|
#
|
127
127
|
# @param [String, Link, FFI::Pointer] link
|
128
128
|
def initialize(link)
|
129
|
-
@pointer = to_pointer(link,
|
129
|
+
@pointer = to_pointer(link, Spotify::Playlist)
|
130
130
|
|
131
131
|
subscribe_for_callbacks do |callbacks|
|
132
132
|
Spotify.playlist_remove_callbacks(pointer, callbacks, nil)
|
@@ -227,7 +227,7 @@ module Hallon
|
|
227
227
|
|
228
228
|
# @return [User, nil]
|
229
229
|
def owner
|
230
|
-
user = Spotify.playlist_owner
|
230
|
+
user = Spotify.playlist_owner(pointer)
|
231
231
|
User.from(user)
|
232
232
|
end
|
233
233
|
|
@@ -16,7 +16,7 @@ module Hallon
|
|
16
16
|
item :playlistcontainer_playlist_type do |type, index, pointer|
|
17
17
|
case type
|
18
18
|
when :playlist
|
19
|
-
playlist = Spotify.playlistcontainer_playlist
|
19
|
+
playlist = Spotify.playlistcontainer_playlist(pointer, index)
|
20
20
|
Playlist.from(playlist)
|
21
21
|
when :start_folder, :end_folder
|
22
22
|
Folder.new(pointer, folder_range(index, type))
|
@@ -72,7 +72,7 @@ module Hallon
|
|
72
72
|
# @return [String]
|
73
73
|
attr_reader :name
|
74
74
|
|
75
|
-
# @return [Spotify::
|
75
|
+
# @return [Spotify::Container]
|
76
76
|
attr_reader :container_ptr
|
77
77
|
private :container_ptr
|
78
78
|
|
@@ -138,9 +138,9 @@ module Hallon
|
|
138
138
|
|
139
139
|
# Wrap an existing PlaylistContainer pointer in an object.
|
140
140
|
#
|
141
|
-
# @param [Spotify::
|
141
|
+
# @param [Spotify::PlaylistContainer] pointer
|
142
142
|
def initialize(pointer)
|
143
|
-
@pointer = to_pointer(pointer,
|
143
|
+
@pointer = to_pointer(pointer, Spotify::PlaylistContainer)
|
144
144
|
|
145
145
|
subscribe_for_callbacks do |callbacks|
|
146
146
|
Spotify.playlistcontainer_remove_callbacks(pointer, callbacks, nil)
|
@@ -155,7 +155,7 @@ module Hallon
|
|
155
155
|
|
156
156
|
# @return [User, nil] owner of the container (nil if unknown or no owner).
|
157
157
|
def owner
|
158
|
-
owner = Spotify.playlistcontainer_owner
|
158
|
+
owner = Spotify.playlistcontainer_owner(pointer)
|
159
159
|
User.from(owner)
|
160
160
|
end
|
161
161
|
|
@@ -196,13 +196,13 @@ module Hallon
|
|
196
196
|
def add(playlist, force_create = false)
|
197
197
|
resource = if force_create or not Link.valid?(playlist) and playlist.is_a?(String)
|
198
198
|
unless error = Playlist.invalid_name?(playlist)
|
199
|
-
Spotify.playlistcontainer_add_new_playlist
|
199
|
+
Spotify.playlistcontainer_add_new_playlist(pointer, playlist)
|
200
200
|
else
|
201
201
|
raise ArgumentError, error
|
202
202
|
end
|
203
203
|
else
|
204
204
|
link = Link.new(playlist)
|
205
|
-
Spotify.playlistcontainer_add_playlist
|
205
|
+
Spotify.playlistcontainer_add_playlist(pointer, link.pointer)
|
206
206
|
end
|
207
207
|
|
208
208
|
Playlist.from(resource)
|
@@ -310,7 +310,7 @@ module Hallon
|
|
310
310
|
real_count = Spotify.playlistcontainer_get_unseen_tracks(pointer, playlist.pointer, tracks_ary, count)
|
311
311
|
raise OperationFailedError if real_count < 0
|
312
312
|
tracks_ary.read_array_of_pointer([real_count, count].min).map do |track|
|
313
|
-
track_pointer = Spotify::
|
313
|
+
track_pointer = Spotify::Track.retaining_class.new(track)
|
314
314
|
Hallon::Track.new(track_pointer)
|
315
315
|
end
|
316
316
|
end
|
data/lib/hallon/scrobbler.rb
CHANGED
@@ -44,7 +44,7 @@ module Hallon
|
|
44
44
|
true
|
45
45
|
else
|
46
46
|
FFI::Buffer.alloc_out(:bool) do |buffer|
|
47
|
-
Spotify.session_is_scrobbling_possible
|
47
|
+
Spotify.try(:session_is_scrobbling_possible, session.pointer, provider, buffer)
|
48
48
|
return ! buffer.read_uchar.zero?
|
49
49
|
end
|
50
50
|
end
|
@@ -58,7 +58,7 @@ module Hallon
|
|
58
58
|
# @param [Array<Username, Password>] credentials
|
59
59
|
def credentials=(credentials)
|
60
60
|
username, password = Array(credentials)
|
61
|
-
Spotify.session_set_social_credentials
|
61
|
+
Spotify.try(:session_set_social_credentials, session.pointer, provider, username, password)
|
62
62
|
end
|
63
63
|
|
64
64
|
# Enables or disables the local scrobbling setting.
|
@@ -66,7 +66,7 @@ module Hallon
|
|
66
66
|
# @param [Boolean] scrobble true if you want scrobbling to be enabled
|
67
67
|
def enabled=(scrobble)
|
68
68
|
state = scrobble ? :local_enabled : :local_disabled
|
69
|
-
Spotify.session_set_scrobbling
|
69
|
+
Spotify.try(:session_set_scrobbling, session.pointer, provider, state)
|
70
70
|
end
|
71
71
|
|
72
72
|
# @return [Boolean] true if scrobbling (global or local) is enabled.
|
@@ -82,7 +82,7 @@ module Hallon
|
|
82
82
|
#
|
83
83
|
# @return [Scrobbler]
|
84
84
|
def reset
|
85
|
-
tap { Spotify.session_set_scrobbling
|
85
|
+
tap { Spotify.try(:session_set_scrobbling, session.pointer, provider, :use_global_setting) }
|
86
86
|
end
|
87
87
|
|
88
88
|
protected
|
data/lib/hallon/search.rb
CHANGED
@@ -12,7 +12,7 @@ module Hallon
|
|
12
12
|
size :search_num_tracks
|
13
13
|
|
14
14
|
# @return [Track, nil]
|
15
|
-
item :search_track
|
15
|
+
item :search_track do |track|
|
16
16
|
Track.from(track)
|
17
17
|
end
|
18
18
|
|
@@ -27,7 +27,7 @@ module Hallon
|
|
27
27
|
size :search_num_albums
|
28
28
|
|
29
29
|
# @return [Album, nil]
|
30
|
-
item :search_album
|
30
|
+
item :search_album do |album|
|
31
31
|
Album.from(album)
|
32
32
|
end
|
33
33
|
|
@@ -42,7 +42,7 @@ module Hallon
|
|
42
42
|
size :search_num_artists
|
43
43
|
|
44
44
|
# @return [Artist, nil]
|
45
|
-
item :search_artist
|
45
|
+
item :search_artist do |artist|
|
46
46
|
Artist.from(artist)
|
47
47
|
end
|
48
48
|
|
@@ -125,6 +125,21 @@ module Hallon
|
|
125
125
|
|
126
126
|
# Construct a new search with given query.
|
127
127
|
#
|
128
|
+
# Given enough results for a given query, all searches are paginated by libspotify.
|
129
|
+
# If the current number of results (say `search.tracks.size`) is less than the total
|
130
|
+
# number of results (`search.tracks.total`), there are more results available. To
|
131
|
+
# retrieve the additional tracks, you’ll need to do the same search query again, but
|
132
|
+
# with a higher `tracks_offset`.
|
133
|
+
#
|
134
|
+
# @example searching tracks by offset
|
135
|
+
# search = Hallon::Search.new("genre:rock", tracks: 10, tracks_offset: 0).load
|
136
|
+
# search.tracks.size # => 10
|
137
|
+
# search.tracks.total # => 17
|
138
|
+
#
|
139
|
+
# again = Hallon::Search.new("genre:rock", tracks: 10, tracks_offset: 10).load
|
140
|
+
# again.tracks.size # => 7
|
141
|
+
# again.tracks.total # => 17
|
142
|
+
#
|
128
143
|
# @param [String, Link] search search query or spotify URI
|
129
144
|
# @param [Hash] options additional search options
|
130
145
|
# @option options [Symbol] :type (:standard) search type, either standard or suggest
|
@@ -144,10 +159,10 @@ module Hallon
|
|
144
159
|
search = from_link(search) if Link.valid?(search)
|
145
160
|
|
146
161
|
subscribe_for_callbacks do |callback|
|
147
|
-
@pointer = if
|
162
|
+
@pointer = if search.is_a?(Spotify::Search)
|
148
163
|
search
|
149
164
|
else
|
150
|
-
Spotify.search_create
|
165
|
+
Spotify.search_create(session.pointer, search, *opts, type, callback, nil)
|
151
166
|
end
|
152
167
|
|
153
168
|
raise ArgumentError, "search with #{search} failed" if @pointer.null?
|