wimp 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +154 -0
- data/Rakefile +6 -0
- data/lib/gen/README.md +6 -0
- data/lib/gen/client_api_login_service.rb +270 -0
- data/lib/gen/client_api_service.rb +3016 -0
- data/lib/gen/services_constants.rb +13 -0
- data/lib/gen/services_types.rb +1035 -0
- data/lib/wimp.rb +66 -0
- data/lib/wimp/base.rb +30 -0
- data/lib/wimp/error.rb +4 -0
- data/lib/wimp/playlist.rb +93 -0
- data/lib/wimp/simple_artist.rb +10 -0
- data/lib/wimp/track.rb +91 -0
- data/lib/wimp/version.rb +3 -0
- data/resources/skipped-methods.md +44 -0
- data/resources/thrift/services.thrift +396 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_add_my_track_id.yml +263 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_be_able_to_add_tracks_to_playlist.yml +445 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_be_able_to_remove_tracks.yml +452 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_create_a_playlist.yml +98 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_find_by_uuid.yml +49 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Playlist/should_not_crash_on_invalid_pos.yml +372 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Track/.yml +169 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Track/should_be_searchable.yml +169 -0
- data/spec/fixtures/vcr_cassettes/WiMP_Track/should_paginate.yml +61 -0
- data/spec/fixtures/vcr_cassettes/login/should_raise_error_using_invalid_credentials.yml +47 -0
- data/spec/fixtures/vcr_cassettes/login/should_return_sesson_id_on_successfull_login.yml +53 -0
- data/spec/login_spec.rb +21 -0
- data/spec/playlist_spec.rb +37 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/track_spec.rb +26 -0
- data/wimp.gemspec +30 -0
- metadata +207 -0
data/lib/wimp.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "gen")
|
2
|
+
require "gen/client_api_login_service"
|
3
|
+
require "gen/client_api_service"
|
4
|
+
require "wimp/version"
|
5
|
+
require "wimp/error"
|
6
|
+
require "wimp/simple_artist"
|
7
|
+
require "wimp/base"
|
8
|
+
require "wimp/track"
|
9
|
+
require "wimp/playlist"
|
10
|
+
|
11
|
+
module WiMP
|
12
|
+
class << self
|
13
|
+
attr_accessor :configuration
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configure
|
17
|
+
yield(configuration)
|
18
|
+
end
|
19
|
+
|
20
|
+
class Configuration
|
21
|
+
P_USERNAME = "wimpse"
|
22
|
+
P_PASSWORD = "slbh4UUgH"
|
23
|
+
D_CLIENT_NAME = "Android_WIMP-2.5.2.se"
|
24
|
+
D_CLIENT_ID = "8263371084"
|
25
|
+
SECURE_LOGIN_URL = "https://client.wimpmusic.com/clientapi/servicelogin"
|
26
|
+
|
27
|
+
attr_accessor :username, :password, :client_name, :client_id
|
28
|
+
|
29
|
+
#
|
30
|
+
# @return String
|
31
|
+
#
|
32
|
+
def session
|
33
|
+
@_session ||= begin
|
34
|
+
transport = Thrift::HTTPClientTransport.new(SECURE_LOGIN_URL)
|
35
|
+
protocol = Thrift::BinaryProtocol.new(transport)
|
36
|
+
client = Gen::ClientApiLoginService::Client.new(protocol)
|
37
|
+
transport.open
|
38
|
+
result = client.simpleLogin(
|
39
|
+
username,
|
40
|
+
password,
|
41
|
+
P_USERNAME,
|
42
|
+
P_PASSWORD,
|
43
|
+
client_name || D_CLIENT_NAME,
|
44
|
+
client_id || D_CLIENT_ID
|
45
|
+
)
|
46
|
+
transport.close
|
47
|
+
result.sessionId
|
48
|
+
end
|
49
|
+
rescue Thrift::ApplicationException
|
50
|
+
raise LoginFailed.new("Login failed, invalid credentials. Are you really a premium user?")
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# @return Boolean
|
55
|
+
#
|
56
|
+
def logged_in?
|
57
|
+
!! session
|
58
|
+
end
|
59
|
+
|
60
|
+
def logout!
|
61
|
+
@_session = nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
self.configuration ||= Configuration.new
|
66
|
+
end
|
data/lib/wimp/base.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module WiMP
|
2
|
+
class Base
|
3
|
+
@@transport = Thrift::HTTPClientTransport.new("http://client.wimpmusic.com/clientapi/service")
|
4
|
+
@@protocol = Thrift::BinaryProtocol.new(@@transport)
|
5
|
+
@@client = Gen::ClientApiService::Client.new(@@protocol)
|
6
|
+
|
7
|
+
def initialize(orginal)
|
8
|
+
@o = orginal
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.execute(&block)
|
12
|
+
@@transport.open
|
13
|
+
result = block.call(@@client)
|
14
|
+
@@transport.close
|
15
|
+
result
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute(&block)
|
19
|
+
Base.execute(&block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.session
|
23
|
+
WiMP.configuration.session
|
24
|
+
end
|
25
|
+
|
26
|
+
def session
|
27
|
+
WiMP.configuration.session
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/wimp/error.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
module WiMP
|
2
|
+
class Playlist < Base
|
3
|
+
def initialize(oplaylist)
|
4
|
+
@o = oplaylist
|
5
|
+
@tracks = (@o.tracks || []).map{|track| Track.new(track)}
|
6
|
+
end
|
7
|
+
|
8
|
+
#
|
9
|
+
# @title String
|
10
|
+
# @return Playlist
|
11
|
+
#
|
12
|
+
def self.create(title)
|
13
|
+
execute do |client|
|
14
|
+
new(client.addUserPlaylist(title, session))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# @uuid String
|
20
|
+
# @return Playlist
|
21
|
+
#
|
22
|
+
def self.find(uuid)
|
23
|
+
execute do |client|
|
24
|
+
new(client.getUserPlaylistByUuid(uuid, session))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# @tracks Array<Track> Tracks to be added
|
30
|
+
# @options[start_position] Integer Where
|
31
|
+
# should the new tracks be added?
|
32
|
+
# @return Boolean Were the request sucessful?
|
33
|
+
#
|
34
|
+
def add_tracks(tracks, options = {})
|
35
|
+
add_tracks_by_id(tracks.map(&:id), options)
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# @tracks Array<Integer> A list of Track#id
|
40
|
+
# @options[start_position] Integer Where
|
41
|
+
# should the new tracks be added?
|
42
|
+
# @return Boolean Were the request sucessful?
|
43
|
+
#
|
44
|
+
def add_tracks_by_id(track_ids, options = {})
|
45
|
+
execute do |client|
|
46
|
+
client.addTracksToUserPlaylist(
|
47
|
+
uuid,
|
48
|
+
track_ids,
|
49
|
+
options.fetch(:start_position, 0),
|
50
|
+
session
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# @indices Array<Integer> Track positions
|
57
|
+
# @return Boolean Were the request successfull?
|
58
|
+
#
|
59
|
+
def remove_tracks_by_indices(indices)
|
60
|
+
execute do |client|
|
61
|
+
client.removeUserPlaylistTracks(uuid, indices, session)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# @return String
|
67
|
+
#
|
68
|
+
def url
|
69
|
+
"http://wimpmusic.se/playlist/#{uuid}"
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# @return String
|
74
|
+
#
|
75
|
+
def uuid
|
76
|
+
@o.uuid
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
# @return Array<Track>
|
81
|
+
#
|
82
|
+
def tracks
|
83
|
+
@tracks
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# @return Integer
|
88
|
+
#
|
89
|
+
def count
|
90
|
+
@o.count
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/wimp/track.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require "time"
|
2
|
+
|
3
|
+
module WiMP
|
4
|
+
class Track < Base
|
5
|
+
#
|
6
|
+
# @query String
|
7
|
+
# @options[limit] Integer
|
8
|
+
#
|
9
|
+
# @return Array<Track>
|
10
|
+
#
|
11
|
+
def self.search(query, options = {})
|
12
|
+
execute do |client|
|
13
|
+
client.search(
|
14
|
+
query, 0, 0,
|
15
|
+
options.fetch(:limit, 10),
|
16
|
+
WiMP.configuration.session, 0
|
17
|
+
).tracks.map {|track| WiMP::Track.new(track)}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# @return String
|
23
|
+
#
|
24
|
+
def url
|
25
|
+
"http://wimpmusic.se/track/#{id}"
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# @return Integer
|
30
|
+
#
|
31
|
+
def popularity
|
32
|
+
@o.popularity
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# @return Integer
|
37
|
+
#
|
38
|
+
def id
|
39
|
+
@o.id
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# @return Integer
|
44
|
+
#
|
45
|
+
def duration
|
46
|
+
@o.duration
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# @return Integer
|
51
|
+
#
|
52
|
+
def album_id
|
53
|
+
@o.albumId
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# @return Integer
|
58
|
+
#
|
59
|
+
def artist_id
|
60
|
+
@o.artistId
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# @return String
|
65
|
+
#
|
66
|
+
def album
|
67
|
+
@o.album
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# @return String
|
72
|
+
#
|
73
|
+
def artist
|
74
|
+
@o.artist
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# @return String
|
79
|
+
#
|
80
|
+
def title
|
81
|
+
@o.title
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
# @return SimpleArtist
|
86
|
+
#
|
87
|
+
def artist
|
88
|
+
@_artist ||= SimpleArtist.new(@o.artist, artist_id)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/wimp/version.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
- ignored methods
|
2
|
+
- getClientMessage
|
3
|
+
- getLoginClientMessage
|
4
|
+
- getNotification
|
5
|
+
- getOfflineContent
|
6
|
+
- getOfflineContentClients
|
7
|
+
- getPromotionElementsByGroup
|
8
|
+
- getRefreshedProfileForSession
|
9
|
+
- getStream
|
10
|
+
- getTrackURLForOffline
|
11
|
+
- getTrackURLForStreaming
|
12
|
+
- getUserPlaylistByUuidIfNewer
|
13
|
+
- getUserWimpClientAuthorizedForOfflineContentByProfileId
|
14
|
+
- hasStreamingPrivileges
|
15
|
+
- isClientAuthorizedForOfflineContent
|
16
|
+
- loginWithFacebookOAuth
|
17
|
+
- loginWithSPIDOAuth
|
18
|
+
- loginWithToken
|
19
|
+
- logout
|
20
|
+
- moveUserPlaylistTracksWithTs
|
21
|
+
- recoverPassword
|
22
|
+
- removeAlbumFromFavorites
|
23
|
+
- removeAlbumFromOffline
|
24
|
+
- removeAllFromOffline
|
25
|
+
- removeArtistFromFavorites
|
26
|
+
- removeFriend
|
27
|
+
- removePlaylistFromFavorites
|
28
|
+
- removePlaylistFromOffline
|
29
|
+
- removeTrackFromFavorites
|
30
|
+
- removeUserPlaylistTracksWithTs
|
31
|
+
- renameUserPlaylistByUuidWithTs
|
32
|
+
- reportPlay
|
33
|
+
- searchForTrackFromGraceNoteInfo
|
34
|
+
- setAlbumAsOffline
|
35
|
+
- setFacebookFriends
|
36
|
+
- setFacebookScrobblingEnabled
|
37
|
+
- setFacebookUid
|
38
|
+
- setPlaylistAsOffline
|
39
|
+
- setPrivateSessionEnabled
|
40
|
+
- setProfileLibrarySharingLevels
|
41
|
+
- setPushToken
|
42
|
+
- simpleReportOfflinePlays
|
43
|
+
- takeStreamingPrivileges
|
44
|
+
- addTracksToUserPlaylistWithTs
|
@@ -0,0 +1,396 @@
|
|
1
|
+
namespace rb WiMP.Gen
|
2
|
+
|
3
|
+
enum AlbumOrderBy {
|
4
|
+
POPULARITY = 1,
|
5
|
+
POPULARITY_THIS_WEEK = 2,
|
6
|
+
ALBUM_NAME = 3,
|
7
|
+
ARTIST_NAME = 4,
|
8
|
+
RELEASE_DATE = 5
|
9
|
+
}
|
10
|
+
|
11
|
+
enum PlaylistType {
|
12
|
+
PRIVATE = 1,
|
13
|
+
EDITORIAL = 2,
|
14
|
+
ARTIST = 3,
|
15
|
+
USER = 4,
|
16
|
+
RADIO = 5
|
17
|
+
}
|
18
|
+
|
19
|
+
enum PrivacyLevel {
|
20
|
+
ALL = 1,
|
21
|
+
PUBLIC = 2,
|
22
|
+
FRIENDS = 3
|
23
|
+
}
|
24
|
+
|
25
|
+
enum FavoriteOrderBy {
|
26
|
+
NAME = 1,
|
27
|
+
ARTIST_NAME = 2,
|
28
|
+
DATE_ADDED = 3,
|
29
|
+
INDEX = 4
|
30
|
+
}
|
31
|
+
|
32
|
+
enum AlbumFilter {
|
33
|
+
ALL = 1,
|
34
|
+
ALLBUTSINGLES = 2,
|
35
|
+
ONLYEPS = 3,
|
36
|
+
ONLYSINGLES = 4,
|
37
|
+
ONLYALBUMS = 5,
|
38
|
+
ALLBUTALBUMS = 6,
|
39
|
+
ONLYOWNALBUMS = 7,
|
40
|
+
ALLBUTOWN = 8,
|
41
|
+
ONLYOWNSINGLESANDEPS = 9
|
42
|
+
}
|
43
|
+
|
44
|
+
struct Profile {
|
45
|
+
1: required i32 profileId;
|
46
|
+
2: required i32 userId;
|
47
|
+
3: optional string phoneNumber;
|
48
|
+
4: required i64 registrationDate;
|
49
|
+
5: required string sessionId;
|
50
|
+
6: optional string mobileOperator;
|
51
|
+
7: required string subscriptionStatus;
|
52
|
+
8: required i32 channelId;
|
53
|
+
9: required bool clientAuthorizedForOfflineContent;
|
54
|
+
10: required bool validForStreaming;
|
55
|
+
11: required i64 subscriptionEndDate;
|
56
|
+
12: required i32 playListSharingLevel;
|
57
|
+
13: required i32 artistSharingLevel;
|
58
|
+
14: required i32 trackSharingLevel;
|
59
|
+
15: required i32 albumSharingLevel;
|
60
|
+
16: required string username;
|
61
|
+
17: required i64 allowOfflineUntil;
|
62
|
+
18: required i32 registrationType;
|
63
|
+
19: required i64 facebookUid;
|
64
|
+
20: required string subscriptionType;
|
65
|
+
21: required bool hasPremiumAccess;
|
66
|
+
22: required bool enableFacebookScrobbling;
|
67
|
+
23: required i32 highestAudioEncoding;
|
68
|
+
24: required i64 lastUpdatedFavArtist;
|
69
|
+
25: required i64 lastUpdatedFavTrack;
|
70
|
+
26: required i64 lastUpdatedFavAlbum;
|
71
|
+
27: required i64 lastUpdatedFavPlaylist;
|
72
|
+
28: required i64 lastUpdatedLibraryPlaylists;
|
73
|
+
29: required i32 partnerId;
|
74
|
+
}
|
75
|
+
|
76
|
+
struct Artist {
|
77
|
+
1: required string artistName;
|
78
|
+
2: required string artistBio;
|
79
|
+
3: required i32 artistId;
|
80
|
+
4: optional string info;
|
81
|
+
5: optional string link;
|
82
|
+
}
|
83
|
+
|
84
|
+
struct RecordLabel {
|
85
|
+
1: required string recordLabelName;
|
86
|
+
2: required i32 recordLabelId;
|
87
|
+
3: required string recordProvider;
|
88
|
+
4: required i32 recordProviderId;
|
89
|
+
5: required string recordSubLabel;
|
90
|
+
6: required i32 recordSubLabelId;
|
91
|
+
}
|
92
|
+
|
93
|
+
struct Track {
|
94
|
+
1: required string title;
|
95
|
+
2: required string artist;
|
96
|
+
3: required i32 artistId;
|
97
|
+
4: required i32 albumId;
|
98
|
+
5: required string album;
|
99
|
+
6: optional string copyright;
|
100
|
+
7: required i32 duration;
|
101
|
+
8: optional string smallAlbumCover;
|
102
|
+
9: optional string mediumAlbumCover;
|
103
|
+
10: optional string largeAlbumCover;
|
104
|
+
11: required i32 id;
|
105
|
+
12: optional string contentAccessString;
|
106
|
+
13: required i32 volumeNumber;
|
107
|
+
14: optional i32 trackNumber;
|
108
|
+
15: optional string version;
|
109
|
+
16: required i64 salesStartDate;
|
110
|
+
17: required bool salesReady;
|
111
|
+
18: required bool streamReady;
|
112
|
+
19: required double price;
|
113
|
+
20: optional string currencyCode;
|
114
|
+
21: required bool albumOnly;
|
115
|
+
22: required bool albumBroken;
|
116
|
+
23: optional string priceCode;
|
117
|
+
24: required string albumCalculatedType;
|
118
|
+
25: required bool allowStreaming;
|
119
|
+
26: required i32 albumNrOfVolumes;
|
120
|
+
27: required i32 popularity;
|
121
|
+
28: required i32 popularityThisWeek;
|
122
|
+
29: required double searchScore;
|
123
|
+
30: required RecordLabel recordLabel;
|
124
|
+
31: required i32 salesPriceRuleId;
|
125
|
+
32: required i64 streamStartDate;
|
126
|
+
33: required string previewURL;
|
127
|
+
34: optional string customizableAlbumCover;
|
128
|
+
35: required bool premiumOnlyStreaming;
|
129
|
+
36: required i32 popularityLevel;
|
130
|
+
37: required string revisedCopyright;
|
131
|
+
}
|
132
|
+
|
133
|
+
struct Album {
|
134
|
+
1: required i32 id;
|
135
|
+
2: required bool allowStreaming;
|
136
|
+
3: required string artist;
|
137
|
+
4: required i32 artistId;
|
138
|
+
5: required string calculatedType;
|
139
|
+
6: required string copyright;
|
140
|
+
7: required i32 duration;
|
141
|
+
8: required string genre;
|
142
|
+
9: optional string largeAlbumCover;
|
143
|
+
10: required i32 numberOfTracks;
|
144
|
+
11: required i32 numberOfVolumes;
|
145
|
+
12: required bool partialData;
|
146
|
+
13: required i32 partialNrOfTracks;
|
147
|
+
14: required RecordLabel recordLabel;
|
148
|
+
15: required i64 salesStartDate;
|
149
|
+
16: required bool streamReady;
|
150
|
+
17: required string title;
|
151
|
+
18: optional string version;
|
152
|
+
19: optional string currencyCode;
|
153
|
+
20: optional string desc;
|
154
|
+
21: optional string details;
|
155
|
+
22: optional string mediumAlbumCover;
|
156
|
+
23: optional string smallAlbumCover;
|
157
|
+
24: required i32 popularity;
|
158
|
+
25: required i32 popularityThisWeek;
|
159
|
+
26: required double price;
|
160
|
+
27: required string priceCode;
|
161
|
+
28: required i64 releaseDate;
|
162
|
+
29: required string releaseYear;
|
163
|
+
30: required i32 salesPriceRuleId;
|
164
|
+
31: required bool salesReady;
|
165
|
+
32: required double searchScore;
|
166
|
+
33: required string trackBundleType;
|
167
|
+
34: required bool trackOnly;
|
168
|
+
35: required i64 streamStartDate;
|
169
|
+
36: optional string customizableAlbumCover;
|
170
|
+
37: optional string bookletURL;
|
171
|
+
38: required bool premiumOnlyStreaming;
|
172
|
+
39: required string revisedCopyright;
|
173
|
+
}
|
174
|
+
|
175
|
+
struct Playlist {
|
176
|
+
1: required i32 count;
|
177
|
+
2: required i32 createdByArtistId;
|
178
|
+
3: required i32 duration;
|
179
|
+
4: optional string imgPath;
|
180
|
+
5: required i64 lastUpdated;
|
181
|
+
6: required string playlistName;
|
182
|
+
7: required i32 profileId;
|
183
|
+
8: required i64 registeredDate;
|
184
|
+
9: optional list<Track> tracks;
|
185
|
+
10: required string uuid;
|
186
|
+
11: optional i32 type;
|
187
|
+
12: optional string desc;
|
188
|
+
13: required i32 id;
|
189
|
+
14: optional string createdByNickName;
|
190
|
+
}
|
191
|
+
|
192
|
+
struct SearchResult {
|
193
|
+
1: optional list<Artist> artists;
|
194
|
+
2: optional list<Track> tracks;
|
195
|
+
3: optional list<Album> albums;
|
196
|
+
4: optional list<Playlist> playlist;
|
197
|
+
}
|
198
|
+
|
199
|
+
struct AlbumReview {
|
200
|
+
1: required string review;
|
201
|
+
2: required string summary;
|
202
|
+
3: required string sourceName;
|
203
|
+
}
|
204
|
+
|
205
|
+
struct SimilarAlbum {
|
206
|
+
1: required i32 albumId;
|
207
|
+
2: required string title;
|
208
|
+
3: required string artistName;
|
209
|
+
4: required i32 artistId;
|
210
|
+
}
|
211
|
+
|
212
|
+
struct SimilarAlbumList {
|
213
|
+
1: required list<SimilarAlbum> similarAlbums;
|
214
|
+
2: required string sourceName;
|
215
|
+
}
|
216
|
+
|
217
|
+
struct AlbumMetadata {
|
218
|
+
1: required i32 albumId;
|
219
|
+
2: required string title;
|
220
|
+
3: required i32 artistId;
|
221
|
+
4: required AlbumReview albumReview;
|
222
|
+
5: required SimilarAlbumList similarAlbumList;
|
223
|
+
}
|
224
|
+
|
225
|
+
struct SimilarArtist {
|
226
|
+
1: required i32 artistId;
|
227
|
+
2: required string artistName;
|
228
|
+
}
|
229
|
+
|
230
|
+
struct SimilarArtistList {
|
231
|
+
1: required list<SimilarArtist> similarArtistList;
|
232
|
+
2: required string sourceName;
|
233
|
+
}
|
234
|
+
|
235
|
+
struct RelatedArtist {
|
236
|
+
1: required i32 artistId;
|
237
|
+
2: required string artistName;
|
238
|
+
3: required i32 relationType;
|
239
|
+
}
|
240
|
+
|
241
|
+
struct RelatedArtistList {
|
242
|
+
1: required list<RelatedArtist> relatedArtistList;
|
243
|
+
2: required string sourceName;
|
244
|
+
}
|
245
|
+
|
246
|
+
struct ArtistLink {
|
247
|
+
1: required string url;
|
248
|
+
}
|
249
|
+
|
250
|
+
struct ArtistLinkList {
|
251
|
+
1: required list<ArtistLink> artistLinks;
|
252
|
+
2: required string sourceName;
|
253
|
+
}
|
254
|
+
|
255
|
+
struct ArtistBiography {
|
256
|
+
1: required string biographySummary;
|
257
|
+
2: required string biography;
|
258
|
+
3: required string sourceName;
|
259
|
+
}
|
260
|
+
|
261
|
+
struct ArtistMetaData {
|
262
|
+
1: required i32 artistId;
|
263
|
+
2: required string artistName;
|
264
|
+
3: required ArtistBiography artistBiography;
|
265
|
+
4: required SimilarArtistList similarArtists;
|
266
|
+
5: required RelatedArtistList relatedArtists;
|
267
|
+
6: required ArtistLinkList artistLinks;
|
268
|
+
}
|
269
|
+
|
270
|
+
struct Category {
|
271
|
+
1: required i32 id;
|
272
|
+
2: optional string name;
|
273
|
+
8: required i64 lastUpdated;
|
274
|
+
9: required i32 contentType;
|
275
|
+
10: optional string desc;
|
276
|
+
11: required bool hasProductDescriptions;
|
277
|
+
12: optional string imageURL;
|
278
|
+
}
|
279
|
+
|
280
|
+
struct CategoryTree {
|
281
|
+
1: optional Category category;
|
282
|
+
2: optional map<i32, list<Category>> children;
|
283
|
+
}
|
284
|
+
|
285
|
+
struct FavoriteAlbum {
|
286
|
+
1: optional i32 dateAdded;
|
287
|
+
2: required Album album;
|
288
|
+
3: required i32 profileId;
|
289
|
+
}
|
290
|
+
|
291
|
+
struct FavoriteArtist {
|
292
|
+
1: required i64 dateAdded;
|
293
|
+
2: required Artist artist;
|
294
|
+
3: required list<Album> albums;
|
295
|
+
4: required i32 profileId;
|
296
|
+
}
|
297
|
+
|
298
|
+
struct FavoritePlaylist {
|
299
|
+
1: required i64 dateAdded;
|
300
|
+
2: required Playlist playlist;
|
301
|
+
3: required i32 profileId;
|
302
|
+
}
|
303
|
+
|
304
|
+
struct FavoriteTrack {
|
305
|
+
1: required i64 dateAdded;
|
306
|
+
2: required Track track;
|
307
|
+
3: required i32 profileId;
|
308
|
+
}
|
309
|
+
|
310
|
+
struct WallPost {
|
311
|
+
1: required i32 id;
|
312
|
+
2: required i32 profileId;
|
313
|
+
3: required i64 postDate;
|
314
|
+
4: required i32 action;
|
315
|
+
5: required string artifactId;
|
316
|
+
6: required string artifactTitle;
|
317
|
+
7: optional string artifactParentTitle;
|
318
|
+
}
|
319
|
+
|
320
|
+
struct Friend {
|
321
|
+
1: required i32 id;
|
322
|
+
2: required i64 lastUpdatedFavourites;
|
323
|
+
3: required i64 facebookUid;
|
324
|
+
4: required i64 madeFriendDate;
|
325
|
+
5: required i64 lastVisitedFriendDate;
|
326
|
+
6: required bool blocked;
|
327
|
+
7: required string friendType;
|
328
|
+
8: required string nick;
|
329
|
+
9: required i32 friendProfileId;
|
330
|
+
10: required i32 nrOfSharedAlbums;
|
331
|
+
11: required i32 nrOfSharedTracks;
|
332
|
+
12: required i32 nrOfSharedPlayLists;
|
333
|
+
13: required i32 nrOfSharedArtists;
|
334
|
+
}
|
335
|
+
|
336
|
+
service ClientApiLoginService {
|
337
|
+
map<string, string> getClientConfig(1:string partnerUsername, 2:string partnerPassword, 3:string clientName);
|
338
|
+
Profile simpleLogin(1:string userName, 2:string password, 3:string partnerUsername, 4:string partnerPassword, 5:string clientName, 6:string clientUniqueKey);
|
339
|
+
Profile recoverPassword(1:string userName, 2:string partnerUsername, 3:string partnerPassword);
|
340
|
+
Profile loginWithToken(1:string userName, 2:string password, 3:string partnerUsername, 4:string partnerPassword, 5:string clientName);
|
341
|
+
}
|
342
|
+
|
343
|
+
service ClientApiService {
|
344
|
+
SearchResult search(1:string term, 2:i32 limitArtists, 3:i32 limitAlbums, 4:i32 limitTracks, 5:string sessionId, 6:i32 limitPlaylists);
|
345
|
+
oneway void addAlbumToFavorites(1:i32 albumId, 2:string sessionId);
|
346
|
+
oneway void addArtistToFavorites(1:i32 artistId, 2:string sessionId);
|
347
|
+
oneway void addFriend(1:i32 userId, 2:string sessionId);
|
348
|
+
oneway void addPlaylistToFavorites(1:string playlistUUID, 2:string sessionId);
|
349
|
+
oneway void addTrackToFavorites(1:i32 trackId, 2:string sessionId);
|
350
|
+
bool addTracksToUserPlaylist(1:string playlistUUID, 2:list<i32> tracks, 3:i32 position, 4:string sessionId);
|
351
|
+
Playlist addUserPlaylist(1:string title, 2:string sessionId);
|
352
|
+
Album getAlbumById(1:i32 albumId, 2:string sessionId);
|
353
|
+
AlbumMetadata getAlbumMetaData(1:i32 albumId, 2:string sessionId);
|
354
|
+
list<Album> getAlbumsByArtistId(1:i32 artistId, 2:i32 limit, 3:AlbumOrderBy order, 4:string sessionId, 5:AlbumFilter filter);
|
355
|
+
list<Album> getAlbumsByArtistIdWithPaging(1:i32 artistId, 2:i32 startIndex, 3:i32 limit, 4:bool includeSingles, 5:AlbumOrderBy order, 6:string sessionId);
|
356
|
+
list<Album> getAlbumsByCategoryId(1:i32 categoryId, 2:i32 startIndex, 3:i32 limit, 4:string sessionId);
|
357
|
+
list<Album> getAlbumsByIds(1:list<i32> albumIds, 2:string sessionId);
|
358
|
+
list<Playlist> getAllUserPlaylists(1:string sessionId);
|
359
|
+
Artist getArtistById(1:i32 artistId, 2:string sessionId);
|
360
|
+
ArtistMetaData getArtistMetaData(1:i32 artistId, 2:string sessionId);
|
361
|
+
string getBookletURL(1:i32 albumId, 2:string sessionId);
|
362
|
+
list<Category> getCategories(1:i32 categoryId, 2:string sessionId, 3:i32 startIndex, 4:i32 limit);
|
363
|
+
CategoryTree getCategoryAndSubCategories(1:i32 categoryId, 2:i32 depth, 3:string sessionId);
|
364
|
+
Category getCategoryById(1:i32 categoryId, 2:string sessionId);
|
365
|
+
list<FavoriteAlbum> getFavoriteAlbums(1:FavoriteOrderBy order, 2:string sessionId);
|
366
|
+
list<FavoriteAlbum> getFavoriteAlbumsByProfileId(1:i32 profileId, 2:PrivacyLevel paramPrivacyLevel, 3:FavoriteOrderBy order, 4:string sessionId);
|
367
|
+
list<FavoriteArtist> getFavoriteArtists(1:FavoriteOrderBy order, 2:string sessionId);
|
368
|
+
list<FavoriteArtist> getFavoriteArtistsByProfileId(1:i32 profileId, 2:PrivacyLevel paramPrivacyLevel, 3:FavoriteOrderBy order, 4:string sessionId);
|
369
|
+
list<FavoritePlaylist> getFavoritePlaylists(1:FavoriteOrderBy order, 2:string sessionId);
|
370
|
+
list<FavoritePlaylist> getFavoritePlaylistsByProfileId(1:i32 profileId, 2:PrivacyLevel paramPrivacyLevel, 3:FavoriteOrderBy order, 4:string sessonId);
|
371
|
+
list<FavoriteTrack> getFavoriteTracks(1:FavoriteOrderBy order, 2:string sessonId);
|
372
|
+
list<FavoriteTrack> getFavoriteTracksByProfileId(1:i32 profileId, 2:PrivacyLevel paramPrivacyLevel, 3:FavoriteOrderBy order, 4:string sessonId);
|
373
|
+
list<WallPost> getWallPosts(1:i32 profileId, 2:i32 startIndex, 3:i32 offset, 4:string sessonId);
|
374
|
+
list<Friend> getFriends(1:string sessonId);
|
375
|
+
i64 getLastUpdatedFavAlbum(1:string sessonId);
|
376
|
+
i64 getLastUpdatedFavArtist(1:string sessonId);
|
377
|
+
i64 getLastUpdatedFavPlaylist(1:string sessonId);
|
378
|
+
i64 getLastUpdatedFavTrack(1:string sessonId);
|
379
|
+
i64 getLastUpdatedPlaylist(1:string sessonId);
|
380
|
+
list<Playlist> getPlaylistsByCategoryId(1:i32 categoryId, 2:i32 startIndex, 3:i32 limit, 4:string sessonId);
|
381
|
+
list<Playlist> getProfileTrackPlayListsByArtistId(1:i32 artistId, 2:i32 startIndex, 3:i32 limit, 4:string sessonId);
|
382
|
+
list<Playlist> getProfileTrackPlayListsInclidingArtistId(1:i32 artistId, 2:i32 startIndex, 3:i32 limit, 4:string sessonId);
|
383
|
+
list<Track> getTopTracksByArtistId(1:i32 artistId, 2:i32 limit, 3:bool onlyAsMainArtist, 4:string sessonId);
|
384
|
+
Track getTrackById(1:i32 trackId, 2:string sessonId);
|
385
|
+
list<Track> getTracksByAlbumId(1:i32 albumId, 2:string sessonId);
|
386
|
+
list<Track> getTracksByCategoryId(1:i32 categoryId, 2:i32 startIndex, 3:i32 limit, 4:string sessonId);
|
387
|
+
Playlist getUserPlaylistByUuid(1:string uuid, 2:string sessonId);
|
388
|
+
list<Playlist> getUserPlaylistsByType(1:PlaylistType type, 2:i32 startIndex, 3:i32 limit, 4:string sessonId)
|
389
|
+
list<Playlist> getUserPlaylistsByUuids(1:list<string> uuids, 2:string sessonId)
|
390
|
+
bool moveUserPlaylistTracks(1:string uuid, 2:list<i32> fromIndex, 3:i32 toIndex, 4:string sessonId);
|
391
|
+
bool removeUserPlaylistByUuid(1:string uuid, 2:string sessonId);
|
392
|
+
bool removeUserPlaylistTracks(1:string uuid, 2:list<i32> indices, 3:string sessonId);
|
393
|
+
bool renameUserPlaylistByUuid(1:string uuid, 2:string title, 3:string sessonId);
|
394
|
+
list<Track> suggestTracksByArtistIds(1:list<i32> artistIds, 2:i32 limit, 3:string sessonId);
|
395
|
+
list<Track> suggestTracksByTrackIds(1:list<i32> trackIds, 2:i32 limit, 3:string sessonId);
|
396
|
+
}
|