diff --git a/todosrht/blueprints/tracker.py b/todosrht/blueprints/tracker.py index ac44096..5ae5d2d 100644 --- a/todosrht/blueprints/tracker.py +++ b/todosrht/blueprints/tracker.py @@ -10,13 +10,14 @@ from todosrht.search import apply_search from todosrht.types import TicketSubscription from todosrht.types import Event, EventType, EventNotification from todosrht.types import Tracker, Ticket, TicketStatus, TicketAccess -from todosrht.types import Label, TicketLabel +from todosrht.types import Label, TicketLabel, TicketSeen from todosrht.urls import tracker_url from srht.config import cfg from srht.database import db from srht.flask import paginate_query, loginrequired from srht.validation import Validation from datetime import datetime +from sqlalchemy import and_ tracker = Blueprint("tracker", __name__) @@ -97,7 +98,14 @@ def return_tracker(tracker, access, **kwargs): ).one_or_none() is_subscribed = bool(sub) - tickets = Ticket.query.filter(Ticket.tracker_id == tracker.id) + tickets = (db.session + .query(Ticket, TicketSeen) + .filter(Ticket.tracker_id == tracker.id) + .outerjoin(TicketSeen, and_( + TicketSeen.ticket_id == Ticket.id, + TicketSeen.user == current_user, + ))) + search = request.args.get("search") tickets = tickets.order_by(Ticket.updated.desc()) if search: diff --git a/todosrht/templates/tracker.html b/todosrht/templates/tracker.html index f347461..72513c1 100644 --- a/todosrht/templates/tracker.html +++ b/todosrht/templates/tracker.html @@ -136,7 +136,7 @@ {% if len(tickets) %}
- {% for ticket in tickets %} + {% for ticket, seen in tickets %}
#{{ticket.scoped_id}}
@@ -154,7 +154,7 @@ {{ ticket.submitter }}
- {% if ticket.new_updates(current_user) %} + {% if seen and seen.last_view >= ticket.updated %}
{{icon("comments-o")}} {{ ticket.comments | length }} diff --git a/todosrht/types/ticket.py b/todosrht/types/ticket.py index 33d26ba..464d8d2 100644 --- a/todosrht/types/ticket.py +++ b/todosrht/types/ticket.py @@ -51,14 +51,3 @@ class Ticket(Base): view_list = sa.orm.relationship("TicketSeen") labels = sa.orm.relationship("Label", secondary="ticket_label") - - def new_updates(self, user): - if not user: - return None - seen = (TicketSeen.query - .filter(TicketSeen.user_id == user.id, - TicketSeen.ticket_id == self.id) - .one_or_none()) - if seen: - return seen.last_view >= self.updated - return None