Daniel@0: /* Part of DML (Digital Music Laboratory) Daniel@0: Copyright 2014-2015 Samer Abdallah, University of London Daniel@0: Daniel@0: This program is free software; you can redistribute it and/or Daniel@0: modify it under the terms of the GNU General Public License Daniel@0: as published by the Free Software Foundation; either version 2 Daniel@0: of the License, or (at your option) any later version. Daniel@0: Daniel@0: This program is distributed in the hope that it will be useful, Daniel@0: but WITHOUT ANY WARRANTY; without even the implied warranty of Daniel@0: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Daniel@0: GNU General Public License for more details. Daniel@0: Daniel@0: You should have received a copy of the GNU General Public Daniel@0: License along with this library; if not, write to the Free Software Daniel@0: Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Daniel@0: */ Daniel@0: Daniel@0: :- module(spotools, Daniel@0: [ name_playlist/2 Daniel@0: , user_playlist/1 Daniel@0: , user_playlist/2 Daniel@0: , login/1 Daniel@0: , explicit/1 Daniel@0: , playlist_track/2 Daniel@0: , set_tracks/2 Daniel@0: , spotify/1 Daniel@0: ]). Daniel@0: Daniel@0: :- use_module(library(dictutils)). Daniel@0: :- use_module(spotify). Daniel@0: Daniel@0: :- dynamic current_app/1. Daniel@0: Daniel@0: login(App) :- Daniel@0: spotify_authorise(App), Daniel@0: writeln("Logged in as:"), Daniel@0: retractall(current_app(_)), Daniel@0: assert(current_app(App)), Daniel@0: user(Me), Daniel@0: print_dict(Me). Daniel@0: Daniel@0: spotify(Goal) :- current_app(App), spotify(App,Goal). Daniel@0: Daniel@0: user(Me) :- Daniel@0: current_app(App), Daniel@0: spotify_user(App,Me). Daniel@0: Daniel@0: name_playlist(Name,Playlist) :- Daniel@0: user_playlist(Playlist), Daniel@0: atom_string(Name,NameS), Daniel@0: Playlist.name=NameS. Daniel@0: Daniel@0: user_playlist(Playlist) :- Daniel@0: user(Me), Daniel@0: user_playlist(Me,Playlist). Daniel@0: Daniel@0: user_playlist(User,Playlist) :- Daniel@0: spotify(playlists(User.id,Playlists)), Daniel@0: member(Playlist,Playlists.items), Daniel@0: tag(playlist,Playlist). Daniel@0: Daniel@0: playlist_entry(PL,Entry) :- Daniel@0: spotify(playlist_tracks(PL.owner.id,PL.id,Tracks)), Daniel@0: member(Entry,Tracks.items), Daniel@0: tag(track,Entry.track). Daniel@0: Daniel@0: playlist_track(PL,Track) :- Daniel@0: playlist_entry(PL,Entry), Daniel@0: Track = Entry.track, Daniel@0: maplist(tag(artist),Track.artists), Daniel@0: tag(album,Track.album). Daniel@0: Daniel@0: add_tracks(PL,Tracks) :- Daniel@0: maplist(get_dict(uri),Tracks,URIs), Daniel@0: spotify(add_tracks(PL.owner.id,PL.id,URIs)). Daniel@0: Daniel@0: del_tracks(PL,Tracks) :- Daniel@0: findall(_{uri:URI}, (member(T,Tracks),get_dict(uri,T,URI)), Ts), Daniel@0: spotify(del_tracks(PL.owner.id,PL.id,_{tracks:Ts})). Daniel@0: Daniel@0: clear_playlist(PL) :- Daniel@0: findall(T,playlist_track(PL,T),Tracks), Daniel@0: del_tracks(PL,Tracks). Daniel@0: Daniel@0: set_tracks(PL,Tracks) :- Daniel@0: maplist(get_dict(uri),Tracks,URIs), Daniel@0: spotify(set_tracks(PL.owner.id,PL.id,URIs)). Daniel@0: Daniel@0: set_playlist_tracks(Name,Tracks) :- Daniel@0: atom_string(Name,NameS), Daniel@0: name_playlist(NameS,PL), Daniel@0: spotify(set_tracks(PL.owner.id,PL.id,Tracks)). Daniel@0: Daniel@0: explicit(Track) :- Track.explicit=true. Daniel@0: Daniel@0: