aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/media.erl16
1 files changed, 14 insertions, 2 deletions
diff --git a/server/media.erl b/server/media.erl
index 3897a6a..21c94a0 100644
--- a/server/media.erl
+++ b/server/media.erl
@@ -1,5 +1,6 @@
-module(media).
-export([init/0,insert/3, ask/2, all/0, play/3]).
+-define(TESTPATTERN, "../ac/*.mp3").
% Since we are not willing to calculate and deliver all the id3 tags everytime they are requested,
% we try to get something persistent with mnesia.
@@ -24,8 +25,20 @@ init() ->
mnesia:create_schema([node()]),
mnesia:start(),
mnesia:create_table(track, [{attributes, record_info(fields, track)}]),
+ read_files(filelib:wildcard(?TESTPATTERN),0,0),
io:format("Initialisation of mnesia successful.\n").
+read_files([FN|Rest],Total,Fail) ->
+ case id3v2:read_file(FN) of
+ {ok, Props} -> % insert entry into mnesia DB
+ Artist = proplists:get_value(tpe1, Props),
+ Title = proplists:get_value(tit2, Props),
+ insert(bitstring_to_list(Artist), bitstring_to_list(Title), FN),
+ read_files(Rest, Total+1, Fail);
+ not_found -> read_files(Rest, Total+1, Fail+1)
+ end;
+read_files([],Total,Fail) -> io:format("Total: ~w, Failed: ~w~n", [Total, Fail]).
+
% Basic insertion of entrys into the database. Some entries are left out because they are 0 or false.
insert(Artist, Title, Filepath) ->
@@ -46,7 +59,7 @@ ask(Artist, Title) ->
all() ->
F = fun() ->
- mnesia:match({track, '_','_','_','_','_'})
+ mnesia:match_object({track, '_','_','_','_','_'})
end,
{atomic, Results} = mnesia:transaction(F),
Results.
@@ -56,7 +69,6 @@ all() ->
play(Artist, Title, Callback) ->
[Head|_] = ask(Artist, Title),
{_, _, _, _, _, Fp} = Head,
-% Port = erlang:open_port({spawn, Cmd}, [exit_status]).
Port = erlang:open_port({spawn_executable, "/usr/bin/mplayer"}, [{args, [Fp]}]).
% We want to execute commands locally