diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/media.erl | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/server/media.erl b/server/media.erl index 7e84b28..d20c8e9 100644 --- a/server/media.erl +++ b/server/media.erl @@ -56,13 +56,14 @@ insert(Artist, Title, Filepath) -> % search the track with the highest votes and return {Artist, Title} -search_best(_,_,_) -> {"Allison Crowe", "Northern Lights"}. -%search_best([Head|Rest], Max_Votes, Track) -> -% if (Max_Votes < Head#track.votes) and (Head#track.locked == 0) -> -% search_best(Rest, Head#track.votes, Head); -% true -> search_best(Rest, Max_Votes, Track) -% end; -%search_best([], _, Track) -> {Track#track.Artist, Track#track.Title}. +%search_best(_,_,_) -> {"Allison Crowe", "Northern Lights"}. +search_best([Head|Rest], Max_Votes, Track) -> + if + ((Max_Votes =< Head#track.votes) and (Head#track.locked == false)) -> + search_best(Rest, Head#track.votes, Head); + true -> search_best(Rest, Max_Votes, Track) + end; +search_best([], _, Track) -> {Track#track.artist, Track#track.title}. % We want to query in order to simplify the next calls. @@ -90,7 +91,15 @@ play(Artist, Title, Callback) -> [Head|_] = ask(Artist, Title), {_, Title, Artist, _, _, Fp} = Head, Port = erlang:open_port({spawn_executable, "/usr/bin/mplayer"}, [{args, [Fp]}, exit_status]), - io:format("playing: ~w, Artist: ~w~n", [Title, Artist]), + + % lock the song + F = fun() -> + New = Head#track{locked = 1}, + mnesia:write(New) + end, + mnesia:transaction(F), + + io:format("playing: ~s, Artist: ~s~n", [Title, Artist]), receive {Port, {exit_status, 0}} -> start_playing(); {Port, {exit_status, S}} -> throw({commandfailed, S}) |