diff options
Diffstat (limited to 'shardweb/lib/controllers/directory_controller.ex')
-rw-r--r-- | shardweb/lib/controllers/directory_controller.ex | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/shardweb/lib/controllers/directory_controller.ex b/shardweb/lib/controllers/directory_controller.ex index 1e3a0b0..10fdec2 100644 --- a/shardweb/lib/controllers/directory_controller.ex +++ b/shardweb/lib/controllers/directory_controller.ex @@ -1,29 +1,64 @@ defmodule ShardWeb.DirectoryController do use ShardWeb, :controller - def view_pub(conn, %{"owner" => owner, "name" => name}) do - owner = Base.decode16! owner - shard = %SApp.Directory.Manifest{public: true, owner: owner, name: name} - pid = Shard.Manager.find_or_start shard + def view_pub(conn, args) do + view(conn, true, args) + end - render conn, "view.html", - public: true, - shard: shard, - pid: pid, - owner: owner, - name: name + def view_priv(conn, args) do + view(conn, false, args) end - def view_priv(conn, %{"owner" => owner, "name" => name}) do + def view(conn, public, %{"owner" => owner, "name" => name}=args) do owner = Base.decode16! owner - shard = %SApp.Directory.Manifest{public: false, owner: owner, name: name} - pid = Shard.Manager.find_or_start shard + 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: false, + 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 |