Fix global counter issue

The total elements field need async to long to load, so that this value
is NaN by scanning the first url. We check now first of NaN or Null and
get the current value. The browser is waiting until the value is loaded.
This commit is contained in:
Kevin Röbert 2017-09-14 03:39:40 +02:00
parent 986ee20233
commit 47c4882e9b
2 changed files with 203 additions and 191 deletions

View File

@ -1,8 +1,8 @@
/*
* ##################################################################
* # Fetch Rules & Exception from URL #
* ##################################################################
*/
* ##################################################################
* # Fetch Rules & Exception from URL #
* ##################################################################
*/
var data = [];
var providers = [];
var prvKeys = [];
@ -11,14 +11,14 @@ var badges = [];
var badgedStatus;
var tabid = 0;
var globalCounter;
var globalURLCounter;
var globalurlcounter;
var siteBlockedAlert = browser.extension.getURL ('./siteBlockedAlert.html');
/**
* Initialize the JSON provider object keys.
*
* @param {JSON Object} obj
*/
* Initialize the JSON provider object keys.
*
* @param {JSON Object} obj
*/
function getKeys(obj){
for(var key in obj){
prvKeys.push(key);
@ -26,9 +26,9 @@ function getKeys(obj){
};
/**
* Initialize the providers form the JSON object.
*
*/
* Initialize the providers form the JSON object.
*
*/
function createProviders()
{
for(var p = 0; p < prvKeys.length; p++)
@ -54,11 +54,11 @@ function createProviders()
};
/**
* Convert the external data to JSON Objects and
* call the create provider function.
*
* @param {String} retrievedText - pure data form github
*/
* Convert the external data to JSON Objects and
* call the create provider function.
*
* @param {String} retrievedText - pure data form github
*/
function toJSON(retrievedText) {
data = JSON.parse(retrievedText);
getKeys(data.providers);
@ -66,10 +66,10 @@ function toJSON(retrievedText) {
}
/**
* Load local saved data, if the browser is offline or
* some other network trouble.
*
*/
* Load local saved data, if the browser is offline or
* some other network trouble.
*
*/
function loadOldDataFromStore()
{
browser.storage.local.get('ClearURLsData', function(data){
@ -85,9 +85,9 @@ function loadOldDataFromStore()
}
/**
* Fetch the Rules & Exception github.
*
*/
* Fetch the Rules & Exception github.
*
*/
function fetchFromURL()
{
fetch("https://raw.githubusercontent.com/KevinRoebert/ClearUrls/master/data/data.json?flush_cache=true")
@ -114,16 +114,16 @@ function fetchFromURL()
// ##################################################################
/*
* ##################################################################
* # Supertyp Provider #
* ##################################################################
*/
* ##################################################################
* # Supertyp Provider #
* ##################################################################
*/
/**
* Declare constructor
*
* @param {String} _name Provider name
* @param {boolean} completeProvider Set URL Pattern as rule
*/
* Declare constructor
*
* @param {String} _name Provider name
* @param {boolean} completeProvider Set URL Pattern as rule
*/
function Provider(_name,_completeProvider = false){
var name = _name;
var urlPattern;
@ -221,13 +221,13 @@ function Provider(_name,_completeProvider = false){
// ##################################################################
/**
* Helper function which remove the tracking fields
* for each provider given as parameter.
*
* @param {Provider} provider Provider-Object
* @param {webRequest} request webRequest-Object
* @return {Array} Array with changes and url fields
*/
* Helper function which remove the tracking fields
* for each provider given as parameter.
*
* @param {Provider} provider Provider-Object
* @param {webRequest} request webRequest-Object
* @return {Array} Array with changes and url fields
*/
function removeFieldsFormURL(provider, request)
{
var url = request.url;
@ -289,10 +289,10 @@ function removeFieldsFormURL(provider, request)
};
/**
* Return the number of parameters query strings.
* @param {String} url URL as String
* @return {int} Number of Parameters
*/
* Return the number of parameters query strings.
* @param {String} url URL as String
* @return {int} Number of Parameters
*/
function countFields(url)
{
var matches = (url.match(/[^\/|\?|&]+=[^\/|\?|&]+/gi) || []);
@ -302,18 +302,54 @@ function countFields(url)
}
/**
* Function which called from the webRequest to
* remove the tracking fields from the url.
*
* @param {webRequest} request webRequest-Object
* @return {Array} redirectUrl or none
*/
* Function which called from the webRequest to
* remove the tracking fields from the url.
*
* @param {webRequest} request webRequest-Object
* @return {Array} redirectUrl or none
*/
function clearUrl(request)
{
if(globalurlcounter === null || typeof(globalurlcounter) == "undefined")
{
/**
* Get the globalURLCounter value from the browser storage
* @param {(data){} Return value form browser.storage.local.get
*/
browser.storage.local.get('globalurlcounter', function(data){
if(data.globalurlcounter){
globalurlcounter = data.globalurlcounter;
}
else {
globalurlcounter = 0;
}
return clearUrl(request);
});
}
else if(globalCounter === null || typeof(globalCounter) == "undefined") {
/**
* Get the globalCounter value from the browser storage
* @param {(data){} Return value form browser.storage.local.get
*/
browser.storage.local.get('globalCounter', function(data){
if(data.globalCounter){
globalCounter = data.globalCounter;
}
else {
globalCounter = 0;
}
return clearUrl(request);
});
}
else {
var URLbeforeReplaceCount = countFields(request.url);
//Add Fields form Request to global url counter
globalURLCounter += URLbeforeReplaceCount;
browser.storage.local.set({"globalURLCounter": globalURLCounter});
globalurlcounter += URLbeforeReplaceCount;
browser.storage.local.set({"globalurlcounter": globalurlcounter});
browser.storage.local.get('globalStatus', clear);
@ -359,43 +395,21 @@ function clearUrl(request)
}
}
}
}
};
/**
* Call by each tab is closed.
*/
* Call by each tab is closed.
*/
function handleRemoved(tabId, removeInfo) {
delete badges[tabId];
}
/**
* Get the globalCounter value from the browser storage
* @param {(data){} Return value form browser.storage.local.get
*/
function setGlobalCounter() {
browser.storage.local.get('globalCounter', function(data){
if(data.globalCounter){
globalCounter = data.globalCounter;
}
else {
globalCounter = 0;
}
});
browser.storage.local.get('globalURLCounter', function(data){
if(data.globalURLCounter){
globalURLCounter = data.globalURLCounter;
}
else {
globalURLCounter = 0;
}
});
}
/**
* Get the badged status from the browser storage and put the value
* into a local variable.
*
*/
* Get the badged status from the browser storage and put the value
* into a local variable.
*
*/
function setBadgedStatus() {
browser.storage.local.get('badgedStatus', function(data) {
if(data.badgedStatus) {
@ -414,40 +428,38 @@ function setBadgedStatus() {
}
/**
* Call the fetch, counter and status functions
*/
* Call the fetch, counter and status functions
*/
fetchFromURL();
setBadgedStatus();
setGlobalCounter();
/**
* Call by each change in the browser storage.
*/
browser.storage.onChanged.addListener(setGlobalCounter);
* Call by each change in the browser storage.
*/
browser.storage.onChanged.addListener(setBadgedStatus);
/**
* Call by each tab is closed.
*/
* Call by each tab is closed.
*/
browser.tabs.onRemoved.addListener(handleRemoved);
/**
* Call by each tab change to set the actual tab id
*/
* Call by each tab change to set the actual tab id
*/
function handleActivated(activeInfo) {
tabid = activeInfo.tabId;
}
/**
* Call by each tab change.
*/
* Call by each tab change.
*/
browser.tabs.onActivated.addListener(handleActivated);
/**
* Call by each Request and checking the url.
*
* @type {Array}
*/
* Call by each Request and checking the url.
*
* @type {Array}
*/
browser.webRequest.onBeforeRequest.addListener(
clearUrl,
{urls: ["<all_urls>"]},

View File

@ -21,7 +21,7 @@ function changeStatistics(){
var elTotal = $('#statistics_total_elements');
var globalPercentage = 0;
var globalCounter;
var globalURLCounter;
var globalurlcounter;
browser.storage.local.get('globalCounter', function(data){
if(data.globalCounter){
@ -34,22 +34,22 @@ function changeStatistics(){
element.text(globalCounter.toLocaleString());
});
browser.storage.local.get('globalURLCounter', function(data){
if(data.globalURLCounter){
globalURLCounter = data.globalURLCounter;
browser.storage.local.get('globalurlcounter', function(data){
if(data.globalurlcounter){
globalurlcounter = data.globalurlcounter;
}
else {
globalURLCounter = 0;
globalurlcounter = 0;
}
globalPercentage = ((globalCounter/globalURLCounter)*100).toFixed(3);
globalPercentage = ((globalCounter/globalurlcounter)*100).toFixed(3);
if(isNaN(Number(globalPercentage))) globalPercentage = 0;
elGlobalPercentage.text(globalPercentage+"%");
elProgressbar_blocked.css('width', globalPercentage+'%');
elProgressbar_non_blocked.css('width', (100-globalPercentage)+'%');
elTotal.text(globalURLCounter);
elTotal.text(globalurlcounter.toLocaleString());
});
};
@ -122,7 +122,7 @@ function setTabcounter() {
*/
function resetGlobalCounter(){
browser.storage.local.set({"globalCounter": 0});
browser.storage.local.set({"globalURLCounter": 0});
browser.storage.local.set({"globalurlcounter": 0});
};
$(document).ready(function(){