Daniel@0
|
1 /* Part of DML (Digital Music Laboratory)
|
Daniel@0
|
2 Copyright 2014-2015 Samer Abdallah, University of London
|
Daniel@0
|
3
|
Daniel@0
|
4 This program is free software; you can redistribute it and/or
|
Daniel@0
|
5 modify it under the terms of the GNU General Public License
|
Daniel@0
|
6 as published by the Free Software Foundation; either version 2
|
Daniel@0
|
7 of the License, or (at your option) any later version.
|
Daniel@0
|
8
|
Daniel@0
|
9 This program is distributed in the hope that it will be useful,
|
Daniel@0
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Daniel@0
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Daniel@0
|
12 GNU General Public License for more details.
|
Daniel@0
|
13
|
Daniel@0
|
14 You should have received a copy of the GNU General Public
|
Daniel@0
|
15 License along with this library; if not, write to the Free Software
|
Daniel@0
|
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Daniel@0
|
17 */
|
Daniel@0
|
18
|
Daniel@0
|
19 :- module(spotools,
|
Daniel@0
|
20 [ name_playlist/2
|
Daniel@0
|
21 , user_playlist/1
|
Daniel@0
|
22 , user_playlist/2
|
Daniel@0
|
23 , login/1
|
Daniel@0
|
24 , explicit/1
|
Daniel@0
|
25 , playlist_track/2
|
Daniel@0
|
26 , set_tracks/2
|
Daniel@0
|
27 , spotify/1
|
Daniel@0
|
28 ]).
|
Daniel@0
|
29
|
Daniel@0
|
30 :- use_module(library(dictutils)).
|
Daniel@0
|
31 :- use_module(spotify).
|
Daniel@0
|
32
|
Daniel@0
|
33 :- dynamic current_app/1.
|
Daniel@0
|
34
|
Daniel@0
|
35 login(App) :-
|
Daniel@0
|
36 spotify_authorise(App),
|
Daniel@0
|
37 writeln("Logged in as:"),
|
Daniel@0
|
38 retractall(current_app(_)),
|
Daniel@0
|
39 assert(current_app(App)),
|
Daniel@0
|
40 user(Me),
|
Daniel@0
|
41 print_dict(Me).
|
Daniel@0
|
42
|
Daniel@0
|
43 spotify(Goal) :- current_app(App), spotify(App,Goal).
|
Daniel@0
|
44
|
Daniel@0
|
45 user(Me) :-
|
Daniel@0
|
46 current_app(App),
|
Daniel@0
|
47 spotify_user(App,Me).
|
Daniel@0
|
48
|
Daniel@0
|
49 name_playlist(Name,Playlist) :-
|
Daniel@0
|
50 user_playlist(Playlist),
|
Daniel@0
|
51 atom_string(Name,NameS),
|
Daniel@0
|
52 Playlist.name=NameS.
|
Daniel@0
|
53
|
Daniel@0
|
54 user_playlist(Playlist) :-
|
Daniel@0
|
55 user(Me),
|
Daniel@0
|
56 user_playlist(Me,Playlist).
|
Daniel@0
|
57
|
Daniel@0
|
58 user_playlist(User,Playlist) :-
|
Daniel@0
|
59 spotify(playlists(User.id,Playlists)),
|
Daniel@0
|
60 member(Playlist,Playlists.items),
|
Daniel@0
|
61 tag(playlist,Playlist).
|
Daniel@0
|
62
|
Daniel@0
|
63 playlist_entry(PL,Entry) :-
|
Daniel@0
|
64 spotify(playlist_tracks(PL.owner.id,PL.id,Tracks)),
|
Daniel@0
|
65 member(Entry,Tracks.items),
|
Daniel@0
|
66 tag(track,Entry.track).
|
Daniel@0
|
67
|
Daniel@0
|
68 playlist_track(PL,Track) :-
|
Daniel@0
|
69 playlist_entry(PL,Entry),
|
Daniel@0
|
70 Track = Entry.track,
|
Daniel@0
|
71 maplist(tag(artist),Track.artists),
|
Daniel@0
|
72 tag(album,Track.album).
|
Daniel@0
|
73
|
Daniel@0
|
74 add_tracks(PL,Tracks) :-
|
Daniel@0
|
75 maplist(get_dict(uri),Tracks,URIs),
|
Daniel@0
|
76 spotify(add_tracks(PL.owner.id,PL.id,URIs)).
|
Daniel@0
|
77
|
Daniel@0
|
78 del_tracks(PL,Tracks) :-
|
Daniel@0
|
79 findall(_{uri:URI}, (member(T,Tracks),get_dict(uri,T,URI)), Ts),
|
Daniel@0
|
80 spotify(del_tracks(PL.owner.id,PL.id,_{tracks:Ts})).
|
Daniel@0
|
81
|
Daniel@0
|
82 clear_playlist(PL) :-
|
Daniel@0
|
83 findall(T,playlist_track(PL,T),Tracks),
|
Daniel@0
|
84 del_tracks(PL,Tracks).
|
Daniel@0
|
85
|
Daniel@0
|
86 set_tracks(PL,Tracks) :-
|
Daniel@0
|
87 maplist(get_dict(uri),Tracks,URIs),
|
Daniel@0
|
88 spotify(set_tracks(PL.owner.id,PL.id,URIs)).
|
Daniel@0
|
89
|
Daniel@0
|
90 set_playlist_tracks(Name,Tracks) :-
|
Daniel@0
|
91 atom_string(Name,NameS),
|
Daniel@0
|
92 name_playlist(NameS,PL),
|
Daniel@0
|
93 spotify(set_tracks(PL.owner.id,PL.id,Tracks)).
|
Daniel@0
|
94
|
Daniel@0
|
95 explicit(Track) :- Track.explicit=true.
|
Daniel@0
|
96
|
Daniel@0
|
97
|