Merge branch 'feature/media-description' into 'develop'
authorlambda <pleromagit@rogerbraun.net>
Wed, 18 Jul 2018 08:52:11 +0000 (08:52 +0000)
committerlambda <pleromagit@rogerbraun.net>
Wed, 18 Jul 2018 08:52:11 +0000 (08:52 +0000)
Feature/media description

Closes #174

See merge request pleroma/pleroma!255

lib/pleroma/upload.ex
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/router.ex
test/web/mastodon_api/mastodon_api_controller_test.exs
test/web/mastodon_api/status_view_test.exs

index 43df0d418f193ff8e1dcb9a1856915dc8879ea20..92a89e2961b72e3d5a2364ed0677f93b6906d1fd 100644 (file)
@@ -19,7 +19,7 @@ defmodule Pleroma.Upload do
     end
 
     %{
-      "type" => "Image",
+      "type" => "Document",
       "url" => [
         %{
           "type" => "Link",
index 09e6b0b59ce22db8518a05a3eafbd0dd7e41c2d5..f270e11467a8aff6a58f51fcee876e32daf4c827 100644 (file)
@@ -1,6 +1,6 @@
 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   use Pleroma.Web, :controller
-  alias Pleroma.{Repo, Activity, User, Notification, Stats}
+  alias Pleroma.{Repo, Object, Activity, User, Notification, Stats}
   alias Pleroma.Web
   alias Pleroma.Web.MastodonAPI.{StatusView, AccountView, MastodonView, ListView}
   alias Pleroma.Web.ActivityPub.ActivityPub
@@ -428,16 +428,43 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     render(conn, AccountView, "relationships.json", %{user: user, targets: targets})
   end
 
-  def upload(%{assigns: %{user: _}} = conn, %{"file" => file}) do
-    with {:ok, object} <- ActivityPub.upload(file) do
+  def update_media(%{assigns: %{user: _}} = conn, data) do
+    with %Object{} = object <- Repo.get(Object, data["id"]),
+         true <- is_binary(data["description"]),
+         description <- data["description"] do
+      new_data = %{object.data | "name" => description}
+
+      change = Object.change(object, %{data: new_data})
+      {:ok, media_obj} = Repo.update(change)
+
       data =
-        object.data
+        new_data
         |> Map.put("id", object.id)
 
       render(conn, StatusView, "attachment.json", %{attachment: data})
     end
   end
 
+  def upload(%{assigns: %{user: _}} = conn, %{"file" => file} = data) do
+    with {:ok, object} <- ActivityPub.upload(file) do
+      objdata =
+        if Map.has_key?(data, "description") do
+          Map.put(object.data, "name", data["description"])
+        else
+          object.data
+        end
+
+      change = Object.change(object, %{data: objdata})
+      {:ok, object} = Repo.update(change)
+
+      objdata =
+        objdata
+        |> Map.put("id", object.id)
+
+      render(conn, StatusView, "attachment.json", %{attachment: objdata})
+    end
+  end
+
   def favourited_by(conn, %{"id" => id}) do
     with %Activity{data: %{"object" => %{"likes" => likes}}} <- Repo.get(Activity, id) do
       q = from(u in User, where: u.ap_id in ^likes)
index 4c20581d6239440f3e52b2a12ca9ee23f44d7d48..5dbd59dd9476692f433f4dbe178258753518905e 100644 (file)
@@ -169,7 +169,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       remote_url: href,
       preview_url: MediaProxy.url(href),
       text_url: href,
-      type: type
+      type: type,
+      description: attachment["name"]
     }
   end
 
index 34652cdde97994d83e93fd4023ad8a806829b7ac..fc7a947aa30a2f15f18f0c63f42c3ec8b7f48216 100644 (file)
@@ -127,6 +127,7 @@ defmodule Pleroma.Web.Router do
     get("/notifications/:id", MastodonAPIController, :get_notification)
 
     post("/media", MastodonAPIController, :upload)
+    put("/media/:id", MastodonAPIController, :update_media)
 
     get("/lists", MastodonAPIController, :get_lists)
     get("/lists/:id", MastodonAPIController, :get_list)
index d1812457dd27b9dcc899e8dc7d404c8401d0b0cb..9e33c1d0459a10652c7fd01ad64f4745c88d13ec 100644 (file)
@@ -736,16 +736,19 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
       filename: "an_image.jpg"
     }
 
+    desc = "Description of the image"
+
     user = insert(:user)
 
     conn =
       conn
       |> assign(:user, user)
-      |> post("/api/v1/media", %{"file" => file})
+      |> post("/api/v1/media", %{"file" => file, "description" => desc})
 
     assert media = json_response(conn, 200)
 
     assert media["type"] == "image"
+    assert media["description"] == desc
   end
 
   test "hashtag timeline", %{conn: conn} do
index d28c3cbadcbe7b2b490349793acff355510ff3b4..03c798bef270b2d7aa46a1f20147b82b3b1c3660 100644 (file)
@@ -102,7 +102,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
       url: "someurl",
       remote_url: "someurl",
       preview_url: "someurl",
-      text_url: "someurl"
+      text_url: "someurl",
+      description: nil
     }
 
     assert expected == StatusView.render("attachment.json", %{attachment: object})