View previous topic :: View next topic |
Author |
Message |
Loopback
Joined: 07 Sep 2009 Posts: 1610
|
(Separately) Posted: Tue Sep 16, 2025 22:59 Post subject: |
|
|
yozhik wrote: | Такое ощущение, что мой конфиг стал быстрее обрабатываться. |
Было бы здорово, но вряд ли Не думаю, что произведённые изменения могут дать хоть сколько-нибудь заметное ускорение, пока это в основном изменение структуры кода. |
|
Back to top |
|
 |
A55555
Joined: 06 Feb 2011 Posts: 30
|
(Separately) Posted: Tue Sep 16, 2025 23:50 Post subject: |
|
|
Orion9 wrote: | A55555 wrote: | И если можно будет и это реально |
С тем функционалом, который сечас есть в Autorun, это реально. Loopback, конечно, в подробностях знает формат торрент-файлов, но если исходить из самого простого, то можно просто проверять размер содержимого (каталога или файла) торрент-файла и сверять его с тем, что есть на диске. Результат будет с большой долей вероятности точным, т.к. количество байт у крупных объемов данных вряд ли может повториться. Недостаток такого подхода лишь один: не полностью скаченные раздачи (несколько серий сезона, несколько песен альбома и т.д) таким способом найтись не смогут, т.к. реальный объем данных не совпадает с заявленным. Возможен и обратный случай, когда в каталог полностью скаченной раздачи случайно попадают лищние файлы. Такие каталоги тоже не будут находиться, но в остальных случаях проблем не должно быть. Одиночные файлы будут находиться даже переименованными, ровно как и папки.
 Hidden text Code: | RegisterCommand 70500 TorrentFindData
Global gTorrentSize = 0, gTorrentCount = 0, gDriveInclude = "e:\;f:\;g:\;h:\;i:\;j:\"
Global h_WinFindTorr = 0
Global g_WinFindTorr = 0, g_FindTorrTask = 0
Global o_WinFindTorr = Callback("WinFindTorrProc", "hwnd;uint;wparam;lparam")
Func WinFindTorrProc(hWnd, uMsg, wParam, lParam)
Static WM_CLOSE = 0x0010
If uMsg = WM_CLOSE Then
If DllCall("DestroyWindow", "handle", hWnd) Then
h_WinFindTorr = 0
g_FindTorrTask = 0
EndIf
Return 0
EndIf
Return DllCall("CallWindowProcW", "ptr", g_WinFindTorr, _
"hwnd", hWnd, "uint", uMsg, "wparam", wParam, "lparam", lParam)
EndFunc
Func WinFindTorrentData()
Local hIco
h_WinFindTorr = DllCall("CreateWindowExW", _
"dword", 0, _
"wstr", "msctls_progress32", _
"wstr", "", _
"dword", 0x00C80000, _
"int", 200, "int", 100, "int", Scale(400), "int", Scale(50), _
"handle", AUTORUN_TCHANDLE, _
"handle", 0, "handle", 0, "ptr", 0, _
"handle")
If h_WinFindTorr = 0 Then Return 0
WinAlign(h_WinFindTorr, 0, DllCall("GetDesktopWindow"))
WinSetPos("", -Scale(50), "", "", 1, h_WinFindTorr)
WinSetState(5, h_WinFindTorr)
g_WinFindTorr = DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
"hwnd", h_WinFindTorr, _
"int", -4, _
"long_ptr", o_WinFindTorr.Ptr, _
"ptr")
hIco = SendMessage(AUTORUN_TCHANDLE, 0x7f, 2, 0)
SendMessage(h_WinFindTorr, 0x80, 0, hIco)
WinSetStyle(PBS_MARQUEE, 2, h_WinFindTorr)
SendMessage(h_WinFindTorr, PBM_SETMARQUEE, 1, 0)
WinSetText("Searching...", h_WinFindTorr)
g_FindTorrTask = 1
While g_FindTorrTask
Sleep(50)
Wend
h_WinFindTorr = 0
EndFunc
Func TorrentFindData()
If h_WinFindTorr Then
SendMessage(h_WinFindTorr, 0x0010, 0, 0)
g_FindTorrTask = 0
Return
Endif
Static buf = Buffer(256)
buf.Zero()
Local nSymb = DllCall("GetLogicalDriveStringsW", "dword", buf.size, "ptr", buf.ptr)
If Not nSymb Then
MsgBox("Не удалось получить список логических дисков" & auCRLF "SYSERROR: " & SYSERROR, "Autorun")
Return
EndIf
Local aDrive = list(), i = 0, sz, sDrives
While 1
sDrive = buf.GetStr(i)
sz = StrLen(sDrive)
if sz = 0 THEN break
aDrive.add(sDrive)
i = i + sz*2 + 2
Wend
sDrives = aDrive.text
#MsgBox(sDrives)
Local obj = Plugin("TCTorrent")
If ERROR <> 0 Then
ShowHint("TCTorrent.wdx plugin error " & ERROR)
Return
Endif
Local lRet = false
Local sPath = RequestCopyDataInfo("SP")
Local sName = RequestCopyDataInfo("SN")
Local sFile = sPath & sName
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
lRet = true
ElseIf StrPos(FileGetAttr(sFile), "D") Then
ShowHint("Каталог " & sFile)
lRet = true
Else
obj.FileName = sFile
Local name = obj.GetValue(0)
Local size = obj.GetValue(2,0) # size -> bytes
Local files = obj.GetValue(1)
If files < 1 Then
ShowHint("Файл не является торрент-файлом " & sFile)
lRet = true
EndIf
Endif
Free(obj)
If lRet Then Return
IniRead gDriveInclude %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
MsgBox("Поиск данных торрента:" & auCRLF & auCRLF & _
"Имя: " & name & auCRLF & _
"Размер: " & size & auCRLF & _
"Файлов: " & files & auCRLF & auCRLF & _
"Диски поиска: " & gDriveInclude & auCRLF & auCRLF & _
"Продолжить?", "Autorun", 3+32+0)
If EXTENDED <> 6 Then Return
gTorrentSize = size
h_WinFindTorr = 0
gTorrentCount = 0
RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
Sleep(50)
Wend
Local found
For i = 0 to aDrive.Count -1
If StrPos(gDriveInclude, aDrive[i]) Then
If files > 1 Then
found &= FileFind(aDrive[i], "*.*", 1, 2, "PathList", "Func:FindTorrentDir") & auCRLF
Else
found &= FileFind(aDrive[i], "*.*", 1, 1, "PathList", "Func:FindTorrentFile") & auCRLF
EndIf
Endif
Next
If g_FindTorrTask = 0 Then
MsgBox("Поиск данных отменен" & auCRLF & auCRLF & _
"Найдено: " & gTorrentCount & auCRLF & found, "", 48)
Else
g_FindTorrTask = 0
SendMessage(h_WinFindTorr, 0x0010, 0, 0)
If DllCall("DestroyWindow", "handle", h_WinFindTorr) Then h_WinFindTorr = 0
MsgBox("Найдено: " & gTorrentCount & auCRLF & found, "", 64)
EndIf
EndFunc
Func FindTorrentFile(file)
Static T1 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T1, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T1 = GetUptime()
Sleep(5)
EndIf
If file.size = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc
Func FindTorrentDir(file)
Static T2 = GetUptime()
If Not g_FindTorrTask Then Return 0
If Round(GetUptime() - T2, 0) > 200 Then
WinSetText(" [" & gTorrentCount & "] " & file.FullPath, h_WinFindTorr)
T2 = GetUptime()
Sleep(5)
EndIf
Local sz = FileFind(file.FullPath, "*.*", 1, 0, "TotalSize")
If sz = gTorrentSize Then
gTorrentCount += 1
Return 1
EndIf
Return 2
EndFunc |
 Hidden text Code: | TOTALCMD#BAR#DATA
70500
%COMMANDER_EXE%
Команда 70500
-1
|
В wincmd.ini сохраняется ключ:
Code: | [Autorun]
TorrentDrives=e:\;f:\;g:\;i:\;j:\ |
Здесь можно указать на каких дисках искать. Желательно исключить диски с каталогом Windows, до тех пор, пока не будет сделано под Everything, иначе будут заметные торомоза.
В общем, это пока только тестовая версия, могут быть косяки и недочеты, но в целом работает.
|
Спасибо. Поиск работает.
Для случая "папка Blu-Ray диска" находит как два объекта.
 Hidden text
Такое поведение в случае, если папка BDMV одна внутри главной папки
Code: | E:\Torrent\Страна садов 2004 [GARDEN_STATE_2004_BDREMUX_HDCLUB]\BDMV\ |
Если рядом с ней есть ещё папки, типа ANY и CERTIFICATE то всё нормально, находит 1 объект.
 Hidden text
Для просто файл всё нормально
 Hidden text
Но только это сообщение, на противоположной панели TC ничего не происходит, перехода к этой папке/файлу. Code: | Страна садов 2004 [GARDEN_STATE_2004_BDREMUX_HDCLUB]\BDMV\ |
|
|
Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 837
|
(Separately) Posted: Wed Sep 17, 2025 00:24 Post subject: |
|
|
A55555
Функционал будет развиваться со временем, всего сразу не сделаешь. Над новыми фишками надо будет еще подумать. Пока этот только тестовая версия, но она рабочая, что радует. Пути из окна сообщения в данный момент можно просто копировать по CTRL+C и вставлять в заголовок панели для перехода. Надеюсь, эта кнопка поможет вам найти все данные и поставить их на раздачу ) |
|
Back to top |
|
 |
|
|
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
|