LINUX.ORG.RU

[баг] уведомления

 


0

1

На главной и на любой странице не вижу уведомлений. Захожу в свой профиль - одно уведомление. В списке уведомлений его тоже нет, только в профиле.

cast maxcom

★★★★★

Пока писал - перестало воспроизводиться.

vurdalak ★★★★★
() автор топика

Есть другая интересная особенность. Почему Chrome и Firefox по-разному показывают уведомления?

Если у меня есть непрочитанное уведомление, то Firefox во-первых грамотно зайдёт по среднему клику мышки на другую вкладку, во-вторых - не сбросит уведомления (поскольку там есть кнопка для сброса). Chrome же не обработает клик средней кнопки мыши и загрузит существующую страницу, не покажет кнопку для сброса, а автоматически посчитает их прочитанными.

stolz
()
Ответ на: комментарий от stolz

Уведомления вроде не сбрасываются, только если JS отключен. У меня никакой кнопки сброса нет.

vurdalak ★★★★★
() автор топика
Ответ на: комментарий от vurdalak

vurdalak

Уведомления вроде не сбрасываются, только если JS отключен. У меня никакой кнопки сброса нет.

Это ты про какой браузер говоришь?

stolz
()
Ответ на: комментарий от stolz

кнопочка сброса появляется если не отрабатывает код:

onclick="$('#events_form').submit();

который повешен на ссылку «Уведомления»

hizel ★★★★★
()
Ответ на: комментарий от stolz

Это ты про какой браузер говоришь?

Про любой.

vurdalak ★★★★★
() автор топика
Ответ на: комментарий от hizel

hizel

кнопочка сброса появляется если не отрабатывает код

То есть, как я понял, её и не должно быть в идеале? А мне так понравилась. Зашёл, спокойно кликаешь по уведомлениям, как все прочитал - сбросил. Красота.

P.S. А про некорректную обработку средней кнопки мыши в Chrome можешь пояснить, почему так? Раз уж разговор зашёл. Баг то давний весьма.

stolz
()
Ответ на: комментарий от stolz

без понятия, надо документацию читать

если с js все ок то вы заходите по ссылке через POST запрос иначе через GET и вам дается кнопачка, чтобы сделать POST запрос и сбросить уведомления

maxcom собирается\собирался переделать этот не совсем корректно работающий механизм

hizel ★★★★★
()
Ответ на: комментарий от vurdalak

vurdalak

Не могу, у меня нет хрома.

Не-не, это я к hizel. Нагло задаю вопросы в твоей теме. :)

stolz
()
Ответ на: комментарий от hizel

hizel

если с js все ок то вы заходите по ссылке через POST запрос иначе через GET и вам дается кнопачка, чтобы сделать POST запрос и сбросить уведомления

Не, я сейчас о другом. Об обработке средней клавиши мыши. Chrome открывает не в новой вкладке, а в текущем окне. Причём такое поведение я наблюдал только на LOR.

stolz
()
Ответ на: комментарий от stolz

вопрос к разрабам хрума или firefox-а или html стандарта, но скорее всего к разрабам lorsource ибо тут вопиющая бестактность - из ссылки сделали кнопачку

hizel ★★★★★
()

Тут смешалось сразу несколько проблем, каждую из которых надо отдельно решать.

Технически уведомления сейчас работают так - есть табличка, в которую добавляются уведомления при возникновении событий (местами из Java-кода, местами на триггарах). Уведомления удаляются при удалении сообщений на которые они ссылаются автоматически. Чтобы не тратить время на подсчет количества непрочтенных уведомлений, у каждого пользователя есть еще отдельный счетчик непрочитанных уведомлений.

Счетчик показывается на каждой странице. Если он не нулевой, то он превращается в спрятанную форму, при нажатии на ссылку отправляется POST с коммандой «сбросить уведомления». Форма отправляется Javascript'ом в onclick ссылки

Если попадаешь на страницу уведомления GET запросом (т.е. без формы сброса) и есть непрочитанные уведомления - появляется явная кнопка сброса над списком уведомлений.

Итого проблемы такие:

  • Счетчик уведомлений врет при удалении уведомлений. Тут проблема чисто с производительностью - сейчас массовое удаление и так тормозит, если пересчитывать еще и все счетчики уведомлений то оно будет работать по 5-10 минут. Блокировки в постгрессе устроены так, что пока не закончится удаление скорее всего притормозится постинг у всех пользователей у которых что-то удалилось из уведомлений. Я думаю переделать backend для хранения уведомлений, возможно часть данных вынести в redis или какую-нибудь аналогичную БД.
  • Счетчик врет из-за кеширования в браузере. Т.к. когда ходишь по одни и тем же страницам может быть показано старое значение счетчика. Тут можно или совсем выключить кеширование (что не здорово), либо обновлять счетчик AJAX-запросом в момент загрузки страницы. Думаю о втором.
  • Не во всех браузерах работает средняя кнопка и возможны разные накладки при нажатии на ссылку «уведомлений». Тут наверное более логично сбрасывать счетчик уведомлений не при нажатии на капу, а непосредственно на страничке просмотра уведомлений AJAX-запросом. Думаю над этим.
maxcom ★★★★★
()
Ответ на: комментарий от stolz

Не, я сейчас о другом. Об обработке средней клавиши мыши. Chrome открывает не в новой вкладке, а в текущем окне. Причём такое поведение я наблюдал только на LOR.

Аналогичное поведение можно увидеть, например, на gmail

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

maxcom

Аналогичное поведение можно увидеть, например, на gmail

Там немного наоборот. Если сидишь на Gmail, и кликаешь лкм на +You, то откроется в новой вкладке. Но собственно да, похоже.

stolz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.