diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/api_spec/operations/account_operation.ex | 9 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/schemas/account.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/schemas/account_relationship.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/schemas/status.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/account_view.ex | 19 | 
6 files changed, 41 insertions, 13 deletions
diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index 54e5ebc76..4fe5a3c03 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -226,6 +226,12 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do                  type: :boolean,                  description: "Receive this account's reblogs in home timeline? Defaults to true.",                  default: true +              }, +              notify: %Schema{ +                type: :boolean, +                description: +                  "Receive notifications for all statuses posted by the account? Defaults to false.", +                default: false                }              }            }, @@ -688,6 +694,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do            "requested" => false,            "domain_blocking" => false,            "subscribing" => false, +          "notifying" => false,            "endorsed" => true          },          %{ @@ -702,6 +709,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do            "requested" => true,            "domain_blocking" => false,            "subscribing" => false, +          "notifying" => false,            "endorsed" => false          },          %{ @@ -716,6 +724,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do            "requested" => false,            "domain_blocking" => true,            "subscribing" => true, +          "notifying" => true,            "endorsed" => false          }        ] diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index bd7143ab9..ad1a85544 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -196,7 +196,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do            "muting_notifications" => false,            "requested" => false,            "showing_reblogs" => true, -          "subscribing" => false +          "subscribing" => false, +          "notifying" => false          },          "settings_store" => %{            "pleroma-fe" => %{} diff --git a/lib/pleroma/web/api_spec/schemas/account_relationship.ex b/lib/pleroma/web/api_spec/schemas/account_relationship.ex index 16b73ebb4..b4f6d25b0 100644 --- a/lib/pleroma/web/api_spec/schemas/account_relationship.ex +++ b/lib/pleroma/web/api_spec/schemas/account_relationship.ex @@ -24,7 +24,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do        muting_notifications: %Schema{type: :boolean},        requested: %Schema{type: :boolean},        showing_reblogs: %Schema{type: :boolean}, -      subscribing: %Schema{type: :boolean} +      subscribing: %Schema{type: :boolean}, +      notifying: %Schema{type: :boolean}      },      example: %{        "blocked_by" => false, @@ -38,7 +39,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do        "muting_notifications" => false,        "requested" => false,        "showing_reblogs" => true, -      "subscribing" => false +      "subscribing" => false, +      "notifying" => false      }    })  end diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 3d042dc19..0bf3312d1 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -284,7 +284,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do              "muting_notifications" => false,              "requested" => false,              "showing_reblogs" => true, -            "subscribing" => false +            "subscribing" => false, +            "notifying" => false            },            "skip_thread_containment" => false,            "tags" => [] diff --git a/lib/pleroma/web/mastodon_api/mastodon_api.ex b/lib/pleroma/web/mastodon_api/mastodon_api.ex index 71479550e..23846b36a 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api.ex @@ -24,6 +24,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do      with {:ok, follower, _followed, _} <- result do        options = cast_params(params)        set_reblogs_visibility(options[:reblogs], result) +      set_subscription(options[:notify], result)        {:ok, follower}      end    end @@ -36,6 +37,16 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do      CommonAPI.show_reblogs(follower, followed)    end +  defp set_subscription(true, {:ok, follower, followed, _}) do +    User.subscribe(follower, followed) +  end + +  defp set_subscription(false, {:ok, follower, followed, _}) do +    User.unsubscribe(follower, followed) +  end + +  defp set_subscription(_, _), do: {:ok, nil} +    @spec get_followers(User.t(), map()) :: list(User.t())    def get_followers(user, params \\ %{}) do      user @@ -73,7 +84,8 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPI do        exclude_visibilities: {:array, :string},        reblogs: :boolean,        with_muted: :boolean, -      account_ap_id: :string +      account_ap_id: :string, +      notify: :boolean      }      changeset = cast({%{}, param_types}, params, Map.keys(param_types)) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 6114e12b1..4290d11ae 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -101,6 +101,15 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do          User.following?(target, reading_user)        end +    subscribing = +      UserRelationship.exists?( +        user_relationships, +        :inverse_subscription, +        target, +        reading_user, +        &User.subscribed_to?(&2, &1) +      ) +      # NOTE: adjust UserRelationship.view_relationships_option/2 on new relation-related flags      %{        id: to_string(target.id), @@ -138,14 +147,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do            target,            &User.muted_notifications?(&1, &2)          ), -      subscribing: -        UserRelationship.exists?( -          user_relationships, -          :inverse_subscription, -          target, -          reading_user, -          &User.subscribed_to?(&2, &1) -        ), +      subscribing: subscribing, +      notifying: subscribing,        requested: follow_state == :follow_pending,        domain_blocking: User.blocks_domain?(reading_user, target),        showing_reblogs:  | 
