227 lines
8.9 KiB
Batchfile
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
|