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): ...@@ -1223,7 +1223,7 @@ class MyProfileForm(forms.ModelForm):
class Meta: class Meta:
fields = ('preferred_language', 'email_notifications', fields = ('preferred_language', 'email_notifications',
'use_gravatar', ) 'desktop_notifications', 'use_gravatar', )
model = Profile model = Profile
@property @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): ...@@ -184,6 +184,10 @@ class Profile(Model):
email_notifications = BooleanField( email_notifications = BooleanField(
verbose_name=_("Email notifications"), default=True, verbose_name=_("Email notifications"), default=True,
help_text=_('Whether user wants to get digested email notifications.')) 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( smb_password = CharField(
max_length=20, max_length=20,
verbose_name=_('Samba password'), verbose_name=_('Samba password'),
......
...@@ -169,7 +169,7 @@ $(function() { ...@@ -169,7 +169,7 @@ $(function() {
); );
} else { } else {
in_progress = false; in_progress = false;
if(windowHasFocus === false){ if(windowHasFocus === false && userWantNotifications()){
sendNotification(generateMessageFromLastActivity()); sendNotification(generateMessageFromLastActivity());
} }
if(reload_vm_detail) location.reload(); if(reload_vm_detail) location.reload();
...@@ -186,7 +186,8 @@ $(function() { ...@@ -186,7 +186,8 @@ $(function() {
// Notification init // Notification init
$(function(){ $(function(){
Notification.requestPermission(); if(userWantNotifications())
Notification.requestPermission();
}); });
// Detect window has focus // Detect window has focus
...@@ -200,10 +201,10 @@ $(window).focus(function(){ ...@@ -200,10 +201,10 @@ $(window).focus(function(){
function generateMessageFromLastActivity(){ function generateMessageFromLastActivity(){
var ac = $('div.activity').first(); var ac = $('div.activity').first();
if(ac.length === 0) return ""; var error = ac.children(".timeline-icon-failed").length;
var error = $(ac[0]).children(".timeline-icon-failed").length;
var sign = (error === 1) ? "❌ " : "✓ "; var sign = (error === 1) ? "❌ " : "✓ ";
return sign + ac[0].innerText.split(",")[0]; var msg = ac.children("strong").text().trim();
return sign + msg;
} }
function sendNotification(message) { function sendNotification(message) {
...@@ -219,6 +220,11 @@ function sendNotification(message) { ...@@ -219,6 +220,11 @@ function sendNotification(message) {
} }
} }
function userWantNotifications(){
var dn = $("#user-options").data("desktop_notifications");
return dn === "True";
}
function addConnectText() { function addConnectText() {
var activities = $(".timeline .activity"); var activities = $(".timeline .activity");
if(activities.length > 1) { if(activities.length > 1) {
...@@ -229,7 +235,6 @@ function addConnectText() { ...@@ -229,7 +235,6 @@ function addConnectText() {
} }
} }
String.prototype.hashCode = function() { String.prototype.hashCode = function() {
var hash = 0, i, chr, len; var hash = 0, i, chr, len;
if (this.length === 0) return hash; if (this.length === 0) return hash;
......
...@@ -15,4 +15,6 @@ ...@@ -15,4 +15,6 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
<span id="user-options" data-desktop_notifications="{{ user.profile.desktop_notifications }}"><span>
{% endif %} {% 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