Вы можете разместить исходный код таким образом, чтобы люди могли изучить его?
I'am не уверен, если это полный код, потому что есть другие файлы, но я предполагаю, что это та часть, которая получает PMs и т.д .. Вы можете использовать расширение, на Google Chrome, что позволит вам увидеть исходные коды расширений.
(Функция (окно) {
вар BTC = {
AppVersion: "1.0.1",
PMS: [],
INIT: функция () {
BTC.OPT.Check ();
BTC.bg.Init ();
chrome.notifications.onButtonClicked.addListener (BTC.handlers.notificationButtonClicked);
},
Обработчики: {
notificationButtonClicked: функция (notificationId, buttonIndex) {
если (notificationId.substr (0, 5) == 'BTCPM' && ! IsNaN (ParseInt (notificationId.substr (5)))) {
вар PM = BTC.pms [ParseInt (notificationId.substr (5))];
если (buttonIndex == 0) {
chrome.tabs.create ({
URL: 'https://bitcointalk.org/index.php?action=pm#msg' + pm.id
});
} Еще {
chrome.tabs.create ({
URL: 'https://bitcointalk.org/index.php?action=profile;u=' + pm.sender.id
});
}
}
}
},
OPT: {
Добыть: функция (с) {
вернуться localStorage.getItem (с)
},
Набор: функция (C, D) {
вернуть localStorage.setItem (в, г)
},
Удалить: функцию (с) {
вернуться localStorage.removeItem (с)
},
Сброс: функция () {
localStorage.clear ();
BTC.OPT.Check ();
},
Проверка: функция () {
если (BTC.OPT.Get ("APILastPM") == NULL) {
BTC.OPT.Set ("APILastPM", 0)
}
если (BTC.OPT.Get ("PMCheckDelay") == NULL || ParseInt (BTC.OPT.Get ("PMCheckDelay"))! = BTC.OPT.Get ("PMCheckDelay") || BTC.OPT.Get ("PMCheckDelay") < 20 * 1000) {
BTC.OPT.Set ("PMCheckDelay", 100000)
}
}
},
API: {
getPMS: функция (обратный вызов) {
$ .get ( 'https://bitcointalk.org/index.php?action=pm')
.всегда (функция (данные) {
вар PMS = $ ($ (данные) [42])
.найти ( 'стол > TBODY > тр > тд > форма > Таблица > TBODY > тр [класс ="windowbg"] ');
если (pms.length > 0) {
вар cleanpms = {};
pms.each (функция () {
вар pmdata = $ (это)
.найти ( 'тд');
Статус переменная = pmdata.eq (0)
.найти ( 'IMG')
.Attr ( 'альт');
вар pminfo = {
Заголовок: pmdata.eq (2)
.Найди')
.текст(),
ID: ParseInt (pmdata.eq (2)
.Найди')
.атр ( 'HREF')
.заменить ( '# Сообщ', '')),
прочитанные: (статус == 'Read' || статус == 'Ответил To'),
ответил: (статус == 'Ответил To'),
дата: pmdata.eq (1)
.текст(),
Отправитель: {
Имя пользователя: pmdata.eq (3)
.Найди')
.текст(),
ID: ParseInt (pmdata.eq (3)
.Найди')
.атр ( 'HREF')
.сплит ( '; и =') [1])
}
};
cleanpms [pminfo.id] = pminfo;
});
обратный вызов (cleanpms);
} Еще {
Обратный вызов (ложь);
}
});
},
getAvatar: функция (пользователь, обратный вызов) {
$ .get ( 'https://bitcointalk.org/useravatars/avatar_' + пользователь + '.png')
.всегда (функция (обычный, успех, сырье) {
обратного вызова ((raw.status == 200) 'https://bitcointalk.org/useravatars/avatar_' + пользовательские + .png '?: '/assets/icon_128.png');
});
}
},
BG: {
Таймер: нуль,
INIT: функция (с) {
если (с! = ложь) {
BTC.bg.tick ();
}
},
тик: функция () {
Задержка переменная = BTC.OPT.Get ("PMCheckDelay") || 100000;
BTC.bg.timer = SetTimeout (функция () {
BTC.bg.tick ()
}, Задержка);
BTC.API.getPMS (BTC.bg.handlePMS);
},
handlePMS: функция (PMS) {
BTC.pms = PMS;
если (Object.keys (PMS)
.длина > 0) {
// Более 1 вечера
вар highestPM = BTC.OPT.Get ("APILastPM");
$ .each (PMS, функция () {
вар вечер = это;
если (pm.id > BTC.OPT.Get ("APILastPM")) {
highestPM = Math.max (highestPM, pm.id);
BTC.API.getAvatar (pm.sender.id, функция (аватар) {
chrome.notifications.create ( 'BTCPM' + pm.id, {
Тип: «основной»,
iconUrl: аватар,
Название: «Личное сообщение от» + pm.sender.username,
сообщение: pm.subject,
Кнопки: [{
Название: 'View PM'
}, {
Название: "Посмотреть профиль отправителя
}],
isClickable ложь
});
});
}
});
BTC.OPT.Set ("APILastPM", HighestPM);
}
}
}
};
window.BTC = BTC
})(окно);
$ (Документ)
.готов (window.BTC.Init);
{
"update_url": "https://clients2.google.com/service/update2/crx",
"имя": "BitcoinTalk",
"описание": "Это приложение даст вам уведомление, когда вы получаете личное сообщение на BitcoinTalk",
"версия": "1.0.1",
"manifest_version": 2,
"иконки": {
"32": "/assets/icon_32.png",
"57": "/assets/icon_57.png",
"64": "/assets/icon_64.png",
"128": "/assets/icon_128.png",
"256": "/assets/icon_256.png",
"512": "/assets/icon_512.png"
},
"homepage_url": "https://bitcointalk.org/",
"offline_enabled": ложный,
"задний план": {
"страница": "/background.html"
},
"разрешений": [
"уведомления",
"вкладки",
"WebRequest",
"
"
],
"content_security_policy": "скрипт-Src 'сам' 'небезопасным-Eval'; объектного-Src «сам»"
}
@OP, не могли бы вы сделать расширение, которое проверяет и смотреть секции, то сообщите нам, когда новый поток он сделал? это было бы круто ! Это скучное щелкать "Список" каждый раз, и вы не знаете, когда есть один.