-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
106 lines (91 loc) · 2.71 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
"use strict";
const defaultConfig = {
doNotDisturb: false,
frequency: 30,
quietHours: {
from: 20,
to: 8
}
};
function createBasicNotification(message, title, imageUrl) {
chrome.notifications.create(
`aqua-buddy-${Date.now()}`,
{
type: "basic",
iconUrl: "images/aqua-buddy-512.png",
title: title || "Hey there! I'm Aqua Buddy 😊",
message: message,
imageUrl: imageUrl
}
);
}
function sendWelcomeNotification() {
createBasicNotification(
"I'm your friend 💙 and I'm here to help you stay hydrated!"
);
}
function initializeConfigurationFromStorage() {
chrome.storage.sync.get(['aquaBuddyConfig'], function(result) {
// If sync storage returns nothing, set to defaultConfig
let aquaBuddyConfig = result.aquaBuddyConfig;
if (!aquaBuddyConfig) {
aquaBuddyConfig = defaultConfig;
chrome.storage.sync.set({'aquaBuddyConfig': aquaBuddyConfig});
}
setAlarmForNextNotification(aquaBuddyConfig);
});
}
function setAlarmForNextNotification(aquaBuddyConfig) {
chrome.alarms.create('aqua-buddy', {
periodInMinutes: aquaBuddyConfig.frequency
});
}
function onAlarmHandler() {
chrome.storage.sync.get(['aquaBuddyConfig'], function(result) {
// If sync storage returns nothing, set to defaultConfig
let aquaBuddyConfig = result.aquaBuddyConfig;
if (aquaBuddyConfig && !aquaBuddyConfig.doNotDisturb) {
const currentHour = (new Date()).getHours();
const quietHoursFrom = aquaBuddyConfig.quietHours.from;
const quietHoursTo = aquaBuddyConfig.quietHours.to;
if (
(
quietHoursFrom > quietHoursTo &&
currentHour <= quietHoursFrom &&
currentHour >= quietHoursTo
) ||
(
quietHoursFrom < quietHoursTo &&
(
currentHour < quietHoursFrom ||
currentHour >= quietHoursTo
)
)
) {
createBasicNotification(
"It's time to drink some water 💧 and keep yourself hydrated 💪"
);
}
}
});
}
chrome.runtime.onInstalled.addListener(function () {
sendWelcomeNotification();
initializeConfigurationFromStorage();
});
chrome.storage.onChanged.addListener(function(changes, area) {
const aquaBuddyConfig = changes.aquaBuddyConfig;
if (area === 'sync' && aquaBuddyConfig && aquaBuddyConfig.oldValue) {
if (aquaBuddyConfig.newValue.doNotDisturb) {
chrome.alarms.clear('aqua-buddy');
} else {
setAlarmForNextNotification(aquaBuddyConfig.newValue);
}
}
});
chrome.alarms.onAlarm.addListener(function() {
onAlarmHandler();
});