annotate cpack/dml/lib/spotify/spotools.pl @ 0:718306e29690 tip

commiting public release
author Daniel Wolff
date Tue, 09 Feb 2016 21:05:06 +0100
parents
children
rev   line source
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