initial_state_serializer.rb 3.36 KB
Newer Older
Rob Colbert's avatar
Rob Colbert committed
1 2 3 4
# frozen_string_literal: true

class InitialStateSerializer < ActiveModel::Serializer
  attributes :meta, :compose, :accounts,
5 6
             :media_attachments, :settings,
             :promotions
Rob Colbert's avatar
Rob Colbert committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

  has_one :push_subscription, serializer: REST::WebPushSubscriptionSerializer

  def meta
    store = {
      streaming_api_base_url: Rails.configuration.x.streaming_api_base_url,
      access_token: object.token,
      locale: I18n.locale,
      domain: Rails.configuration.x.local_domain,
      admin: object.admin&.id&.to_s,
      search_enabled: Chewy.enabled?,
      repository: GabSocial::Version.repository,
      source_url: GabSocial::Version.source_url,
      version: GabSocial::Version.to_s,
      invites_enabled: Setting.min_invite_role == 'user',
      mascot: instance_presenter.mascot&.file&.url,
      profile_directory: Setting.profile_directory,
    }

    if object.current_account
2458773093's avatar
2458773093 committed
27 28 29 30 31 32 33 34 35 36 37 38
      store[:username]           = object.current_account.username
      store[:me]                 = object.current_account.id.to_s
      store[:unfollow_modal]     = object.current_account.user.setting_unfollow_modal
      store[:boost_modal]        = object.current_account.user.setting_boost_modal
      store[:delete_modal]       = object.current_account.user.setting_delete_modal
      store[:auto_play_gif]      = object.current_account.user.setting_auto_play_gif
      store[:display_media]      = object.current_account.user.setting_display_media
      store[:expand_spoilers]    = object.current_account.user.setting_expand_spoilers
      store[:reduce_motion]      = object.current_account.user.setting_reduce_motion
      store[:advanced_layout]    = object.current_account.user.setting_advanced_layout
      store[:group_in_home_feed] = object.current_account.user.setting_group_in_home_feed
      store[:is_staff]           = object.current_account.user.staff?
mgabdev's avatar
mgabdev committed
39
      store[:unread_count]       = unread_count object.current_account
Rob Colbert's avatar
Rob Colbert committed
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
    end

    store
  end

  def compose
    store = {}

    if object.current_account
      store[:me]                = object.current_account.id.to_s
      store[:default_privacy]   = object.current_account.user.setting_default_privacy
      store[:default_sensitive] = object.current_account.user.setting_default_sensitive
    end

    store[:text] = object.text if object.text

    store
  end

  def accounts
    store = {}
    store[object.current_account.id.to_s] = ActiveModelSerializers::SerializableResource.new(object.current_account, serializer: REST::AccountSerializer) if object.current_account
    store[object.admin.id.to_s]           = ActiveModelSerializers::SerializableResource.new(object.admin, serializer: REST::AccountSerializer) if object.admin
    store
  end

  def media_attachments
    { accept_content_types: MediaAttachment::IMAGE_FILE_EXTENSIONS + MediaAttachment::VIDEO_FILE_EXTENSIONS + MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES }
  end

70
  def promotions
71 72 73 74 75 76
    if object.current_account
      if object.current_account.is_pro
        return []
      end
    end

77 78 79
    ActiveModelSerializers::SerializableResource.new(Promotion.active, each_serializer: REST::PromotionSerializer)
  end

Rob Colbert's avatar
Rob Colbert committed
80 81
  private

mgabdev's avatar
mgabdev committed
82 83 84 85 86
  def unread_count(account)
    last_read = account.user.last_read_notification || 0
    account.notifications.where("id > #{last_read}").count
  end

Rob Colbert's avatar
Rob Colbert committed
87 88 89 90
  def instance_presenter
    @instance_presenter ||= InstancePresenter.new
  end
end