Skip to content

Instantly share code, notes, and snippets.

@adis-io
Created May 15, 2013 17:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adis-io/5585591 to your computer and use it in GitHub Desktop.
Save adis-io/5585591 to your computer and use it in GitHub Desktop.
Отрывок из extension'a для Google Chrome. Diesel Upper
var requestTimerId;
var pollIntervalMin = 1000 * 60; // 1 minute
var pollIntervalMax = 1000 * 60 * 60; // 1 hour
var requestFailureCount = 0; // used for exponential backoff
var PostMsg = "Dup";
function init() {
console.log('Поехали!');
startRequest();
}
function checkUser() {
var tUrl = baseUrl;
var jqxhr = jQuery.ajax({
dataType: "html",
url: tUrl
})
jqxhr.done( function(data) {
var doc = parseData(data);
var username = jQuery(doc).find("#userlinks a:first").text();
var deacc = localStorage.getItem('deacc');
return (username == deacc);
})
jqxhr.fail( function(error) {
console.log(error.statusText)
});
}
function scheduleRequest() {
if (requestTimerId) {
window.clearTimeout(requestTimerId);
}
var randomness = Math.random() * 2;
var exponent = Math.pow(2, requestFailureCount);
var multiplier = Math.max(randomness * exponent, 1);
var delay = Math.min(multiplier * pollIntervalMin, pollIntervalMax);
delay = Math.round(delay);
// var delay = 1000*15;
requestTimerId = window.setTimeout(startRequest, delay);
}
function startRequest() {
handleIcon();
checkArray();
scheduleRequest();
}
function handleIcon() {
var deacc = localStorage.getItem('deacc');
if (deacc) {
chrome.browserAction.setIcon({
path: "up.png"
});
chrome.browserAction.setTitle({
title: "Добавить Up"
});
} else {
chrome.browserAction.setIcon({
path: "noactive.png"
});
chrome.browserAction.setTitle({
title: "Укажите логин на diesel"
});
}
}
function checkArray() {
console.log('Проверка данных');
var arr = localStorage.getObject('dup');
if (!arr) {
console.log("Нету АПов. Добавьте пожалуйста.")
return;
}
var date = [];
for (var i = 0, l = arr.length; i < l; i++) {
date[i] = new Date(arr[i].nextUp);
if (Date.now().compareTo(date[i]) == 1 && arr[i].upCount > 0 ) {
var tid = arr[i].topicId;
Auth(tid);
break
}
}
}
function getLS(tid) {
var arr = localStorage.getObject('dup');
for (var i = 0; i < arr.length; i++) {
if (tid == arr[i].topicId) {
return arr[i]
}
}
}
function parseData(data) {
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(data,"text/html");
var body = xmlDoc.getElementsByTagName("body");
return body;
}
function Auth(tid) {
var tUrl = topicUrl+tid;
var jqxhr = jQuery.ajax({
dataType: "html",
url: tUrl
})
jqxhr.done( function(data) {
var doc = parseData(data);
var auth_key = jQuery(doc).find("input[name='auth_key']").eq(0).attr('value');
var fid = jQuery(doc).find("input[name='f']").attr('value');
var username = jQuery(doc).find("#userlinks a:first").text();
var deacc = localStorage.getItem('deacc');
if (auth_key !== undefined && username == deacc) {
requestFailureCount = 0;
console.log('Тема: #' + tid +' Прошли авторизацию. ');
DelPost(fid, tid, auth_key);
} else {
console.log('Не авторизованы')
requestFailureCount++;
}
})
jqxhr.fail( function(error) {
console.log(error.statusText)
changeLS({topicId: tid, nextUp: 10})
requestFailureCount++;
});
};
function DelPost(fid, tid, auth_key) {
var pid = getLS(tid).lastMsgId;
if (pid != 0) {
var baseData = { act: "Mod", CODE: "04", f: fid, t: tid, p : pid, auth_key: auth_key};
var jqxhr = jQuery.ajax({
type: "GET",
data: baseData,
url: baseUrl
});
jqxhr.done( function(data) {
var doc = parseData(data);
var errortext = $(doc).find('.errorwrap > p').text();
if (errortext) {
console.log('Сообщение не удалено.' );
} else {
console.log('Сообщение #' + pid + ' удалено');
requestFailureCount = 0;
};
NewPost(fid, tid, auth_key)
});
jqxhr.fail( function(err) {
requestFailureCount++;
console.log('Сообщение не удалено. По какой-то причине.' );
});
} else {
NewPost(fid, tid, auth_key)
}
};
function NewPost(fid, tid, auth_key) {
var baseData = { act: "Post", CODE: "03", f: fid, t: tid, auth_key: auth_key, Post: PostMsg, enableemo: 'yes'};
var jqxhr = jQuery.ajax({
type: "POST",
data: baseData,
dataType: "html",
url: baseUrl
})
jqxhr.done( function(data) {
var doc = parseData(data);
var errortext = $(doc).find('.errorwrap > p').text();
if (errortext) {
requestFailureCount++;
console.log("Возникла ошибка | ап перенесен на 10 минут");
changeLS({topicId: tid, nextUp: 10})
} else {
requestFailureCount = 0;
//<refactor
//http://diesel.elcat.kg/index.php?showtopic=6713809&view=getlastpost
var lpid_url = jQuery(doc).find("div[align='right'] > .postdetails:last").children().attr('href');
var lpid = getParameterByName(lpid_url, 'p');
//>refactor
console.log('Новое сообщение создано #' + lpid + ' | ' + Date.now());
changeLS({topicId: tid, lastMsgId: lpid})
}
})
jqxhr.fail( function(err) {
requestFailureCount++;
changeLS({topicId: tid, nextUp: 10});
console.log(err)
})
};
function changeLS(setup) {
var n = setup.nextUp || 60;
var arr = localStorage.getObject('dup');
var tid = setup.topicId;
for (var i = 0; i < arr.length; i++) {
if (tid == arr[i].topicId) {
arr[i].lastMsgId = setup.lastMsgId || arr[i].lastMsgId;;
arr[i].nextUp = n.minutes().fromNow();
if (setup.lastMsgId) {
arr[i].upCount--;
console.log('Осталось апов - ' + arr[i].upCount)
}
}
}
localStorage.setObject('dup', arr);
}
function checkForValidUrl(tabId, changeInfo, tab) {
if (tab.url.indexOf(baseUrl) > -1 && getParameterByName(tab.url, "showtopic") != "") {
chrome.pageAction.show(tabId);
}
};
function handlePopup(tabId) {
var deacc = localStorage.getItem('deacc');
if (deacc) {
chrome.browserAction.setPopup({popup: "popup.html"});
} else {
chrome.browserAction.setPopup({popup: ""});
chrome.tabs.create({
'url': chrome.extension.getURL('options.html')},
function(tab) {
// Tab opened.
});
}
}
// Listen for any changes to the URL of any tab.
chrome.tabs.onUpdated.addListener(checkForValidUrl);
// Listen for any changes to the URL of any tab.
chrome.browserAction.onClicked.addListener(handlePopup);
document.addEventListener('DOMContentLoaded', init);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment