Created
May 15, 2013 17:13
-
-
Save adis-io/5585591 to your computer and use it in GitHub Desktop.
Отрывок из extension'a для Google Chrome. Diesel Upper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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