spotify 12.2.0 → 12.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -1
- data/.rspec +5 -0
- data/CHANGELOG.md +45 -27
- data/Gemfile +4 -0
- data/README.markdown +52 -19
- data/Rakefile +16 -7
- data/lib/spotify.rb +109 -8
- data/lib/spotify/api.rb +61 -0
- data/lib/spotify/api/album.rb +14 -0
- data/lib/spotify/api/album_browse.rb +18 -0
- data/lib/spotify/api/artist.rb +10 -0
- data/lib/spotify/api/artist_browse.rb +23 -0
- data/lib/spotify/api/error.rb +6 -0
- data/lib/spotify/api/image.rb +16 -0
- data/lib/spotify/api/inbox.rb +9 -0
- data/lib/spotify/api/link.rb +25 -0
- data/lib/spotify/api/playlist.rb +39 -0
- data/lib/spotify/api/playlist_container.rb +23 -0
- data/lib/spotify/api/search.rb +27 -0
- data/lib/spotify/api/session.rb +46 -0
- data/lib/spotify/api/toplist_browse.rb +17 -0
- data/lib/spotify/api/track.rb +26 -0
- data/lib/spotify/api/user.rb +10 -0
- data/lib/spotify/defines.rb +109 -0
- data/lib/spotify/error.rb +62 -0
- data/lib/spotify/managed_pointer.rb +90 -0
- data/lib/spotify/objects.rb +16 -0
- data/lib/spotify/objects/album.rb +5 -0
- data/lib/spotify/objects/album_browse.rb +5 -0
- data/lib/spotify/objects/artist.rb +5 -0
- data/lib/spotify/objects/artist_browse.rb +5 -0
- data/lib/spotify/objects/image.rb +5 -0
- data/lib/spotify/objects/inbox.rb +5 -0
- data/lib/spotify/objects/link.rb +5 -0
- data/lib/spotify/objects/playlist.rb +5 -0
- data/lib/spotify/objects/playlist_container.rb +5 -0
- data/lib/spotify/objects/search.rb +5 -0
- data/lib/spotify/objects/session.rb +20 -0
- data/lib/spotify/objects/toplist_browse.rb +5 -0
- data/lib/spotify/objects/track.rb +5 -0
- data/lib/spotify/objects/user.rb +5 -0
- data/lib/spotify/structs.rb +46 -0
- data/lib/spotify/structs/audio_buffer_stats.rb +10 -0
- data/lib/spotify/structs/audio_format.rb +12 -0
- data/lib/spotify/structs/offline_sync_status.rb +24 -0
- data/lib/spotify/structs/playlist_callbacks.rb +32 -0
- data/lib/spotify/structs/playlist_container_callbacks.rb +14 -0
- data/lib/spotify/structs/session_callbacks.rb +48 -0
- data/lib/spotify/structs/session_config.rb +64 -0
- data/lib/spotify/structs/subscribers.rb +31 -0
- data/lib/spotify/types.rb +3 -0
- data/lib/spotify/types/image_id.rb +5 -0
- data/lib/spotify/types/nul_string.rb +51 -0
- data/lib/spotify/types/utf8_string.rb +24 -28
- data/lib/spotify/util.rb +36 -0
- data/lib/spotify/version.rb +7 -2
- data/spec/api-linux.xml +1887 -0
- data/spec/api-mac.xml +1886 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/spotify/api_spec.rb +62 -0
- data/spec/spotify/defines_spec.rb +22 -0
- data/spec/spotify/enums_spec.rb +9 -0
- data/spec/spotify/managed_pointer_spec.rb +75 -0
- data/spec/spotify/spotify_spec.rb +69 -0
- data/spec/spotify/structs/session_config_spec.rb +20 -0
- data/spec/spotify/structs/struct_spec.rb +34 -0
- data/spec/spotify/structs/subscribers_spec.rb +31 -0
- data/spec/spotify/structs_spec.rb +19 -0
- data/spec/spotify/types/image_id_spec.rb +44 -0
- data/spec/spotify/types/nul_string_spec.rb +31 -0
- data/spec/spotify/types/utf8_string_spec.rb +24 -0
- data/spec/support/hook_spotify.rb +37 -0
- data/spec/support/spotify_util.rb +17 -0
- data/spotify.gemspec +6 -11
- metadata +99 -26
- data/lib/spotify/error_wrappers.rb +0 -165
- data/lib/spotify/functions.rb +0 -755
- data/lib/spotify/gc_wrappers.rb +0 -105
- data/lib/spotify/types/pointer.rb +0 -59
- data/spec/spotify_spec.rb +0 -467
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Artist
|
4
|
+
attach_function :artist_name, [ Artist ], UTF8String
|
5
|
+
attach_function :artist_is_loaded, [ Artist ], :bool
|
6
|
+
attach_function :artist_portrait, [ Artist, :image_size ], ImageID
|
7
|
+
attach_function :artist_add_ref, [ Artist ], :error
|
8
|
+
attach_function :artist_release, [ Artist ], :error
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group ArtistBrowse
|
4
|
+
attach_function :artistbrowse_create, [ Session, Artist, :artistbrowse_type, :artistbrowse_complete_cb, :userdata ], ArtistBrowse
|
5
|
+
attach_function :artistbrowse_is_loaded, [ ArtistBrowse ], :bool
|
6
|
+
attach_function :artistbrowse_error, [ ArtistBrowse ], :error
|
7
|
+
attach_function :artistbrowse_artist, [ ArtistBrowse ], Artist
|
8
|
+
attach_function :artistbrowse_num_portraits, [ ArtistBrowse ], :int
|
9
|
+
attach_function :artistbrowse_portrait, [ ArtistBrowse, :int ], ImageID
|
10
|
+
attach_function :artistbrowse_num_tracks, [ ArtistBrowse ], :int
|
11
|
+
attach_function :artistbrowse_track, [ ArtistBrowse, :int ], Track
|
12
|
+
attach_function :artistbrowse_num_albums, [ ArtistBrowse ], :int
|
13
|
+
attach_function :artistbrowse_album, [ ArtistBrowse, :int ], Album
|
14
|
+
attach_function :artistbrowse_num_similar_artists, [ ArtistBrowse ], :int
|
15
|
+
attach_function :artistbrowse_similar_artist, [ ArtistBrowse, :int ], Artist
|
16
|
+
attach_function :artistbrowse_biography, [ ArtistBrowse ], UTF8String
|
17
|
+
attach_function :artistbrowse_backend_request_duration, [ ArtistBrowse ], :int
|
18
|
+
attach_function :artistbrowse_num_tophit_tracks, [ ArtistBrowse ], :int
|
19
|
+
attach_function :artistbrowse_tophit_track, [ ArtistBrowse, :int ], Track
|
20
|
+
attach_function :artistbrowse_add_ref, [ ArtistBrowse ], :error
|
21
|
+
attach_function :artistbrowse_release, [ ArtistBrowse ], :error
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Image
|
4
|
+
attach_function :image_create, [ Session, ImageID ], Image
|
5
|
+
attach_function :image_add_load_callback, [ Image, :image_loaded_cb, :userdata ], :error
|
6
|
+
attach_function :image_remove_load_callback, [ Image, :image_loaded_cb, :userdata ], :error
|
7
|
+
attach_function :image_is_loaded, [ Image ], :bool
|
8
|
+
attach_function :image_error, [ Image ], :error
|
9
|
+
attach_function :image_format, [ Image ], :imageformat
|
10
|
+
attach_function :image_data, [ Image, :buffer_out ], :pointer
|
11
|
+
attach_function :image_image_id, [ Image ], ImageID
|
12
|
+
attach_function :image_create_from_link, [ Session, Link ], Image
|
13
|
+
attach_function :image_add_ref, [ Image ], :error
|
14
|
+
attach_function :image_release, [ Image ], :error
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Inbox
|
4
|
+
attach_function :inbox_post_tracks, [ Session, UTF8String, :array, :int, UTF8String, :inboxpost_complete_cb, :userdata ], Inbox
|
5
|
+
attach_function :inbox_error, [ Inbox ], :error
|
6
|
+
attach_function :inbox_add_ref, [ Inbox ], :error
|
7
|
+
attach_function :inbox_release, [ Inbox ], :error
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Link
|
4
|
+
attach_function :link_create_from_string, [ :string ], Link
|
5
|
+
attach_function :link_create_from_track, [ Track, :int ], Link
|
6
|
+
attach_function :link_create_from_album, [ Album ], Link
|
7
|
+
attach_function :link_create_from_artist, [ Artist ], Link
|
8
|
+
attach_function :link_create_from_search, [ Search ], Link
|
9
|
+
attach_function :link_create_from_playlist, [ Playlist ], Link
|
10
|
+
attach_function :link_create_from_artist_portrait, [ Artist, :image_size ], Link
|
11
|
+
attach_function :link_create_from_artistbrowse_portrait, [ ArtistBrowse, :int ], Link
|
12
|
+
attach_function :link_create_from_album_cover, [ Album, :image_size ], Link
|
13
|
+
attach_function :link_create_from_image, [ Image ], Link
|
14
|
+
attach_function :link_create_from_user, [ User ], Link
|
15
|
+
attach_function :link_as_string, [ Link, :buffer_out, :int ], :int
|
16
|
+
attach_function :link_type, [ Link ], :linktype
|
17
|
+
attach_function :link_as_track, [ Link ], Track
|
18
|
+
attach_function :link_as_track_and_offset, [ Link, :buffer_out ], Track
|
19
|
+
attach_function :link_as_album, [ Link ], Album
|
20
|
+
attach_function :link_as_artist, [ Link ], Artist
|
21
|
+
attach_function :link_as_user, [ Link ], User
|
22
|
+
attach_function :link_add_ref, [ Link ], :error
|
23
|
+
attach_function :link_release, [ Link ], :error
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Playlist
|
4
|
+
attach_function :playlist_is_loaded, [ Playlist ], :bool
|
5
|
+
attach_function :playlist_add_callbacks, [ Playlist, PlaylistCallbacks, :userdata ], :error
|
6
|
+
attach_function :playlist_remove_callbacks, [ Playlist, PlaylistCallbacks, :userdata ], :error
|
7
|
+
attach_function :playlist_num_tracks, [ Playlist ], :int
|
8
|
+
attach_function :playlist_track, [ Playlist, :int ], Track
|
9
|
+
attach_function :playlist_track_create_time, [ Playlist, :int ], :int
|
10
|
+
attach_function :playlist_track_creator, [ Playlist, :int ], User
|
11
|
+
attach_function :playlist_track_seen, [ Playlist, :int ], :bool
|
12
|
+
attach_function :playlist_track_set_seen, [ Playlist, :int, :bool ], :error
|
13
|
+
attach_function :playlist_track_message, [ Playlist, :int ], UTF8String
|
14
|
+
attach_function :playlist_name, [ Playlist ], UTF8String
|
15
|
+
attach_function :playlist_rename, [ Playlist, UTF8String ], :error
|
16
|
+
attach_function :playlist_owner, [ Playlist ], User
|
17
|
+
attach_function :playlist_is_collaborative, [ Playlist ], :bool
|
18
|
+
attach_function :playlist_set_collaborative, [ Playlist, :bool ], :error
|
19
|
+
attach_function :playlist_set_autolink_tracks, [ Playlist, :bool ], :error
|
20
|
+
attach_function :playlist_get_description, [ Playlist ], UTF8String
|
21
|
+
attach_function :playlist_get_image, [ Playlist, :buffer_out ], :bool
|
22
|
+
attach_function :playlist_has_pending_changes, [ Playlist ], :bool
|
23
|
+
attach_function :playlist_add_tracks, [ Playlist, :array, :int, :int, Session ], :error
|
24
|
+
attach_function :playlist_remove_tracks, [ Playlist, :array, :int ], :error
|
25
|
+
attach_function :playlist_reorder_tracks, [ Playlist, :array, :int, :int ], :error
|
26
|
+
attach_function :playlist_num_subscribers, [ Playlist ], :uint
|
27
|
+
attach_function :playlist_subscribers, [ Playlist ], Subscribers
|
28
|
+
attach_function :playlist_subscribers_free, [ Subscribers ], :error
|
29
|
+
attach_function :playlist_update_subscribers, [ Session, Playlist ], :error
|
30
|
+
attach_function :playlist_is_in_ram, [ Session, Playlist ], :bool
|
31
|
+
attach_function :playlist_set_in_ram, [ Session, Playlist, :bool ], :error
|
32
|
+
attach_function :playlist_create, [ Session, Link ], Playlist
|
33
|
+
attach_function :playlist_get_offline_status, [ Session, Playlist ], :playlist_offline_status
|
34
|
+
attach_function :playlist_get_offline_download_completed, [ Session, Playlist ], :int
|
35
|
+
attach_function :playlist_set_offline_mode, [ Session, Playlist, :bool ], :error
|
36
|
+
attach_function :playlist_add_ref, [ Playlist ], :error
|
37
|
+
attach_function :playlist_release, [ Playlist ], :error
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group PlaylistContainer
|
4
|
+
attach_function :playlistcontainer_add_callbacks, [ PlaylistContainer, PlaylistContainerCallbacks, :userdata ], :error
|
5
|
+
attach_function :playlistcontainer_remove_callbacks, [ PlaylistContainer, PlaylistContainerCallbacks, :userdata ], :error
|
6
|
+
attach_function :playlistcontainer_num_playlists, [ PlaylistContainer ], :int
|
7
|
+
attach_function :playlistcontainer_playlist, [ PlaylistContainer, :int ], Playlist
|
8
|
+
attach_function :playlistcontainer_playlist_type, [ PlaylistContainer, :int ], :playlist_type
|
9
|
+
attach_function :playlistcontainer_playlist_folder_name, [ PlaylistContainer, :int, :buffer_out, :int ], :error
|
10
|
+
attach_function :playlistcontainer_playlist_folder_id, [ PlaylistContainer, :int ], :uint64
|
11
|
+
attach_function :playlistcontainer_add_new_playlist, [ PlaylistContainer, UTF8String ], Playlist
|
12
|
+
attach_function :playlistcontainer_add_playlist, [ PlaylistContainer, Link ], Playlist
|
13
|
+
attach_function :playlistcontainer_remove_playlist, [ PlaylistContainer, :int ], :error
|
14
|
+
attach_function :playlistcontainer_move_playlist, [ PlaylistContainer, :int, :int, :bool ], :error
|
15
|
+
attach_function :playlistcontainer_add_folder, [ PlaylistContainer, :int, UTF8String ], :error
|
16
|
+
attach_function :playlistcontainer_owner, [ PlaylistContainer ], User
|
17
|
+
attach_function :playlistcontainer_is_loaded, [ PlaylistContainer ], :bool
|
18
|
+
attach_function :playlistcontainer_get_unseen_tracks, [ PlaylistContainer, Playlist, :array, :int ], :int
|
19
|
+
attach_function :playlistcontainer_clear_unseen_tracks, [ PlaylistContainer, Playlist ], :int
|
20
|
+
attach_function :playlistcontainer_add_ref, [ PlaylistContainer ], :error
|
21
|
+
attach_function :playlistcontainer_release, [ PlaylistContainer ], :error
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Search
|
4
|
+
attach_function :search_create, [ Session, UTF8String, :int, :int, :int, :int, :int, :int, :int, :int, :search_type, :search_complete_cb, :userdata ], Search
|
5
|
+
attach_function :search_is_loaded, [ Search ], :bool
|
6
|
+
attach_function :search_error, [ Search ], :error
|
7
|
+
attach_function :search_query, [ Search ], UTF8String
|
8
|
+
attach_function :search_did_you_mean, [ Search ], UTF8String
|
9
|
+
attach_function :search_num_tracks, [ Search ], :int
|
10
|
+
attach_function :search_track, [ Search, :int ], Track
|
11
|
+
attach_function :search_num_albums, [ Search ], :int
|
12
|
+
attach_function :search_album, [ Search, :int ], Album
|
13
|
+
attach_function :search_num_artists, [ Search ], :int
|
14
|
+
attach_function :search_artist, [ Search, :int ], Artist
|
15
|
+
attach_function :search_num_playlists, [ Search ], :int
|
16
|
+
attach_function :search_playlist, [ Search, :int ], Playlist
|
17
|
+
attach_function :search_playlist_name, [ Search, :int ], UTF8String
|
18
|
+
attach_function :search_playlist_uri, [ Search, :int ], UTF8String
|
19
|
+
attach_function :search_playlist_image_uri, [ Search, :int ], UTF8String
|
20
|
+
attach_function :search_total_tracks, [ Search ], :int
|
21
|
+
attach_function :search_total_albums, [ Search ], :int
|
22
|
+
attach_function :search_total_artists, [ Search ], :int
|
23
|
+
attach_function :search_total_playlists, [ Search ], :int
|
24
|
+
attach_function :search_add_ref, [ Search ], :error
|
25
|
+
attach_function :search_release, [ Search ], :error
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Session
|
4
|
+
attach_function :session_create, [ SessionConfig, :buffer_out ], :error
|
5
|
+
attach_function :session_release, [ Session ], :error
|
6
|
+
attach_function :session_process_events, [ Session, :buffer_out ], :error
|
7
|
+
attach_function :session_login, [ Session, UTF8String, :string, :bool, :string ], :error
|
8
|
+
attach_function :session_relogin, [ Session ], :error
|
9
|
+
attach_function :session_forget_me, [ Session ], :error
|
10
|
+
attach_function :session_remembered_user, [ Session, :buffer_out, :size_t ], :int
|
11
|
+
attach_function :session_user, [ Session ], User
|
12
|
+
attach_function :session_logout, [ Session ], :error
|
13
|
+
attach_function :session_connectionstate, [ Session ], :connectionstate
|
14
|
+
attach_function :session_userdata, [ Session ], :userdata
|
15
|
+
attach_function :session_set_cache_size, [ Session, :size_t ], :error
|
16
|
+
attach_function :session_player_load, [ Session, Track ], :error
|
17
|
+
attach_function :session_player_seek, [ Session, :int ], :error
|
18
|
+
attach_function :session_player_play, [ Session, :bool ], :error
|
19
|
+
attach_function :session_player_unload, [ Session ], :error
|
20
|
+
attach_function :session_player_prefetch, [ Session, Track ], :error
|
21
|
+
attach_function :session_playlistcontainer, [ Session ], PlaylistContainer
|
22
|
+
attach_function :session_inbox_create, [ Session ], Playlist
|
23
|
+
attach_function :session_starred_create, [ Session ], Playlist
|
24
|
+
attach_function :session_starred_for_user_create, [ Session, UTF8String ], Playlist
|
25
|
+
attach_function :session_publishedcontainer_for_user_create, [ Session, UTF8String ], PlaylistContainer
|
26
|
+
attach_function :session_preferred_bitrate, [ Session, :bitrate ], :error
|
27
|
+
attach_function :session_set_connection_type, [ Session, :connection_type ], :error
|
28
|
+
attach_function :session_set_connection_rules, [ Session, :connection_rules ], :error
|
29
|
+
attach_function :offline_tracks_to_sync, [ Session ], :int
|
30
|
+
attach_function :offline_num_playlists, [ Session ], :int
|
31
|
+
attach_function :offline_sync_get_status, [ Session, OfflineSyncStatus ], :bool
|
32
|
+
attach_function :offline_time_left, [ Session ], :int
|
33
|
+
attach_function :session_user_country, [ Session ], :int
|
34
|
+
attach_function :session_preferred_offline_bitrate, [ Session, :bitrate, :bool ], :error
|
35
|
+
attach_function :session_set_volume_normalization, [ Session, :bool ], :error
|
36
|
+
attach_function :session_get_volume_normalization, [ Session ], :bool
|
37
|
+
attach_function :session_flush_caches, [ Session ], :error
|
38
|
+
attach_function :session_user_name, [ Session ], :string
|
39
|
+
attach_function :session_set_private_session, [ Session, :bool ], :error
|
40
|
+
attach_function :session_is_private_session, [ Session ], :bool
|
41
|
+
attach_function :session_set_scrobbling, [ Session, :social_provider, :scrobbling_state ], :error
|
42
|
+
attach_function :session_is_scrobbling, [ Session, :social_provider, :buffer_out ], :error
|
43
|
+
attach_function :session_is_scrobbling_possible, [ Session, :social_provider, :buffer_out ], :error
|
44
|
+
attach_function :session_set_social_credentials, [ Session, :social_provider, UTF8String, :string ], :error
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group ToplistBrowse
|
4
|
+
attach_function :toplistbrowse_create, [ Session, :toplisttype, :toplistregion, UTF8String, :toplistbrowse_complete_cb, :userdata ], ToplistBrowse
|
5
|
+
attach_function :toplistbrowse_is_loaded, [ ToplistBrowse ], :bool
|
6
|
+
attach_function :toplistbrowse_error, [ ToplistBrowse ], :error
|
7
|
+
attach_function :toplistbrowse_num_artists, [ ToplistBrowse ], :int
|
8
|
+
attach_function :toplistbrowse_artist, [ ToplistBrowse, :int ], Artist
|
9
|
+
attach_function :toplistbrowse_num_albums, [ ToplistBrowse ], :int
|
10
|
+
attach_function :toplistbrowse_album, [ ToplistBrowse, :int ], Album
|
11
|
+
attach_function :toplistbrowse_num_tracks, [ ToplistBrowse ], :int
|
12
|
+
attach_function :toplistbrowse_track, [ ToplistBrowse, :int ], Track
|
13
|
+
attach_function :toplistbrowse_backend_request_duration, [ ToplistBrowse ], :int
|
14
|
+
attach_function :toplistbrowse_add_ref, [ ToplistBrowse ], :error
|
15
|
+
attach_function :toplistbrowse_release, [ ToplistBrowse ], :error
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group Track
|
4
|
+
attach_function :track_is_loaded, [ Track ], :bool
|
5
|
+
attach_function :track_error, [ Track ], :error
|
6
|
+
attach_function :track_get_availability, [ Session, Track ], :track_availability
|
7
|
+
attach_function :track_is_local, [ Session, Track ], :bool
|
8
|
+
attach_function :track_is_autolinked, [ Session, Track ], :bool
|
9
|
+
attach_function :track_is_starred, [ Session, Track ], :bool
|
10
|
+
attach_function :track_set_starred, [ Session, :array, :int, :bool ], :error
|
11
|
+
attach_function :track_num_artists, [ Track ], :int
|
12
|
+
attach_function :track_artist, [ Track, :int ], Artist
|
13
|
+
attach_function :track_album, [ Track ], Album
|
14
|
+
attach_function :track_name, [ Track ], UTF8String
|
15
|
+
attach_function :track_duration, [ Track ], :int
|
16
|
+
attach_function :track_popularity, [ Track ], :int
|
17
|
+
attach_function :track_disc, [ Track ], :int
|
18
|
+
attach_function :track_index, [ Track ], :int
|
19
|
+
attach_function :track_is_placeholder, [ Track ], :bool
|
20
|
+
attach_function :track_get_playable, [ Session, Track ], Track
|
21
|
+
attach_function :track_offline_get_status, [ Track ], :track_offline_status
|
22
|
+
attach_function :localtrack_create, [ UTF8String, UTF8String, UTF8String, :int ], Track
|
23
|
+
attach_function :track_add_ref, [ Track ], :error
|
24
|
+
attach_function :track_release, [ Track ], :error
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
# @!group User
|
4
|
+
attach_function :user_canonical_name, [ User ], UTF8String
|
5
|
+
attach_function :user_display_name, [ User ], UTF8String
|
6
|
+
attach_function :user_is_loaded, [ User ], :bool
|
7
|
+
attach_function :user_add_ref, [ User ], :error
|
8
|
+
attach_function :user_release, [ User ], :error
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Spotify
|
2
|
+
class API
|
3
|
+
typedef :pointer, :frames
|
4
|
+
typedef :pointer, :userdata
|
5
|
+
typedef :pointer, :array
|
6
|
+
|
7
|
+
#
|
8
|
+
# Error
|
9
|
+
#
|
10
|
+
enum :error, [:ok, 0,
|
11
|
+
:bad_api_version, :api_initialization_failed, :track_not_playable,
|
12
|
+
|
13
|
+
:bad_application_key, 5,
|
14
|
+
:bad_username_or_password, :user_banned,
|
15
|
+
:unable_to_contact_server, :client_too_old, :other_permanent,
|
16
|
+
:bad_user_agent, :missing_callback, :invalid_indata,
|
17
|
+
:index_out_of_range, :user_needs_premium, :other_transient,
|
18
|
+
:is_loading, :no_stream_available, :permission_denied,
|
19
|
+
:inbox_is_full, :no_cache, :no_such_user, :no_credentials,
|
20
|
+
:network_disabled, :invalid_device_id, :cant_open_trace_file,
|
21
|
+
:application_banned,
|
22
|
+
|
23
|
+
:offline_too_many_tracks, 31,
|
24
|
+
:offline_disk_cache, :offline_expired, :offline_not_allowed,
|
25
|
+
:offline_license_lost, :offline_license_error,
|
26
|
+
|
27
|
+
:lastfm_auth_error, 39,
|
28
|
+
:invalid_argument, :system_failure]
|
29
|
+
|
30
|
+
#
|
31
|
+
# Audio
|
32
|
+
#
|
33
|
+
enum :sampletype, [:int16] # int16_native_endian
|
34
|
+
enum :bitrate, %w(160k 320k 96k).map(&:to_sym)
|
35
|
+
|
36
|
+
#
|
37
|
+
# Session
|
38
|
+
#
|
39
|
+
enum :social_provider, [:spotify, :facebook, :lastfm]
|
40
|
+
enum :scrobbling_state, [:use_global_setting, :local_enabled, :local_disabled, :global_enabled, :global_disabled]
|
41
|
+
enum :connectionstate, [:logged_out, :logged_in, :disconnected, :undefined, :offline]
|
42
|
+
enum :connection_type, [:unknown, :none, :mobile, :mobile_roaming, :wifi, :wired]
|
43
|
+
enum :connection_rules, [:network , 0x1,
|
44
|
+
:network_if_roaming , 0x2,
|
45
|
+
:allow_sync_over_mobile, 0x4,
|
46
|
+
:allow_sync_over_wifi , 0x8]
|
47
|
+
|
48
|
+
#
|
49
|
+
# Image
|
50
|
+
#
|
51
|
+
callback :image_loaded_cb, [ Image.retaining_class, :userdata ], :void
|
52
|
+
enum :imageformat, [:unknown, -1, :jpeg]
|
53
|
+
enum :image_size, [ :normal, :small, :large ]
|
54
|
+
|
55
|
+
#
|
56
|
+
# Link
|
57
|
+
#
|
58
|
+
enum :linktype, [:invalid, :track, :album, :artist, :search,
|
59
|
+
:playlist, :profile, :starred, :localtrack, :image]
|
60
|
+
|
61
|
+
#
|
62
|
+
# Track
|
63
|
+
#
|
64
|
+
enum :availability, [:unavailable, :available, :not_streamable, :banned_by_artist]
|
65
|
+
typedef :availability, :track_availability # for automated testing
|
66
|
+
enum :track_offline_status, [:no, :waiting, :downloading, :done, :error, :done_expired, :limit_exceeded, :done_resync]
|
67
|
+
|
68
|
+
#
|
69
|
+
# Album
|
70
|
+
#
|
71
|
+
callback :albumbrowse_complete_cb, [AlbumBrowse.retaining_class, :userdata], :void
|
72
|
+
enum :albumtype, [:album, :single, :compilation, :unknown]
|
73
|
+
|
74
|
+
#
|
75
|
+
# Artist browsing
|
76
|
+
#
|
77
|
+
callback :artistbrowse_complete_cb, [ArtistBrowse.retaining_class, :userdata], :void
|
78
|
+
enum :artistbrowse_type, [:full, :no_tracks, :no_albums]
|
79
|
+
|
80
|
+
#
|
81
|
+
# Search
|
82
|
+
#
|
83
|
+
callback :search_complete_cb, [Search.retaining_class, :userdata], :void
|
84
|
+
enum :search_type, [:standard, :suggest]
|
85
|
+
|
86
|
+
#
|
87
|
+
# Playlist
|
88
|
+
#
|
89
|
+
enum :playlist_type, [:playlist, :start_folder, :end_folder, :placeholder]
|
90
|
+
enum :playlist_offline_status, [:no, :yes, :downloading, :waiting]
|
91
|
+
|
92
|
+
#
|
93
|
+
# User
|
94
|
+
#
|
95
|
+
enum :relation_type, [:unknown, :none, :unidirectional, :bidirectional]
|
96
|
+
|
97
|
+
#
|
98
|
+
# Toplist
|
99
|
+
#
|
100
|
+
callback :toplistbrowse_complete_cb, [ToplistBrowse.retaining_class, :userdata], :void
|
101
|
+
enum :toplisttype, [:artists, :albums, :tracks]
|
102
|
+
enum :toplistregion, [:everywhere, :user]
|
103
|
+
|
104
|
+
#
|
105
|
+
# Inbox
|
106
|
+
#
|
107
|
+
callback :inboxpost_complete_cb, [Inbox.retaining_class, :userdata], :void
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Spotify
|
2
|
+
# A generic error class for Spotify errors.
|
3
|
+
class Error < StandardError
|
4
|
+
class << self
|
5
|
+
# Explain a Spotify error with a descriptive message.
|
6
|
+
#
|
7
|
+
# @param [Symbol, Integer] error
|
8
|
+
# @return [String] a decriptive string of the error
|
9
|
+
def explain(error)
|
10
|
+
error, symbol = disambiguate(error)
|
11
|
+
|
12
|
+
message = []
|
13
|
+
message << "[#{symbol.to_s.upcase}]"
|
14
|
+
message << Spotify.error_message(error)
|
15
|
+
message << "(#{error})"
|
16
|
+
|
17
|
+
message.join(' ')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Given a number or a symbol, find both the symbol and the error
|
21
|
+
# number it represents.
|
22
|
+
#
|
23
|
+
# @example given an integer
|
24
|
+
# Spotify::Error.disambiguate(0) # => [0, :ok]
|
25
|
+
#
|
26
|
+
# @example given a symbol
|
27
|
+
# Spotify::Error.disambiguate(:ok) # => [0, :ok]
|
28
|
+
#
|
29
|
+
# @example given bogus
|
30
|
+
# Spotify::Error.disambiguate(:bogus) # => [-1, nil]
|
31
|
+
#
|
32
|
+
# @param [Symbol, Fixnum] error
|
33
|
+
# @return [[Fixnum, Symbol]] (error code, error symbol)
|
34
|
+
def disambiguate(error)
|
35
|
+
@enum ||= Spotify.enum_type(:error)
|
36
|
+
|
37
|
+
if error.is_a? Symbol
|
38
|
+
error = @enum[symbol = error]
|
39
|
+
else
|
40
|
+
symbol = @enum[error]
|
41
|
+
end
|
42
|
+
|
43
|
+
if error.nil? || symbol.nil?
|
44
|
+
[-1, nil]
|
45
|
+
else
|
46
|
+
[error, symbol]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Overridden to allow raising errors with just an error code.
|
52
|
+
#
|
53
|
+
# @param [Integer, String] code_or_message spotify error code, or string message.
|
54
|
+
def initialize(code_or_message = nil)
|
55
|
+
if code_or_message.is_a?(Integer) or code_or_message.is_a?(Symbol)
|
56
|
+
code_or_message &&= self.class.explain(code_or_message)
|
57
|
+
end
|
58
|
+
|
59
|
+
super(code_or_message)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|