Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... , 208, 209, 210  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Thu Oct 02, 2025 20:42    Post subject: Reply with quote

Loopback
Ну что, покажем Гислеру, как надо цвет панелей менять?

 Hidden text

 Hidden text

Ну вот. А то всё диалоги да диалоги. Не по-швейцарски это. Или по-швейцарски?

A55555
Новая функция работает только с Everything, проверять условие не требуется. Т.е. вместо:
Code:
If bEverything Then CommandExec em_everything

Можно просто посылать em_команду, например, после отображения прогресс-бара:
Code:
RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
    Sleep(50)
Wend

CommandExec em_everything

А в конце выгружать Everything после подсчета времени операции:
Code:
T2 = Round(GetUptime() - T1, 0) / 1000
T3 = "Время поиска: " &  StrFormat("%.3f", T2) & " sec"

CommandExec em_everything

Старый поиск без Everything не может работать дольше прежнего, ничего вроде не менялось. Возможно, у вас диски другие добавились или буквы изменились. Для ускорения поиска на HDD тома NTFS должны индексироваться (эта галочка обычно стоит по умолчанию в Windows) и лучше исключить системный раздел из поиска, особенно если на нем не хранятся торрент-данные. Другие логические диски, где тоже ничего нет, лучше тоже исключить из поиска.

Для обратного поведения CapsLock нужно поставить "Not" после условия, т.е. заменить
Code:
# проверка CapsLock
If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then

на
Code:
# проверка CapsLock
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then

И вы были правы. В старой функции поиска была ошибка и CapsLock работал наоборот. В последней версии модуля я исправил эту оплошность:
Code:
IniRead gDriveInclude %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then

Code:
If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then
         SetHintParam("ShowHint", "Font", 15, "Arial")

Вам тоже нужно добавить "Not" во втором случае, а в первом его убрать.

Что касается недокаченных раздач, то термин изначально был выбран неправильно. Речь идет о частично закаченных раздачах, как вы верно определили. Соответственно, поиск по размеру не будет давать результата. Можно попробовать в клиенте поставить опцию, чтобы дисковое пространство распределялось сразу, но не уверен, что это поможет.

Да, если в торрент-файле много мелких файлов, то поиск может длиться долго, но не бесконечно. Чем больше мелких файлов, тем больше результатов возвращает Everything и тем медленне все делается. К сожалению, Blu-Ray диски этим грешат. Они содежат много мелких файлов, которые ко всему прочему совпадают по именам и структуре каталогов с другими Blu-Ray дисками. Алгоритм поиска нужно улучшать, чтобы принимать во внимание только большие файлы. Но можно в настройках Everything исключить ненужные диски из индексации. Это должно ускорить поиск. В принципе режим "Имя+размер" должен быстро работать по сравнению с другими режимами, и достоверности от него больше, если какие-то файлы были полностью закачены.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Fri Oct 03, 2025 00:25    Post subject: Reply with quote

A55555
Проблему с зависанием удалось воспроизвести. Один раз у меня действительно зависло на поиске Blu-Ray, но больше, сколько бы я не пытался повторить, этого не произошло. Пока не ясно, в чем причина, но было похоже, что Everything просто перестала отвечать на запросы. Вернее, она не ответила на последний запрос, в результате все так и зависло к концу операции. Это навело меня на мысль, что нужно сделать проценты поиска и какую-то информацию по памяти (хоть какую-то, вдруг она там очень сильно отжирается). Замените эти два блока.

Code:
# локальные переменные
Local T1 = GetUptime(), T2 = T1, T3, bSpeed = 0, bDbg = 1, nRes = 0
Local bName = Not b_Shift, bSize = Not b_CTRL, sSize, sMode, sMem, sDbg
Local j, nCount, sRes, nError, sList, sDirs, aQuery = List(), aCount = List()


Code:
# размер файла
If bSize Then
   sSize = DllCall(sLibName & "\TorrentGet", "handle", hHandle, "wstr", "FileSize", "int", j, "wstr")
EndIf

sDbg = Round(j/(nCount-1)*100,0) & '% - '
If bDbg Then
   nRes += StrLen(sRes) + 8
   sMem = StrLen(sList) + StrLen(sDirs) + nRes
   sDbg &= SizeFormat(sMem*2, 1, 'G', 2) &  ' - '       
EndIf

# меньше сообщений окну прогресса
If bSpeed Then
   T3 = GetUptime()
   If Round(T3 - T2, 0) > 250 Then
      WinSetText(sDbg & sRes, h_WinFindTorr)
      T2 = T3
   EndIf
Else
   WinSetText(sDbg & sRes, h_WinFindTorr)
EndIf

Позже, когда информация о памяти не будет нужна, поменяйте bDbg = 1 на bDbg = 0. Если это действительно проблема взаимодействия с Everything (какой-то баг), то скорее всего ничего не поделаешь.
Back to top
View user's profile Send private message
A55555



Joined: 06 Feb 2011
Posts: 63

Post (Separately) Posted: Fri Oct 03, 2025 00:54    Post subject: Reply with quote

Orion9 wrote:
A55555
Новая функция работает только с Everything, проверять условие не требуется. Т.е. вместо:
Code:
If bEverything Then CommandExec em_everything

Можно просто посылать em_команду, например, после отображения прогресс-бара:
Code:
RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
    Sleep(50)
Wend

CommandExec em_everything

А в конце выгружать Everything после подсчета времени операции:
Code:
T2 = Round(GetUptime() - T1, 0) / 1000
T3 = "Время поиска: " &  StrFormat("%.3f", T2) & " sec"

CommandExec em_everything

Orion9
спасибо, но стартовать не успевает, поставил буквально в самое начало функции запуск
Code:
CommandExec em_everything

выход в том месте где вы подсказали нормально срабатывает
Code:
CommandExec em_everything_exit


Orion9 wrote:
Для обратного поведения CapsLock нужно поставить "Not" после условия, т.е. заменить
Code:
# проверка CapsLock
If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then

на
Code:
# проверка CapsLock
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then

Спасибо, помогло и на старом и на новом поиске.

Orion9 wrote:
Что касается недокаченных раздач, то термин изначально был выбран неправильно. Речь идет о частично закаченных раздачах, как вы верно определили. Соответственно, поиск по размеру не будет давать результата. Можно попробовать в клиенте поставить опцию, чтобы дисковое пространство распределялось сразу, но не уверен, что это поможет.

Да, вроде как сразу распределяет, размер показывает полный, но не на 100% совпадающий с тем что на сайте раздачи указан.
Я больше про то, что функция не найдя по размеру, сама не попыталась найти вторым способом по имени. Или тут имеется ввиду, что они друг без друга не могут в по умолчанию режиме?
Когда я её заставляю именно по имени при помощи Crtl поискать, то находит.

Orion9 wrote:
A55555
Проблему с зависанием удалось воспроизвести. Один раз у меня действительно зависло на поиске Blu-Ray, но больше, сколько бы я не пытался повторить, этого не произошло.

Да, зависание не стабильное, сегодня нормально работало, летало, потом снова зависло на этом Blu-Ray.

Orion9 wrote:
Замените эти два блока.

Code:
# локальные переменные
Local T1 = GetUptime(), T2 = T1, T3, bSpeed = 0, bDbg = 1, nRes = 0
Local bName = Not b_Shift, bSize = Not b_CTRL, sSize, sMode, sMem, sDbg
Local j, nCount, sRes, nError, sList, sDirs, aQuery = List(), aCount = List()


Code:
# размер файла
If bSize Then
   sSize = DllCall(sLibName & "\TorrentGet", "handle", hHandle, "wstr", "FileSize", "int", j, "wstr")
EndIf

sDbg = Round(j/(nCount-1)*100,0) & '% - '
If bDbg Then
   nRes += StrLen(sRes) + 8
   sMem = StrLen(sList) + StrLen(sDirs) + nRes
   sDbg &= SizeFormat(sMem*2, 1, 'G', 2) &  ' - '       
EndIf

# меньше сообщений окну прогресса
If bSpeed Then
   T3 = GetUptime()
   If Round(T3 - T2, 0) > 250 Then
      WinSetText(sDbg & sRes, h_WinFindTorr)
      T2 = T3
   EndIf
Else
   WinSetText(sDbg & sRes, h_WinFindTorr)
EndIf

Позже, когда информация о памяти не будет нужна, поменяйте bDbg = 1 на bDbg = 0. Если это действительно проблема взаимодействия с Everything (какой-то баг), то скорее всего ничего не поделаешь.

Ошибку при запуске поиска выкинуло
 Hidden text

OK нажал и всё равно нашло.
Выскакивает только когда ищется одиночный безпапковый например mkv файл.
Папки ищет без ошибки.
Нужно наблюдать, время покажет, но ту Blu-Ray папку теперь ищет нормально.

Эх, всё-таки снова подвисло
 Hidden text

закрыл, снова запустил, на 58% зависло.
Закрыл 58%, снова запустил, нормально нашло.

В любом случае, даже вот так как сейчас, это просто супер. Спасибо.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Sat Oct 04, 2025 00:40    Post subject: Reply with quote

A55555 wrote:
Ошибку при запуске поиска выкинуло

Типичная ошибка ночных версий ) Вместо
Code:
sDbg = Round(j/(nCount-1)*100,0) & '% - '

должно быть
Code:
sDbg = Round((j+1)/nCount*100,0) & '% - '

Исправил первым делом. Хотя изменений еще много. Судя по скрину, вы подключили модуль - правильно сделали, теперь обновляться будет легче.
A55555 wrote:
спасибо, но стартовать не успевает, поставил буквально в самое начало функции запуск

А зачем вам запускать и выгружать Everything в каждой операции? Меня не напрягает ручное включение и выключение. Но в обновленном модуле предусмотрел такую опцию.
Code:
Global gEvPath = COMMANDER_PATH & "\Everything.exe", gEvAuto = 0, gEvDelay = 100

Если gEvAuto = 1, то будет автозапуск и выгрузка Everything при каждой операции. gEvDelay - задержка в миллисекундах после запуска на случай, если Everything не успевает стартовать.

Также добавил опцию для CapsLock.
Code:
Global gTorrentDbg = 0, gDbgStep, gCapsReverse = 0

gCapsReverse = 1 задает обратное поведение. gTorrentDbg и gDbgStep используются для отладочной информации. Alt+0 - включает и выключает режим отладки, а Alt+Win+0 выводит информацию на экран и копирует ее в буфер. Когда в следующий раз зависнет, не помешает посмотреть на каком шаге зависло.
A55555 wrote:
Да, вроде как сразу распределяет, размер показывает полный, но не на 100% совпадающий с тем что на сайте раздачи указан.

В клиенте есть опция для полного распределения дискового пространства для новой раздачи сразу после ее старта. На бумаге должно работать, но надо проверять. Могут быть нюансы.
A55555 wrote:
Я больше про то, что функция не найдя по размеру, сама не попыталась найти вторым способом по имени. Или тут имеется ввиду, что они друг без друга не могут в по умолчанию режиме?

Было отдельно, сейчас немного подправил. Теперь предлагается продолжить с другим режимом, если не было ничего найдено в текущем. Автоперехода между режимами не будет - может произойти прыжок не пойми куда, особенно если искать только по размерам. Какой-никакой контроль со стороны пользователя все-таки нужен.
A55555 wrote:
закрыл, снова запустил, на 58% зависло.
Закрыл 58%, снова запустил, нормально нашло.

Теперь можно будет перед началом операции включить отладку (Alt+0), и когда зависнет Alt+Win+0. На экране и в буфере будет информация, запостите ее на форум. Последняя версия модуля:
 Torrent.aucfg

 Hidden text
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Sat Oct 04, 2025 13:35    Post subject: Reply with quote

A55555
Я вчера неправильно написал про комбинации клавиш, но, возможно, вы разобрались, если было время попробовать.
Quote:
Теперь можно будет перед началом операции включить отладку (Alt+0), и когда зависнет Alt+Win+0.

Все как раз наоборот. Alt+Win+0 включает режим отладки, Alt+0 выводит информацию на экран и копирует ее в буфер. Эти комбинации пришлось жестко прописать в модуль, потому что использование обычных em_команд не подходит для этих целей. Окно прогресса перехватывает фокус и em_команды не срабатывают, пока главное окно ТС не активно. Активировать его можно вручную, но это очень неудобно, поэтому нет смысла использовать интерфейс ТС для назначения горячих клавиш, как это делалось с предыдущими командами. Т.е. такая прописка в usercmd.ini и wincmd.ini не даст хорошего результата:
Code:
[em_torrent_data_options]
cmd=70506
[em_torrent_data_dbginfo]
cmd=70507

Code:
[Shortcuts]
A+0=em_torrent_data_dbginfo
[ShortcutsWin]
A+0=em_torrent_data_options

Но саму кнопку с последней функцией можно так назначить, и она будет работать. Например Alt+N:
Code:
[em_torrent_data_name_size]
cmd=70504

Code:
[Shortcuts]
A+N=em_torrent_data_name_size
CA+N=em_torrent_data_name_size
SA+N=em_torrent_data_name_size

Модификаторы Ctrl и Shift тоже будут работать.

Вчера не было времени об этом написать, но сейчас отвечу.
A55555 wrote:
В любом случае, даже вот так как сейчас, это просто супер. Спасибо.

Ну тут и Loopback надо говорить огромное спасибо. Супер результат мог только случиться на супер плагинах TCTorrent и Autorun. Второй - это вообще нечто. Это движок без которого мы бы никуда не уехали. И если 10 лет назад на коротких штанцах можно было делать такое:

 Сборка TechAdmin

То сейчас о чем говорить? )

 Hidden text
Back to top
View user's profile Send private message
A55555



Joined: 06 Feb 2011
Posts: 63

Post (Separately) Posted: Sat Oct 04, 2025 23:35    Post subject: Reply with quote

Orion9 wrote:
A55555
Я вчера неправильно написал про комбинации клавиш, но, возможно, вы разобрались, если было время попробовать.
Quote:
Теперь можно будет перед началом операции включить отладку (Alt+0), и когда зависнет Alt+Win+0.

Все как раз наоборот. Alt+Win+0 включает режим отладки, Alt+0 выводит информацию на экран и копирует ее в буфер.

Orion9
спасибо, всё работает как вы сказали.
Спасибо за опции удобной настройки.
Alt+Win+0 достаточно один раз в данной копии TC активировать и для всех торрент-поисков через 70504 в рамках данной копии TC оно будет мониторить?

Orion9 wrote:
А зачем вам запускать и выгружать Everything в каждой операции?

Просто максимум возможной автоматизации.

Прикладываю скрин, на 88% остановилось
 Hidden text

перед этим на 98% было, хаотично в общем продолжает место остановки случаться.

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

Указал в клиенте и теперь все виды поиска находят едва начавшийся качаться файл.
Но попробовал и до установки опции в торрент-клиенте, поиск 70504 предложение выкинул попробовать поискать через "Название" и нашло.

Появился не стабильно случающийся баг, нашло, написало Автопереход, но противоположную панель не обновило визуально.
Ничего не сдвинулось никуда на противоположной панели, не выделило файл или папку, плюс при попытке на этой противоположной панели что-то сделать она не выполняет то что ты от неё хочешь, например зайти внутрь какой-то случайной папки. Не прям висит, но отказывается правильно работать.
Нужно свернуть и развернуть окно TC (вручную т.е. сделать визуальное обновление) и получаешь правильного вида противоположную панель с выделенным найденным файлом или папкой.
Не только 70504, через 70501 тоже такое случается.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Sun Oct 05, 2025 00:33    Post subject: Reply with quote

A55555 wrote:
Alt+Win+0 достаточно один раз в данной копии TC активировать и для всех торрент-поисков через 70504 в рамках данной копии TC оно будет мониторить?

Да. При этом в заголовок рядом с процентами будет добавлена информация по памяти. Толку от этой информации никакой, но зато видно, что включен режим отладки. Сегодня утром запустил на торренте с 10000 файлами в режиме "только размер", долго пришлось ждать - два сообщения успел на форум запостить - но ничего не зависло и дошло до конца с 55 Мб памяти. Так что памяти не должно много расходоваться, даже если будут найдены десятки тысяч файлов и путей. Проблема в другом.

У вас на скрине видно, что зависло на третьем шаге, т.е. на функции FileFindEv, которая запрашивает данные у Everything. Как я и думал, проблема именно в этом, и мне тоже удалось ее повторить. В первом случае зависло на 5%, во втором на 23%
Code:
Step 1. TorrentGet j=516
Step 2. WinSetText Components\2k10\Programs-2k10\Games\cards.dll
Step 3. FileFindEv Components\2k10\Programs-2k10\Games\cards.dll


Code:
Step 1. TorrentGet j=2272
Step 2. WinSetText Components\2k10\User.Win\Win-XP\XPpSP3\I386\LEGITCC.DL_
Step 3. FileFindEv Components\2k10\User.Win\Win-XP\XPpSP3\I386\LEGITCC.DL_

Но важный момент. К зависаниям больше или только склонен ТСх64, в ТСх86 мне не удается добиться зависаний на разных торрентах, включаяя и тот, что с 10000 файлами.

В общем, с такой проблемой нужно обращаться к Loopback. Может быть он найдет причину, почему FileFindEv виснет, и починит, если это вообще возможно. А может и не возможно.

A55555 wrote:
Не только 70504, через 70501 тоже такое случается.

Эту я проблему совсем не понял, у меня такого вроде нет. Но могу предположить, что переход происходит медленно и команда перехода (CommandExec /CD %'file') просто не успевает доработать до конца. Такое может случиться, например, если переход осуществляется в архив, т.е. курсор ставится не на файл архива, а происходит заход именно в архив, поэтому так долго. А может просто зависает где чего, как в случаее с Everything. Попробуйте в 32-битном ТС, будет такая проблема повторяться или нет.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 308
Location: Электросталь

Post (Separately) Posted: Sun Oct 05, 2025 02:27    Post subject: Reply with quote

Loopback
Quote:
Runtime error 216 at 06CC22E7

Это у меня стабильно происходит с 32-битным TC когда RegExpReplace вызывается 51 раз подряд.
 Вот кусок кода:

Закомментирую этот кусок — нет Runtime error. Раскомментирую — получите, распишитесь. На 64-битном TC этого нет. Только на х32. После перезагрузки компьютера запускаю TC — сбой не происходит, затем пара перезапусков проходят гладко. Но стоит TC постоять открытым некоторое время и тогда при перезапусках начинает появляться Runtime error.
_________________
Amo ergo sum
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1628

Post (Separately) Posted: Sun Oct 05, 2025 11:25    Post subject: Reply with quote

yozhik wrote:
Это у меня стабильно происходит с 32-битным TC когда RegExpReplace вызывается 51 раз подряд.

А на предыдущей версии то же самое проявляется? Или только на последней?

И еще, хорошо бы для теста сам файл WinMerge.ini.

yozhik wrote:
тогда при перезапусках

При перезапусках тотала?


Orion9 wrote:
Может быть он найдет причину, почему FileFindEv виснет

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

Впрочем, есть одно предположение. Не может ли быть такого, что список файлов FileFindEv получает дольше 5 секунд? Просто сейчас стоит жёстко заданный таймаут, после этого операция прерывается. Этот момент уже отметил для себя в процессе ревизии кода, таймаут сделаю настраиваемым, но пока вот так.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 308
Location: Электросталь

Post (Separately) Posted: Sun Oct 05, 2025 12:23    Post subject: Reply with quote

Loopback wrote:
А на предыдущей версии то же самое проявляется? Или только на последней?

Воспроизводится на 2.2.20.0, т.е. с момента появления RegExp.dll. Вчера также воспроизвёл на 2.2.20.3 и 2.2.21.0. Сейчас у меня 2.2.21.1. А раньше я не сигнализировал по 2м причинам: 1) этот кусок обработки WinMerge.ini я написал всего несколько дней назад; 2) у меня Windows на виртуалке, и потому я приучил себя не рефлексировать легко на сбои, а перепроверять на случай, если причина сбоя не в Винде, а в виртуализации, хотя вообще этот конкретный механизм (Parallels) — очень качественный.

Loopback wrote:
сам файл WinMerge.ini

https://send.vis.ee/download/00d7e31e23a70a58/#5oMy43R6bMyQjk9-W6PADg
WinMerge.ini, autorun.aucfg и кнопка.

Loopback wrote:
При перезапусках тотала?

Да. Я так себе настроил, что между тёмной и светлой темами переключаюсь перезагрузкой Тотала ("cm_SwitchDarkmode, cm_exit 25"), во время которой перезаписываются все *.ini wd-плагинов и сторонних утилит. (Можно, конечно, настроить переключение и без перезагрузки Тотала, но пока руки не дошли.) Я, собственно, для этого и свой aucfg прикрепил (вместе с кнопкой перезапуска), чтобы Вы могли глянуть, если понадобится, для чего вообще эти перезапуски.

Добавлено:
См. ниже пост: кажется разобрался.
_________________
Amo ergo sum


Last edited by yozhik on Sun Oct 05, 2025 19:54; edited 1 time in total
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Sun Oct 05, 2025 13:29    Post subject: Reply with quote

A55555 wrote:
Просто максимум возможной автоматизации.

Но тогда получается, что если вы хотите найти 10 торрентов, то Everything будет запускаться и выгружаться 10 раз.

Мне проще один раз запустить вручную и видеть значок в трее. Когда утилита больше не нужна, выгрузить ее по Ctrl+Alt+E. Или другую комбинацию для этого назначить.
A55555 wrote:
Появился не стабильно случающийся баг, нашло, написало Автопереход, но противоположную панель не обновило визуально.

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

Ну, с зависаниями еще могу объяснить. Отключил в настройках Everything индексацию томов с установленными системами, теперь поиск просто летает. Bluray с 1200 файлами проходит буквально на глазах. Про сотню файлов и меньше и говорить нечего - операция длится всего пару секунд. Кроме того сегодня тестировал на спокойной системе (ничего в фоне не качалось, не игралось, не сжималось и вообще не делалось), отсюда, вероятно, такой хороший и стабильный результат, т.е. без каких-либо зависаний.

A55555
Сейчас у меня не будет времени на Autorun, но если вы и дальше будете пользоваться, фиксируйте косяки и баги, а также где и что можно улучшить. Надеюсь, доберусь до всего со временем.
Loopback wrote:
У меня просто нет массивов блюреев, я их вообще не качаю, и торренты долго не храню.

Наличие самих данных, конечно, желательно, но для тестов не требуется. Можно просто взять торрент-файл от Bluray диска, например тот, который упоминал A55555, или любой другой. Ссылку на файл с 10000 файлами я тоже постил на предыдущей странице.
Loopback wrote:
Не может ли быть такого, что список файлов FileFindEv получает дольше 5 секунд? Просто сейчас стоит жёстко заданный таймаут, после этого операция прерывается.

Даже не знаю. 5 секунд вроде нормально, но многое ведь может зависить от загруженности процессора в конкретный момент и количества файлов в базе Everything. Может и в самой Everything есть какой-то баг. Но в любом случае если долго нет ответа, FileFindEv должна это обрабатывать и возвращать результат. Сейчас похоже она просто висит и ждет данных на свой запрос. Хотя нужно еще обратить внимание, что в строке вызова присутствует объект List со свойством текст
Code:
aQuery.Text = FileFindEv('*\"' & sRes & '" size:' & sSize, "", "")

Может в нем причина?
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 308
Location: Электросталь

Post (Separately) Posted: Sun Oct 05, 2025 19:49    Post subject: Reply with quote

Loopback
Ох, наконец-то у меня получилось, кажется, разобраться! Методом научного тыка столько всего перепробовал — и кол-во вызовов RegExpReplace, и замену RegExpReplace на StrReplace (без регулярок, конечно, но опять выскакивал Runtime error), и длину строк в частях <что_найти> и <чем_заменить>. А оказалось то что? Переменные. В своём aucfg я для манипуляций с содержимым файла использую переменную FC (от File Content) — в неё читаю, в ней меняю, из неё записываю. И она у меня там в двух блоках, т.е. в общей сложности 15 + 51 = 66 обращений — 66 перезаписей содержимого. Заменил в одном блоке на другую переменную, другое имя — всё, с того момента Runtime error прекратились.
_________________
Amo ergo sum
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1628

Post (Separately) Posted: Sun Oct 05, 2025 23:26    Post subject: Reply with quote

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

Во всяком случае вроде ясно, что это не связано с последними внутренними изменениями в работе с параметрами, спасибо за проверку.

Orion9 wrote:
Но в любом случае если долго нет ответа, FileFindEv должна это обрабатывать и возвращать результат.

Для этого и сделан таймаут, но он, конечно, должен настраиваться.

Orion9 wrote:
Сейчас похоже она просто висит и ждет данных на свой запрос.

Это можно попробовать проверить, включив функцию обратного вызова и из нее выводить результат куда-нибудь. Можно и в OutputDebgString, но она прилично замедляет работу, с ней легко можно и не уложиться в 5 секунд.

Orion9 wrote:
присутствует объект List со свойством текст

Он получит текст только после завершения FileFindEv. Но нельзя исключать и его. Чтобы проверить, можно попробовать вывести не в список, а в файл.

Но вообще, код FileFindEv еще глубоко не проверял, может там и так что-то очевидное найдется.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 900

Post (Separately) Posted: Mon Oct 06, 2025 00:29    Post subject: Reply with quote

Loopback wrote:
Это можно попробовать проверить, включив функцию обратного вызова и из нее выводить результат куда-нибудь.

Loopback wrote:
Чтобы проверить, можно попробовать вывести не в список, а в файл.

Хорошие идеи, но нет возможности проверить. Зашел только, чтобы о перерисовке написать.

A55555
Если проблема, которую вы описали, будет повторяться, замените функцию GoToPathFromMsg на эту:
 Hidden text

Здесь я добавил всего две строчки: WinRedraw(1) и SendCommand(540). Первая перерисовывает окно, вторая перечитывает панель. Если проблема уйдет, одну из этих команд можно убрать. Вполне возможно, что и на одной команде будет работать.
Back to top
View user's profile Send private message
A55555



Joined: 06 Feb 2011
Posts: 63

Post (Separately) Posted: Mon Oct 06, 2025 00:39    Post subject: Reply with quote

Orion9 wrote:
A55555
Сейчас у меня не будет времени на Autorun, но если вы и дальше будете пользоваться, фиксируйте косяки и баги, а также где и что можно улучшить. Надеюсь, доберусь до всего со временем.

Orion9
да, я сразу напишу.
Пока, не считая на Blu-Ray подвисаний, только вот это частенько случающееся именно после последней версии Torrent.aucfg не обновление противоположной панели, при том что сам поиск успешен.
При чём когда это происходит (не обновление противоположной панели), не выполняется даже команда SendCommand(2002), т.е. вручную при помощи свернул/развернул окно TC обновляешь и оказываешься внутри папки искомой папки торрент файла, т.е. оно не смогло из-за этого "НЕобновления" проделать этот момент SendCommand(2002).

Когда, для этого же торрента, благополучно проходит обновление противоположной панели, то и SendCommand(2002) нормально выполняется, выделенной оказывается главная папка с именем торрента.
Толи фокус на главное окно TC не успевает через раз вернуться, не понятно.

Для ручного обновления достаточно также просто нажать на букву диска в панели выбора дисков TC.

Костыль, куда-то с повторной командой обновить панель или перерисовать окно TC временно может можно соорудить в конце 70501 и 70504?

Это НЕобновление панели у меня точно при отключенном dbg, проверю еще если активировать его как будет. Если и с ним проблема, откачусь на предыдущую версию, там про эту проблему и не знал. Потому как по-крайней мере с неактивированным dbg это у меня происходит минимум в 50% случаев поиска.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... , 208, 209, 210  Next
Page 209 of 210

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group