Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Реализовать поддержку нахождения контакта в нескольких группах одновременно #4111

Open
dartraiden opened this issue Jan 8, 2024 · 20 comments

Comments

@dartraiden
Copy link
Member

No description provided.

@SM-Sergey
Copy link

SM-Sergey commented Jan 9, 2024

Это отлично, очень нужно и ожидаемо. Только вот вопрос - а как это увязать с серверными группами? Если брать протокол ICQ как пример, пока что видно, что скорее на сервере может быть контакт только в одной группе. Значит, надо как-то помечать, какие группы серверные, а какие только локальные? Соответственно, при добавлении контакта в серверную группу надо ее перемещать из текущей другой серверной, а при добавлении в "только локальную" - сервер вообще не уведомлять не о чем? А если создалась новая группа, как решать, надо ее делать на сервере, или нет? А если удалилась, особенно с идеей их самоудаления, несовместимой с тем, как принято на сервере?

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

PS
Хотя, по косвенным признакам (как сервер уведомляет об изменении группы другим подключенным клиентом - сначала контакт добавлен в его новую группу, а потом удален из старой), то может и поддерживает, но это требует дополнительного изучения насчет наличия метода добавления контакта во вторую группу без удаления из первой. Но далеко не факт, что это возможно. То есть, пока это не выявлено - надо считать что невозможно.

@georgehazan
Copy link
Member

Значит, надо как-то помечать, какие группы серверные, а какие только локальные?

Для этого есть список серверных групп в настройках ICQ

@SM-Sergey
Copy link

Для этого есть список серверных групп в настройках ICQ

А где это такие настройки ICQ, кроме Options->Network->ICQ_account? Да и не очень ясно, зачем в принципе этот отдельный список нужен в настройках, учитывая то, что в серверных группах ведь не только ICQ-контакты сидят, а и другие контакты других протоколов тоже в них же размещаются.

Я уже предложил в другом месте - все группы должны быть в одном месте и управляться единообразно, серверные, не серверные, это не принципиально, где они хранятся. Можно вообще убить как класс все серверные группы, сделав иной способ синхронизации групп между разными мирандами на разных компах, что снимет сразу все вопросы, проблемы и геморрои.

@dartraiden
Copy link
Member Author

dartraiden commented Jan 9, 2024

А где это такие настройки ICQ

В меню протокола (пкм по значку протокола в панели статусов). Там живёт редактор серверных групп и ссылка на изменение профиля через веб-сайт.

@SM-Sergey
Copy link

SM-Sergey commented Jan 9, 2024

пкм по значку протокола в панели статусов

Спасибо, нашел. Но сделать все то же, Rename и Delete, можно и через ПКМ на обычной группе в редакторе игноров, и они там ровно так же сохраняются на сервере (на днях пользовался, и оно работает). Более того, с недавних пор там можно и добавить новую группу, и она добавляется на сервер тоже. А тут добавить вроде нельзя. В общем, совершенно бесполезное окно, дублирующее две функции основного редактирования групп.

@dartraiden
Copy link
Member Author

В общем, совершенно бесполезное окно

Полезное, можно удалить группы, которых в клисте уже нет.

@SM-Sergey
Copy link

Полезное, можно удалить группы, которых в клисте уже нет.

Это и так можно (т.е. было можно до недавнего, пока в настройках инвизов показывались пустые группы) после первой же синхронизации, обычным штатным способом сделать. Хотя это вообще нонсенс, когда группа на сервере есть, а в клисте нет - значит она с сервера почему-то не подтянулась. В отличие от обратного - когда в клисте куча групп есть не-серверных, а на сервере таких нету (и кстати она и их пытается с сервера удалять, если их пришибить, хотя она отлично знает, что их нет на сервере)

@dartraiden
Copy link
Member Author

Miranda64_qZoxJGjOXS

В клисте этих дискордных групп давно нет, через редактор не удаляются, с сервера не прилетают...

@SM-Sergey
Copy link

SM-Sergey commented Jan 9, 2024

с сервера не прилетают...

Так значит их там и нет... Это вообще какой-то глюк получается. Раз с сервера они не прилетают - значит их там нет, значит - с какого перепуга они тут есть? То, что с сервера пустые группы без контактов тоже прилетают, это факт, я проверял. Раз их нет в клисте - ну нет. Не знаю, почему. А где они тогда есть? Они в таком случае должны сами все помереть при синхронизации групп.

@dartraiden
Copy link
Member Author

dartraiden commented Jan 9, 2024

Причем, на попытку удаления сервер рапортует, что всё ок

[0:11:23 3F74] [ICQ_1] (0000000004EF3C10:1836) Data received
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=75
Content-Encoding: gzip

ea
�‹�
{"response":{"statusCode":200, "statusText":"OK", "data":{"pollTime":25000, "ts":1704834686, "fetchBaseURL":"https://u.icq.net/bos/nbos-a016a/aim/fetchEvents?aimsid=086.3906613478.3897982145:8338981&rnd=1704834686.631556&seqNum=136", "fetchTimeout":60, "timeToNextFetch":1, "events":[]}}}
[0:11:23 3F74] [ICQ_1] Executing request c51efa90-17c5-42b6-b315-71080bd498a9:
https://u.icq.net/bos/nbos-a016a/aim/fetchEvents?aimsid=086.3906613478.3897982145:8338981&rnd=1704834686.631556&seqNum=136&timeout=25000
[0:11:23 3F74] [ICQ_1] (0000000004EF3C10:1836) Data sent
GET /bos/nbos-a016a/aim/fetchEvents?aimsid=086.3906613478.3897982145:8338981&rnd=1704834686.631556&seqNum=136&timeout=25000 HTTP/1.1
Accept-Encoding: deflate, gzip
User-Agent: Miranda/0.96.5.26701 (x64)
Host: u.icq.net
Connection: Keep-Alive
Proxy-Connection: Keep-Alive

[0:11:32 1538] [ICQ_1] Executing request 6d876058-b9a5-4334-8116-2ac14d055052:
https://u.icq.net/wim/buddylist/removeGroup
[0:11:32 1538] [ICQ_1] Connection request to u.icq.net:443 (Flags 11)....
[0:11:32 1538] [ICQ_1] (00000000051E9F50) Connecting to server u.icq.net:443....
[0:11:32 1538] [ICQ_1] (00000000051E9F50) Connecting to ip 178.237.20.123:443 ....
[0:11:32 1538] [ICQ_1] (2336) Connected to u.icq.net:443
[0:11:32 1538] [ICQ_1] (2336 u.icq.net) Starting SSL/TLS negotiation
[0:11:32 1538] [ICQ_1] (2336 u.icq.net) SSL/TLS negotiation successful
[0:11:32 1538] [ICQ_1] (00000000051E9F50:2336) Data received
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 113
Connection: keep-alive
Keep-Alive: timeout=75
Cache-Control: no-store,no-cache,must-revalidate

{"response":{"statusCode":200, "statusText":"Ok", "requestId":"6d876058-b9a5-4334-8116-2ac14d055052", "data":{}}}
[0:11:32 1538] [ICQ_1] (00000000051E9F50:2336) Data received
{"response":{"statusCode":200, "statusText":"Ok", "requestId":"6d876058-b9a5-4334-8116-2ac14d055052", "data":{}}}

Только никуда они не удаляются. Если я сейчас создам новую группу Discord, то в редакторе у меня будет их две: свежая и та, старая. Свежая удаляется без вопросов, "старая" нет.

@SM-Sergey
Copy link

SM-Sergey commented Jan 9, 2024

А он по жизни OK рапортует, что не стирай... На это я давно обратил внимание.

Надо смотреть при старте, когда буддилист прилетает, что там реально есть, а чего нету. Но выглядит это как какой-то косяк в БД - типа они там где-то в забытом богом месте есть, откуда их никто, кроме этого окна, не берет.

@SM-Sergey
Copy link

SM-Sergey commented Jan 9, 2024

Собственно, поэтому я все время и говорю - что информация о всех группах должна быть в БД (или не в БД, а где-то еще) единообразной и в одном месте, несмотря на то, серверные они и из какого аккаунта, или локальные. Ведь любой контакт из любого аккаунта можно внести в любую группу, в том числе и в серверную, в том числе и хранящуюся в другом аккаунте (но при этом не говоря об этом тому серверу - не поймет). Сплошной геморрой с кучей подводных камней. Но иначе и будут подобные косяки с группами, кем-то взятыми непойми откуда.
Или забить на все серверные группы как класс, запомнить их крайнее состояние, преобразовать в локальные, и с этого момента оставить только локальные, и всю работу с серверными ликвидировать. Дешево, сердито и надежно.

@georgehazan
Copy link
Member

Собственно, поэтому я все время и говорю - что информация о всех группах должна быть в БД (или не в БД, а где-то еще) единообразной и в одном месте, несмотря на то, серверные они и из какого аккаунта, или локальные.

Но ведь это откровенная несуразица. Есть shared roster в жабере, есть группы аськи, есть папки в телеге, есть гильдии в Дискорде, и общего между ними нет ничего. Каждый протокол сам решает, как отображать всю эту хрень в локальные папки Миранды, и каждый раз это отдельная песня. Держать это в базе, а тем более обрабатывать единообразно - это чушь.

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

Нет, не любой. Про серверные группы движок Миранды ничего не знает, и знать не может по определению.

Но иначе и будут подобные косяки с группами, кем-то взятыми непойми откуда.

Не будет никаких косяков.

Или забить на все серверные группы как класс, запомнить их крайнее состояние, преобразовать в локальные, и с этого момента оставить только локальные, и всю работу с серверными ликвидировать. Дешево, сердито и надежно.

Предлагаю на этом дискуссию закончить.

@SM-Sergey
Copy link

SM-Sergey commented Jan 10, 2024

Предлагаю на этом дискуссию закончить.

Ну пока еще не всё прояснилось.

Про серверные группы движок Миранды ничего не знает, и знать не может по определению.

А каким образом тогда на данный момент создание, удаление и переименование групп через контекстное меню в окне настроек игнора и в клисте делает эти действия и на сервере ICQ тоже? Откуда она знает, что эти группы хранятся на сервере в аккаунте аськи? Особенно, при создании новой группы - как миранда решает, что ее надо сохранить на сервер ICQ (и сохраняет!), а не на какой-то иной сервер, или вообще на сервер не сохранять?

Нет, не любой.

Как это не любой? У меня, к примеру, в группе General, которая "ICQ-серверная", сидят аккаунты и из MRA, и из погоды, и из жабера. И нормально себе сидят, без видимых проблем. Ну и как бы они там и в будущем должны ровно так же сидеть.

@dartraiden
Copy link
Member Author

dartraiden commented Jan 10, 2024

Особенно, при создании новой группы - как миранда решает, что ее надо сохранить на сервер ICQ

Да она тупо пуляет все новые группы на сервер. Отчего у меня там и образовались группы и подгруппы дискорда в своё время, которые теперь сервер не хочет удалять. Это же бред. Т.е. я ставлю протокол Discord, он мне создаёт группу Discord, как указано в его настройках, вываливает туда приваты и каналы дискорда с подгруппами, и эти группы идут на сервер аськи.

Если же в базе есть группы, которых на сервере нет, в меню протокола появляется пункт "синхронизировать группы".

@SM-Sergey
Copy link

Это же бред.

Ну я с этим не спорю ни разу. Поэтому и задаю вопросы - а как будет в "новой системе" задаваться при создании группы, на каком именно сервере какого протокола я ее хочу создать?

@dartraiden
Copy link
Member Author

dartraiden commented Jan 10, 2024

Я считаю, что если у асечного контакта есть группа, её надо пулять на сервер аськи.
Соответственно, если у меня есть

асечный контакт1 с группой "Агнцы"
асечный контакт2 с группой "Козлища"
жабберный контакт с группой "Собутыльники"

то на сервере аськи должны быть группы "Агнцы" и "Козлища"

@SM-Sergey
Copy link

SM-Sergey commented Jan 10, 2024

Я считаю, что если у асечного контакта есть группа, её надо пулять на сервер аськи.

Допустим. И это логично. Но, есть нюансы, к примеру:

  1. я перетаскиваю жабберный контакт из Собутыльников в Козлища. В результате в жаббере тоже создается группа Козлища? Это, допустим, понятно.
  2. я добавляю контакт1 в Козлища, не убирая его из Агнцов. Но на аськосервере так низзя. Как это будет выглядеть? В аське на сервере он будет в какой из этих групп?
  3. я добавляю контакт1 еще и в Собутыльники. На сервере аськи создадутся Собутыльники? А как быть с п.2, что на сервере нельзя держать контакт более чем в одной группе?
  4. я переименовываю Козлищ во что-то еще. Но там уже имеется и асечный контакт, и жабберный. По словам @georgehazan "про серверные группы движок миранды ничего не знает". Он их на серверах не переименует, что ли?

и еще...
5) На сервере аськи с другого клиента переименовали Собутыльников в Корешей. А в жаббере - нет. Это что, "Собутыльники" распадутся на две группы?

@georgehazan
Copy link
Member

Ну пока еще не всё прояснилось.

Еще раз: это задача для ядра, обеспечить возможность показа контакта в нескольких группах. Здесь вообще речь не идет о синхронизации с каким-либо протоколом. Завязываем

@AlexZenoo
Copy link

Но ведь это откровенная несуразица. Есть shared roster в жабере, есть группы аськи, есть папки в телеге, есть гильдии в Дискорде, и общего между ними нет ничего. Каждый протокол сам решает, как отображать всю эту хрень в локальные папки Миранды, и каждый раз это отдельная песня. Держать это в базе, а тем более обрабатывать единообразно - это чушь.

а ежели заменить папки на метки? с возможностью метить каждый контакт несколькими метками? а уже их показывать...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants