aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--lib/pleroma/bookmark.ex7
-rw-r--r--lib/pleroma/web/common_api/common_api.ex10
-rw-r--r--lib/pleroma/web/mastodon_api/views/status_view.ex12
-rw-r--r--lib/pleroma/web/twitter_api/views/user_view.ex7
-rw-r--r--test/bookmark_test.exs15
-rw-r--r--test/web/mastodon_api/status_view_test.exs20
-rw-r--r--test/web/twitter_api/views/user_view_test.exs16
-rw-r--r--uploads/.gitignore3
9 files changed, 70 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore
index 774893b35..a1e79e4be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
/db
/deps
/*.ez
-/uploads
/test/uploads
/.elixir_ls
/test/fixtures/test_tmp.txt
diff --git a/lib/pleroma/bookmark.ex b/lib/pleroma/bookmark.ex
index c5c3e078b..7f8fd43b6 100644
--- a/lib/pleroma/bookmark.ex
+++ b/lib/pleroma/bookmark.ex
@@ -41,6 +41,13 @@ defmodule Pleroma.Bookmark do
|> preload([b, a], activity: a)
end
+ def get(user_id, activity_id) do
+ Bookmark
+ |> where(user_id: ^user_id)
+ |> where(activity_id: ^activity_id)
+ |> Repo.one()
+ end
+
@spec destroy(FlakeId.t(), FlakeId.t()) :: {:ok, Bookmark.t()} | {:error, Changeset.t()}
def destroy(user_id, activity_id) do
from(b in Bookmark,
diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex
index cfbc5dc10..ecd183110 100644
--- a/lib/pleroma/web/common_api/common_api.ex
+++ b/lib/pleroma/web/common_api/common_api.ex
@@ -4,6 +4,7 @@
defmodule Pleroma.Web.CommonAPI do
alias Pleroma.Activity
+ alias Pleroma.Bookmark
alias Pleroma.Formatter
alias Pleroma.Object
alias Pleroma.ThreadMute
@@ -282,6 +283,15 @@ defmodule Pleroma.Web.CommonAPI do
end
end
+ def bookmarked?(user, activity) do
+ with %Bookmark{} <- Bookmark.get(user.id, activity.id) do
+ true
+ else
+ _ ->
+ false
+ end
+ end
+
def report(user, data) do
with {:account_id, %{"account_id" => account_id}} <- {:account_id, data},
{:account, %User{} = account} <- {:account, User.get_cached_by_id(account_id)},
diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex
index 57cb9fdcc..62d064d71 100644
--- a/lib/pleroma/web/mastodon_api/views/status_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/status_view.ex
@@ -86,11 +86,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
activity_object = Object.normalize(activity)
favorited = opts[:for] && opts[:for].ap_id in (activity_object.data["likes"] || [])
- bookmarked =
- opts[:for] && Ecto.assoc_loaded?(opts[:for].bookmarks) &&
- Enum.any?(opts[:for].bookmarks, fn b ->
- b.activity_id == activity.id or b.activity.data["object"]["id"] == object
- end)
+ bookmarked = opts[:for] && CommonAPI.bookmarked?(opts[:for], reblogged_activity)
mentions =
activity.recipients
@@ -153,11 +149,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
favorited = opts[:for] && opts[:for].ap_id in (object.data["likes"] || [])
- bookmarked =
- opts[:for] && Ecto.assoc_loaded?(opts[:for].bookmarks) &&
- Enum.any?(opts[:for].bookmarks, fn b ->
- b.activity_id == activity.id
- end)
+ bookmarked = opts[:for] && CommonAPI.bookmarked?(opts[:for], activity)
attachment_data = object.data["attachment"] || []
attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment)
diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex
index 39b3f21c0..ea015b8f0 100644
--- a/lib/pleroma/web/twitter_api/views/user_view.ex
+++ b/lib/pleroma/web/twitter_api/views/user_view.ex
@@ -116,12 +116,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do
|> maybe_with_activation_status(user, for_user)
}
|> maybe_with_user_settings(user, for_user)
-
- data =
- if(user.info.is_admin || user.info.is_moderator,
- do: maybe_with_role(data, user, for_user),
- else: data
- )
+ |> maybe_with_role(user, for_user)
if assigns[:token] do
Map.put(data, "token", token_string(assigns[:token]))
diff --git a/test/bookmark_test.exs b/test/bookmark_test.exs
index 3be148023..b81c102ef 100644
--- a/test/bookmark_test.exs
+++ b/test/bookmark_test.exs
@@ -34,4 +34,19 @@ defmodule Pleroma.BookmarkTest do
{:ok, _deleted_bookmark} = Bookmark.destroy(user.id, activity.id)
end
end
+
+ describe "get/2" do
+ test "gets a bookmark" do
+ user = insert(:user)
+
+ {:ok, activity} =
+ CommonAPI.post(user, %{
+ "status" =>
+ "Scientists Discover The Secret Behind Tenshi Eating A Corndog Being So Cute – Science Daily"
+ })
+
+ {:ok, bookmark} = Bookmark.create(user.id, activity.id)
+ assert bookmark == Bookmark.get(user.id, activity.id)
+ end
+ end
end
diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs
index f74726212..5fddc6c58 100644
--- a/test/web/mastodon_api/status_view_test.exs
+++ b/test/web/mastodon_api/status_view_test.exs
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
use Pleroma.DataCase
alias Pleroma.Activity
+ alias Pleroma.Bookmark
alias Pleroma.Object
alias Pleroma.Repo
alias Pleroma.User
@@ -153,6 +154,25 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
assert status.muted == true
end
+ test "tells if the status is bookmarked" do
+ user = insert(:user)
+
+ {:ok, activity} = CommonAPI.post(user, %{"status" => "Cute girls doing cute things"})
+ status = StatusView.render("status.json", %{activity: activity})
+
+ assert status.bookmarked == false
+
+ status = StatusView.render("status.json", %{activity: activity, for: user})
+
+ assert status.bookmarked == false
+
+ {:ok, _bookmark} = Bookmark.create(user.id, activity.id)
+
+ status = StatusView.render("status.json", %{activity: activity, for: user})
+
+ assert status.bookmarked == true
+ end
+
test "a reply" do
note = insert(:note_activity)
user = insert(:user)
diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs
index 2f9b2af01..c99dbddeb 100644
--- a/test/web/twitter_api/views/user_view_test.exs
+++ b/test/web/twitter_api/views/user_view_test.exs
@@ -100,7 +100,9 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"pleroma" => %{
"confirmation_pending" => false,
"tags" => []
- }
+ },
+ "rights" => %{"admin" => false, "delete_others_notice" => false},
+ "role" => "member"
}
assert represented == UserView.render("show.json", %{user: user})
@@ -151,7 +153,9 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"pleroma" => %{
"confirmation_pending" => false,
"tags" => []
- }
+ },
+ "rights" => %{"admin" => false, "delete_others_notice" => false},
+ "role" => "member"
}
assert represented == UserView.render("show.json", %{user: user, for: follower})
@@ -194,7 +198,9 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"pleroma" => %{
"confirmation_pending" => false,
"tags" => []
- }
+ },
+ "rights" => %{"admin" => false, "delete_others_notice" => false},
+ "role" => "member"
}
assert represented == UserView.render("show.json", %{user: follower, for: user})
@@ -274,7 +280,9 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do
"pleroma" => %{
"confirmation_pending" => false,
"tags" => []
- }
+ },
+ "rights" => %{"admin" => false, "delete_others_notice" => false},
+ "role" => "member"
}
blocker = User.get_cached_by_id(blocker.id)
diff --git a/uploads/.gitignore b/uploads/.gitignore
new file mode 100644
index 000000000..523e584a7
--- /dev/null
+++ b/uploads/.gitignore
@@ -0,0 +1,3 @@
+# Git will ignore everything in this directory except this file.
+*
+!.gitignore