Не так давно Google всех опечалила новостью о предстоящем отключении сервиса Google Reader. Второй из трёх всегда открытых у меня сайтов. Зря они.. зря. Ну да ладна. Весь интернет сразу же заполонили обзорами и альтернативами, сервисами, платными вариантами и self-hosted скриптами. Конечно же выбор пал на последнюю категорию. Лучше уж сразу привыкнуть к новой программе и держать у себя все базы и копии, чем опять потом искал альтернативы при помирании следующего сервиса.
Завелось в принципе легко и быстро, фиды импортировались успешно и свежие новости посыпались. Но нет ничего идеального - привычного режима разворачиваемого списка как в Google Reader'е тут нет, и для Raspberry постоянная работа с базами и параллельными вэб-запросами слегка сложна.
Но тут на помощь приходит ччччииииилавек-программмист! Всё это счастье поднялось на nginx вместо громоздкого apache. К php были доставлены модули кэширования. В планах ещё mysql перевезти на usb-flash накопитель, думаю он будет по быстрей чем встроенная и без того гоняемая sd-карточка. Далее в код. Покалупав скрипты, было выявлена пачка лишних дублирующихся запросов, а интерфейс сайта начал обрастать кнопочками для сворачивания и разворачивания списка.
В файле "js/viewfeed.js" функция cdmClicked посылает запросы пересчета прочитанных сообщений, даже если оно уже прочитано. Нелогично. А ведь каждый запрос жевал секунды две-три, и задерживал очередь.
function cdmClicked(event, id) {
try {
...
//было
if (article_is_unread) {
decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
}
var query = "?op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + param_escape(id);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
handle_rpc_json(transport);
} });
...
//стало
if (article_is_unread) {
decrementFeedCounter(getActiveFeedId(), activeFeedIsCat());
var query = "?op=rpc&method=catchupSelected" +
"&cmode=0&ids=" + param_escape(id);
new Ajax.Request("backend.php", {
parameters: query,
onComplete: function(transport) {
handle_rpc_json(transport);
} });
}
...
По началу пытался писать отдельный плагин, но что-то не срослось. Плагины вроде классная вещь, можно менять контент фидов, их отображение, добавлять скрипты и прочие. Но мне нужны были кастомные кнопки. Может быть позже разберусь как это дело делать. А пока они вживлены в сам сайт. Файл "classes/feeds.php".
//было
$reply .= __('Select:')."
<a href=\"#\" onclick=\"$sel_all_link\">".__('All')."</a>,
<a href=\"#\" onclick=\"$sel_unread_link\">".__('Unread')."</a>,
<a href=\"#\" onclick=\"$sel_inv_link\">".__('Invert')."</a>,
<a href=\"#\" onclick=\"$sel_none_link\">".__('None')."</a></li>";
$reply .= " ";
//добавлено
$reply .= "/ Collapse: ";
$reply .= "<a href=\"#\" onclick=\"$$('div.cdmContent')."
."each(function(item){item.hide()})\">Close all</a>,
<a href=\"#\" onclick=\"$$('div.cdmContent')."
."each(function(item){item.show()})\">Open all</a>";
$reply .= " ";