tags_controller.rb 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # frozen_string_literal: true
  2. class TagsController < ApplicationController
  3. PAGE_SIZE = 20
  4. before_action :set_body_classes
  5. before_action :set_instance_presenter
  6. def show
  7. @tag = Tag.find_by!(name: params[:id].downcase)
  8. respond_to do |format|
  9. format.html do
  10. serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
  11. @initial_state_json = serializable_resource.to_json
  12. end
  13. format.rss do
  14. @statuses = Status.as_tag_timeline(@tag).limit(PAGE_SIZE)
  15. @statuses = cache_collection(@statuses, Status)
  16. render xml: RSS::TagSerializer.render(@tag, @statuses)
  17. end
  18. format.json do
  19. @statuses = Status.as_tag_timeline(@tag, current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
  20. @statuses = cache_collection(@statuses, Status)
  21. render json: collection_presenter,
  22. serializer: ActivityPub::CollectionSerializer,
  23. adapter: ActivityPub::Adapter,
  24. content_type: 'application/activity+json'
  25. end
  26. end
  27. end
  28. private
  29. def set_body_classes
  30. @body_classes = 'tag-body'
  31. end
  32. def set_instance_presenter
  33. @instance_presenter = InstancePresenter.new
  34. end
  35. def collection_presenter
  36. ActivityPub::CollectionPresenter.new(
  37. id: tag_url(@tag),
  38. type: :ordered,
  39. size: @tag.statuses.count,
  40. items: @statuses.map { |s| ActivityPub::TagManager.instance.uri_for(s) }
  41. )
  42. end
  43. def initial_state_params
  44. {
  45. settings: {},
  46. token: current_session&.token,
  47. }
  48. end
  49. end