egs_patch: Use code:priv_dir/1 to get the location of the configuration
This commit is contained in:
parent
807510f669
commit
368bb0f7b4
@ -1,6 +1,4 @@
|
|||||||
%% @author Loïc Hoguin <essen@dev-extend.eu>
|
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
|
||||||
%% @copyright 2011 Loïc Hoguin.
|
|
||||||
%% @doc Callbacks for the egs_patch application.
|
|
||||||
%%
|
%%
|
||||||
%% This file is part of EGS.
|
%% This file is part of EGS.
|
||||||
%%
|
%%
|
||||||
@ -18,6 +16,7 @@
|
|||||||
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
-module(egs_patch_app).
|
-module(egs_patch_app).
|
||||||
|
|
||||||
-behaviour(application).
|
-behaviour(application).
|
||||||
-export([start/2, stop/1]). %% API.
|
-export([start/2, stop/1]). %% API.
|
||||||
|
|
||||||
|
@ -108,21 +108,22 @@ code_change(_OldVsn, State, _Extra) ->
|
|||||||
|
|
||||||
build_state() ->
|
build_state() ->
|
||||||
{ok, App} = application:get_application(),
|
{ok, App} = application:get_application(),
|
||||||
{ok, Terms} = file:consult([code:priv_dir(App), "/patch.conf"]),
|
PrivDir = code:priv_dir(App),
|
||||||
|
{ok, Terms} = file:consult([PrivDir, "/patch.conf"]),
|
||||||
Folders = proplists:get_value(folders, Terms),
|
Folders = proplists:get_value(folders, Terms),
|
||||||
{ListBin, Files} = build_list_bin(Folders, Terms),
|
{ListBin, Files} = build_list_bin(Folders, Terms, [PrivDir, "/patch/"]),
|
||||||
#state{list_bin=ListBin, files=Files}.
|
#state{list_bin=ListBin, files=Files}.
|
||||||
|
|
||||||
%% The file number must start at 0.
|
%% The file number must start at 0.
|
||||||
build_list_bin(Folders, Terms) ->
|
build_list_bin(Folders, Terms, PatchDir) ->
|
||||||
build_list_bin(Folders, Terms, 0, [], []).
|
build_list_bin(Folders, Terms, PatchDir, 0, [], []).
|
||||||
build_list_bin([], _Terms, _N, Acc, FilesAcc) ->
|
build_list_bin([], _Terms, _PatchDir, _N, Acc, FilesAcc) ->
|
||||||
Bin = list_to_binary(lists:reverse(Acc)),
|
Bin = list_to_binary(lists:reverse(Acc)),
|
||||||
Bin2 = << 16#08:32/little, 16#06:32/little, Bin/binary, 16#08:32/little, 16#08:32/little >>,
|
Bin2 = << 16#08:32/little, 16#06:32/little, Bin/binary, 16#08:32/little, 16#08:32/little >>,
|
||||||
{Bin2, lists:flatten(FilesAcc)};
|
{Bin2, lists:flatten(FilesAcc)};
|
||||||
build_list_bin([Folder|Tail], Terms, N, Acc, FilesAcc) ->
|
build_list_bin([Folder|Tail], Terms, PatchDir, N, Acc, FilesAcc) ->
|
||||||
Filenames = proplists:get_value({folder, Folder}, Terms),
|
Filenames = proplists:get_value({folder, Folder}, Terms),
|
||||||
{BinFiles, Files, N2} = build_files_bin(Folder, Filenames, N),
|
{BinFiles, Files, N2} = build_files_bin(Folder, Filenames, PatchDir, N),
|
||||||
BinFiles2 = case Folder of
|
BinFiles2 = case Folder of
|
||||||
root -> BinFiles;
|
root -> BinFiles;
|
||||||
_Any ->
|
_Any ->
|
||||||
@ -131,17 +132,17 @@ build_list_bin([Folder|Tail], Terms, N, Acc, FilesAcc) ->
|
|||||||
<< 16#48:32/little, 16#09:32/little, FolderBin/binary, 0:Padding,
|
<< 16#48:32/little, 16#09:32/little, FolderBin/binary, 0:Padding,
|
||||||
BinFiles/binary, 16#08:32/little, 16#0a:32/little >>
|
BinFiles/binary, 16#08:32/little, 16#0a:32/little >>
|
||||||
end,
|
end,
|
||||||
build_list_bin(Tail, Terms, N2, [BinFiles2|Acc], [Files|FilesAcc]).
|
build_list_bin(Tail, Terms, PatchDir, N2, [BinFiles2|Acc], [Files|FilesAcc]).
|
||||||
|
|
||||||
build_files_bin(Folder, Filenames, N) ->
|
build_files_bin(Folder, Filenames, PatchDir, N) ->
|
||||||
build_files_bin(Folder, Filenames, N, [], []).
|
build_files_bin(Folder, Filenames, PatchDir, N, [], []).
|
||||||
build_files_bin(_Folder, [], N, Acc, FilesAcc) ->
|
build_files_bin(_Folder, [], _PatchDir, N, Acc, FilesAcc) ->
|
||||||
Bin = list_to_binary(lists:reverse(Acc)),
|
Bin = list_to_binary(lists:reverse(Acc)),
|
||||||
{Bin, FilesAcc, N};
|
{Bin, FilesAcc, N};
|
||||||
build_files_bin(Folder, [Filename|Tail], N, Acc, FilesAcc) ->
|
build_files_bin(Folder, [Filename|Tail], PatchDir, N, Acc, FilesAcc) ->
|
||||||
FullFilename = case Folder of
|
FullFilename = case Folder of
|
||||||
root -> ["priv/patch/"|Filename];
|
root -> [PatchDir|Filename];
|
||||||
_Any -> ["priv/patch/",Folder,"/"|Filename]
|
_Any -> [PatchDir,Folder,"/"|Filename]
|
||||||
end,
|
end,
|
||||||
Size = file_get_size(FullFilename),
|
Size = file_get_size(FullFilename),
|
||||||
CRC = file_get_crc(FullFilename),
|
CRC = file_get_crc(FullFilename),
|
||||||
@ -149,7 +150,7 @@ build_files_bin(Folder, [Filename|Tail], N, Acc, FilesAcc) ->
|
|||||||
Padding = 8 * (64 - length(Filename)),
|
Padding = 8 * (64 - length(Filename)),
|
||||||
FilenameBin2 = << FilenameBin/binary, 0:Padding >>,
|
FilenameBin2 = << FilenameBin/binary, 0:Padding >>,
|
||||||
Bin = << 16#4c:32/little, 16#07:32/little, N:32/little, FilenameBin2/binary >>,
|
Bin = << 16#4c:32/little, 16#07:32/little, N:32/little, FilenameBin2/binary >>,
|
||||||
build_files_bin(Folder, Tail, N + 1, [Bin|Acc], [{N, #file{crc=CRC, size=Size, folder=Folder, filename_bin=FilenameBin2, full_filename=FullFilename}}|FilesAcc]).
|
build_files_bin(Folder, Tail, PatchDir, N + 1, [Bin|Acc], [{N, #file{crc=CRC, size=Size, folder=Folder, filename_bin=FilenameBin2, full_filename=FullFilename}}|FilesAcc]).
|
||||||
|
|
||||||
file_get_size(Filename) ->
|
file_get_size(Filename) ->
|
||||||
{ok, FileInfo} = file:read_file_info(Filename),
|
{ok, FileInfo} = file:read_file_info(Filename),
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
%% @author Loïc Hoguin <essen@dev-extend.eu>
|
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
|
||||||
%% @copyright 2010-2011 Loïc Hoguin.
|
|
||||||
%% @doc Cowboy protocol module for the patch server.
|
|
||||||
%%
|
%%
|
||||||
%% This file is part of EGS.
|
%% This file is part of EGS.
|
||||||
%%
|
%%
|
||||||
@ -17,9 +15,12 @@
|
|||||||
%% You should have received a copy of the GNU Affero General Public License
|
%% You should have received a copy of the GNU Affero General Public License
|
||||||
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
%% @doc Cowboy protocol module for the patch server.
|
||||||
-module(egs_patch_protocol).
|
-module(egs_patch_protocol).
|
||||||
|
|
||||||
-export([start_link/4, init/2]).
|
-export([start_link/4, init/2]).
|
||||||
|
|
||||||
|
%% @todo Move that in a configuration file.
|
||||||
-define(TIMEOUT, 5000).
|
-define(TIMEOUT, 5000).
|
||||||
|
|
||||||
-record(state, {
|
-record(state, {
|
||||||
@ -177,7 +178,8 @@ send_0f(#state{socket=Socket, transport=Transport, files=Files}) ->
|
|||||||
Size = lists:foldl(
|
Size = lists:foldl(
|
||||||
fun(N, Acc) -> Acc + egs_patch_files_db:get_size(N) end, 0, Files),
|
fun(N, Acc) -> Acc + egs_patch_files_db:get_size(N) end, 0, Files),
|
||||||
NbFiles = length(Files),
|
NbFiles = length(Files),
|
||||||
Bin = << 16#10:32/little, 16#0f:32/little, Size:32/little, NbFiles:32/little >>,
|
Bin = << 16#10:32/little, 16#0f:32/little,
|
||||||
|
Size:32/little, NbFiles:32/little >>,
|
||||||
ok = Transport:send(Socket, Bin).
|
ok = Transport:send(Socket, Bin).
|
||||||
|
|
||||||
-spec send_10(state(), non_neg_integer(), binary()) -> ok.
|
-spec send_10(state(), non_neg_integer(), binary()) -> ok.
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
%% @author Loïc Hoguin <essen@dev-extend.eu>
|
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
|
||||||
%% @copyright 2011 Loïc Hoguin.
|
|
||||||
%% @doc Top-level supervisor for the egs_patch application.
|
|
||||||
%%
|
%%
|
||||||
%% This file is part of EGS.
|
%% This file is part of EGS.
|
||||||
%%
|
%%
|
||||||
|
Loading…
Reference in New Issue
Block a user