1
0
mirror of https://github.com/cotes2020/jekyll-theme-chirpy.git synced 2025-12-24 08:37:13 +00:00

Fix the PV fetching failed when local cache is disabled

also improve the PV report logic
This commit is contained in:
Cotes Chung
2021-04-06 01:04:09 +08:00
parent 0b043daa34
commit e6d79249a8
3 changed files with 38 additions and 35 deletions

View File

@@ -19,19 +19,20 @@ const getInitStatus = (function () {
const PvOpts = (function () {
return {
isEnabled() {
return "true" === $("meta[name=pv-cache-enabled]").attr("content");
},
getProxyEndpoint() {
return $("meta[name=pv-proxy-endpoint]").attr("content");
},
getLocalData() {
return $("meta[name=pv-cache-data]").attr("content");
return $("meta[name=pv-cache-path]").attr("content");
},
hasLocalData() {
let path = PvOpts.getLocalData();
return (typeof path !== "undefined" && path !== false);
}
}
}());
const PvCache = (function () {
const PvData = (function () {
const KEY_PV = "pv";
const KEY_CREATION = "pv_created_date";
const KEY_PV_SRC = "pv_source";
@@ -71,12 +72,12 @@ const PvCache = (function () {
return get(KEY_PV_SRC) === Source.PROXY;
},
isExpired() {
if (PvCache.isFromOrigin()) {
if (PvData.isFromOrigin()) {
let date = new Date(get(KEY_CREATION));
date.setDate(date.getDate() + 1); /* update origin records every day */
return Date.now() >= date.getTime();
} else if (PvCache.isFromProxy()) {
} else if (PvData.isFromProxy()) {
let date = new Date(get(KEY_CREATION));
date.setHours(date.getHours() + 1); /* update proxy records per hour */
return Date.now() >= date.getTime();
@@ -84,10 +85,10 @@ const PvCache = (function () {
return false;
},
getAllPageviews() {
return PvCache.getData().totalsForAllResults["ga:pageviews"];
return PvData.getData().totalsForAllResults["ga:pageviews"];
},
newerThan(pv) {
return PvCache.getAllPageviews() > pv.totalsForAllResults["ga:pageviews"];
return PvData.getAllPageviews() > pv.totalsForAllResults["ga:pageviews"];
},
inspectKeys() {
if (localStorage.getItem(KEY_PV) === null
@@ -98,7 +99,7 @@ const PvCache = (function () {
}
};
}()); /* PvCache */
}()); /* PvData */
function countUp(min, max, destId) {
@@ -173,7 +174,7 @@ function fetchProxyPageviews() {
dataType: "jsonp",
jsonpCallback: "displayPageviews",
success: (data, textStatus, jqXHR) => {
PvCache.saveProxyCache(JSON.stringify(data));
PvData.saveProxyCache(JSON.stringify(data));
},
error: (jqXHR, textStatus, errorThrown) => {
console.log("Failed to load pageviews from proxy server: " + errorThrown);
@@ -182,18 +183,18 @@ function fetchProxyPageviews() {
}
function fetchPageviews(fetchOrigin = true, filterOrigin = false) {
if (PvOpts.isEnabled() && fetchOrigin) {
function fetchPageviews(fetchOrigin = true, coverOrigin = false) {
if (fetchOrigin) {
fetch(PvOpts.getLocalData())
.then((response) => response.json())
.then((data) => {
if (filterOrigin) {
if (PvCache.newerThan(data)) {
if (coverOrigin) {
if (PvData.newerThan(data)) {
return;
}
}
displayPageviews(data);
PvCache.saveOriginCache(JSON.stringify(data));
PvData.saveOriginCache(JSON.stringify(data));
})
.then(() => fetchProxyPageviews());
@@ -205,28 +206,29 @@ function fetchPageviews(fetchOrigin = true, filterOrigin = false) {
$(function() {
if ($(".pageviews").length > 0) {
PvCache.inspectKeys();
let cache = PvCache.getData();
if ($(".pageviews").length <= 0) {
return;
}
if (cache) {
displayPageviews(cache);
PvData.inspectKeys();
let data = PvData.getData();
if (PvCache.isExpired()) {
fetchPageviews(true, PvCache.isFromProxy());
if (data) {
displayPageviews(data);
} else {
if (PvCache.isFromOrigin()) {
fetchPageviews(false);
}
}
if (PvData.isExpired()) {
fetchPageviews(true, PvData.isFromProxy());
} else {
fetchPageviews();
if (PvData.isFromOrigin()) {
fetchPageviews(false);
}
}
} else {
fetchPageviews(PvOpts.hasLocalData());
}
});