Commit 9012bf31 by Czémán Arnold

dashboard: improve and make switchable desktop notifications

parent cf9e0077
Pipeline #45 passed with stage
in 0 seconds
......@@ -1223,7 +1223,7 @@ class MyProfileForm(forms.ModelForm):
class Meta:
fields = ('preferred_language', 'email_notifications',
'use_gravatar', )
'desktop_notifications', 'use_gravatar', )
model = Profile
@property
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('dashboard', '0003_message'),
]
operations = [
migrations.AddField(
model_name='profile',
name='desktop_notifications',
field=models.BooleanField(default=False, help_text='Whether user wants to get desktop notification when an activity has finished and the window not in focus.', verbose_name='Desktop notifications'),
),
]
......@@ -184,6 +184,10 @@ class Profile(Model):
email_notifications = BooleanField(
verbose_name=_("Email notifications"), default=True,
help_text=_('Whether user wants to get digested email notifications.'))
desktop_notifications = BooleanField(
verbose_name=_("Desktop notifications"), default=False,
help_text=_('Whether user wants to get desktop notification when '
'an activity has finished and the window not in focus.'))
smb_password = CharField(
max_length=20,
verbose_name=_('Samba password'),
......
......@@ -169,7 +169,7 @@ $(function() {
);
} else {
in_progress = false;
if(windowHasFocus === false){
if(windowHasFocus === false && userWantNotifications()){
sendNotification(generateMessageFromLastActivity());
}
if(reload_vm_detail) location.reload();
......@@ -186,7 +186,8 @@ $(function() {
// Notification init
$(function(){
Notification.requestPermission();
if(userWantNotifications())
Notification.requestPermission();
});
// Detect window has focus
......@@ -200,10 +201,10 @@ $(window).focus(function(){
function generateMessageFromLastActivity(){
var ac = $('div.activity').first();
if(ac.length === 0) return "";
var error = $(ac[0]).children(".timeline-icon-failed").length;
var error = ac.children(".timeline-icon-failed").length;
var sign = (error === 1) ? "❌ " : "✓ ";
return sign + ac[0].innerText.split(",")[0];
var msg = ac.children("strong").text().trim();
return sign + msg;
}
function sendNotification(message) {
......@@ -219,6 +220,11 @@ function sendNotification(message) {
}
}
function userWantNotifications(){
var dn = $("#user-options").data("desktop_notifications");
return dn === "True";
}
function addConnectText() {
var activities = $(".timeline .activity");
if(activities.length > 1) {
......@@ -229,7 +235,6 @@ function addConnectText() {
}
}
String.prototype.hashCode = function() {
var hash = 0, i, chr, len;
if (this.length === 0) return hash;
......
......@@ -15,4 +15,6 @@
{% endif %}
{% endif %}
<span id="user-options" data-desktop_notifications="{{ user.profile.desktop_notifications }}"><span>
{% endif %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment