three-way favourite policy. closes #18

This commit is contained in:
codl 2018-01-03 18:00:59 +01:00
parent 5c47db8cc4
commit 51e070af3d
No known key found for this signature in database
GPG Key ID: 6CD7C8891ED1233A
4 changed files with 72 additions and 13 deletions

View File

@ -0,0 +1,53 @@
"""add three-way favourite policy
Revision ID: 2bd33abe291c
Revises: 583cdac8eba1
Create Date: 2018-01-03 17:31:03.718648
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '2bd33abe291c'
down_revision = '583cdac8eba1'
branch_labels = None
depends_on = None
transitional = sa.table('accounts',
sa.column('policy_keep_favourites'),
sa.column('old_policy_keep_favourites'))
def upgrade():
ThreeWayPolicyEnum = sa.Enum('keeponly', 'deleteonly', 'none',
name='enum_3way_policy')
op.alter_column('accounts', 'policy_keep_favourites',
new_column_name='old_policy_keep_favourites')
op.add_column(
'accounts',
sa.Column('policy_keep_favourites', ThreeWayPolicyEnum,
nullable=False, server_default='none'))
op.execute(transitional.update()
.where(transitional.c.old_policy_keep_favourites)
.values(policy_keep_favourites=op.inline_literal('keeponly')))
op.drop_column('accounts', 'old_policy_keep_favourites')
def downgrade():
op.alter_column('accounts', 'policy_keep_favourites',
new_column_name='old_policy_keep_favourites')
op.add_column(
'accounts',
sa.Column('policy_keep_favourites', sa.Boolean(),
nullable=False, server_default='f'))
op.execute(transitional.update()
.where(transitional.c.old_policy_keep_favourites == op.inline_literal('keeponly'))
.values(policy_keep_favourites=op.inline_literal('t')))
op.drop_column('accounts', 'old_policy_keep_favourites')

View File

@ -81,8 +81,8 @@ class Account(TimestampMixin, RemoteIDMixin):
nullable=False)
policy_keep_latest = db.Column(db.Integer, server_default='100',
nullable=False)
policy_keep_favourites = db.Column(db.Boolean, server_default='TRUE',
nullable=False)
policy_keep_favourites = db.Column(ThreeWayPolicyEnum,
server_default='none', nullable=False)
policy_keep_media = db.Column(ThreeWayPolicyEnum, server_default='none',
nullable=False)
policy_delete_every = db.Column(db.Interval, server_default='30 minutes',
@ -177,8 +177,10 @@ class Account(TimestampMixin, RemoteIDMixin):
.filter(Post.created_at <=
db.func.now() - self.policy_keep_younger)
.except_(latest_n_posts))
if(self.policy_keep_favourites):
query = query.filter(db.or_(~Post.favourite, Post.is_reblog))
if(self.policy_keep_favourites != 'none'):
query = query.filter(db.or_(
Post.favourite == (self.policy_keep_favourites == 'deleteonly'),
Post.is_reblog))
if(self.policy_keep_media != 'none'):
query = query.filter(db.or_(
Post.has_media == (self.policy_keep_media == 'deleteonly'),

View File

@ -175,7 +175,9 @@ def delete_from_account(account_id):
post.is_reblog or
(
(
not account.policy_keep_favourites or not post.favourite
account.policy_keep_favourites == 'none' or
(account.policy_keep_favourites == 'keeponly' and not post.favourite) or
(account.policy_keep_favourites == 'deleteonly' and post.favourite)
) and (
account.policy_keep_media == 'none' or
(account.policy_keep_media == 'keeponly' and not post.has_media) or

View File

@ -70,20 +70,22 @@
<input type=number name=policy_keep_latest min=0 step=1 style='max-width:8ch' value={{g.viewer.account.policy_keep_latest}}>
most recent posts will expire
</p>
<p>Keep posts that you have liked / favourited
<p>Keep
<span class="radiostrip">
<input type=radio name=policy_keep_favourites value=true id=policy_keep_favourites_true {{ "checked" if g.viewer.account.policy_keep_favourites }}>
<label for=policy_keep_favourites_true>Yes</label>
<input type=radio name=policy_keep_favourites value=false id=policy_keep_favourites_false {{ "checked" if not g.viewer.account.policy_keep_favourites }}>
<label for=policy_keep_favourites_false>No</label>
<input type=radio name=policy_keep_favourites value=keeponly id=policy_keep_favourites_keeponly {{ "checked" if g.viewer.account.policy_keep_favourites == 'keeponly' }}>
<label for=policy_keep_favourites_keeponly>favourited posts</label>
<input type=radio name=policy_keep_favourites value=deleteonly id=policy_keep_favourites_deleteonly {{ "checked" if g.viewer.account.policy_keep_favourites == 'deleteonly' }}>
<label for=policy_keep_favourites_deleteonly>non-favourited posts</label>
<input type=radio name=policy_keep_favourites value=none id=policy_keep_favourites_none {{ "checked" if g.viewer.account.policy_keep_favourites == 'none' }}>
<label for=policy_keep_favourites_none>neither</label>
</span>
</p>
<p>Keep posts
<p>Keep
<span class="radiostrip">
<input type=radio name=policy_keep_media value=keeponly id=policy_keep_media_keeponly {{ "checked" if g.viewer.account.policy_keep_media == 'keeponly' }}>
<label for=policy_keep_media_keeponly>with media attached</label>
<label for=policy_keep_media_keeponly>media posts</label>
<input type=radio name=policy_keep_media value=deleteonly id=policy_keep_media_deleteonly {{ "checked" if g.viewer.account.policy_keep_media == 'deleteonly' }}>
<label for=policy_keep_media_deleteonly>with no media attached</label>
<label for=policy_keep_media_deleteonly>non-media posts</label>
<input type=radio name=policy_keep_media value=none id=policy_keep_media_none {{ "checked" if g.viewer.account.policy_keep_media == 'none' }}>
<label for=policy_keep_media_none>neither</label>
</span>