feat(notifications): implement notification system with support for missed calls, viewing status, and fetching unread notifications
This commit is contained in:
@@ -229,3 +229,37 @@ class MiscDAO:
|
|||||||
"SELECT * FROM archived_pages WHERE id = ?",
|
"SELECT * FROM archived_pages WHERE id = ?",
|
||||||
(archive_id,),
|
(archive_id,),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Notifications
|
||||||
|
def add_notification(self, type, remote_hash, title, content):
|
||||||
|
now = datetime.now(UTC)
|
||||||
|
timestamp = datetime.now(UTC).timestamp()
|
||||||
|
self.provider.execute(
|
||||||
|
"INSERT INTO notifications (type, remote_hash, title, content, timestamp, created_at) VALUES (?, ?, ?, ?, ?, ?)",
|
||||||
|
(type, remote_hash, title, content, timestamp, now),
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_notifications(self, filter_unread=False, limit=50):
|
||||||
|
query = "SELECT * FROM notifications"
|
||||||
|
params = []
|
||||||
|
if filter_unread:
|
||||||
|
query += " WHERE is_viewed = 0"
|
||||||
|
query += " ORDER BY timestamp DESC LIMIT ?"
|
||||||
|
params.append(limit)
|
||||||
|
return self.provider.fetchall(query, params)
|
||||||
|
|
||||||
|
def mark_notifications_as_viewed(self, notification_ids=None):
|
||||||
|
if notification_ids:
|
||||||
|
placeholders = ", ".join(["?"] * len(notification_ids))
|
||||||
|
self.provider.execute(
|
||||||
|
f"UPDATE notifications SET is_viewed = 1 WHERE id IN ({placeholders})",
|
||||||
|
notification_ids,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.provider.execute("UPDATE notifications SET is_viewed = 1")
|
||||||
|
|
||||||
|
def get_unread_notification_count(self):
|
||||||
|
row = self.provider.fetchone(
|
||||||
|
"SELECT COUNT(*) as count FROM notifications WHERE is_viewed = 0",
|
||||||
|
)
|
||||||
|
return row["count"] if row else 0
|
||||||
|
|||||||
Reference in New Issue
Block a user