re-add subscriptions

This commit is contained in:
2025-07-01 23:20:36 +03:00
parent 52f6484db1
commit 29bb9872d3
7 changed files with 210 additions and 10 deletions

View File

@ -3,7 +3,7 @@ from flask import (
)
from .users import login_required, mod_only, get_active_user, is_logged_in
from ..db import db
from ..models import Threads, Topics, Posts
from ..models import Threads, Topics, Posts, Subscriptions
from .posts import create_post
from slugify import slugify
import math
@ -39,7 +39,17 @@ def thread(slug):
topic = Topics.find({"id": thread.topic_id})
other_topics = Topics.select()
#TODO: subscription last seen
is_subscribed = False
if is_logged_in():
subscription = Subscriptions.find({
'thread_id': thread.id,
'user_id': get_active_user().id,
})
if subscription:
subscription.update({
'last_seen': int(time.time())
})
is_subscribed = True
return render_template(
"threads/thread.html",
@ -49,6 +59,7 @@ def thread(slug):
posts = posts,
topic = topic,
topics = other_topics,
is_subscribed = is_subscribed,
)
@ -122,3 +133,39 @@ def sticky(slug):
@mod_only(".thread", slug = lambda slug: slug)
def move(slug):
pass
@bp.post("/<slug>/subscribe")
@login_required
def subscribe(slug):
user = get_active_user()
thread = Threads.find({'slug': slug})
if not thread:
return 'no'
subscription = Subscriptions.find({
'user_id': user.id,
'thread_id': thread.id,
})
if request.form['subscribe'] == 'subscribe':
if subscription:
subscription.delete()
Subscriptions.create({
'user_id': user.id,
'thread_id': thread.id,
'last_seen': int(time.time()),
})
elif request.form['subscribe'] == 'unsubscribe':
if not subscription:
return 'no'
subscription.delete()
elif request.form['subscribe'] == 'read':
if not subscription:
return 'no'
subscription.update({
'last_seen': int(time.time())
})
last_visible_post = request.form.get('last_visible_post', default=None)
if last_visible_post is not None:
return redirect(url_for('.thread', slug=thread.slug, after=last_visible_post))
else:
return redirect(url_for('users.inbox', username=user.username))