Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Разработка => Topic started by: MisterMyth on 07 06 2016, 11:26:20

Title: Баги со звуками
Post by: MisterMyth on 07 06 2016, 11:26:20
Хоть больше я правил TabSRMM, но так как это правка связана с ВК, то оставлю здесь. Баг, который я правил мелкий, но правлю, что могу и то, что мешает.  В аналоги TabSRMM правку не вносил, так как сам использую TabSRMM. Если правку добавят посмотрю аналоги. Правку я внес потому, что BASS_interface и XSoundNotify конфликтуют и мне не нравится, что для правки багов приходятся ставить дополнительные плагины.

Так теперь о главном. Целью правки было убрать звук входящего сообщения при уведомлениях со стены Вконтакте. Так как баг редкий выкладываю патч с просьбой теста, сам конечно тоже проверю, но на нескольких машинах это можно сделать быстрее. Гарантирую, что dll собираются, это я проверил. Нужен лишь массовый тест в самой программе.
Title: Re: Баги со звуками
Post by: Elzor on 07 06 2016, 11:51:02
MisterMyth, баг, о котором ты говоришь, проявляется когда сообщения прилетают, что называется "большой толпой" и от того, в какой контакт они прилетают или даже по какому протоколу, не зависит. Следовательно, патч, который ты предлагаешь - это костыль из говна и палок и место ему там, где место всем вещам сделанных из подобного материала.
Title: Re: Баги со звуками
Post by: Mikalair on 07 06 2016, 12:21:44
BASS_interface и XSoundNotify конфликтуют
Они не конфликтуют, это просто в XSoundNotify костыль неправильно работает.
Title: Re: Баги со звуками
Post by: MisterMyth on 07 06 2016, 12:38:13
Elzor, так как у меня данный баг есть лишь с ВК я так и написал. Считайте, что это сделано коряво, это ваше право. Я не в обиде. И извиняюсь за оффтоп, но Mikalair, XSoundNotify нужно переписывать под звуки, которые буду сохраняться в настройках контакта.
Title: Re: Баги со звуками
Post by: MisterMyth on 07 06 2016, 12:51:30
Elzor,  и еще вопрос это баг только TabSRMM или любого другого модуля для переписок?
Title: Re: Баги со звуками
Post by: Elzor on 07 06 2016, 13:02:21
MisterMyth, честно сказать - не знаю. У меня личное ощущение, что это где-то на достаточно низком уровне. Может быть где-то рядом с драйвером базы или, может быть, в ядре. Вроде как все сводится к тому, что у сообщения флаг "прочитано" выставляется позже, чем нотификатор (или кто там вместо него) говорит "дзынь". Или, может быть, при некоторых условиях флаг игнорируется.
Все выше сказанное - ИМХО и на истину не претендует. Я могу тут полностью ошибаться.
Title: Re: Баги со звуками
Post by: MisterMyth on 07 06 2016, 13:07:32
Elzor, а форма приведения к "прочитано" едина или нет? Разная у каждого протокола?
Title: Re: Баги со звуками
Post by: Elzor on 07 06 2016, 13:26:29
Если я правильно понял твой вопрос, то, стандартно схема будет такая:  прилетело сообщение и протокол отправил его в базу непрочитанным, при этом может быть  сработает нотификатор (в зависимости от настроек и есть ли он вообще) и сообщит об этом пользователю. Потом, при клике по иконке в трее, по контакту в клисте или по непрочитанной вкладке в табсах, или может быть еще при каких-то условиях, сообщение делается прочитанным. Кто конкретно за это отвечает - вопрос (для меня) не до конца понятный, не протокол - точно :)
Кроме того, сообщение может сразу отправляться в базу прочитанным. Мало кто из протоколов этим развлекается. ВК это делает, если с сервера прилетает уже прочитанное сообщение (при синхронизации истории, например) или для спецконтакта, если выставлена настройка нестандартных окон и уведомлений. Баг в том, что нотификатор не должен при этом дзынькать, а он дзынькает. Почему именно он так делает - история для меня темная.
Title: Re: Баги со звуками
Post by: MisterMyth on 07 06 2016, 15:11:50
Elzor, правильно ли я понимаю, что лично для вас правильным лечением данного бага будет либо его исправление либо починка xsound?
Title: Re: Баги со звуками
Post by: MisterMyth on 07 06 2016, 17:18:13
Elzor, я нашел причину бага, точнее то, что его вызывает. Сейчас обратил внимание на то, что баг со звуком есть, когда вкладка псевдоконтакта открыта. Пока ее не было не было и проблем со звуком. Проверить сможет еще кто нибудь?
Title: Re: Баги со звуками
Post by: Elzor on 07 06 2016, 20:06:34
Elzor, правильно ли я понимаю, что лично для вас правильным лечением данного бага будет либо его исправление либо починка xsound?
Честно говоря, я не понимаю, причем тут xsound. В нем тоже есть баг - ну да, есть, но это другой баг. Правильное решение в любом случае одно - найти сам баг и править его, а не пытаться голой задницей заткнуть пробоину в борту корабля, особенно если пробоина эта выше ватерлинии.
Сейчас обратил внимание на то, что баг со звуком есть, когда вкладка псевдоконтакта открыта. Пока ее не было не было и проблем со звуком.
Насколько я помню, действительно баг проявляется при открытой вкладке. Но это не причина, это просто одно из условий срабатывания.

И вообще все это вот тут - оффтоп, к вк-плагину описанные выше баги никакого отношения не имеют. Прошу модеров по возможности разделить тему.
Title: Re: Баги со звуками
Post by: MisterMyth on 08 06 2016, 11:22:13
Продолжил смотреть исходники TabSRMM. Получается очень интересная вещь. Но мне нужна подсказка возможно от Elzora, или возможно от кого то еще. Как я понял Elzor, в первом ответе дал мне намек на то что этот баг повторяется не только у псевдоконтакта от ВК, поэтому я хочу спросить где его еще ловили на чем?

Это может мне понять нашел ли я проблему или нет.
Title: Re: Баги со звуками
Post by: Elzor on 08 06 2016, 18:10:52
MisterMyth, бывает проявляется при загрузке жирной хистори с сервера. Проявляется не всегда, и у меня не на всех моих машинах (хотя это как раз может и случайностью быть).
Title: Re: Баги со звуками
Post by: MisterMyth on 08 06 2016, 19:04:13
Elzor, и если я не ошибаюсь, то какой бы вид уведомлений пользователь не выбрал для псевдоконтакта, они всегда приходят как сообщение? То есть eventType = EVENTTYPE_MESSAGE? Даже если и нет, похоже на то, что если открыта вкладка псевдоконтакта тип ивента сам назначается как eventType = EVENTTYPE_MESSAGE, а так как в коде вывода сообщений со стены

cle.hDbEvent = NULL; Вот тут вроде бы ивента нет.
cle.flags = CLEF_URGENT | CLEF_TCHAR;

А в коде TabSrMM написано:

   if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & (DBEF_SENT)))
      PostMessage(hwndDlg, DM_PLAYINCOMINGSOUND, 0, 0);

Получается, что правая часть условия истина верна.
Где то для открытых вкладок идет смена оригинального eventType. Вместо него прописывается EVENTTYPE_MESSAGE, и именно по этому мы получаем лишний звук.
Title: Re: Баги со звуками
Post by: Elzor on 08 06 2016, 19:53:25
они всегда приходят как сообщение? То есть eventType = EVENTTYPE_MESSAGE? Даже если и нет, похоже на то, что если открыта вкладка псевдоконтакта тип ивента сам назначается как eventType = EVENTTYPE_MESSAGE
Правильнее сказать, что вк-плагин получает уведомления со стен и после обработки отдает их на следующий уровень как сообщения. И именно потому что они отданы дальше как сообщения, они показываются в табсе (ну и в историю записываются).
cle.hDbEvent = NULL; Вот тут вроде бы ивента нет.
cle.flags = CLEF_URGENT | CLEF_TCHAR;

А в коде TabSrMM написано:

   if (dbei.eventType == EVENTTYPE_MESSAGE && !(dbei.flags & (DBEF_SENT)))
      PostMessage(hwndDlg, DM_PLAYINCOMINGSOUND, 0, 0);
То есть вообще ни разу не смутило, что cle - это CLISTEVENT, а dbei - это DBEVENTINFO?
Где то для открытых вкладок идет смена оригинального eventType.
Как бы после такого вывода прямо больше ничего не остается, кроме как пожелать успехов в дальнейших изысканиях.
Title: Re: Баги со звуками
Post by: MisterMyth on 10 06 2016, 18:32:46
Elzor, извините, конечно, но вы тоже хороши: используйте функцию для сбора нужного текста в сообщение и говорите, что это баг не плагина для Вконтакте. Там тоже должно быть условие на проверку типа уведомлений. Если используем нестандартные уведомления, то собираем все и

вк-плагин получает уведомления со стен и после обработки отдает их на следующий уровень как сообщения

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

Я бы сам написал код (он вроде не страдает проблемой со звуком), но пока не разобрался как его корректно прописать.  :-\ :-X :-[ ::) ???

правлю, что могу и то, что мешает
Title: Re: Баги со звуками
Post by: Elzor on 11 06 2016, 13:00:25
Там тоже должно быть условие
Кому должно?
Если включены стандартные, то нужен код похожий на тот, что позволяет твитам падать в окно переписки. Также подобным образом в журнал пишутся статусы и статусные сообщения.
Если ты имеешь ввиду, что надо сделать пришедшее уведомление/новость не стандартным сообщением, а кастомным событием, то да, проблему со звуком это решит (наверное, я не проверял). Вот только, насколько мне известно, для кастомных событий IEView не обрабатывает bb-коды. На скриншоте (https://yadi.sk/i/y41JO6QfsRK22) видно, как одна и та же новость отображается если она записана как сообщение (сверху) и как кастом событие (снизу).
Title: Re: Баги со звуками
Post by: MisterMyth on 11 06 2016, 13:09:57
Elzor, "кто в лес, кто по дрова", это я о том, что если тут что то исправить, то что то вылезет в другом месте.  ???

Post Merge: 11 06 2016, 13:28:04
Хотя стоп: у нас с вами похоже есть разница в IEView, приложу сейчас скриншот от Twitter я там не вижу bb кодов, все чисто, может потому что скин стоит?

Можно ли сделать тогда поднастройку, то есть можно выбрать не только тип уведомления, но и как оно приходит. То есть если выбран режим стандартных уведомлений, то можно выбрать либо сообщение, либо кастомное событие.

Post Merge: 11 06 2016, 13:29:08
Elzor, если хотите могу немного помочь: как я понял вы правили плагин от ВК, чтобы показать мне как приходит уведомление, сделанное кастомным событием. Могу я посмотреть как с этой правкой новость будет отображаться у меня? Скин брал тут для facebook он делался.
Title: Re: Баги со звуками
Post by: Elzor on 11 06 2016, 13:35:17
Могу я посмотреть как с этой правкой новость будет отображаться у меня?
https://yadi.sk/d/l4Z-jfD7bpmR5
Title: Re: Баги со звуками
Post by: MisterMyth on 11 06 2016, 13:48:48
Elzor, не а дело не в скине, тоже коды видны.  ::)
Title: Re: Баги со звуками
Post by: Elzor on 11 06 2016, 14:12:57
Elzor, не а дело не в скине, тоже коды видны.  ::)
А я разве как-то не по-русски написал?
Вот только, насколько мне известно, для кастомных событий IEView не обрабатывает bb-коды.

Отдельного параметра для вывода в виде кастом эвента делать не буду. Никакого смысла в таком выводе нет.
Title: Re: Баги со звуками
Post by: MisterMyth on 21 06 2016, 10:08:13
Дубль два: новый вариант правки. Не уверен, что не вызовет новых проблем. поэтому нужен тест. У себя проверил, у баг пропал, а звук сообщений есть, но так как их в программе 3 штуки, тест будет долгим. Отталкивался от того, что у ВК, нет конвертика во вкладке при получении новостей. Если найдете баг, то жду подробного описания.
Title: Re: Баги со звуками
Post by: Mikalair on 21 06 2016, 10:33:04
MisterMyth, вместо того, чтобы найти причину бага, вы предлагаете подпереть все костылем.
Title: Re: Баги со звуками
Post by: MisterMyth on 21 06 2016, 10:50:41
Mikalair, причина бага в том, что уведомления со стены приходят в виде сообщений. Это было сделано для поддержки bb кодов. Поэтому новости не выводят кастомным событием. Посмотрите более ранее сообщения в теме. Смысла добавлять поддержку кодов ради одного контакта нет. Писать кучу кода не нужно, достаточно исключить из обработки, или условие на звук переписать. Ради одного контакта рационально изменить одну или пару строк. Для меня это выход, для вас костыль. XSound не пашет, да и ранее мне намекали, что его использовать тоже костыль. Остается один вариант тогда: переписывать проигрывание звука нового сообщения. Чтобы звук брался не из общей ветки звуков в базе, а из данных о контакте.

Хотел попробовать написать нечто подобное, но я не совсем разобрался в коде. Может когда нибудь и созрею до написания.
Title: Re: Баги со звуками
Post by: Mikalair on 21 06 2016, 11:29:31
MisterMyth, а где вообще почитать описание бага и то, как его воспроизвести ?
Title: Re: Баги со звуками
Post by: MisterMyth on 21 06 2016, 11:39:50
Mikalair,
 
1) нужна учетная запись Вконтакте;
2) нужно включить уведомления о новостях со стены, появится в списке контактов контакт с именем "Вконтакте";
3) баг появляется, если при получении новостей, существует вкладка диалога с вышеупомянутым контактом. активна она или нет, это не важно. При существующей вкладке проигрывается и звук нового сообщения и звук, уведомляющий о новых записях в ленте;
4) если нет вкладки, то нет и бага.

Вроде все упомянул.
Title: Re: Баги со звуками
Post by: Mikalair on 21 06 2016, 12:02:21
MisterMyth, fixed
Title: Re: Баги со звуками
Post by: MisterMyth on 21 06 2016, 16:04:24
Mikalair, спасибо, жду когда придет обнова.

Post Merge: 23 06 2016, 07:03:16
Обнова пришла, но почему то нет именно tabsrmm.

Post Merge: 23 06 2016, 19:00:41
Обнова пришла и работает. Спасибо огромное.