-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground.js
141 lines (115 loc) · 5.44 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Licencja MIT
*
Copyright (c) 2017 Grzegorz Kupczyk [email protected]
*
Niniejszym gwarantuje się, bez opłat, że każda osoba która wejdzie w posiadanie kopii tego
* oprogramowania i związanych z nim plików dokumentacji (dalej „Oprogramowanie”) może
wprowadzać do obrotu Oprogramowanie bez żadnych ograniczeń, w tym bez ograniczeń
* prawa do użytkowania, kopiowania, modyfikowania, łączenia, publikowania,
dystrybuowania, sublicencjonowania i/lub sprzedaży kopii Oprogramowania a także
* zezwalania osobie, której Oprogramowanie zostało dostarczone czynienia tego samego, z
zastrzeżeniem następujących warunków:
*
Powyższa nota zastrzegająca prawa autorskie oraz niniejsza nota zezwalająca muszą zostać
* włączone do wszystkich kopii lub istotnych części Oprogramowania.
* OPROGRAMOWANIE JEST DOSTARCZONE TAKIM, JAKIE JEST, BEZ JAKIEJKOLWIEK GWARANCJI,
WYRAŹNEJ LUB DOROZUMIANEJ, NIE WYŁĄCZAJĄC GWARANCJI PRZYDATNOŚCI HANDLOWEJ LUB
* PRZYDATNOŚCI DO OKREŚLONYCH CELÓW A TAKŻE BRAKU WAD PRAWNYCH. W ŻADNYM
PRZYPADKU TWÓRCA LUB POSIADACZ PRAW AUTORSKICH NIE MOŻE PONOSIĆ
* ODPOWIEDZIALNOŚCI Z TYTUŁU ROSZCZEŃ LUB WYRZĄDZONEJ SZKODY A TAKŻE ŻADNEJ INNEJ
ODPOWIEDZIALNOŚCI CZY TO WYNIKAJĄCEJ Z UMOWY, DELIKTU, CZY JAKIEJKOLWIEK INNEJ
* PODSTAWY POWSTAŁEJ W ZWIĄZKU Z OPROGRAMOWANIEM LUB UŻYTKOWANIEM GO LUB
WPROWADZANIEM GO DO OBROTU
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
(function() {
//ustawienia skryptu
const version = 0.1;
const interval = 10 * 60000; //co jaki czas sprawdzać (10 minut)
const youtubeprofiles = [
'https://www.youtube.com/user/MiroslawZelent/videos',
'https://www.youtube.com/user/wybuchajacebeczki/videos',
'https://www.youtube.com/user/JavaDevMatt/videos',
'https://www.youtube.com/user/NoCopyrightSounds/videos'
//kolejne odnośniki do list filmów danych kanałów
];
//zmienne globalne
var lastTitle = {}; //lista nazw ostatnich tytułów dla kazdego kanału
//inicjalizuj pętlę powiadomień
function InitializeLocalStorage(){
//sprawdz, czy "pętla sprawdzająca" jest już w ruchu
if (!localStorage.isInitialized || localStorage.version != version) {
localStorage.isActivated = true;
}
//sprawdź, czy przeglądarka obsługuje powiadomienia
if (window.Notification) {
if (JSON.parse(localStorage.isActivated)) {
CheckYoutubeVideo(DotaHandler);
}
//wykonuj funkcję, co 'interval' milisekund
setInterval(function() {
if (JSON.parse(localStorage.isActivated)) {
CheckYoutubeVideo(DotaHandler);
}
}, interval);
}
}
//wyświetl powiadomienie
function Notify(tytul, wiadomosc, ikona, link) {
//sprawdź, czy przeglądarka obsługuje powiadomienia
if (window.Notification) {
var notify = new Notification(tytul, {
icon: ikona,
body: wiadomosc
});
//dodaj reakcję na naciśnięcie powiadomienia
notify.onclick = function() {
window.open(link);
}
}
}
function CheckYoutubeVideo(done) {
youtubeprofiles.forEach( (youtubeprofile,i) => {
//wczytujemy stronę z listą filmów
$.get(youtubeprofile, function(data){
var doc = $.parseHTML(data);
//znajdź tytuł najnowszego filmu
var title = $('.yt-lockup-title', doc);
if (title.length === 0){
lastTitle[youtubeprofile] = 'nope_brak_nazwy_default_miszmasz_angielski_polski_dwa_bratanki_hehe';
return done(false); //kanał nie ma żadnego filmu
}
title = title.first().text();
if (!lastTitle[youtubeprofile]){
lastTitle[youtubeprofile] = title;
return done(false); //dopiero uruchomiono skrypt, nie ma punktu odniesienia
}
if (lastTitle[youtubeprofile] != title){
//dodano nowy film
//w tym miejscu można rozbudować dodatek,
//aby podać dokładniejsze informacje o video w powiadomieniu
lastTitle[youtubeprofile] = title;
return done({
title: title,
url: youtubeprofile
});
}
//nie dodano nowego filmiku
return done(false);
});
});
}
function DotaHandler(data){
//nie znaleziono nowego filmu
if (data === false) return;
//budowa powiadomienia
var title = "Nowy film!";
var img = 'img/ChromeExtension128.png';
var body = data.title;
var url = data.url;
//wyświetl powiadomienie
Notify(title, body, img, url);
}
//uruchom skrypt
InitializeLocalStorage();
})();