defmodule ShardWeb.DirectoryController do
use ShardWeb, :controller
def view_pub(conn, args) do
view(conn, true, args)
end
def view_priv(conn, args) do
view(conn, false, args)
end
def view(conn, public, %{"owner" => owner, "name" => name}=args) do
owner = Base.decode16! owner
manifest = %SApp.Directory.Manifest{public: public, owner: owner, name: name}
shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
render conn, "view.html",
public: public,
shard: shard,
manifest: manifest,
pid: pid,
owner: owner,
name: name
end
def dir_add(conn, %{"dir_name" => dir_name, "dir_public" => dir_public, "add_name" => add_name, "add_uri" => add_uri, "add_stored" => add_stored}) do
dir_public = (dir_public == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
item_manifest = ShardURI.to_manifest(add_uri)
SApp.Directory.add_item(pid, add_name, item_manifest, (add_stored == "yes"))
redirect conn, to: directory_path(conn, (if dir_public do :view_pub else :view_priv end), conn.assigns.pk|>Base.encode16, dir_name)
end
def dir_rm(conn, %{"dir_name" => dir_name, "dir_public" => dir_public, "item_name" => rm_name}) do
dir_public = (dir_public == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
SApp.Directory.rm_item(pid, rm_name)
redirect conn, to: directory_path(conn, (if dir_public do :view_pub else :view_priv end), conn.assigns.pk|>Base.encode16, dir_name)
end
def dir_set_stored(conn, %{"dir_name" => dir_name, "dir_public" => dir_public, "item_name" => item_name, "item_stored" => item_stored}) do
dir_public = (dir_public == "true")
item_stored = (item_stored == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
SApp.Directory.set_stored(pid, item_name, item_stored)
redirect conn, to: directory_path(conn, (if dir_public do :view_pub else :view_priv end), conn.assigns.pk|>Base.encode16, dir_name)
end
end