mastodon api: support descriptions in media api, add PUT endpoint for updating metadata about a media upload
This commit is contained in:
parent
cd19d37a90
commit
99c0252314
|
@ -1,6 +1,6 @@
|
||||||
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
|
||||||
use Pleroma.Web, :controller
|
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
|
||||||
alias Pleroma.Web.MastodonAPI.{StatusView, AccountView, MastodonView, ListView}
|
alias Pleroma.Web.MastodonAPI.{StatusView, AccountView, MastodonView, ListView}
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
@ -428,16 +428,43 @@ def relationships(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
||||||
render(conn, AccountView, "relationships.json", %{user: user, targets: targets})
|
render(conn, AccountView, "relationships.json", %{user: user, targets: targets})
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload(%{assigns: %{user: _}} = conn, %{"file" => file}) do
|
def update_media(%{assigns: %{user: _}} = conn, data) do
|
||||||
with {:ok, object} <- ActivityPub.upload(file) 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 =
|
data =
|
||||||
object.data
|
new_data
|
||||||
|> Map.put("id", object.id)
|
|> Map.put("id", object.id)
|
||||||
|
|
||||||
render(conn, StatusView, "attachment.json", %{attachment: data})
|
render(conn, StatusView, "attachment.json", %{attachment: data})
|
||||||
end
|
end
|
||||||
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
|
def favourited_by(conn, %{"id" => id}) do
|
||||||
with %Activity{data: %{"object" => %{"likes" => likes}}} <- Repo.get(Activity, id) do
|
with %Activity{data: %{"object" => %{"likes" => likes}}} <- Repo.get(Activity, id) do
|
||||||
q = from(u in User, where: u.ap_id in ^likes)
|
q = from(u in User, where: u.ap_id in ^likes)
|
||||||
|
|
|
@ -127,6 +127,7 @@ def user_fetcher(username) do
|
||||||
get("/notifications/:id", MastodonAPIController, :get_notification)
|
get("/notifications/:id", MastodonAPIController, :get_notification)
|
||||||
|
|
||||||
post("/media", MastodonAPIController, :upload)
|
post("/media", MastodonAPIController, :upload)
|
||||||
|
put("/media/:id", MastodonAPIController, :update_media)
|
||||||
|
|
||||||
get("/lists", MastodonAPIController, :get_lists)
|
get("/lists", MastodonAPIController, :get_lists)
|
||||||
get("/lists/:id", MastodonAPIController, :get_list)
|
get("/lists/:id", MastodonAPIController, :get_list)
|
||||||
|
|
Loading…
Reference in a new issue