## [unreleased]
### Changed
+ - **Breaking:** Elixir >=1.9 is now required (was >= 1.8)
+ - In Conversations, return only direct messages as `last_status`
+ - Using the `only_media` filter on timelines will now exclude reblog media
+ - MFR policy to set global expiration for all local Create activities
+ - OGP rich media parser merged with TwitterCard
+ - Configuration: `:instance, rewrite_policy` moved to `:mrf, policies`, `:instance, :mrf_transparency` moved to `:mrf, :transparency`, `:instance, :mrf_transparency_exclusions` moved to `:mrf, :transparency_exclusions`. Old config namespace is deprecated.
+
<details>
<summary>API Changes</summary>
+
- **Breaking:** Emoji API: changed methods and renamed routes.
+- **Breaking:** Notification Settings API for suppressing notification
+ now supports the following controls: `from_followers`, `from_following`,
+ and `from_strangers`.
</details>
+ <details>
+ <summary>Admin API Changes</summary>
+
+ - Status visibility stats: now can return stats per instance.
+
+ - Mix task to refresh counter cache (`mix pleroma.refresh_counter_cache`)
+ </details>
+
### Removed
- **Breaking:** removed `with_move` parameter from notifications timeline.
def skip?(%Activity{} = activity, %User{} = user) do
[
:self,
- :followers,
- :follows,
- :non_followers,
- :non_follows,
+ :invisible,
+ :from_followers,
+ :from_following,
+ :from_strangers,
:recently_followed
]
|> Enum.find(&skip?(&1, activity, user))
activity.data["actor"] == user.ap_id
end
+ def skip?(:invisible, %Activity{} = activity, _) do
+ actor = activity.data["actor"]
+ user = User.get_cached_by_ap_id(actor)
+ User.invisible?(user)
+ end
+
def skip?(
- :followers,
+ :from_followers,
%Activity{} = activity,
- %User{notification_settings: %{followers: false}} = user
+ %User{notification_settings: %{from_followers: false}} = user
) do
actor = activity.data["actor"]
follower = User.get_cached_by_ap_id(actor)