From e00dc41afada45c9cc0cab882d5e67f8d0c980f2 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Fri, 26 Apr 2024 18:33:58 +0300 Subject: "Mark read" button --- src/main/assets/scripts.js | 24 ++++++++++++++++++++++ .../java/com/juick/service/MessagesService.java | 3 +++ .../com/juick/service/MessagesServiceImpl.java | 9 ++++++++ src/main/java/com/juick/www/api/Messages.java | 6 ++++++ .../resources/templates/views/settings_main.html | 7 +++++-- 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/main/assets/scripts.js b/src/main/assets/scripts.js index 3c83bba4..50406f1c 100644 --- a/src/main/assets/scripts.js +++ b/src/main/assets/scripts.js @@ -533,6 +533,20 @@ function fetchUserUri(dataUri) { }) } +function markRead() { + return new Promise((resolve) => { + fetch('/api/messages/mark_read', { + method: 'POST' + }).then(handleErrors) + .then(() => { + resolve(true) + }) + .catch(() => { + resolve(false) + }) + }) +} + const registerServiceWorker = () => { const publicKey = 'BPU0LniKKR0QiaUvILPd9AystmSOU8rWDZobxKm7IJN5HYxOSQdktRdc74TZvyRS9_kyUz7LDN6gUAmAVOmObAU' navigator.serviceWorker.register('/sw.js', { scope: '/' }) @@ -825,4 +839,14 @@ ready(() => { }) notificationsCheckPermissions(button) } + const markReadButton = document.getElementById('messages_mark_read') + if (markReadButton) { + markReadButton.addEventListener('click', () => { + if (markRead()) { + window.location.reload() + } else { + alert('Something went wrong :(') + } + }) + } }) diff --git a/src/main/java/com/juick/service/MessagesService.java b/src/main/java/com/juick/service/MessagesService.java index f2321b2a..707a04c3 100644 --- a/src/main/java/com/juick/service/MessagesService.java +++ b/src/main/java/com/juick/service/MessagesService.java @@ -142,6 +142,9 @@ public interface MessagesService { @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true, condition = "{ #user.uid != 0 }") void setLastReadComment(User user, Integer mid, Integer rid); + @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true, condition = "{ #user.uid != 0 }") + void setAllRead(User user); + @CacheEvict(value = { "discover", "discussions", "messages", "replies" }, allEntries = true, condition = "{ #user.uid != 0 }") void setRead(User user, Integer mid); diff --git a/src/main/java/com/juick/service/MessagesServiceImpl.java b/src/main/java/com/juick/service/MessagesServiceImpl.java index 940cdaba..105b86cf 100644 --- a/src/main/java/com/juick/service/MessagesServiceImpl.java +++ b/src/main/java/com/juick/service/MessagesServiceImpl.java @@ -1084,6 +1084,15 @@ public class MessagesServiceImpl extends BaseJdbcService implements MessagesServ rid, mid, user.getUid()); } + @Override + public void setAllRead(User user) { + jdbcTemplate.update(""" + update subscr_messages set last_read_rid=total.replies FROM messages + INNER JOIN messages total on total.message_id=messages.message_id + WHERE messages.message_id=subscr_messages.message_id AND subscr_messages.suser_id=? + """, user.getUid()); + } + @Transactional @Override public void setRead(User user, Integer mid) { diff --git a/src/main/java/com/juick/www/api/Messages.java b/src/main/java/com/juick/www/api/Messages.java index 969bef4f..5a90bf0b 100644 --- a/src/main/java/com/juick/www/api/Messages.java +++ b/src/main/java/com/juick/www/api/Messages.java @@ -210,6 +210,12 @@ public class Messages { } throw new HttpBadRequestException(); } + @PostMapping("/api/messages/mark_read") + public void markRead(@Parameter(hidden = true) User visitor) { + if (!visitor.isAnonymous()) { + messagesService.setAllRead(visitor); + } + } @PostMapping("/api/messages/set_privacy") public void togglePrivacy(@Parameter(hidden = true) User visitor, @RequestParam Integer mid) { if (visitor.isPremium() || visitor.isAdmin()) { diff --git a/src/main/resources/templates/views/settings_main.html b/src/main/resources/templates/views/settings_main.html index 8937f507..954edb98 100644 --- a/src/main/resources/templates/views/settings_main.html +++ b/src/main/resources/templates/views/settings_main.html @@ -6,8 +6,11 @@

Verify your account by adding email or social account

{% endif %}
- Browser notifications - + Notifications +
Browser notifications:
+ {% if visitor.unreadCount > 0 %} +
Unread messages: {{ visitor.unreadCount }}
+ {% endif %}