Make displaying application used to toot opt-in (#9897)
* Make storing and displaying application used to toot opt-in * Revert to storing application info, and display it to the author via API
This commit is contained in:
		
							parent
							
								
									bcfff65195
								
							
						
					
					
						commit
						ed30110618
					
				
					 9 changed files with 24 additions and 3 deletions
				
			
		| 
						 | 
					@ -48,6 +48,7 @@ class Settings::PreferencesController < Settings::BaseController
 | 
				
			||||||
      :setting_theme,
 | 
					      :setting_theme,
 | 
				
			||||||
      :setting_hide_network,
 | 
					      :setting_hide_network,
 | 
				
			||||||
      :setting_aggregate_reblogs,
 | 
					      :setting_aggregate_reblogs,
 | 
				
			||||||
 | 
					      :setting_show_application,
 | 
				
			||||||
      notification_emails: %i(follow follow_request reblog favourite mention digest report),
 | 
					      notification_emails: %i(follow follow_request reblog favourite mention digest report),
 | 
				
			||||||
      interactions: %i(must_be_follower must_be_following)
 | 
					      interactions: %i(must_be_follower must_be_following)
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@ class UserSettingsDecorator
 | 
				
			||||||
    user.settings['theme']               = theme_preference if change?('setting_theme')
 | 
					    user.settings['theme']               = theme_preference if change?('setting_theme')
 | 
				
			||||||
    user.settings['hide_network']        = hide_network_preference if change?('setting_hide_network')
 | 
					    user.settings['hide_network']        = hide_network_preference if change?('setting_hide_network')
 | 
				
			||||||
    user.settings['aggregate_reblogs']   = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
 | 
					    user.settings['aggregate_reblogs']   = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
 | 
				
			||||||
 | 
					    user.settings['show_application']    = show_application_preference if change?('setting_show_application')
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def merged_notification_emails
 | 
					  def merged_notification_emails
 | 
				
			||||||
| 
						 | 
					@ -90,6 +91,10 @@ class UserSettingsDecorator
 | 
				
			||||||
    boolean_cast_setting 'setting_hide_network'
 | 
					    boolean_cast_setting 'setting_hide_network'
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def show_application_preference
 | 
				
			||||||
 | 
					    boolean_cast_setting 'setting_show_application'
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def theme_preference
 | 
					  def theme_preference
 | 
				
			||||||
    settings['setting_theme']
 | 
					    settings['setting_theme']
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,6 +109,7 @@ class Account < ApplicationRecord
 | 
				
			||||||
           :staff?,
 | 
					           :staff?,
 | 
				
			||||||
           :locale,
 | 
					           :locale,
 | 
				
			||||||
           :hides_network?,
 | 
					           :hides_network?,
 | 
				
			||||||
 | 
					           :shows_application?,
 | 
				
			||||||
           to: :user,
 | 
					           to: :user,
 | 
				
			||||||
           prefix: true,
 | 
					           prefix: true,
 | 
				
			||||||
           allow_nil: true
 | 
					           allow_nil: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,7 +100,7 @@ class User < ApplicationRecord
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :delete_modal,
 | 
					  delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :delete_modal,
 | 
				
			||||||
           :reduce_motion, :system_font_ui, :noindex, :theme, :display_media, :hide_network,
 | 
					           :reduce_motion, :system_font_ui, :noindex, :theme, :display_media, :hide_network,
 | 
				
			||||||
           :expand_spoilers, :default_language, :aggregate_reblogs, to: :settings, prefix: :setting, allow_nil: false
 | 
					           :expand_spoilers, :default_language, :aggregate_reblogs, :show_application, to: :settings, prefix: :setting, allow_nil: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  attr_reader :invite_code
 | 
					  attr_reader :invite_code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -244,6 +244,10 @@ class User < ApplicationRecord
 | 
				
			||||||
    @aggregates_reblogs ||= settings.aggregate_reblogs
 | 
					    @aggregates_reblogs ||= settings.aggregate_reblogs
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def shows_application?
 | 
				
			||||||
 | 
					    @shows_application ||= settings.shows_application
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def token_for_app(a)
 | 
					  def token_for_app(a)
 | 
				
			||||||
    return nil if a.nil? || a.owner != self
 | 
					    return nil if a.nil? || a.owner != self
 | 
				
			||||||
    Doorkeeper::AccessToken
 | 
					    Doorkeeper::AccessToken
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
 | 
				
			||||||
  attribute :pinned, if: :pinnable?
 | 
					  attribute :pinned, if: :pinnable?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  belongs_to :reblog, serializer: REST::StatusSerializer
 | 
					  belongs_to :reblog, serializer: REST::StatusSerializer
 | 
				
			||||||
  belongs_to :application
 | 
					  belongs_to :application, if: :show_application?
 | 
				
			||||||
  belongs_to :account, serializer: REST::AccountSerializer
 | 
					  belongs_to :account, serializer: REST::AccountSerializer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
 | 
					  has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,10 @@ class REST::StatusSerializer < ActiveModel::Serializer
 | 
				
			||||||
    !current_user.nil?
 | 
					    !current_user.nil?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def show_application?
 | 
				
			||||||
 | 
					    object.account.user_shows_application? || (current_user? && current_user.account_id == object.account_id)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def visibility
 | 
					  def visibility
 | 
				
			||||||
    # This visibility is masked behind "private"
 | 
					    # This visibility is masked behind "private"
 | 
				
			||||||
    # to avoid API changes because there are no
 | 
					    # to avoid API changes because there are no
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,9 @@
 | 
				
			||||||
  .fields-group
 | 
					  .fields-group
 | 
				
			||||||
    = f.input :setting_hide_network, as: :boolean, wrapper: :with_label
 | 
					    = f.input :setting_hide_network, as: :boolean, wrapper: :with_label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .fields-group
 | 
				
			||||||
 | 
					    = f.input :setting_show_application, as: :boolean, wrapper: :with_label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %hr#settings_web/
 | 
					  %hr#settings_web/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .fields-row
 | 
					  .fields-row
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,7 @@
 | 
				
			||||||
    = link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime u-url u-uid', target: stream_link_target, rel: 'noopener' do
 | 
					    = link_to TagManager.instance.url_for(status), class: 'detailed-status__datetime u-url u-uid', target: stream_link_target, rel: 'noopener' do
 | 
				
			||||||
      %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
 | 
					      %time.formatted{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
 | 
				
			||||||
    ·
 | 
					    ·
 | 
				
			||||||
    - if status.application
 | 
					    - if status.application && @account.user&.setting_show_application
 | 
				
			||||||
      - if status.application.website.blank?
 | 
					      - if status.application.website.blank?
 | 
				
			||||||
        %strong.detailed-status__application= status.application.name
 | 
					        %strong.detailed-status__application= status.application.name
 | 
				
			||||||
      - else
 | 
					      - else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,7 @@ en:
 | 
				
			||||||
        setting_display_media_show_all: Always show media marked as sensitive
 | 
					        setting_display_media_show_all: Always show media marked as sensitive
 | 
				
			||||||
        setting_hide_network: Who you follow and who follows you will not be shown on your profile
 | 
					        setting_hide_network: Who you follow and who follows you will not be shown on your profile
 | 
				
			||||||
        setting_noindex: Affects your public profile and status pages
 | 
					        setting_noindex: Affects your public profile and status pages
 | 
				
			||||||
 | 
					        setting_show_application: The application you use to toot will be displayed in the detailed view of your toots
 | 
				
			||||||
        setting_theme: Affects how Mastodon looks when you're logged in from any device.
 | 
					        setting_theme: Affects how Mastodon looks when you're logged in from any device.
 | 
				
			||||||
        username: Your username will be unique on %{domain}
 | 
					        username: Your username will be unique on %{domain}
 | 
				
			||||||
        whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word
 | 
					        whole_word: When the keyword or phrase is alphanumeric only, it will only be applied if it matches the whole word
 | 
				
			||||||
| 
						 | 
					@ -100,6 +101,7 @@ en:
 | 
				
			||||||
        setting_hide_network: Hide your network
 | 
					        setting_hide_network: Hide your network
 | 
				
			||||||
        setting_noindex: Opt-out of search engine indexing
 | 
					        setting_noindex: Opt-out of search engine indexing
 | 
				
			||||||
        setting_reduce_motion: Reduce motion in animations
 | 
					        setting_reduce_motion: Reduce motion in animations
 | 
				
			||||||
 | 
					        setting_show_application: Disclose application used to send toots
 | 
				
			||||||
        setting_system_font_ui: Use system's default font
 | 
					        setting_system_font_ui: Use system's default font
 | 
				
			||||||
        setting_theme: Site theme
 | 
					        setting_theme: Site theme
 | 
				
			||||||
        setting_unfollow_modal: Show confirmation dialog before unfollowing someone
 | 
					        setting_unfollow_modal: Show confirmation dialog before unfollowing someone
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,6 +26,7 @@ defaults: &defaults
 | 
				
			||||||
  expand_spoilers: false
 | 
					  expand_spoilers: false
 | 
				
			||||||
  preview_sensitive_media: false
 | 
					  preview_sensitive_media: false
 | 
				
			||||||
  reduce_motion: false
 | 
					  reduce_motion: false
 | 
				
			||||||
 | 
					  show_application: false
 | 
				
			||||||
  system_font_ui: false
 | 
					  system_font_ui: false
 | 
				
			||||||
  noindex: false
 | 
					  noindex: false
 | 
				
			||||||
  theme: 'default'
 | 
					  theme: 'default'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue