Orion9

|
Posted: Sun Sep 28, 2025 13:50 Post subject: |
|
|
A55555
Я поторопился, когда сказал, что с результатами от Everything ничего не поделаешь. Функция поиска Autorun может получать отсортированный результат:
 FileFindEv Everything будет сортировать результирующий список:
0 — без сортировки (по умолчанию);
1 — по имени, по возрастанию;
2 — по имени, по убыванию;
3 — по директории, по возрастанию;
4 — по директории, по убыванию;
5 — по размеру, по возрастанию;
6 — по размеру, по убыванию;
7 — по расширению, по возрастанию;
8 — по расширению, по убыванию;
9 — по имени типа, по возрастанию;
10 — по имени типа, по убыванию;
11 — по дате создания, по возрастанию;
12 — по дате создания, по убыванию;
13 — по дате изменения, по возрастанию;
14 — по дате изменения, по убыванию;
15 — по атрибутам, по возрастанию;
16 — по атрибутам, по убыванию;
17 — по имени в списке, по возрастанию;
18 — по имени в списке, по убыванию;
19 — по числу запусков, по возрастанию;
20 — по числу запусков, по убыванию;
21 — по признаку «недавно изменённый», по возрастанию;
22 — по признаку «недавно изменённый», по убыванию;
23 — по дате доступа, по возрастанию;
24 — по дате доступа, по убыванию;
25 — по дате запуска, по возрастанию;
26 — по дате запуска, по убыванию.
Если опция не задана, её значение — 0 (без сортировки).
Да, крутую вещь сделал Loopback. А я на первых порах и не заметил.
В общем, вам нужно заменить всего одну строку:
Code: | found = FileFindEv("size:" & gTorrentSize, "", "") |
На:
Code: | found = FileFindEv("size:" & gTorrentSize, "", "sort:3") |
Этого должно хватить, чтобы самый верхний каталог в структуре пустых каталогов стоял первым в списке результатов.
Касаемо замены. Конечно, лучше сделать отдельный файл и дополнительный алгоритм, но на первое время можете попробовать прямо в код прописать условие для замены сразу после строчки:
Code: | gHintPipe = DllCall(pInfo, 'Ptr', hMI, "Uint", 0, "Wstr")
If StrPos(sMode, "hint.txt") Then
gHintPipe = StrReplace(gHintPipe, "DTS HD Master Audio", "DTS-HD MA")
gHintPipe = StrReplace(gHintPipe, "Dolby Digital", "DD")
EndIf
If Not bLang Then gHintPipe = StrReplace(gHintPipe, Chr(32), Chr(160)) |
Но важное уточнение. Если будете менять вот такие строки:
Code: | Audio #3: 6ch, 48.0 kHz, 768 kb/s (CBR), E-AC-3, Dolby Digital Plus with Dolby Atmos, fr, 31.250 FPS (1536 SPF) |
То длинные строки для замены должны идти после коротких, чтобы избежать возможной замены подстрок, иначе может получится такая замена:
Code: | DD Plus with Dolby Atmos |
Чтобы этого не произошло, порядок должен быть такой:
Code: | If StrPos(sMode, "hint.txt") Then
gHintPipe = StrReplace(gHintPipe, "DTS HD Master Audio", "DTS-HD MA")
gHintPipe = StrReplace(gHintPipe, "Dolby Digital Plus with Dolby Atmos", "DD+Atmos")
gHintPipe = StrReplace(gHintPipe, "Dolby Digital", "DD")
EndIf |
Если замены себя оправдают и вам понравится, то можно будет подумать над файлом, где хранить такие замены, чтобы не было необходимости в код жестко прописывать.
Кстати, я вчера уже не на свежую голову написал, что такой код сработает:
Code: | If bEverything And StrPos(FileGetAttr(Target), "D") Then SendCommand(2002) |
Но он не сработает, потому что переменная bEverything действует только в рамках функции TorrentFindData, а вызов происходит из функции GoToPathFromMsg. Чтобы все заработало, в функции TorrentFindData необходимо заменить строку "Local bEverything = nMode" на "Global bEverything = nMode". Тогда переменная станет глобальной и доступной другим функциям. |
|