add unread count to topnav and update subscription on thread view
This commit is contained in:
@@ -117,6 +117,24 @@ class Users(Model):
|
||||
def is_subscribed(self, thread_id):
|
||||
return Subscriptions.count({'user_id': self.id, 'thread_id': thread_id}) > 0
|
||||
|
||||
def get_unread_count(self):
|
||||
q = """
|
||||
SELECT
|
||||
COUNT(posts.id) as c
|
||||
FROM
|
||||
subscriptions
|
||||
JOIN
|
||||
threads ON subscriptions.thread_id = threads.id
|
||||
JOIN
|
||||
posts ON threads.id = posts.thread_id
|
||||
WHERE
|
||||
subscriptions.user_id = ?
|
||||
AND
|
||||
posts.created_at > subscriptions.last_seen
|
||||
"""
|
||||
res = db.fetch_one(q, self.id)
|
||||
return res["c"] or 0
|
||||
|
||||
|
||||
class Topics(Model):
|
||||
table = 'topics'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from flask import Blueprint, redirect, url_for, render_template, request, abort
|
||||
from functools import wraps
|
||||
from ..auth import login_required, get_active_user
|
||||
from ..auth import login_required, get_active_user, is_logged_in
|
||||
from ..models import Threads, Posts, Topics, Users, Reactions, Subscriptions
|
||||
from ..util import get_form_checkbox, time_now
|
||||
import math
|
||||
@@ -59,6 +59,11 @@ def thread(thread_id, slug):
|
||||
abort(404)
|
||||
posts = thread.get_posts(PER_PAGE, page)
|
||||
last_post = posts[-1]
|
||||
user = get_active_user()
|
||||
if user:
|
||||
subscription = Subscriptions.find({'user_id': user.id, 'thread_id': thread.id})
|
||||
if subscription:
|
||||
subscription.update({'last_seen': last_post['created_at']})
|
||||
return render_template(
|
||||
'threads/thread.html', thread=thread,
|
||||
posts=posts, page=page,
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
<span>anti-social media</span>
|
||||
{%- if is_logged_in() -%}
|
||||
{%- with user = get_active_user() -%}
|
||||
{%- set uc = user.get_unread_count() -%}
|
||||
<ul class="horizontal wrap">
|
||||
<li class="mobile-fill-flex">Welcome, <a href="{{url_for('users.user_page', username=user.username)}}">{{ user.get_readable_name() }}</a></li>
|
||||
<li><a class="linkbutton" href="{{url_for('users.settings', username=user.username)}}">Settings</a></li>
|
||||
<li><a class="linkbutton" href="{{url_for('users.inbox', username=user.username)}}">Inbox</a></li>
|
||||
<li><a class="linkbutton" href="{{url_for('users.inbox', username=user.username)}}">Inbox{{' (%s)' % uc if uc else ''}}</a></li>
|
||||
<li><a class="linkbutton" href="{{url_for('users.bookmarks', username=user.username)}}">Bookmarks</a></li>
|
||||
{% if user.is_mod() -%}
|
||||
<li><a class="linkbutton" href="{{url_for('mod.index')}}">Moderation</a></li>
|
||||
|
||||
Reference in New Issue
Block a user