Add feature to automatically delete old toots (#16529)

* Add account statuses cleanup policy model

* Record last inspected toot to delete to speed up successive calls to statuses_to_delete

* Add service to cleanup a given account's statuses within a budget

* Add worker to go through account policies and delete old toots

* Fix last inspected status id logic

All existing statuses older or equal to last inspected status id must be
kept by the current policy. This is an invariant that must be kept so that
resuming deletion from the last inspected status remains sound.

* Add tests

* Refactor scheduler and add tests

* Add user interface

* Add support for discriminating based on boosts/favs

* Add UI support for min_reblogs and min_favs, rework UI

* Address first round of review comments

* Replace Snowflake#id_at_start with with_random parameter

* Add tests

* Add tests for StatusesCleanupController

* Rework settings page

* Adjust load-avoiding mechanisms

* Please CodeClimate
This commit is contained in:
Claire
2021-08-09 23:11:50 +02:00
committed by GitHub
parent 432e3d1eaf
commit 4ac78e2a06
21 changed files with 1287 additions and 3 deletions

View File

@ -1254,6 +1254,7 @@ en:
preferences: Preferences
profile: Profile
relationships: Follows and followers
statuses_cleanup: Automated post deletion
two_factor_authentication: Two-factor Auth
webauthn_authentication: Security keys
statuses:
@ -1305,6 +1306,40 @@ en:
public_long: Everyone can see
unlisted: Unlisted
unlisted_long: Everyone can see, but not listed on public timelines
statuses_cleanup:
enabled: Automatically delete old posts
enabled_hint: Automatically deletes your posts once they reach a specified age threshold, unless they match one of the exceptions below
exceptions: Exceptions
explanation: Because deleting posts is an expensive operation, this is done slowly over time when the server is not otherwise busy. For this reason, your posts may be deleted a while after they reach the age threshold.
ignore_favs: Ignore favourites
ignore_reblogs: Ignore boosts
interaction_exceptions: Exceptions based on interactions
interaction_exceptions_explanation: Note that there is no guarantee for posts to be deleted if they go below the favourite or boost threshold after having once gone over them.
keep_direct: Keep direct messages
keep_direct_hint: Doesn't delete any of your direct messages
keep_media: Keep posts with media attachments
keep_media_hint: Doesn't delete any of your posts that have media attachments
keep_pinned: Keep pinned posts
keep_pinned_hint: Doesn't delete any of your pinned posts
keep_polls: Keep polls
keep_polls_hint: Doesn't delete any of your polls
keep_self_bookmark: Keep posts you bookmarked
keep_self_bookmark_hint: Doesn't delete your own posts if you have bookmarked them
keep_self_fav: Keep posts you favourited
keep_self_fav_hint: Doesn't delete your own posts if you have favourited them
min_age:
'1209600': 2 weeks
'15778476': 6 months
'2629746': 1 month
'31556952': 1 year
'5259492': 2 months
'63113904': 2 years
'7889238': 3 months
min_age_label: Age threshold
min_favs: Keep posts favourited more than
min_favs_hint: Doesn't delete any of your posts that has received more than this amount of favourites. Leave blank to delete posts regardless of their number of favourites
min_reblogs: Keep posts boosted more than
min_reblogs_hint: Doesn't delete any of your posts that has been boosted more than this number of times. Leave blank to delete posts regardless of their number of boosts
stream_entries:
pinned: Pinned post
reblogged: boosted