app
assets
controllers
admin
api
activitypub
activities_controller.rb
notes_controller.rb
outbox_controller.rb
v1
web
oembed_controller.rb
push_controller.rb
salmon_controller.rb
subscriptions_controller.rb
auth
concerns
oauth
settings
well_known
about_controller.rb
account_follow_controller.rb
account_unfollow_controller.rb
accounts_controller.rb
api_controller.rb
application_controller.rb
authorize_follows_controller.rb
follower_accounts_controller.rb
following_accounts_controller.rb
home_controller.rb
media_controller.rb
remote_follow_controller.rb
statuses_controller.rb
stream_entries_controller.rb
tags_controller.rb
helpers
javascript
lib
mailers
models
presenters
services
validators
views
workers
bin
config
db
docs
lib
log
public
spec
storybook
streaming
vendor
.babelrc
.buildpacks
.codeclimate.yml
.dockerignore
.editorconfig
.env.production.sample
.env.test
.env.vagrant
.eslintignore
.eslintrc.json
.foreman
.gitignore
.nvmrc
.postcssrc.yml
.rspec
.rubocop.yml
.ruby-version
.slugignore
.travis.yml
CONTRIBUTING.md
Capfile
Dockerfile
Gemfile
Gemfile.lock
ISSUE_TEMPLATE.md
LICENSE
Procfile
Procfile.dev
README.md
Rakefile
Vagrantfile
app.json
config.ru
docker-compose.yml
package.json
scalingo.json
yarn.lock
* Change ActivityPub paging to match spec. Clean up ActivityPub outbox changes. * Fix code style and test failures for OutboxController. * Attempt to fix CI errors.
70 lines
1.7 KiB
Ruby
70 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Api::Activitypub::OutboxController < ApiController
|
|
before_action :set_account
|
|
|
|
respond_to :activitystreams2
|
|
|
|
def show
|
|
if params[:max_id] || params[:since_id]
|
|
show_outbox_page
|
|
else
|
|
show_base_outbox
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def show_base_outbox
|
|
@statuses = Status.as_outbox_timeline(@account)
|
|
@statuses = cache_collection(@statuses)
|
|
|
|
set_maps(@statuses)
|
|
|
|
set_first_last_page(@statuses)
|
|
|
|
render :show
|
|
end
|
|
|
|
def show_outbox_page
|
|
all_statuses = Status.as_outbox_timeline(@account)
|
|
@statuses = all_statuses.paginate_by_max_id(limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id])
|
|
|
|
all_statuses = cache_collection(all_statuses)
|
|
@statuses = cache_collection(@statuses)
|
|
|
|
set_maps(@statuses)
|
|
|
|
set_first_last_page(all_statuses)
|
|
|
|
@next_page_url = api_activitypub_outbox_url(pagination_params(max_id: @statuses.last.id)) unless @statuses.empty?
|
|
@prev_page_url = api_activitypub_outbox_url(pagination_params(since_id: @statuses.first.id)) unless @statuses.empty?
|
|
|
|
@paginated = @next_page_url || @prev_page_url
|
|
@part_of_url = api_activitypub_outbox_url
|
|
|
|
set_pagination_headers(@next_page_url, @prev_page_url)
|
|
|
|
render :show_page
|
|
end
|
|
|
|
def cache_collection(raw)
|
|
super(raw, Status)
|
|
end
|
|
|
|
def set_account
|
|
@account = Account.find(params[:id])
|
|
end
|
|
|
|
def set_first_last_page(statuses) # rubocop:disable Style/AccessorMethodName
|
|
return if statuses.empty?
|
|
|
|
@first_page_url = api_activitypub_outbox_url(max_id: statuses.first.id + 1)
|
|
@last_page_url = api_activitypub_outbox_url(since_id: statuses.last.id - 1)
|
|
end
|
|
|
|
def pagination_params(core_params)
|
|
params.permit(:local, :limit).merge(core_params)
|
|
end
|
|
end
|