/********************************************************* name: device_player.pl player: jlGui - audio player (forthcoming) date: 2004-10-25 author: Andreas Wallentin **********************************************************/ :- module( device_dbase, [ dev_set/2, dev_get/2, dev_do/2, %dev_query/2, dev_query/3, %DH 2003-03-21 dev_query_all/3, %DH valid_parameter/1 ] ). resource_of_type(upnp_dev). :- use_module( library(lists), [ member/2, select/3, is_list/1 ] ). :- use_module( library(system), [ datime/1 ] ). :- use_module( library(charsio), [ format_to_chars/3 ] ). %:- use_module( dbase ). :- use_module( dbase2). %%:- ensure_loaded( library(oaag) ). :- dynamic variable_value/2. %% also see default_value/2 environment_mode(simulation). %environment_mode(none). %init_dbase:- %environment_mode(simulation), %user:flag( visualize_devices, yes ), % !,%trace, %ensure_loaded(library(visualization)), %gfx_set_initial_values(device_dbase,dbase). init_dbase:-init. %see end of file %%% query(+Query, +Parameters) query( A^albums_by_artist(A), [artist] ). query( A^artists_song(A), [song] ). query( A^artists_album(A), [album] ). query( A^songs_by_artist(A), [group] ). query( Path^path(Path), [group,item] ). %%% dev_query changed to allow for optional parameters, %%% perform_query does the trick instead... DH - 21/3-03 dev_query( Query, Commitments, Answer):- query(Query,Vars), set_command_variables(Vars,Commitments,_Values), perform_query(Query,Answer). %%% %% Answers == list of answers %%% dev_query2( Query, Commitments, Answers):- %%% query(Query,Vars), %%% set_command_variables(Vars,Commitments,_Values), %%% perform_query(Query,Answers). dev_queryAll(Query, Commitments, Answers):- query(Query,Vars), set_command_variables(Vars,Commitments,_Values), setof(A, perform_query(Query, A),Answers ). perform_query( A^albums_by_artist(A), albums_by_artist(Albums) ):- dev_get(artist, Artist ), Artist = madonna, Albums = the_immaculate_collection. perform_query( Albums^albums_by_artist(Albums), fail(Albums^albums_by_artist(Albums),no_matches)). perform_query( A^artists_song(A), artists_song(Artist) ):- dev_get(song,Song), % findArtistsSong(Song,Artist). song(Artist,Song,_). perform_query( A^artists_album(A), artists_album(Artists) ):- dev_get(album,Album), %findArtistsAlbum(Album,Artists). Album = the_immaculate_collection, Artists = madonna. perform_query( S^songs_by_artist(S), songs_by_artist(Songs) ):- dev_get(group,Artist), %findSongsArtist(Artist,Songs). song(Artist, Songs,_). %%% Path == 'path/to/song_as_atom' %%% assume file extension *.mp3 perform_query( Path^path(Path), path(P) ):- ( dev_get(group,Group), dev_get(item,Song), song(Group,Song,P) %%% song_by_artist(Song,Group,DefPath), %%% make_name(Group,G_name), %%% make_name(Song,S_name), %%% full_path(DefPath,G_name,S_name,Path), %%% format("path: ~w\n",[Path]), %%% Answer = path(Path) ; P = '' %Answer = not(path(Path)) %Answer = fail(Path^path(Path),no_matches) ). dev_set(ID,Value1) :- environment_mode(simulation), interpret_pragmatically(ID,Value1,Value), %% f�r att rensa gammalt krafs try(retract(variable_value(ID,_))), assert(variable_value(ID,Value)). %( user:flag(visualize_devices,yes) -> % gfx_set_node_value(dbase,ID,Value) %; % true %). dev_get(ID,Value) :- environment_mode(simulation), ( variable_value(ID,CurrentValue) -> % format("device - ~w - ~w~n",[ID,CurrentValue]), Value = CurrentValue ; % format('fel saker ~a -> ~w\n',[ID,Value]), default_value(ID,Value) ). %format(' *** ~a -> ~w\n',[ID,Value]). dev_do(Command,Commitments) :- %error:report(['COMMAND=',Command]), %format("~nCOMMITS = ~w~n",[Commitments]), %format("~nCOMMAND = ~w~n",[Command]), action(Command,Vars), %% Command = AddContact, Vars = [contactName,number] %format("~nLIST = ~w~n",[Vars]), set_command_variables(Vars,Commitments,Values), ( environment_mode(simulation) -> output_upnp(Command,Values) ; true ), perform_command(Command). set_command_variables([],_,[]). set_command_variables([Var|Vars],Commitments,[Val|Vals]) :- %% [Var/contactName, Vars/number] Com =.. [ Var, Val ], %%% error:report(['Com=',Com]), %%% error:report(['Var=',Var]), %%% error:report(['Val=',Val]), %%% error:report(['Commits=',Commitments]), ( member(Com,Commitments) ; Val = not_known ), dev_set(Var,Val), set_command_variables(Vars,Commitments,Vals). % perform_command( 'SetArtist' ):- % dev_get(dbaseArtist,Name), % format("Du letar efter: ~w",[Name]), % findAlbum(Name,Album), % dev_set(album,Album). perform_command( _ ) :- true. interpret_pragmatically(_,V,V). valid_parameter(_). output_upnp(Command,Parameters) :- Term =.. [ Command | Parameters ], format('\n[UPnP] ~w\n\n',[Term]). try(G) :- ( G -> true ; true ). %%% path name made for Unix/Linux %%% assume *.mp3 as file extension full_path('',_,_,''). full_path(DefaultPath,G_name,S_name,Path):- atom_concat(DefaultPath,G_name,Semi2Path), atom_concat(Semi2Path,'/',Semi3Path), atom_concat(Semi3Path,S_name,AlmostPath), atom_concat(AlmostPath,'.mp3',Path). :- init_dbase.