diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1c160c311..7bcba0d0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
## v1.13.0
+**v1.13.0.18** *(2016-10-31)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.18/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.18/builds/4chan-X-noupdate.crx)]
+- Improve robustness against invalid settings data, including thread watcher timestamps from future.
+
**v1.13.0.17** *(2016-10-30)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.17/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.17/builds/4chan-X-noupdate.crx)]
- Various regression and bug fixes.
diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx
index 1c7590353..830d3c115 100644
Binary files a/builds/4chan-X-beta.crx and b/builds/4chan-X-beta.crx differ
diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js
index 1ca3c2b35..6df20c1cf 100644
--- a/builds/4chan-X-beta.meta.js
+++ b/builds/4chan-X-beta.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X beta
-// @version 1.13.0.17
+// @version 1.13.0.18
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js
index 208cd7491..13337e2a0 100644
--- a/builds/4chan-X-beta.user.js
+++ b/builds/4chan-X-beta.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X beta
-// @version 1.13.0.17
+// @version 1.13.0.18
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -147,7 +147,7 @@ docSet = function() {
};
g = {
- VERSION: '1.13.0.17',
+ VERSION: '1.13.0.18',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -5321,7 +5321,7 @@ DataBoard = (function() {
};
DataBoard.prototype.clean = function() {
- var boardID, now, ref, val;
+ var boardID, now, ref, ref1, val;
$.forceSync(this.key);
ref = this.data.boards;
for (boardID in ref) {
@@ -5331,7 +5331,7 @@ DataBoard = (function() {
});
}
now = Date.now();
- if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ if (!((now - 2 * $.HOUR < (ref1 = this.data.lastChecked || 0) && ref1 <= now))) {
this.data.lastChecked = now;
for (boardID in this.data.boards) {
this.ajaxClean(boardID);
@@ -6617,9 +6617,13 @@ Redirect = (function() {
{ "uid": 31, "name": "Archive Of Sins", "domain": "archiveofsins.com", "http": true, "https": false, "software": "foolfuuka", "boards": [ "h", "hc", "hm", "r", "s", "soc" ], "files": [ "h", "hc", "hm", "r", "s", "soc" ] }
],
init: function() {
+ var now, ref;
this.selectArchives();
- if (Conf['archiveAutoUpdate'] && Conf['lastarchivecheck'] < Date.now() - 2 * $.DAY) {
- return this.update();
+ if (Conf['archiveAutoUpdate']) {
+ now = Date.now();
+ if (!((now - 2 * $.DAY < (ref = Conf['lastarchivecheck']) && ref <= now))) {
+ return this.update();
+ }
}
},
selectArchives: function() {
@@ -7891,7 +7895,9 @@ BoardConfig = (function() {
BoardConfig = {
cbs: [],
init: function() {
- if ((Conf['boardConfig'].lastChecked || 0) < Date.now() - 2 * $.HOUR) {
+ var now, ref;
+ now = Date.now();
+ if (!((now - 2 * $.HOUR < (ref = Conf['boardConfig'].lastChecked || 0) && ref <= now))) {
return $.ajax('//a.4cdn.org/boards.json', {
onloadend: this.load
});
@@ -10068,6 +10074,8 @@ Index = (function() {
}).map(function(post) {
return post.no;
});
+ default:
+ return liveThreadIDs;
}
})();
if (Index.search && (threadIDs = Index.querySearch(Index.search))) {
@@ -18172,7 +18180,7 @@ ThreadWatcher = (function() {
return ThreadWatcher.clearRequests();
},
fetchAuto: function() {
- var db, interval, now;
+ var db, interval, now, ref;
clearTimeout(ThreadWatcher.timeout);
if (!Conf['Auto Update Thread Watcher']) {
return;
@@ -18180,7 +18188,7 @@ ThreadWatcher = (function() {
db = ThreadWatcher.db;
interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR;
now = Date.now();
- if (now >= (db.data.lastChecked || 0) + interval) {
+ if (!((now - interval < (ref = db.data.lastChecked || 0) && ref <= now))) {
ThreadWatcher.fetchAllStatus();
db.data.lastChecked = now;
db.save();
diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx
index 2e4e8120d..ae5b5ec53 100644
Binary files a/builds/4chan-X-noupdate.crx and b/builds/4chan-X-noupdate.crx differ
diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js
index c06ecc7c7..0f02249a4 100644
--- a/builds/4chan-X-noupdate.user.js
+++ b/builds/4chan-X-noupdate.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.13.0.17
+// @version 1.13.0.18
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -147,7 +147,7 @@ docSet = function() {
};
g = {
- VERSION: '1.13.0.17',
+ VERSION: '1.13.0.18',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -5321,7 +5321,7 @@ DataBoard = (function() {
};
DataBoard.prototype.clean = function() {
- var boardID, now, ref, val;
+ var boardID, now, ref, ref1, val;
$.forceSync(this.key);
ref = this.data.boards;
for (boardID in ref) {
@@ -5331,7 +5331,7 @@ DataBoard = (function() {
});
}
now = Date.now();
- if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ if (!((now - 2 * $.HOUR < (ref1 = this.data.lastChecked || 0) && ref1 <= now))) {
this.data.lastChecked = now;
for (boardID in this.data.boards) {
this.ajaxClean(boardID);
@@ -6617,9 +6617,13 @@ Redirect = (function() {
{ "uid": 31, "name": "Archive Of Sins", "domain": "archiveofsins.com", "http": true, "https": false, "software": "foolfuuka", "boards": [ "h", "hc", "hm", "r", "s", "soc" ], "files": [ "h", "hc", "hm", "r", "s", "soc" ] }
],
init: function() {
+ var now, ref;
this.selectArchives();
- if (Conf['archiveAutoUpdate'] && Conf['lastarchivecheck'] < Date.now() - 2 * $.DAY) {
- return this.update();
+ if (Conf['archiveAutoUpdate']) {
+ now = Date.now();
+ if (!((now - 2 * $.DAY < (ref = Conf['lastarchivecheck']) && ref <= now))) {
+ return this.update();
+ }
}
},
selectArchives: function() {
@@ -7891,7 +7895,9 @@ BoardConfig = (function() {
BoardConfig = {
cbs: [],
init: function() {
- if ((Conf['boardConfig'].lastChecked || 0) < Date.now() - 2 * $.HOUR) {
+ var now, ref;
+ now = Date.now();
+ if (!((now - 2 * $.HOUR < (ref = Conf['boardConfig'].lastChecked || 0) && ref <= now))) {
return $.ajax('//a.4cdn.org/boards.json', {
onloadend: this.load
});
@@ -10068,6 +10074,8 @@ Index = (function() {
}).map(function(post) {
return post.no;
});
+ default:
+ return liveThreadIDs;
}
})();
if (Index.search && (threadIDs = Index.querySearch(Index.search))) {
@@ -18172,7 +18180,7 @@ ThreadWatcher = (function() {
return ThreadWatcher.clearRequests();
},
fetchAuto: function() {
- var db, interval, now;
+ var db, interval, now, ref;
clearTimeout(ThreadWatcher.timeout);
if (!Conf['Auto Update Thread Watcher']) {
return;
@@ -18180,7 +18188,7 @@ ThreadWatcher = (function() {
db = ThreadWatcher.db;
interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR;
now = Date.now();
- if (now >= (db.data.lastChecked || 0) + interval) {
+ if (!((now - interval < (ref = db.data.lastChecked || 0) && ref <= now))) {
ThreadWatcher.fetchAllStatus();
db.data.lastChecked = now;
db.save();
diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx
index 09ebb78fd..8b6461861 100644
Binary files a/builds/4chan-X.crx and b/builds/4chan-X.crx differ
diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js
index f94c9d2a1..74a191934 100644
--- a/builds/4chan-X.meta.js
+++ b/builds/4chan-X.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.13.0.17
+// @version 1.13.0.18
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js
index 0bfd0ed3d..e6a706f52 100644
--- a/builds/4chan-X.user.js
+++ b/builds/4chan-X.user.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.13.0.17
+// @version 1.13.0.18
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -147,7 +147,7 @@ docSet = function() {
};
g = {
- VERSION: '1.13.0.17',
+ VERSION: '1.13.0.18',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -5321,7 +5321,7 @@ DataBoard = (function() {
};
DataBoard.prototype.clean = function() {
- var boardID, now, ref, val;
+ var boardID, now, ref, ref1, val;
$.forceSync(this.key);
ref = this.data.boards;
for (boardID in ref) {
@@ -5331,7 +5331,7 @@ DataBoard = (function() {
});
}
now = Date.now();
- if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ if (!((now - 2 * $.HOUR < (ref1 = this.data.lastChecked || 0) && ref1 <= now))) {
this.data.lastChecked = now;
for (boardID in this.data.boards) {
this.ajaxClean(boardID);
@@ -6617,9 +6617,13 @@ Redirect = (function() {
{ "uid": 31, "name": "Archive Of Sins", "domain": "archiveofsins.com", "http": true, "https": false, "software": "foolfuuka", "boards": [ "h", "hc", "hm", "r", "s", "soc" ], "files": [ "h", "hc", "hm", "r", "s", "soc" ] }
],
init: function() {
+ var now, ref;
this.selectArchives();
- if (Conf['archiveAutoUpdate'] && Conf['lastarchivecheck'] < Date.now() - 2 * $.DAY) {
- return this.update();
+ if (Conf['archiveAutoUpdate']) {
+ now = Date.now();
+ if (!((now - 2 * $.DAY < (ref = Conf['lastarchivecheck']) && ref <= now))) {
+ return this.update();
+ }
}
},
selectArchives: function() {
@@ -7891,7 +7895,9 @@ BoardConfig = (function() {
BoardConfig = {
cbs: [],
init: function() {
- if ((Conf['boardConfig'].lastChecked || 0) < Date.now() - 2 * $.HOUR) {
+ var now, ref;
+ now = Date.now();
+ if (!((now - 2 * $.HOUR < (ref = Conf['boardConfig'].lastChecked || 0) && ref <= now))) {
return $.ajax('//a.4cdn.org/boards.json', {
onloadend: this.load
});
@@ -10068,6 +10074,8 @@ Index = (function() {
}).map(function(post) {
return post.no;
});
+ default:
+ return liveThreadIDs;
}
})();
if (Index.search && (threadIDs = Index.querySearch(Index.search))) {
@@ -18172,7 +18180,7 @@ ThreadWatcher = (function() {
return ThreadWatcher.clearRequests();
},
fetchAuto: function() {
- var db, interval, now;
+ var db, interval, now, ref;
clearTimeout(ThreadWatcher.timeout);
if (!Conf['Auto Update Thread Watcher']) {
return;
@@ -18180,7 +18188,7 @@ ThreadWatcher = (function() {
db = ThreadWatcher.db;
interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR;
now = Date.now();
- if (now >= (db.data.lastChecked || 0) + interval) {
+ if (!((now - interval < (ref = db.data.lastChecked || 0) && ref <= now))) {
ThreadWatcher.fetchAllStatus();
db.data.lastChecked = now;
db.save();
diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip
index a6c41352e..e01ecfaa1 100644
Binary files a/builds/4chan-X.zip and b/builds/4chan-X.zip differ
diff --git a/builds/updates-beta.xml b/builds/updates-beta.xml
index 47991ee2f..806732ec1 100644
--- a/builds/updates-beta.xml
+++ b/builds/updates-beta.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/builds/updates.xml b/builds/updates.xml
index 7160ceab2..6cb5fae3f 100644
--- a/builds/updates.xml
+++ b/builds/updates.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/version.json b/version.json
index 987bdce14..2e5258e73 100644
--- a/version.json
+++ b/version.json
@@ -1,4 +1,4 @@
{
- "version": "1.13.0.17",
- "date": "2016-10-30T05:07:56.889Z"
+ "version": "1.13.0.18",
+ "date": "2016-10-31T02:53:57.311Z"
}
\ No newline at end of file