diff --git a/app/javascript/mastodon/components/account.js b/app/javascript/mastodon/components/account.js
index 1f2d7690f9..0cca586ac2 100644
--- a/app/javascript/mastodon/components/account.js
+++ b/app/javascript/mastodon/components/account.js
@@ -81,7 +81,7 @@ export default class Account extends ImmutablePureComponent {
buttons = ;
} else if (muting) {
let hidingNotificationsButton;
- if (muting.get('notifications')) {
+ if (account.getIn(['relationship', 'muting_notifications'])) {
hidingNotificationsButton = ;
} else {
hidingNotificationsButton = ;
@@ -93,7 +93,7 @@ export default class Account extends ImmutablePureComponent {
);
} else {
- buttons = ;
+ buttons = ;
}
}
diff --git a/app/javascript/mastodon/features/account/components/action_bar.js b/app/javascript/mastodon/features/account/components/action_bar.js
index 389296c42b..cb849fa5de 100644
--- a/app/javascript/mastodon/features/account/components/action_bar.js
+++ b/app/javascript/mastodon/features/account/components/action_bar.js
@@ -63,9 +63,8 @@ export default class ActionBar extends React.PureComponent {
if (account.get('id') === me) {
menu.push({ text: intl.formatMessage(messages.edit_profile), href: '/settings/profile' });
} else {
- const following = account.getIn(['relationship', 'following']);
- if (following) {
- if (following.get('reblogs')) {
+ if (account.getIn(['relationship', 'following'])) {
+ if (account.getIn(['relationship', 'showing_reblogs'])) {
menu.push({ text: intl.formatMessage(messages.hideReblogs, { name: account.get('username') }), action: this.props.onReblogToggle });
} else {
menu.push({ text: intl.formatMessage(messages.showReblogs, { name: account.get('username') }), action: this.props.onReblogToggle });
diff --git a/app/javascript/mastodon/features/account_timeline/containers/header_container.js b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
index b41eb19d47..7756100322 100644
--- a/app/javascript/mastodon/features/account_timeline/containers/header_container.js
+++ b/app/javascript/mastodon/features/account_timeline/containers/header_container.js
@@ -68,7 +68,7 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
},
onReblogToggle (account) {
- if (account.getIn(['relationship', 'following', 'reblogs'])) {
+ if (account.getIn(['relationship', 'show_reblogs'])) {
dispatch(followAccount(account.get('id'), false));
} else {
dispatch(followAccount(account.get('id'), true));
diff --git a/app/serializers/rest/relationship_serializer.rb b/app/serializers/rest/relationship_serializer.rb
index 998727e37a..45bfd4d6e7 100644
--- a/app/serializers/rest/relationship_serializer.rb
+++ b/app/serializers/rest/relationship_serializer.rb
@@ -1,15 +1,21 @@
# frozen_string_literal: true
class REST::RelationshipSerializer < ActiveModel::Serializer
- attributes :id, :following, :followed_by, :blocking,
- :muting, :requested, :domain_blocking
+ attributes :id, :following, :showing_reblogs, :followed_by, :blocking,
+ :muting, :muting_notifications, :requested, :domain_blocking
def id
object.id.to_s
end
def following
- instance_options[:relationships].following[object.id] || false
+ instance_options[:relationships].following[object.id] ? true : false
+ end
+
+ def showing_reblogs
+ (instance_options[:relationships].following[object.id] || {})[:reblogs] ||
+ (instance_options[:relationships].requested[object.id] || {})[:reblogs] ||
+ false
end
def followed_by
@@ -21,11 +27,15 @@ class REST::RelationshipSerializer < ActiveModel::Serializer
end
def muting
- instance_options[:relationships].muting[object.id] || false
+ instance_options[:relationships].muting[object.id] ? true : false
+ end
+
+ def muting_notifications
+ (instance_options[:relationships].muting[object.id] || {})[:notifications] || false
end
def requested
- instance_options[:relationships].requested[object.id] || false
+ instance_options[:relationships].requested[object.id] ? true : false
end
def domain_blocking
diff --git a/spec/controllers/api/v1/accounts/relationships_controller_spec.rb b/spec/controllers/api/v1/accounts/relationships_controller_spec.rb
index f25b86ac16..508415fc8c 100644
--- a/spec/controllers/api/v1/accounts/relationships_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts/relationships_controller_spec.rb
@@ -32,7 +32,7 @@ describe Api::V1::Accounts::RelationshipsController do
json = body_as_json
expect(json).to be_a Enumerable
- expect(json.first[:following]).to be_truthy
+ expect(json.first[:following]).to be true
expect(json.first[:followed_by]).to be false
end
end
@@ -51,7 +51,8 @@ describe Api::V1::Accounts::RelationshipsController do
expect(json).to be_a Enumerable
expect(json.first[:id]).to eq simon.id.to_s
- expect(json.first[:following]).to be_truthy
+ expect(json.first[:following]).to be true
+ expect(json.first[:showing_reblogs]).to be true
expect(json.first[:followed_by]).to be false
expect(json.first[:muting]).to be false
expect(json.first[:requested]).to be false
@@ -59,6 +60,7 @@ describe Api::V1::Accounts::RelationshipsController do
expect(json.second[:id]).to eq lewis.id.to_s
expect(json.second[:following]).to be false
+ expect(json.second[:showing_reblogs]).to be false
expect(json.second[:followed_by]).to be true
expect(json.second[:muting]).to be false
expect(json.second[:requested]).to be false
diff --git a/spec/controllers/api/v1/accounts_controller_spec.rb b/spec/controllers/api/v1/accounts_controller_spec.rb
index f3b8794212..053c53e5af 100644
--- a/spec/controllers/api/v1/accounts_controller_spec.rb
+++ b/spec/controllers/api/v1/accounts_controller_spec.rb
@@ -31,10 +31,10 @@ RSpec.describe Api::V1::AccountsController, type: :controller do
expect(response).to have_http_status(:success)
end
- it 'returns JSON with following=truthy and requested=false' do
+ it 'returns JSON with following=true and requested=false' do
json = body_as_json
- expect(json[:following]).to be_truthy
+ expect(json[:following]).to be true
expect(json[:requested]).to be false
end
@@ -50,11 +50,11 @@ RSpec.describe Api::V1::AccountsController, type: :controller do
expect(response).to have_http_status(:success)
end
- it 'returns JSON with following=false and requested=truthy' do
+ it 'returns JSON with following=false and requested=true' do
json = body_as_json
expect(json[:following]).to be false
- expect(json[:requested]).to be_truthy
+ expect(json[:requested]).to be true
end
it 'creates a follow request relation between user and target user' do