Files
2026-03-22 13:35:25 -06:00

227 lines
8.9 KiB
Batchfile

@echo off
setlocal EnableExtensions
REM ANSI colors (needs Windows 10+ console VT or Windows Terminal)
for /f %%a in ('powershell -nop -c "[char]0x1b"') do set "ESC=%%a"
set "RST=%ESC%[0m"
set "BLD=%ESC%[1m"
set "DIM=%ESC%[2m"
set "RED=%ESC%[91m"
set "GRN=%ESC%[92m"
set "YLW=%ESC%[93m"
set "BLU=%ESC%[94m"
set "MAG=%ESC%[95m"
set "CYN=%ESC%[96m"
set "GRY=%ESC%[90m"
set "WHT=%ESC%[97m"
REM Always use 'nathan' as NAS username
set NASUSER=nathan
REM Menu for operation selection
echo.
echo %BLD%%YLW%Select operation:%RST%
echo %CYN%1.%RST% Generate thumbnails only
echo %CYN%2.%RST% SSH cleanup only
echo %CYN%3.%RST% Both (generate thumbnails + SSH cleanup)
echo %CYN%4.%RST% Fix OneDrive thumbnail override %DIM%(NEW^)%RST%
echo.
set /p CHOICE=%CYN%Enter your choice ^(1-4^): %RST%
if "%CHOICE%"=="1" goto THUMBS_ONLY
if "%CHOICE%"=="2" goto SSH_ONLY
if "%CHOICE%"=="3" goto BOTH
if "%CHOICE%"=="4" goto FIX_ONEDRIVE
echo %RED%Invalid choice. Exiting.%RST%
exit /b
:THUMBS_ONLY
REM Prompt for Windows path
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
if "%WINPATH%"=="" (
echo %RED%No path provided. Exiting.%RST%
exit /b
)
REM Convert Windows path to NAS path and pre-seed eaDir_tmp from @eaDir on NAS
set "RELPATH=%WINPATH:~3%"
set "RELPATH=%RELPATH:\=/%"
set "NASPATH=/volume1/Hydra/%RELPATH%"
echo %GRN%Uploading extract_eadir_to_tmp.sh to NAS and seeding...%RST%
if not exist "%~dp0extract_eadir_to_tmp.sh" (
echo %RED%ERROR: extract_eadir_to_tmp.sh not found next to this batch file.%RST%
goto END
)
ssh Hydra "cat > ~/extract_eadir_to_tmp.sh" < "%~dp0extract_eadir_to_tmp.sh"
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/extract_eadir_to_tmp.sh; else tr -d \"\r\" < ~/extract_eadir_to_tmp.sh > ~/extract_eadir_to_tmp.sh.tmp && mv ~/extract_eadir_to_tmp.sh.tmp ~/extract_eadir_to_tmp.sh; fi; chmod +x ~/extract_eadir_to_tmp.sh; ~/extract_eadir_to_tmp.sh \"%NASPATH%\" || true'"
REM Run psthumbgen.py
python psthumbgen.py --directory "%WINPATH%"
goto END
:SSH_ONLY
REM Prompt for Windows path
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
if "%WINPATH%"=="" (
echo %RED%No path provided. Exiting.%RST%
exit /b
)
REM Convert Windows path to NAS path
set "RELPATH=%WINPATH:~3%"
set "RELPATH=%RELPATH:\=/%"
set "NASPATH=/volume1/Hydra/%RELPATH%"
echo %GRY%DEBUG: WINPATH = %WINPATH%%RST%
echo %GRY%DEBUG: RELPATH = %RELPATH%%RST%
echo %GRY%DEBUG: NASPATH = %NASPATH%%RST%
echo.
call :WIN_REMOVE_LOCAL_EADIR
REM Ensure nascleanup.sh exists on NAS (upload + fix line endings), then run it
echo %GRN%Uploading nascleanup.sh to NAS and running cleanup...%RST%
if not exist "%~dp0nascleanup.sh" (
echo %RED%ERROR: nascleanup.sh not found next to this batch file.%RST%
goto END
)
ssh Hydra "cat > ~/nascleanup.sh" < "%~dp0nascleanup.sh"
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/nascleanup.sh; else tr -d \"\r\" < ~/nascleanup.sh > ~/nascleanup.sh.tmp && mv ~/nascleanup.sh.tmp ~/nascleanup.sh; fi; chmod +x ~/nascleanup.sh; ~/nascleanup.sh \"%NASPATH%\"'"
if errorlevel 1 (
echo %RED%ERROR: nascleanup failed on NAS - check promote ^(eaDir_tmp -^> @eaDir^) messages above.%RST%
echo %YLW%Keeping eaDir_tmp on the share so you can retry without re-running FFmpeg.%RST%
call :PRINT_HYDRA_CLEAR_EADIR
) else (
call :WIN_REMOVE_LOCAL_EADIR_TMP
)
goto END
:BOTH
REM Prompt for Windows path
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
if "%WINPATH%"=="" (
echo %RED%No path provided. Exiting.%RST%
exit /b
)
REM Convert Windows path to NAS path
set "RELPATH=%WINPATH:~3%"
set "RELPATH=%RELPATH:\=/%"
set "NASPATH=/volume1/Hydra/%RELPATH%"
echo %GRY%DEBUG: WINPATH = %WINPATH%%RST%
echo %GRY%DEBUG: RELPATH = %RELPATH%%RST%
echo %GRY%DEBUG: NASPATH = %NASPATH%%RST%
echo.
REM Pre-seed eaDir_tmp from @eaDir on NAS before generation
echo %GRN%Uploading extract_eadir_to_tmp.sh to NAS and seeding...%RST%
if not exist "%~dp0extract_eadir_to_tmp.sh" (
echo %RED%ERROR: extract_eadir_to_tmp.sh not found next to this batch file.%RST%
goto END
)
ssh Hydra "cat > ~/extract_eadir_to_tmp.sh" < "%~dp0extract_eadir_to_tmp.sh"
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/extract_eadir_to_tmp.sh; else tr -d \"\r\" < ~/extract_eadir_to_tmp.sh > ~/extract_eadir_to_tmp.sh.tmp && mv ~/extract_eadir_to_tmp.sh.tmp ~/extract_eadir_to_tmp.sh; fi; chmod +x ~/extract_eadir_to_tmp.sh; ~/extract_eadir_to_tmp.sh \"%NASPATH%\" || true'"
REM Run psthumbgen.py
python psthumbgen.py --directory "%WINPATH%"
REM Clear old @eaDir on the share via SMB (helps when NAS cp hits Permission denied on root-owned dirs)
call :WIN_REMOVE_LOCAL_EADIR
REM SSH cleanup commands (run separately)
REM Ensure nascleanup.sh exists on NAS (upload + fix line endings), then run it
echo %GRN%Uploading nascleanup.sh to NAS and running cleanup...%RST%
if not exist "%~dp0nascleanup.sh" (
echo %RED%ERROR: nascleanup.sh not found next to this batch file.%RST%
goto END
)
ssh Hydra "cat > ~/nascleanup.sh" < "%~dp0nascleanup.sh"
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/nascleanup.sh; else tr -d \"\r\" < ~/nascleanup.sh > ~/nascleanup.sh.tmp && mv ~/nascleanup.sh.tmp ~/nascleanup.sh; fi; chmod +x ~/nascleanup.sh; ~/nascleanup.sh \"%NASPATH%\"'"
if errorlevel 1 (
echo %RED%ERROR: nascleanup failed on NAS - check promote ^(eaDir_tmp -^> @eaDir^) messages above.%RST%
echo %YLW%Keeping eaDir_tmp on the share so you can retry without re-running FFmpeg.%RST%
call :PRINT_HYDRA_CLEAR_EADIR
) else (
call :WIN_REMOVE_LOCAL_EADIR_TMP
)
goto END
:FIX_ONEDRIVE
echo.
echo %BLD%%MAG%=================================================================%RST%
echo %BLD%%MAG% FIX ONEDRIVE THUMBNAIL OVERRIDE %RST%
echo %BLD%%MAG%=================================================================%RST%
echo.
echo %WHT%This will fix OneDrive overriding your custom thumbnails with%RST%
echo %WHT%generic file icons for unsupported formats like .blend files.%RST%
echo.
echo %CYN%What this does:%RST%
echo %GRY% - Disables OneDrive cloud thumbnail providers%RST%
echo %GRY% - Restores local thumbnail priority%RST%
echo %GRY% - Prevents future thumbnail cache deletion%RST%
echo.
set /p CONFIRM=%YLW%Continue? ^(y/n^): %RST%
if /i not "%CONFIRM%"=="y" goto END
echo.
echo %GRN%Running PowerShell script to fix OneDrive thumbnail override...%RST%
echo.
REM Check if PowerShell script exists
if not exist "fix_thumbnail_override.ps1" (
echo %RED%ERROR: fix_thumbnail_override.ps1 not found in current directory.%RST%
echo %YLW%Please ensure the PowerShell script is in the same folder as this batch file.%RST%
pause
goto END
)
REM Run PowerShell script as administrator
powershell -ExecutionPolicy Bypass -Command "Start-Process PowerShell -ArgumentList '-ExecutionPolicy Bypass -File \"%~dp0fix_thumbnail_override.ps1\"' -Verb RunAs"
echo.
echo %GRN%OneDrive thumbnail override fix initiated.%RST%
echo %GRY%Please check the PowerShell window for progress and results.%RST%
echo.
echo %CYN%After the fix completes:%RST%
echo %GRY% 1. Restart your computer%RST%
echo %GRY% 2. Re-run your thumbnail generation process%RST%
echo %GRY% 3. Your custom thumbnails should now have priority!%RST%
echo.
goto END
REM Print ssh Hydra command to wipe @eaDir when NAS cleanup failed (matches NASPATH from pasted R:\ path).
:PRINT_HYDRA_CLEAR_EADIR
if "%NASPATH%"=="" goto :eof
echo %MAG%To clear locked @eaDir on Hydra: ssh in first.%RST%
echo %GRY%Permission denied lines above name nested paths ^(e.g. editDesc, gameplay^).%RST%
echo %GRY%Clear every @eaDir under the SAME folder you passed to nascleanup ^(NASPATH below^),%RST%
echo %GRY%not only the subpath from the first error line.%RST%
echo %BLD%%YLW% sudo find "%NASPATH%" -depth -type d -name '@eaDir' -exec sudo rm -rf {} +%RST%
goto :eof
REM Remove folder-level @eaDir on the pasted Windows path (same files as NAS over SMB).
:WIN_REMOVE_LOCAL_EADIR
if "%WINPATH%"=="" goto :eof
if exist "%WINPATH%\@eaDir" (
echo %CYN%Removing "%WINPATH%\@eaDir" via Windows ^(SMB share^)...%RST%
rd /s /q "%WINPATH%\@eaDir" 2>nul
if exist "%WINPATH%\@eaDir" (
echo %YLW%WARNING: Could not remove @eaDir; try PowerShell as admin or delete in Explorer.%RST%
)
)
goto :eof
REM Remove every eaDir_tmp under pasted path (including subfolders e.g. gameplay\eaDir_tmp).
:WIN_REMOVE_LOCAL_EADIR_TMP
if "%WINPATH%"=="" goto :eof
echo %CYN%Removing all eaDir_tmp folders under "%WINPATH%" ^(recursive, SMB^)...%RST%
if not exist "%~dp0remove_eadir_tmp_recursive.ps1" (
echo %RED%ERROR: remove_eadir_tmp_recursive.ps1 not found next to this batch file.%RST%
goto :eof
)
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0remove_eadir_tmp_recursive.ps1" "%WINPATH%"
goto :eof
:END
echo %DIM%Press any key to continue . . .%RST%
pause >nul