Compare commits
No commits in common. "580ec5ab0d57a542ab38b25a6c508804d5bcfa21" and "e469e27abfedc0b08b483e0715b4dc9b16240c5e" have entirely different histories.
580ec5ab0d
...
e469e27abf
@ -1,20 +1,9 @@
|
|||||||
from snek.system.service import BaseService
|
from snek.system.service import BaseService
|
||||||
from snek.system.model import now
|
|
||||||
|
|
||||||
class NotificationService(BaseService):
|
class NotificationService(BaseService):
|
||||||
mapper_name = "notification"
|
mapper_name = "notification"
|
||||||
|
|
||||||
async def mark_as_read(self, user_uid, channel_message_uid):
|
|
||||||
model = await self.get(user_uid, object_uid=channel_message_uid)
|
|
||||||
if not model:
|
|
||||||
return False
|
|
||||||
model['read_at'] = now()
|
|
||||||
await self.save(model)
|
|
||||||
return True
|
|
||||||
|
|
||||||
async def get_unread_stats(self,user_uid):
|
|
||||||
records = await self.query("SELECT object_type, COUNT(*) as count FROM notification WHERE user_uid=:user_uid AND read_at IS NULL GROUP BY object_type",dict(user_uid=user_uid))
|
|
||||||
|
|
||||||
async def create(self, object_uid, object_type, user_uid, message):
|
async def create(self, object_uid, object_type, user_uid, message):
|
||||||
model = await self.new()
|
model = await self.new()
|
||||||
model["object_uid"] = object_uid
|
model["object_uid"] = object_uid
|
||||||
|
|||||||
@ -1,37 +1,3 @@
|
|||||||
async function requestNotificationPermission() {
|
|
||||||
const permission = await Notification.requestPermission();
|
|
||||||
return permission === 'granted';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subscribe to Push Notifications
|
|
||||||
async function subscribeUser() {
|
|
||||||
const registration = await navigator.serviceWorker.register('/service-worker.js');
|
|
||||||
|
|
||||||
const subscription = await registration.pushManager.subscribe({
|
|
||||||
userVisibleOnly: true,
|
|
||||||
applicationServerKey: urlBase64ToUint8Array(PUBLIC_VAPID_KEY)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Send subscription to your backend
|
|
||||||
await fetch('/subscribe', {
|
|
||||||
method: 'POST',
|
|
||||||
body: JSON.stringify(subscription),
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Service Worker (service-worker.js)
|
|
||||||
self.addEventListener('push', event => {
|
|
||||||
const data = event.data.json();
|
|
||||||
self.registration.showNotification(data.title, {
|
|
||||||
body: data.message,
|
|
||||||
icon: data.icon
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
self.addEventListener("install", (event) => {
|
self.addEventListener("install", (event) => {
|
||||||
console.log("Service worker installed");
|
console.log("Service worker installed");
|
||||||
});
|
});
|
||||||
@ -61,4 +27,4 @@ self.addEventListener("notificationclick", (event) => {
|
|||||||
event.notification.close();
|
event.notification.close();
|
||||||
event.waitUntil(clients.openWindow(
|
event.waitUntil(clients.openWindow(
|
||||||
"https://snek.molodetz.nl",));
|
"https://snek.molodetz.nl",));
|
||||||
});*/
|
});
|
||||||
|
|||||||
@ -73,7 +73,7 @@ def set_link_target_blank(text):
|
|||||||
element.attrs['target'] = '_blank'
|
element.attrs['target'] = '_blank'
|
||||||
element.attrs['rel'] = 'noopener noreferrer'
|
element.attrs['rel'] = 'noopener noreferrer'
|
||||||
element.attrs['referrerpolicy'] = 'no-referrer'
|
element.attrs['referrerpolicy'] = 'no-referrer'
|
||||||
element.attrs['href'] = element.attrs['href'].strip(".").strip(",")
|
element.attrs['href'] = element.attrs['href'].strip(".")
|
||||||
|
|
||||||
return str(soup)
|
return str(soup)
|
||||||
|
|
||||||
|
|||||||
@ -39,11 +39,6 @@ class RPCView(BaseView):
|
|||||||
def is_logged_in(self):
|
def is_logged_in(self):
|
||||||
return self.view.session.get("logged_in", False)
|
return self.view.session.get("logged_in", False)
|
||||||
|
|
||||||
async def mark_as_read(self, message_uid):
|
|
||||||
self._require_login()
|
|
||||||
await self.services.notification.mark_as_read(self.user_uid, message_uid)
|
|
||||||
return True
|
|
||||||
|
|
||||||
async def login(self, username, password):
|
async def login(self, username, password):
|
||||||
success = await self.services.user.validate_login(username, password)
|
success = await self.services.user.validate_login(username, password)
|
||||||
if not success:
|
if not success:
|
||||||
|
|||||||
@ -77,7 +77,7 @@ class UploadView(BaseView):
|
|||||||
await self.services.drive_item.save(drive_item)
|
await self.services.drive_item.save(drive_item)
|
||||||
response = "Uploaded [" + filename + "](/drive.bin/" + drive_item["uid"] + ")"
|
response = "Uploaded [" + filename + "](/drive.bin/" + drive_item["uid"] + ")"
|
||||||
#response = "<iframe width=\"100%\" frameborder=\"0\" allowfullscreen title=\"Embedded\" src=\"" + self.base_url + "/drive.bin/" + drive_item["uid"] + "\"></iframe>\n"
|
#response = "<iframe width=\"100%\" frameborder=\"0\" allowfullscreen title=\"Embedded\" src=\"" + self.base_url + "/drive.bin/" + drive_item["uid"] + "\"></iframe>\n"
|
||||||
response = "[" + filename + "](/drive.bin/" + drive_item["uid"] + extension + ")"
|
response = "[url](/drive.bin/" + drive_item["uid"] + extension + ")"
|
||||||
|
|
||||||
await self.services.chat.send(
|
await self.services.chat.send(
|
||||||
self.request.session.get("uid"), channel_uid, response
|
self.request.session.get("uid"), channel_uid, response
|
||||||
|
|||||||
@ -46,9 +46,6 @@ class WebView(BaseView):
|
|||||||
messages = [await self.app.services.channel_message.to_extended_dict(message) for message in await self.app.services.channel_message.offset(
|
messages = [await self.app.services.channel_message.to_extended_dict(message) for message in await self.app.services.channel_message.offset(
|
||||||
channel["uid"]
|
channel["uid"]
|
||||||
)]
|
)]
|
||||||
for message in messages:
|
|
||||||
await self.app.services.notification.mark_as_read(self.session.get("uid"),message["uid"])
|
|
||||||
|
|
||||||
channels = []
|
channels = []
|
||||||
async for subscribed_channel in self.app.services.channel_member.find(user_uid=self.session.get("uid"), deleted_at=None, is_banned=False):
|
async for subscribed_channel in self.app.services.channel_member.find(user_uid=self.session.get("uid"), deleted_at=None, is_banned=False):
|
||||||
item = {}
|
item = {}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user