spotify 10.3.0 → 11.0.0
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/lib/spotify.rb +47 -38
- data/lib/spotify/version.rb +1 -1
- data/spec/api.h +173 -64
- metadata +13 -13
data/lib/spotify.rb
CHANGED
@@ -10,27 +10,43 @@ require 'spotify/version'
|
|
10
10
|
# @see http://developer.spotify.com/en/libspotify/docs/
|
11
11
|
module Spotify
|
12
12
|
extend FFI::Library
|
13
|
-
|
13
|
+
|
14
|
+
begin
|
15
|
+
ffi_lib ['libspotify', '/Library/Frameworks/libspotify.framework/libspotify']
|
16
|
+
rescue LoadError => e
|
17
|
+
puts "Failed to load the `libspotify` library. Please make sure you have it
|
18
|
+
installed, either globally on your system, in your LD_LIBRARY_PATH, or in
|
19
|
+
your current working directory (#{Dir.pwd}).
|
20
|
+
|
21
|
+
For installation instructions, please see:
|
22
|
+
https://github.com/Burgestrand/Hallon/wiki/How-to-install-libspotify".gsub(/^ */, '')
|
23
|
+
puts
|
24
|
+
raise
|
25
|
+
end
|
14
26
|
|
15
27
|
module UTF8String
|
16
28
|
extend FFI::DataConverter
|
17
29
|
native_type FFI::Type::STRING
|
18
30
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
value
|
23
|
-
|
24
|
-
|
31
|
+
if "".respond_to?(:encode)
|
32
|
+
# convert a Ruby string of any encoding to UTF-8 string
|
33
|
+
def self.to_native(value, ctx)
|
34
|
+
if value
|
35
|
+
value.encode('UTF-8')
|
36
|
+
else
|
37
|
+
super
|
38
|
+
end
|
25
39
|
end
|
26
40
|
end
|
27
41
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
value
|
32
|
-
|
33
|
-
|
42
|
+
if "".respond_to?(:force_encoding)
|
43
|
+
# converts encoding from native BINARY string to UTF-8
|
44
|
+
def self.from_native(value, ctx)
|
45
|
+
if value
|
46
|
+
value.force_encoding('UTF-8')
|
47
|
+
else
|
48
|
+
super
|
49
|
+
end
|
34
50
|
end
|
35
51
|
end
|
36
52
|
end
|
@@ -204,7 +220,8 @@ module Spotify
|
|
204
220
|
:stop_playback, callback([ :session ], :void),
|
205
221
|
:get_audio_buffer_stats, callback([ :session, AudioBufferStats ], :void),
|
206
222
|
:offline_status_updated, callback([ :session ], :void),
|
207
|
-
:offline_error, callback([ :session, :error ], :void)
|
223
|
+
:offline_error, callback([ :session, :error ], :void),
|
224
|
+
:credentials_blob_updated, callback([ :session, :string ], :void)
|
208
225
|
end
|
209
226
|
|
210
227
|
# FFI::Struct for Session configuration.
|
@@ -273,7 +290,7 @@ module Spotify
|
|
273
290
|
attach_function :session_release, :sp_session_release, [ :session ], :void
|
274
291
|
|
275
292
|
attach_function :session_process_events, :sp_session_process_events, [ :session, :buffer_out ], :void
|
276
|
-
attach_function :session_login, :sp_session_login, [ :session, :utf8_string, :string, :bool ], :void
|
293
|
+
attach_function :session_login, :sp_session_login, [ :session, :utf8_string, :string, :bool, :string ], :void
|
277
294
|
attach_function :session_relogin, :sp_session_relogin, [ :session ], :error
|
278
295
|
attach_function :session_forget_me, :sp_session_forget_me, [ :session ], :void
|
279
296
|
attach_function :session_remembered_user, :sp_session_remembered_user, [ :session, :buffer_out, :size_t ], :int
|
@@ -309,6 +326,8 @@ module Spotify
|
|
309
326
|
attach_function :session_set_volume_normalization, :sp_session_set_volume_normalization, [ :session, :bool ], :void
|
310
327
|
attach_function :session_get_volume_normalization, :sp_session_get_volume_normalization, [ :session ], :bool
|
311
328
|
|
329
|
+
attach_function :session_flush_caches, :sp_session_flush_caches, [ :session ], :void
|
330
|
+
|
312
331
|
#
|
313
332
|
# Link
|
314
333
|
#
|
@@ -367,6 +386,7 @@ module Spotify
|
|
367
386
|
attach_function :track_disc, :sp_track_disc, [ :track ], :int
|
368
387
|
attach_function :track_index, :sp_track_index, [ :track ], :int
|
369
388
|
attach_function :track_is_placeholder, :sp_track_is_placeholder, [ :track ], :bool
|
389
|
+
attach_function :track_get_playable, :sp_track_get_playable, [ :session, :track ], :track
|
370
390
|
|
371
391
|
attach_function :track_offline_get_status, :sp_track_offline_get_status, [ :track ], :track_offline_status
|
372
392
|
|
@@ -452,6 +472,8 @@ module Spotify
|
|
452
472
|
attach_function :artistbrowse_similar_artist, :sp_artistbrowse_similar_artist, [ :artistbrowse, :int ], :artist
|
453
473
|
attach_function :artistbrowse_biography, :sp_artistbrowse_biography, [ :artistbrowse ], :utf8_string
|
454
474
|
attach_function :artistbrowse_backend_request_duration, :sp_artistbrowse_backend_request_duration, [ :artistbrowse ], :int
|
475
|
+
attach_function :artistbrowse_num_tophit_tracks, :sp_artistbrowse_num_tophit_tracks, [ :artistbrowse ], :int
|
476
|
+
attach_function :artistbrowse_tophit_track, :sp_artistbrowse_tophit_track, [ :artistbrowse, :int ], :track
|
455
477
|
|
456
478
|
attach_function :artistbrowse_add_ref, :sp_artistbrowse_add_ref, [ :artistbrowse ], :void
|
457
479
|
attach_function :artistbrowse_release, :sp_artistbrowse_release, [ :artistbrowse ], :void
|
@@ -483,31 +505,10 @@ module Spotify
|
|
483
505
|
#
|
484
506
|
# @see http://developer.spotify.com/en/libspotify/docs/group__search.html
|
485
507
|
|
486
|
-
|
487
|
-
enum :radio_genre, [
|
488
|
-
:alt_pop_rock, 0x1,
|
489
|
-
:blues , 0x2,
|
490
|
-
:country , 0x4,
|
491
|
-
:disco , 0x8,
|
492
|
-
:funk , 0x10,
|
493
|
-
:hard_rock , 0x20,
|
494
|
-
:heavy_metal , 0x40,
|
495
|
-
:rap , 0x80,
|
496
|
-
:house , 0x100,
|
497
|
-
:jazz , 0x200,
|
498
|
-
:new_wave , 0x400,
|
499
|
-
:rnb , 0x800,
|
500
|
-
:pop , 0x1000,
|
501
|
-
:punk , 0x2000,
|
502
|
-
:reggae , 0x4000,
|
503
|
-
:pop_rock , 0x8000,
|
504
|
-
:soul , 0x10000,
|
505
|
-
:techno , 0x20000
|
506
|
-
]
|
508
|
+
enum :search_type, [:standard, :suggest]
|
507
509
|
|
508
510
|
callback :search_complete_cb, [:search, :userdata], :void
|
509
|
-
attach_function :search_create, :sp_search_create, [ :session, :utf8_string, :int, :int, :int, :int, :int, :int, :search_complete_cb, :userdata ], :search
|
510
|
-
attach_function :radio_search_create, :sp_radio_search_create, [ :session, :uint, :uint, :radio_genre, :search_complete_cb, :userdata ], :search
|
511
|
+
attach_function :search_create, :sp_search_create, [ :session, :utf8_string, :int, :int, :int, :int, :int, :int, :int, :int, :search_type, :search_complete_cb, :userdata ], :search
|
511
512
|
attach_function :search_is_loaded, :sp_search_is_loaded, [ :search ], :bool
|
512
513
|
attach_function :search_error, :sp_search_error, [ :search ], :error
|
513
514
|
attach_function :search_num_tracks, :sp_search_num_tracks, [ :search ], :int
|
@@ -522,6 +523,11 @@ module Spotify
|
|
522
523
|
attach_function :search_total_albums, :sp_search_total_albums, [ :search ], :int
|
523
524
|
attach_function :search_total_artists, :sp_search_total_artists, [ :search ], :int
|
524
525
|
|
526
|
+
attach_function :search_num_playlists, :sp_search_num_playlists, [ :search ], :int
|
527
|
+
attach_function :search_playlist_name, :sp_search_playlist_name, [ :search, :int ], :utf8_string
|
528
|
+
attach_function :search_playlist_uri, :sp_search_playlist_uri, [ :search, :int ], :utf8_string
|
529
|
+
attach_function :search_playlist_image_uri, :sp_search_playlist_image_uri, [ :search, :int ], :utf8_string
|
530
|
+
|
525
531
|
attach_function :search_add_ref, :sp_search_add_ref, [ :search ], :void
|
526
532
|
attach_function :search_release, :sp_search_release, [ :search ], :void
|
527
533
|
|
@@ -658,6 +664,9 @@ module Spotify
|
|
658
664
|
attach_function :playlistcontainer_owner, :sp_playlistcontainer_owner, [ :playlistcontainer ], :user
|
659
665
|
attach_function :playlistcontainer_is_loaded, :sp_playlistcontainer_is_loaded, [ :playlistcontainer ], :bool
|
660
666
|
|
667
|
+
attach_function :playlistcontainer_get_unseen_tracks, :sp_playlistcontainer_get_unseen_tracks, [ :playlistcontainer, :playlist, :array, :int ], :int
|
668
|
+
attach_function :playlistcontainer_clear_unseen_tracks, :sp_playlistcontainer_clear_unseen_tracks, [ :playlistcontainer, :playlist ], :int
|
669
|
+
|
661
670
|
attach_function :playlistcontainer_add_ref, :sp_playlistcontainer_add_ref, [ :playlistcontainer ], :void
|
662
671
|
attach_function :playlistcontainer_release, :sp_playlistcontainer_release, [ :playlistcontainer ], :void
|
663
672
|
|
data/lib/spotify/version.rb
CHANGED
data/spec/api.h
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2006-
|
2
|
+
* Copyright (c) 2006-2012 Spotify Ltd
|
3
3
|
*
|
4
4
|
* The terms of use for this and related files can be read in
|
5
5
|
* the associated LICENSE file, usually stored in share/doc/libspotify/LICENSE.
|
@@ -43,7 +43,6 @@ extern "C" {
|
|
43
43
|
/* Includes */
|
44
44
|
#include <stddef.h>
|
45
45
|
|
46
|
-
//endif
|
47
46
|
|
48
47
|
#ifdef _WIN32
|
49
48
|
typedef unsigned __int64 sp_uint64;
|
@@ -122,7 +121,6 @@ typedef enum sp_error {
|
|
122
121
|
SP_ERROR_INVALID_DEVICE_ID = 25, ///< Invalid device ID
|
123
122
|
SP_ERROR_CANT_OPEN_TRACE_FILE = 26, ///< Unable to open trace file
|
124
123
|
SP_ERROR_APPLICATION_BANNED = 27, ///< This application is no longer allowed to use the Spotify service
|
125
|
-
//endif
|
126
124
|
SP_ERROR_OFFLINE_TOO_MANY_TRACKS = 31, ///< Reached the device limit for number of tracks to download
|
127
125
|
SP_ERROR_OFFLINE_DISK_CACHE = 32, ///< Disk cache is full so no more tracks can be downloaded to offline mode
|
128
126
|
SP_ERROR_OFFLINE_EXPIRED = 33, ///< Offline key has expired, the user needs to go online again
|
@@ -132,7 +130,8 @@ typedef enum sp_error {
|
|
132
130
|
} sp_error;
|
133
131
|
|
134
132
|
/**
|
135
|
-
* Convert a numeric libspotify error code to a text string
|
133
|
+
* Convert a numeric libspotify error code to a text string. The error message is in
|
134
|
+
* English. This function is useful for logging purposes.
|
136
135
|
*
|
137
136
|
* @param[in] error The error code to lookup
|
138
137
|
*/
|
@@ -141,6 +140,7 @@ SP_LIBEXPORT(const char*) sp_error_message(sp_error error);
|
|
141
140
|
/** @} */
|
142
141
|
|
143
142
|
|
143
|
+
|
144
144
|
/**
|
145
145
|
* @defgroup session Session handling
|
146
146
|
*
|
@@ -160,7 +160,7 @@ SP_LIBEXPORT(const char*) sp_error_message(sp_error error);
|
|
160
160
|
* returned from sp_session_create(). Future versions of the library will provide you with some kind of mechanism
|
161
161
|
* to request an updated version of the library.
|
162
162
|
*/
|
163
|
-
#define SPOTIFY_API_VERSION
|
163
|
+
#define SPOTIFY_API_VERSION 11
|
164
164
|
|
165
165
|
/**
|
166
166
|
* Describes the current state of the connection
|
@@ -194,9 +194,9 @@ typedef struct sp_audioformat {
|
|
194
194
|
* Bitrate definitions for music streaming
|
195
195
|
*/
|
196
196
|
typedef enum sp_bitrate {
|
197
|
-
SP_BITRATE_160k
|
198
|
-
SP_BITRATE_320k
|
199
|
-
SP_BITRATE_96k
|
197
|
+
SP_BITRATE_160k = 0, ///< Bitrate 160kbps
|
198
|
+
SP_BITRATE_320k = 1, ///< Bitrate 320kbps
|
199
|
+
SP_BITRATE_96k = 2, ///< Bitrate 96kbps
|
200
200
|
} sp_bitrate;
|
201
201
|
|
202
202
|
/**
|
@@ -209,6 +209,16 @@ typedef enum sp_playlist_type {
|
|
209
209
|
SP_PLAYLIST_TYPE_PLACEHOLDER = 3, ///< Unknown entry.
|
210
210
|
} sp_playlist_type;
|
211
211
|
|
212
|
+
|
213
|
+
|
214
|
+
/**
|
215
|
+
* Search types
|
216
|
+
*/
|
217
|
+
typedef enum sp_search_type {
|
218
|
+
SP_SEARCH_STANDARD = 0,
|
219
|
+
SP_SEARCH_SUGGEST = 1,
|
220
|
+
} sp_search_type;
|
221
|
+
|
212
222
|
/**
|
213
223
|
* Playlist offline status
|
214
224
|
*/
|
@@ -290,7 +300,8 @@ typedef enum sp_connection_rules {
|
|
290
300
|
* Controls the type of data that will be included in artist browse queries
|
291
301
|
*/
|
292
302
|
typedef enum sp_artistbrowse_type {
|
293
|
-
SP_ARTISTBROWSE_FULL, /**< All information
|
303
|
+
SP_ARTISTBROWSE_FULL, /**< All information except tophit tracks
|
304
|
+
This mode is deprecated and will removed in a future release */
|
294
305
|
SP_ARTISTBROWSE_NO_TRACKS, /**< Only albums and data about them, no tracks.
|
295
306
|
In other words, sp_artistbrowse_num_tracks() will return 0
|
296
307
|
*/
|
@@ -380,7 +391,6 @@ typedef struct sp_session_callbacks {
|
|
380
391
|
* @param[in] session Session
|
381
392
|
*/
|
382
393
|
void (SP_CALLCONV *logged_out)(sp_session *session);
|
383
|
-
|
384
394
|
/**
|
385
395
|
* Called whenever metadata has been updated
|
386
396
|
*
|
@@ -456,7 +466,18 @@ typedef struct sp_session_callbacks {
|
|
456
466
|
int (SP_CALLCONV *music_delivery)(sp_session *session, const sp_audioformat *format, const void *frames, int num_frames);
|
457
467
|
|
458
468
|
/**
|
459
|
-
* Music has been paused because
|
469
|
+
* Music has been paused because an account only allows music
|
470
|
+
* to be played from one location simultaneously.
|
471
|
+
*
|
472
|
+
* @note When this callback is invoked the application should
|
473
|
+
* behave just as if the user pressed the pause
|
474
|
+
* button. The application should also display a message
|
475
|
+
* to the user indicating the playback has been paused
|
476
|
+
* because another application is playing using the same
|
477
|
+
* account.
|
478
|
+
*
|
479
|
+
* @note IT MUST NOT automatically resume playback but must
|
480
|
+
* instead wait for the user to press play.
|
460
481
|
*
|
461
482
|
* @param[in] session Session
|
462
483
|
*/
|
@@ -474,8 +495,7 @@ typedef struct sp_session_callbacks {
|
|
474
495
|
* End of track.
|
475
496
|
* Called when the currently played track has reached its end.
|
476
497
|
*
|
477
|
-
* @note This function is invoked from the
|
478
|
-
* as the music delivery callback
|
498
|
+
* @note This function is invoked from the main thread
|
479
499
|
*
|
480
500
|
* @param[in] session Session
|
481
501
|
*/
|
@@ -483,7 +503,7 @@ typedef struct sp_session_callbacks {
|
|
483
503
|
|
484
504
|
/**
|
485
505
|
* Streaming error.
|
486
|
-
* Called when streaming cannot start or continue
|
506
|
+
* Called when streaming cannot start or continue.
|
487
507
|
*
|
488
508
|
* @note This function is invoked from the main thread
|
489
509
|
*
|
@@ -557,7 +577,17 @@ typedef struct sp_session_callbacks {
|
|
557
577
|
*/
|
558
578
|
void (SP_CALLCONV *offline_error)(sp_session *session, sp_error error);
|
559
579
|
|
560
|
-
|
580
|
+
/**
|
581
|
+
* Called when storable credentials have been updated, usually called when
|
582
|
+
* we have connected to the AP.
|
583
|
+
*
|
584
|
+
* @param[in] session Session
|
585
|
+
* @param[in] blob Blob is a null-terminated string which contains
|
586
|
+
* an encrypted token that can be stored safely on disk
|
587
|
+
* instead of storing plaintext passwords.
|
588
|
+
*/
|
589
|
+
void (SP_CALLCONV *credentials_blob_updated)(sp_session *session, const char *blob);
|
590
|
+
|
561
591
|
} sp_session_callbacks;
|
562
592
|
|
563
593
|
/**
|
@@ -603,10 +633,13 @@ typedef struct sp_session_config {
|
|
603
633
|
bool initially_unload_playlists;
|
604
634
|
|
605
635
|
/**
|
606
|
-
* Device ID for offline synchronization
|
636
|
+
* Device ID for offline synchronization and logging purposes. The Device Id must be unique to the particular device instance,
|
637
|
+
* i.e. no two units must supply the same Device ID. The Device ID must not change between sessions or power cycles.
|
638
|
+
* Good examples is the device's MAC address or unique serial number.
|
607
639
|
*/
|
608
640
|
const char *device_id;
|
609
641
|
|
642
|
+
|
610
643
|
/**
|
611
644
|
* Path to API trace file
|
612
645
|
*/
|
@@ -661,8 +694,10 @@ SP_LIBEXPORT(void) sp_session_release(sp_session *sess);
|
|
661
694
|
* @param[in] username The username to log in
|
662
695
|
* @param[in] password The password for the specified username
|
663
696
|
* @param[in] remember_me If set, the username / password will be remembered by libspotify
|
697
|
+
* @param[in] blob If you have received a blob in the #credentials_blob_updated
|
698
|
+
* you can pas this here instead of password
|
664
699
|
*/
|
665
|
-
SP_LIBEXPORT(void) sp_session_login(sp_session *session, const char *username, const char *password, bool remember_me);
|
700
|
+
SP_LIBEXPORT(void) sp_session_login(sp_session *session, const char *username, const char *password, bool remember_me, const char *blob);
|
666
701
|
|
667
702
|
|
668
703
|
/**
|
@@ -722,6 +757,19 @@ SP_LIBEXPORT(sp_user *) sp_session_user(sp_session *session);
|
|
722
757
|
*/
|
723
758
|
SP_LIBEXPORT(void) sp_session_logout(sp_session *session);
|
724
759
|
|
760
|
+
|
761
|
+
/**
|
762
|
+
* Flush the caches
|
763
|
+
*
|
764
|
+
* This will make libspotify write all data that is meant to be stored
|
765
|
+
* on disk to the disk immediately. libspotify does this periodically
|
766
|
+
* by itself and also on logout. So under normal conditions this
|
767
|
+
* should never need to be used.
|
768
|
+
*
|
769
|
+
* @param[in] session Your session object
|
770
|
+
*/
|
771
|
+
SP_LIBEXPORT(void) sp_session_flush_caches(sp_session *session);
|
772
|
+
|
725
773
|
/**
|
726
774
|
* The connection state of the specified session.
|
727
775
|
*
|
@@ -923,7 +971,6 @@ SP_LIBEXPORT(bool) sp_session_get_volume_normalization(sp_session *session);
|
|
923
971
|
*/
|
924
972
|
SP_LIBEXPORT(void) sp_session_set_volume_normalization(sp_session *session, bool on);
|
925
973
|
|
926
|
-
//endif
|
927
974
|
|
928
975
|
/**
|
929
976
|
* Set to true if the connection is currently routed over a roamed connectivity
|
@@ -934,6 +981,7 @@ SP_LIBEXPORT(void) sp_session_set_volume_normalization(sp_session *session, bool
|
|
934
981
|
* @note Used in conjunction with sp_session_set_connection_rules() to control
|
935
982
|
* how libspotify should behave in respect to network activity and offline
|
936
983
|
* synchronization.
|
984
|
+
* @see sp_connection_type
|
937
985
|
*/
|
938
986
|
SP_LIBEXPORT(void) sp_session_set_connection_type(sp_session *session, sp_connection_type type);
|
939
987
|
|
@@ -947,6 +995,7 @@ SP_LIBEXPORT(void) sp_session_set_connection_type(sp_session *session, sp_connec
|
|
947
995
|
* @note Used in conjunction with sp_session_set_connection_type() to control
|
948
996
|
* how libspotify should behave in respect to network activity and offline
|
949
997
|
* synchronization.
|
998
|
+
* @see sp_connection_rules
|
950
999
|
*/
|
951
1000
|
SP_LIBEXPORT(void) sp_session_set_connection_rules(sp_session *session, sp_connection_rules rules);
|
952
1001
|
|
@@ -1355,6 +1404,18 @@ SP_LIBEXPORT(bool) sp_track_is_local(sp_session *session, sp_track *track);
|
|
1355
1404
|
*/
|
1356
1405
|
SP_LIBEXPORT(bool) sp_track_is_autolinked(sp_session *session, sp_track *track);
|
1357
1406
|
|
1407
|
+
|
1408
|
+
/**
|
1409
|
+
* Return the actual track that will be played if the given track is played
|
1410
|
+
*
|
1411
|
+
* @param[in] session Session
|
1412
|
+
* @param[in] track The track
|
1413
|
+
*
|
1414
|
+
* @return A track
|
1415
|
+
*
|
1416
|
+
*/
|
1417
|
+
SP_LIBEXPORT(sp_track *) sp_track_get_playable(sp_session *session, sp_track *track);
|
1418
|
+
|
1358
1419
|
/**
|
1359
1420
|
* Return true if the track is a placeholder. Placeholder tracks are used
|
1360
1421
|
* to store other objects than tracks in the playlist. Currently this is
|
@@ -1652,7 +1713,7 @@ SP_LIBEXPORT(bool) sp_artist_is_loaded(sp_artist *artist);
|
|
1652
1713
|
* @param[in] artist The artist object
|
1653
1714
|
*
|
1654
1715
|
* @return ID byte sequence that can be passed to sp_image_create()
|
1655
|
-
* If the
|
1716
|
+
* If the artist has no image or the metadata for the album is not
|
1656
1717
|
* loaded yet, this function returns NULL.
|
1657
1718
|
*
|
1658
1719
|
*/
|
@@ -1948,6 +2009,30 @@ SP_LIBEXPORT(int) sp_artistbrowse_num_tracks(sp_artistbrowse *arb);
|
|
1948
2009
|
*/
|
1949
2010
|
SP_LIBEXPORT(sp_track *) sp_artistbrowse_track(sp_artistbrowse *arb, int index);
|
1950
2011
|
|
2012
|
+
|
2013
|
+
/**
|
2014
|
+
* Given an artist browse object, return number of tophit tracks
|
2015
|
+
* This is a set of tracks for the artist with highest popularity
|
2016
|
+
*
|
2017
|
+
* @param[in] arb Artist browse object
|
2018
|
+
*
|
2019
|
+
* @return Number of tophit tracks for given artist
|
2020
|
+
*/
|
2021
|
+
SP_LIBEXPORT(int) sp_artistbrowse_num_tophit_tracks(sp_artistbrowse *arb);
|
2022
|
+
|
2023
|
+
/**
|
2024
|
+
* Given an artist browse object, return one of its tophit tracks
|
2025
|
+
* This is a set of tracks for the artist with highest popularity
|
2026
|
+
*
|
2027
|
+
* @param[in] arb Album browse object
|
2028
|
+
* @param[in] index The index for the track. Should be in the interval [0, sp_artistbrowse_num_tophit_tracks() - 1]
|
2029
|
+
*
|
2030
|
+
* @return A track object, or NULL if the index is out of range.
|
2031
|
+
*
|
2032
|
+
* @see track
|
2033
|
+
*/
|
2034
|
+
SP_LIBEXPORT(sp_track *) sp_artistbrowse_tophit_track(sp_artistbrowse *arb, int index);
|
2035
|
+
|
1951
2036
|
/**
|
1952
2037
|
* Given an artist browse object, return number of albums
|
1953
2038
|
*
|
@@ -2173,36 +2258,11 @@ SP_LIBEXPORT(void) sp_image_release(sp_image *image);
|
|
2173
2258
|
|
2174
2259
|
|
2175
2260
|
|
2176
|
-
|
2177
2261
|
/**
|
2178
2262
|
* @defgroup search Search subsystem
|
2179
2263
|
* @{
|
2180
2264
|
*/
|
2181
2265
|
|
2182
|
-
/**
|
2183
|
-
* List of genres for radio query. Multiple genres can be combined by OR:ing the genres together
|
2184
|
-
*/
|
2185
|
-
typedef enum sp_radio_genre {
|
2186
|
-
SP_RADIO_GENRE_ALT_POP_ROCK = 0x1,
|
2187
|
-
SP_RADIO_GENRE_BLUES = 0x2,
|
2188
|
-
SP_RADIO_GENRE_COUNTRY = 0x4,
|
2189
|
-
SP_RADIO_GENRE_DISCO = 0x8,
|
2190
|
-
SP_RADIO_GENRE_FUNK = 0x10,
|
2191
|
-
SP_RADIO_GENRE_HARD_ROCK = 0x20,
|
2192
|
-
SP_RADIO_GENRE_HEAVY_METAL = 0x40,
|
2193
|
-
SP_RADIO_GENRE_RAP = 0x80,
|
2194
|
-
SP_RADIO_GENRE_HOUSE = 0x100,
|
2195
|
-
SP_RADIO_GENRE_JAZZ = 0x200,
|
2196
|
-
SP_RADIO_GENRE_NEW_WAVE = 0x400,
|
2197
|
-
SP_RADIO_GENRE_RNB = 0x800,
|
2198
|
-
SP_RADIO_GENRE_POP = 0x1000,
|
2199
|
-
SP_RADIO_GENRE_PUNK = 0x2000,
|
2200
|
-
SP_RADIO_GENRE_REGGAE = 0x4000,
|
2201
|
-
SP_RADIO_GENRE_POP_ROCK = 0x8000,
|
2202
|
-
SP_RADIO_GENRE_SOUL = 0x10000,
|
2203
|
-
SP_RADIO_GENRE_TECHNO = 0x20000,
|
2204
|
-
} sp_radio_genre;
|
2205
|
-
|
2206
2266
|
/**
|
2207
2267
|
* The type of a callback used in sp_search_create()
|
2208
2268
|
*
|
@@ -2225,28 +2285,16 @@ typedef void SP_CALLCONV search_complete_cb(sp_search *result, void *userdata);
|
|
2225
2285
|
* @param[in] album_offset The offset among the albums of the result
|
2226
2286
|
* @param[in] album_count The number of albums to ask for
|
2227
2287
|
* @param[in] artist_offset The offset among the artists of the result
|
2228
|
-
* @param[in] artist_count
|
2288
|
+
* @param[in] artist_count The number of artists to ask for
|
2289
|
+
* @param[in] playlist_offset The offset among the playlists of the result
|
2290
|
+
* @param[in] playlist_count The number of playlists to ask for
|
2291
|
+
* @param[in] search_type Type of search, can be used for suggest searches
|
2229
2292
|
* @param[in] callback Callback that will be called once the search operation is complete. Pass NULL if you are not interested in this event.
|
2230
2293
|
* @param[in] userdata Opaque pointer passed to \p callback
|
2231
2294
|
*
|
2232
2295
|
* @return Pointer to a search object. To free the object, use sp_search_release()
|
2233
2296
|
*/
|
2234
|
-
SP_LIBEXPORT(sp_search *) sp_search_create(sp_session *session, const char *query, int track_offset, int track_count, int album_offset, int album_count, int artist_offset, int artist_count, search_complete_cb *callback, void *userdata);
|
2235
|
-
|
2236
|
-
/**
|
2237
|
-
* Create a search object from the radio channel
|
2238
|
-
*
|
2239
|
-
* @param[in] session Session
|
2240
|
-
* @param[in] from_year Include tracks starting from this year
|
2241
|
-
* @param[in] to_year Include tracks up to this year
|
2242
|
-
* @param[in] genres Bitmask of genres to include
|
2243
|
-
* @param[in] callback Callback that will be called once the search operation is complete. Pass NULL if you are not interested in this event.
|
2244
|
-
* @param[in] userdata Opaque pointer passed to \p callback
|
2245
|
-
*
|
2246
|
-
* @return Pointer to a search object. To free the object, use sp_search_release()
|
2247
|
-
*/
|
2248
|
-
SP_LIBEXPORT(sp_search *) sp_radio_search_create(sp_session *session, unsigned int from_year, unsigned int to_year, sp_radio_genre genres, search_complete_cb *callback, void *userdata);
|
2249
|
-
|
2297
|
+
SP_LIBEXPORT(sp_search *) sp_search_create(sp_session *session, const char *query, int track_offset, int track_count, int album_offset, int album_count, int artist_offset, int artist_count, int playlist_offset, int playlist_count, sp_search_type search_type, search_complete_cb *callback, void *userdata);
|
2250
2298
|
|
2251
2299
|
/**
|
2252
2300
|
* Get load status for the specified search. Before it is loaded, it will behave as an empty search result.
|
@@ -2308,6 +2356,45 @@ SP_LIBEXPORT(int) sp_search_num_albums(sp_search *search);
|
|
2308
2356
|
*/
|
2309
2357
|
SP_LIBEXPORT(sp_album *) sp_search_album(sp_search *search, int index);
|
2310
2358
|
|
2359
|
+
/**
|
2360
|
+
* Get the number of playlists for the specified search
|
2361
|
+
*
|
2362
|
+
* @param[in] search Search object
|
2363
|
+
*
|
2364
|
+
* @return The number of playlists for the specified search
|
2365
|
+
*/
|
2366
|
+
SP_LIBEXPORT(int) sp_search_num_playlists(sp_search *search);
|
2367
|
+
|
2368
|
+
/**
|
2369
|
+
* Return the playlist at the given index in the given search object
|
2370
|
+
*
|
2371
|
+
* @param[in] search Search object
|
2372
|
+
* @param[in] index Index of the wanted playlist. Should be in the interval [0, sp_search_num_playlists() - 1]
|
2373
|
+
*
|
2374
|
+
* @return The playlist name at the given index in the given search object
|
2375
|
+
*/
|
2376
|
+
SP_LIBEXPORT(const char *) sp_search_playlist_name(sp_search *search, int index);
|
2377
|
+
|
2378
|
+
/**
|
2379
|
+
* Return the uri of a playlist at the given index in the given search object
|
2380
|
+
*
|
2381
|
+
* @param[in] search Search object
|
2382
|
+
* @param[in] index Index of the wanted playlist. Should be in the interval [0, sp_search_num_playlists() - 1]
|
2383
|
+
*
|
2384
|
+
* @return The playlist uri at the given index in the given search object
|
2385
|
+
*/
|
2386
|
+
SP_LIBEXPORT(const char *) sp_search_playlist_uri(sp_search *search, int index);
|
2387
|
+
|
2388
|
+
/**
|
2389
|
+
* Return the image_uri of a playlist at the given index in the given search object
|
2390
|
+
*
|
2391
|
+
* @param[in] search Search object
|
2392
|
+
* @param[in] index Index of the wanted playlist. Should be in the interval [0, sp_search_num_playlists() - 1]
|
2393
|
+
*
|
2394
|
+
* @return The playlist image_uri at the given index in the given search object
|
2395
|
+
*/
|
2396
|
+
SP_LIBEXPORT(const char *) sp_search_playlist_image_uri(sp_search *search, int index);
|
2397
|
+
|
2311
2398
|
/**
|
2312
2399
|
* Get the number of artists for the specified search
|
2313
2400
|
*
|
@@ -2396,6 +2483,7 @@ SP_LIBEXPORT(void) sp_search_release(sp_search *search);
|
|
2396
2483
|
|
2397
2484
|
|
2398
2485
|
|
2486
|
+
|
2399
2487
|
/**
|
2400
2488
|
* @defgroup playlist Playlist subsystem
|
2401
2489
|
*
|
@@ -3223,6 +3311,30 @@ SP_LIBEXPORT(void) sp_playlistcontainer_add_ref(sp_playlistcontainer *pc);
|
|
3223
3311
|
*/
|
3224
3312
|
SP_LIBEXPORT(void) sp_playlistcontainer_release(sp_playlistcontainer *pc);
|
3225
3313
|
|
3314
|
+
/**
|
3315
|
+
* Get the number of new tracks in a playlist since the corresponding
|
3316
|
+
* function sp_playlistcontainer_clear_unseen_tracks() was called. The
|
3317
|
+
* function always returns the number of new tracks, and fills the
|
3318
|
+
* \p tracks array with the new tracks, but not more than specified in
|
3319
|
+
* \p num_tracks. The function will return a negative value on failure.
|
3320
|
+
*
|
3321
|
+
* @param[in] pc Playlist container.
|
3322
|
+
* @param[in] playlist Playlist object.
|
3323
|
+
* @param[out] tracks Array of pointer to new tracks (maybe NULL)
|
3324
|
+
* @param[in] num_tracks Size of tracks array
|
3325
|
+
* @return Returns the number of unseen tracks
|
3326
|
+
*/
|
3327
|
+
SP_LIBEXPORT(int) sp_playlistcontainer_get_unseen_tracks(sp_playlistcontainer *pc, sp_playlist *playlist, sp_track **tracks, int num_tracks);
|
3328
|
+
|
3329
|
+
/**
|
3330
|
+
* Clears a playlist from unseen tracks, so that next call to sp_playlistcontainer_get_unseen_tracks() will return 0 until a new track is added to the \p playslist.
|
3331
|
+
*
|
3332
|
+
* @param[in] pc Playlist container.
|
3333
|
+
* @param[in] playlist Playlist object.
|
3334
|
+
* @return Returns 0 on success and -1 on failure.
|
3335
|
+
*/
|
3336
|
+
SP_LIBEXPORT(int) sp_playlistcontainer_clear_unseen_tracks(sp_playlistcontainer *pc, sp_playlist *playlist);
|
3337
|
+
|
3226
3338
|
/** @} */
|
3227
3339
|
|
3228
3340
|
|
@@ -3275,7 +3387,6 @@ SP_LIBEXPORT(const char *) sp_user_display_name(sp_user *user);
|
|
3275
3387
|
*/
|
3276
3388
|
SP_LIBEXPORT(bool) sp_user_is_loaded(sp_user *user);
|
3277
3389
|
|
3278
|
-
//endif
|
3279
3390
|
|
3280
3391
|
/**
|
3281
3392
|
* Increase the reference count of an user
|
@@ -3544,8 +3655,6 @@ SP_LIBEXPORT(void) sp_inbox_release(sp_inbox *inbox);
|
|
3544
3655
|
*/
|
3545
3656
|
SP_LIBEXPORT(const char *) sp_build_id(void);
|
3546
3657
|
|
3547
|
-
//endif
|
3548
|
-
|
3549
3658
|
#ifdef __cplusplus
|
3550
3659
|
}
|
3551
3660
|
#endif
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spotify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 11.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
16
|
-
requirement: &
|
16
|
+
requirement: &70294145167840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: 1.0.11
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *70294145167840
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
|
-
requirement: &
|
30
|
+
requirement: &70294145167120 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ! '>='
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: '0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *70294145167120
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: yard
|
41
|
-
requirement: &
|
41
|
+
requirement: &70294145182800 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ! '>='
|
@@ -46,10 +46,10 @@ dependencies:
|
|
46
46
|
version: '0'
|
47
47
|
type: :development
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *70294145182800
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: rbgccxml
|
52
|
-
requirement: &
|
52
|
+
requirement: &70294145182080 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
55
|
- - ! '>='
|
@@ -57,10 +57,10 @@ dependencies:
|
|
57
57
|
version: '0'
|
58
58
|
type: :development
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *70294145182080
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: minitest
|
63
|
-
requirement: &
|
63
|
+
requirement: &70294145181320 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
@@ -68,7 +68,7 @@ dependencies:
|
|
68
68
|
version: '2.0'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
|
-
version_requirements: *
|
71
|
+
version_requirements: *70294145181320
|
72
72
|
description: ! " Spotify for Ruby is a primitive wrapper around libspotify using
|
73
73
|
Ruby FFI.\n If all you want is libspotify for Ruby, you should probably use at
|
74
74
|
Hallon\n instead: https://rubygems.org/gems/hallon\n"
|
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|
115
|
-
rubygems_version: 1.8.
|
115
|
+
rubygems_version: 1.8.17
|
116
116
|
signing_key:
|
117
117
|
specification_version: 3
|
118
118
|
summary: Bare-bones Ruby bindings for libspotify
|