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.