defmodule Melib do @moduledoc """ 媒体工具,例如:图片,视频,gif等 """ @logger Application.get_env(:melib, :logger, Melib.Logger) def if_call(data, conditions, call_fn) do if conditions do call_fn.(data) else data end end defdelegate log_debug(info \\ nil, opts \\ []), to: @logger defdelegate log_info(info \\ nil, opts \\ []), to: @logger defdelegate log_warn(info \\ nil, opts \\ []), to: @logger defdelegate log_error(info \\ nil, opts \\ []), to: @logger defdelegate log_inspect(info \\ nil, opts \\ []), to: @logger def get(kv, key, default \\ nil) def get(kv, key, default) when is_map(kv) do Map.get(kv, key, default) end def get(kv, key, default) when is_list(kv) do Keyword.get(kv, key, default) end def log(info \\ nil, opts \\ []) do case Logger.level() do :debug -> log_debug(info, opts) :info -> log_info(info, opts) :warn -> log_warn(info, opts) :error -> log_error(info, opts) _ -> log_debug(info, opts) end end def expand_path(path) do path |> String.replace_leading("~", Path.expand("~")) end def system_cmd(command, args, opts \\ []) do args = args |> Enum.map(fn arg -> "#{arg}" end) start_at = Timex.now() log_string = [command, Enum.join(args, " ")] |> Enum.join(" ") ["start: #{log_string} with options: #{inspect(opts)}"] |> normalize_logger_args |> log_info(pretty: false) result = System.cmd(command, args, opts) [ "finish: #{log_string} with options: #{inspect(opts)} in #{ Timex.diff(Timex.now(), start_at) / 1000 }ms" ] |> normalize_logger_args |> log_info(pretty: false) result end defp normalize_logger_args(args) do args end def md5_hash(string), do: :crypto.hash(:md5, "#{string}") def md5(string) do string |> md5_hash |> Base.encode16(case: :lower) end def sha256_hash(string), do: :crypto.hash(:sha256, "#{string}") def sha256(string) do string |> sha256_hash |> Base.encode16(case: :lower) end def sha512_hash(string), do: :crypto.hash(:sha512, "#{string}") def sha512(string) do string |> sha512_hash |> Base.encode16(case: :lower) end end