initial_state_serializer.rb 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # frozen_string_literal: true
  2. class InitialStateSerializer < ActiveModel::Serializer
  3. attributes :meta, :compose, :accounts,
  4. :media_attachments, :settings
  5. has_one :push_subscription, serializer: REST::WebPushSubscriptionSerializer
  6. def meta
  7. store = {
  8. streaming_api_base_url: Rails.configuration.x.streaming_api_base_url,
  9. access_token: object.token,
  10. locale: I18n.locale,
  11. domain: Rails.configuration.x.local_domain,
  12. admin: object.admin&.id&.to_s,
  13. search_enabled: Chewy.enabled?,
  14. repository: Mastodon::Version.repository,
  15. source_url: Mastodon::Version.source_url,
  16. version: Mastodon::Version.to_s,
  17. invites_enabled: Setting.min_invite_role == 'user',
  18. mascot: instance_presenter.mascot&.file&.url,
  19. profile_directory: Setting.profile_directory,
  20. }
  21. if object.current_account
  22. store[:me] = object.current_account.id.to_s
  23. store[:unfollow_modal] = object.current_account.user.setting_unfollow_modal
  24. store[:boost_modal] = object.current_account.user.setting_boost_modal
  25. store[:delete_modal] = object.current_account.user.setting_delete_modal
  26. store[:auto_play_gif] = object.current_account.user.setting_auto_play_gif
  27. store[:display_media] = object.current_account.user.setting_display_media
  28. store[:expand_spoilers] = object.current_account.user.setting_expand_spoilers
  29. store[:reduce_motion] = object.current_account.user.setting_reduce_motion
  30. store[:is_staff] = object.current_account.user.staff?
  31. end
  32. store
  33. end
  34. def compose
  35. store = {}
  36. if object.current_account
  37. store[:me] = object.current_account.id.to_s
  38. store[:default_privacy] = object.current_account.user.setting_default_privacy
  39. store[:default_sensitive] = object.current_account.user.setting_default_sensitive
  40. end
  41. store[:text] = object.text if object.text
  42. store
  43. end
  44. def accounts
  45. store = {}
  46. store[object.current_account.id.to_s] = ActiveModelSerializers::SerializableResource.new(object.current_account, serializer: REST::AccountSerializer) if object.current_account
  47. store[object.admin.id.to_s] = ActiveModelSerializers::SerializableResource.new(object.admin, serializer: REST::AccountSerializer) if object.admin
  48. store
  49. end
  50. def media_attachments
  51. { accept_content_types: MediaAttachment::IMAGE_FILE_EXTENSIONS + MediaAttachment::VIDEO_FILE_EXTENSIONS + MediaAttachment::IMAGE_MIME_TYPES + MediaAttachment::VIDEO_MIME_TYPES }
  52. end
  53. private
  54. def instance_presenter
  55. @instance_presenter ||= InstancePresenter.new
  56. end
  57. end