From 06f144f8b48405dac7a30aee80b6108aed87037b Mon Sep 17 00:00:00 2001 From: codl Date: Sun, 20 Aug 2017 18:17:33 +0200 Subject: [PATCH] allow mastodon users to preserve DMs --- lib/mastodon.py | 1 + lib/settings.py | 1 + ...dd_post_direct_and_account_policy_keep_.py | 26 +++++++++++++++++++ model.py | 2 ++ tasks.py | 3 ++- templates/logged_in.html | 8 ++++++ 6 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 migrations/versions/5fec5f5e8a5e_add_post_direct_and_account_policy_keep_.py diff --git a/lib/mastodon.py b/lib/mastodon.py index ce105af..82f3c7d 100644 --- a/lib/mastodon.py +++ b/lib/mastodon.py @@ -128,6 +128,7 @@ def post_from_api_object(obj, instance): has_media = 'media_attachments' in obj and bool(obj['media_attachments']), created_at = iso8601.parse_date(obj['created_at']), author_id = account_from_api_object(obj['account'], instance).id, + direct = obj['visibility'] == 'direct', ) def account_from_api_object(obj, instance): diff --git a/lib/settings.py b/lib/settings.py index 7aa5407..ff75d93 100644 --- a/lib/settings.py +++ b/lib/settings.py @@ -6,4 +6,5 @@ attrs = ( 'policy_keep_younger_scale', 'policy_keep_younger_significand', 'policy_keep_media', + 'policy_keep_direct', ) diff --git a/migrations/versions/5fec5f5e8a5e_add_post_direct_and_account_policy_keep_.py b/migrations/versions/5fec5f5e8a5e_add_post_direct_and_account_policy_keep_.py new file mode 100644 index 0000000..1feeb3d --- /dev/null +++ b/migrations/versions/5fec5f5e8a5e_add_post_direct_and_account_policy_keep_.py @@ -0,0 +1,26 @@ +"""add post.direct and account.policy_keep_direct + +Revision ID: 5fec5f5e8a5e +Revises: 8993e80e7aa3 +Create Date: 2017-08-20 18:16:26.682744 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '5fec5f5e8a5e' +down_revision = '8993e80e7aa3' +branch_labels = None +depends_on = None + + +def upgrade(): + op.add_column('accounts', sa.Column('policy_keep_direct', sa.Boolean(), server_default='TRUE', nullable=False)) + op.add_column('posts', sa.Column('direct', sa.Boolean(), server_default='FALSE', nullable=False)) + + +def downgrade(): + op.drop_column('posts', 'direct') + op.drop_column('accounts', 'policy_keep_direct') diff --git a/model.py b/model.py index 8bff012..0007b26 100644 --- a/model.py +++ b/model.py @@ -67,6 +67,7 @@ class Account(TimestampMixin, RemoteIDMixin): policy_keep_media = db.Column(db.Boolean, server_default='FALSE', nullable=False) policy_delete_every = db.Column(db.Interval, server_default='30 minutes', nullable=False) policy_keep_younger = db.Column(db.Interval, server_default='365 days', nullable=False) + policy_keep_direct = db.Column(db.Boolean, server_default='TRUE', nullable=False) display_name = db.Column(db.String) screen_name = db.Column(db.String) @@ -176,6 +177,7 @@ class Post(db.Model, TimestampMixin, RemoteIDMixin): favourite = db.Column(db.Boolean, server_default='FALSE', nullable=False) has_media = db.Column(db.Boolean, server_default='FALSE', nullable=False) + direct = db.Column(db.Boolean, server_default='FALSE', nullable=False) def __repr__(self): return ''.format(self.id, self.author_id) diff --git a/tasks.py b/tasks.py index 3ea2d04..0641477 100644 --- a/tasks.py +++ b/tasks.py @@ -162,7 +162,8 @@ def delete_from_account(account_id): refreshed = refresh_posts((post,)) if refreshed and \ (not account.policy_keep_favourites or not post.favourite) \ - and (not account.policy_keep_media or not post.has_media): + and (not account.policy_keep_media or not post.has_media)\ + and (not account.policy_keep_direct or not post.direct): eligible = refreshed break diff --git a/templates/logged_in.html b/templates/logged_in.html index d4b92d0..2796037 100644 --- a/templates/logged_in.html +++ b/templates/logged_in.html @@ -63,6 +63,14 @@

+{% if g.viewer.account.service == 'mastodon' %} +

Private posts (direct messages) will never expire + + + + +

+{% endif %}

Every {{interval_input(g.viewer.account, 'policy_delete_every', scales)}}, one expired post will be picked at random and deleted.