RU.GOLDED --------------- < Пред. | След. > -- < @ > -- < Сообщ. > -- < Эхи > --
 Nп/п : 42 из 100
 От   : Stas Mishchenkov                    2:460/5858        21 фев 26 19:27:18
 К    : Nil A                                                 21 фев 26 19:54:01
 Тема : Баг в GoldED - Opus MSG lastread
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 2:460/5858 6999e2e2
@REPLY: 2:5015/46 699944d1
@PID: GED+W64 1.1.5-b20250401
@CHRS: CP866 2
@TZUTC: 0300
@RealName: Brother Rabbit
@TID: hpt/w64-mvcdll 1.9 2023-01-07
Hi Nil!

21 Feb 26 08:27, Nil A -> Stas Mishchenkov:

 SM>> А, вот, обнаружил я проблему, которую не знаю, как решать пока. Если
 SM>> в
 SM>> OPUS Msg Base дед удаляет сообщение, то он не правит ластриды. Если
 SM>> ластрид _другого_ пользователя указывает на удалённое сообщение с
 SM>> большим номером, чем существующие, то так и останется. Если новые
 SM>> сообщения будут тоже с меньшим номером, то они для другого
 SM>> пользователя будут считаться прочитанными, а это не правильно и
 SM>> чревато. На сколько я понимаю, починить это не трудно.

 NA> Посмотрел. Обновление lastread происходит при _выходе_ из арии,

Ну, хоть так...

 NA>  не важно для какой базы, логика одинаковая, и ластриды обновляются
 NA> только для _текущего_ пользователя.

А это совсем плохо.

 NA> Такой подход работает для Squish и JAM в режиме "soft" удаления.

Но для других-то пользователей они тоже удалены.

 NA> В OPUS/Msg сообщения удаляются всегда по-сути "hard",
 NA> причём могут переиспользоваться старые номера - тут и возникает
 NA> описанная тобой проблема.

 Вот-вот. В идеале, конечно, сразу бы обновлять все ластриды, но хотя
бы при выходе из области...

 NA> Я посмотрел код Хаски утилиты sqpack, и при перепаковки баз, если есть
 NA> удалённые сообщения, то ластриды правятся для _всех_ пользователей. В этом
 NA> плане sqpack работает корректно.

 https://brorabbit.g0x.ru/files/perl/maintjam.pl и
https://brorabbit.g0x.ru/files/perl/maintmsg.pl тоже именно так делает.

 NA> Чтобы починить голдед, нужно также править ластриды для всех
 NA> пользователей при удалении. Это немного другой интерфейс получится, а
 NA> не то, что сейчас close() вызывает у базы метод save_lastread()

 Вот его и нужно править. Я правильно понял? А желательно и вызывать
при удалении msg.

 NA> для текущего просто пользователя. Фикс возможен, но оне не в две
 NA> строчки просто.

Подозреваю, что не в две.

Нужно что-то такое:

 for ( $i = 0; $i < $users; $i++ ) {
    $lastreads[$i] = 0 if !defined $lastreads[$i];
    if ( $lastreads[$i] > 0 ) {
        while( !-e catfile($msgDir, "$lastreads[$i]\\.msg") {
          $lastreads[$i] --;
          last if $lastreads[$i] == 0;
        }
    }
 }

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

PS: Я знаю, что правильно - ластрэд. ;)

Have nice nights.
       Stas Mishchenkov.

--- Общественное мнение - это мнение тех, кого не спрашивают.
 * Origin: Lame Users Breeding. Simferopol, Crimea. (2:460/5858)
SEEN-BY: 46/49 50/109 104/117 221/6 240/1120 267/67
301/1 341/66 451/31
SEEN-BY: 452/28 166 455/19 460/16 58 256 1124
5858 463/68 4500/1 5000/111
SEEN-BY: 5015/42 46 5019/40 400 5020/101 113 545
620 715 830 846 848 1042
SEEN-BY: 5020/2992 4441 12000 5022/128 5029/32
5030/49 115 723 1081 1474
SEEN-BY: 5049/1 3 5050/151 5053/51 58 5054/30 89
5058/104 5060/900 5061/133
SEEN-BY: 5068/45 5083/1 444 6078/80 6090/1
@PATH: 460/5858 58 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх