Current section

Files

Jump to
superls lib cli.ex
Raw

lib/cli.ex

defmodule Superls.CLI do
@moduledoc false
alias Superls.{SearchCLI, Store, Password, Store}
use Superls
@options [
store: :string,
password: :boolean
]
def main(argv) do
_ = Store.maybe_create_cache_path()
with {opts, args, []} <-
OptionParser.parse(argv, aliases: [p: :password, s: :store], strict: @options),
is_password? <- Keyword.get(opts, :password, false),
password <- if(is_password?, do: Password.io_get(), else: ""),
store <- Keyword.get(opts, :store, default_store()),
password <- Store.check_password(store, password) do
main_args(args, store, password)
else
{_, _, wrong} ->
IO.puts("invalid command, check #{inspect(wrong)}")
end
catch
err -> IO.puts("#{err}")
end
defp main_args(["archive", media_path], store_name, password) do
Store.archive(media_path, store_name, password)
end
defp main_args(["search"], store_name_or_path, password) do
store_name_or_path
|> Store.get_merged_index_from_store(password)
|> SearchCLI.command_line(store: store_name_or_path, passwd: password)
rescue
_e in File.Error ->
default = default_store()
store =
case store_name_or_path do
^default -> ""
any -> any
end
IO.puts("""
** store `#{store_name_or_path}` is missing.
first create it with: superls archive /path/to/myfiles -s #{store} [- p]
""")
end
defp main_args(["help"], _store, _passwd) do
path = Store.cache_path()
IO.puts("""
Usage: superls command [params] [-p -s my_store]
-s specifies a store name, no -s defaults to store `default`
-p requires to enter a password, no -p defaults to no password
Available commands are:
archive:\n\t superls archive /path/to/my/files\n\t note: links prevent archiving, executes this before archiving: `find /path/to/my/files -type l -ls`
search:\n\t superls search
Stores:
#{Enum.intersperse(Store.list_stores(), ", ")}
Cache information:
cache_path: #{path}
""")
end
defp main_args([], store_name, passwd),
do: main_args(["help"], store_name, passwd)
defp main_args(cmd, _store, _passwd) do
throw(
"** unknown command `#{Enum.intersperse(cmd, " ")}`\n" <>
"type: `superls help` for available commands"
)
end
end