def statuses
@statuses = @account.statuses.permitted_for(@account, current_account).paginate_by_max_id(limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id])
+ @statuses = @statuses.where(id: MediaAttachment.where(account: @account).where.not(status_id: nil).reorder('').select('distinct status_id')) if params[:only_media]
+ @statuses = @statuses.without_replies if params[:exclude_replies]
@statuses = cache_collection(@statuses, Status)
set_maps(@statuses)
set_pagination_headers(next_path, prev_path)
end
- def media_statuses
- media_ids = MediaAttachment.where(account: @account).where.not(status_id: nil).reorder('').select('distinct status_id')
- @statuses = @account.statuses.where(id: media_ids).permitted_for(@account, current_account).paginate_by_max_id(limit_param(DEFAULT_STATUSES_LIMIT), params[:max_id], params[:since_id])
- @statuses = cache_collection(@statuses, Status)
-
- set_maps(@statuses)
- set_counters_maps(@statuses)
-
- next_path = media_statuses_api_v1_account_url(max_id: @statuses.last.id) unless @statuses.empty?
- prev_path = media_statuses_api_v1_account_url(since_id: @statuses.first.id) unless @statuses.empty?
-
- set_pagination_headers(next_path, prev_path)
- render action: :statuses
- end
-
def follow
FollowService.new.call(current_user.account, @account.acct)
set_relationship
scope :remote, -> { where.not(uri: nil) }
scope :local, -> { where(uri: nil) }
+ scope :without_replies, -> { where('statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id') }
+ scope :without_reblogs, -> { where('statuses.reblog_of_id IS NULL') }
+
cache_associated :account, :application, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :application, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account
def reply?
def as_public_timeline(account = nil, local_only = false)
query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
.where(visibility: :public)
- .where('(statuses.reply = false OR statuses.in_reply_to_account_id = statuses.account_id)')
- .where('statuses.reblog_of_id IS NULL')
+ .without_replies
+ .without_reblogs
query = query.where('accounts.domain IS NULL') if local_only
query = tag.statuses
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
.where(visibility: :public)
- .where('statuses.reblog_of_id IS NULL')
+ .without_reblogs
query = query.where('accounts.domain IS NULL') if local_only
member do
get :statuses
- get 'statuses/media', to: 'accounts#media_statuses', as: :media_statuses
get :followers
get :following
root 'home#index'
+ get '/:username', to: redirect('/users/%{username}')
+ get '/:username/:id', to: redirect('/users/%{username}/updates/%{id}')
+
match '*unmatched_route', via: :all, to: 'application#raise_not_found'
end
- [C418](https://mastodon.social/users/C418)
- [halcy](https://icosahedron.website/users/halcy)
- [Extropic](https://gnusocial.no/extropic)
-- TBD
+- [Pat Monaghan](http://iwrite.software/)
- TBD
- TBD
- TBD
- `max_id` (optional): Skip statuses younger than ID (e.g. navigate backwards in time)
- `since_id` (optional): Skip statuses older than ID (e.g. check for updates)
+Query parameters for public and tag timelines only:
+
+- `local` (optional): Only return statuses originating from this instance
+
### Notifications
**GET /api/v1/notifications**
**GET /api/v1/accounts/:id/statuses**
-Returns statuses by user. Same options as timeline are permitted.
+Returns statuses by user.
+
+Query parameters:
+
+- `max_id` (optional): Skip statuses younger than ID (e.g. navigate backwards in time)
+- `since_id` (optional): Skip statuses older than ID (e.g. check for updates)
+- `only_media` (optional): Only return statuses that have media attachments
+- `exclude_replies` (optional): Skip statuses that reply to other statuses
**GET /api/v1/accounts/:id/following**
**GET /api/v1/accounts/relationships**
-Returns relationships (`following`, `followed_by`, `blocking`) of the current user to a list of given accounts.
+Returns relationships (`following`, `followed_by`, `blocking`, `muting`, `requested`) of the current user to a list of given accounts.
Query parameters:
Returns accounts blocked by authenticated user.
+**GET /api/v1/mutes**
+
+Returns accounts muted by authenticated user.
+
+**GET /api/v1/follow_requests**
+
+Returns accounts that want to follow the authenticated user but are waiting for approval.
+
**GET /api/v1/favourites**
Returns statuses favourited by authenticated user.
Returns the updated relationship to the user.
+# Muting and unmuting users
+
+**POST /api/v1/accounts/:id/mute**
+**POST /api/v1/accounts/:id/unmute**
+
+Returns the updated relationship to the user.
+
### OAuth apps
**POST /api/v1/apps**