-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbackground.js
More file actions
113 lines (94 loc) · 3.28 KB
/
background.js
File metadata and controls
113 lines (94 loc) · 3.28 KB
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
// Auto-loop over URLs
// https://github.com/one10/chrome-auto-loop
// based on chrome ext. examples
var minDefaultSleep = 2000; // e.g., 3000 is 3 seconds
var maxDefaultSleep = 4000; // e.g., 3000 is 3 seconds
if (localStorage["min_default_sleep"]) {
minDefaultSleep = parseInt(localStorage["min_default_sleep"]);
}
if (localStorage["max_default_sleep"]) {
maxDefaultSleep = parseInt(localStorage["max_default_sleep"]);
}
var urlsObj;
var urlFilename = 'urls';
if (localStorage["filetype"] == "json") {
urlFilename = urlFilename + ".json";
} else {
urlFilename = urlFilename + ".txt";
}
var firstIcon = 1;
var lastIcon = 5;
var currentIcon = firstIcon;
var curUrlIndex = 0;
var isRunning = 1;
updateIcon();
// load JSON file with URLs
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = parseInput;
xhr.open("GET", chrome.extension.getURL(urlFilename), true);
xhr.send(null);
// allow disabling the loop via icon click
chrome.browserAction.onClicked.addListener(toggleRunning);
// kick off perpetual visitUrl
var interval = setInterval(visitUrl, maxDefaultSleep);
function visitUrl() {
if (isRunning == 1) {
chrome.tabs.getSelected(null, function(tab) {
full_url = localStorage["url_prefix"] ? localStorage["url_prefix"].trim() : "";
full_url += localStorage["query_prefix"] ? localStorage["query_prefix"].trim() : "";
full_url += urlsObj.urls[curUrlIndex].url;
if (urlsObj.urls[curUrlIndex].pause) {
pause = urlsObj.urls[curUrlIndex].pause;
}
else {
pause = (minDefaultSleep + Math.floor(Math.random() * maxDefaultSleep));
}
// increment or roll over the URL counter
if (curUrlIndex == (urlsObj.urls.length - 1)) {
curUrlIndex = 0;
} else {
curUrlIndex += 1;
}
updateIcon();
// re-set the interval to either default or from JSON
clearInterval(interval);
interval = setInterval(visitUrl, pause);
chrome.tabs.update(tab.id, {url: full_url});
});
}
}
function toggleRunning() {
isRunning = isRunning == 1 ? 0 : 1;
updateIcon();
}
function updateIcon() {
chrome.browserAction.setIcon({path:"images/icon" + currentIcon + ".png"});
currentIcon = currentIcon == lastIcon ? firstIcon : currentIcon + 1;
}
function parseInput() {
if (xhr.readyState == 4) {
if (xhr.responseText) {
// expecting either JSON or plaintext with urls
if (localStorage["filetype"] == "json") {
urlsObj = JSON.parse(xhr.responseText);
}
else {
// for plaintext, mimic the JSON structure
urlsObj = { "urls":[] };
var urls = xhr.responseText.trim().split('\n');
for (var i in urls) {
var url = new Object();
url.url = urls[i];
urlsObj.urls.push(url);
}
}
}
if (!xhr.responseText || !urlsObj || urlsObj.urls.length == 0) {
alert("Error loading the URL JSON, extension not running");
isRunning = 0;
}
else {
isRunning = 1;
}
}
}