@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set mdb=payloads\\Media_db.db
set sqlite=sqlite3.exe
set tac=adobecode.txt
set tab=adobeblocked.txt
set tal=adobelang.txt
set taq=adobequery.txt

if not exist "%mdb%" (
  echo No root Media_db.db found [press enter to halt]
  pause >> nul
  exit /b
)
if not exist "%sqlite%" (
  echo No sqlite found [press enter to halt]
  pause >> nul
  exit /b
)
if not exist %tac% (
  Call :RemoveXmlAndDb
  Call :GetPayloadCode > %tac%
  Call :GetPayloadName > %tab%
  Call :GetEulaLang > %tal%
  echo ===== next - make sql [press enter]
  pause >> nul
  if exist %taq% del /q %taq%
)
if not exist %taq% (
  Call :MakeSql > %taq%
)
Call :PatchRootMediaDb

echo ===== next - Exit [press enter]
pause >> nul
exit /b

:RemoveXmlAndDb
echo == remove *.boot.xml, *.proxy.xml, media.sql, Media_db.db
cd payloads\
for /f "delims=" %%i in ('dir /ad /b 2^>nul') do (
  cd %%i
  for /f %%j in ('dir *.boot.xml *.proxy.xml media.sql Media_db.db /b 2^>nul') do (
    del /q %%j
  )
  cd ..
)
cd ..
exit /b

:GetPayloadCode
echo == get adobe Payload ID (%tac%)>>&2
for /f %%i in ('dir payloads\ /ad /b') do (
  echo select pd.PayloadID, p.payload_name from PayloadData pd join Payloads p on (pd.PayloadID = p.PayloadID^) where (pd.key = 'PayloadInfo'^) and (pd.value like '%%Property name="TargetName"^^^>%%i^^^</Property%%'^); | %sqlite% %mdb%
)
exit /b

:GetPayloadName
echo == get adobe Payload Name (%tab%)>>&2
for /f "tokens=1* delims=|" %%i in (%tac%) do (
  echo %%j
)
exit /b

:GetEulaLang
echo == get adobe EULA Lang (%tal%)>>&2
echo select langCode from EULA_Files group by 1; | %sqlite% %mdb%
exit /b

:MakeSql
echo == make sql (%taq%)>>&2
set codes=
set names=
set langs=
set blocked=
for /f "tokens=1* delims=|" %%i in (%tac%) do (
  set codes=!codes!'%%i',
  set names=!names!'%%j',
)
for /f %%i in (%tal%) do (
  set langs=!langs!'%%i',
)
for /f "tokens=1* delims=" %%i in (%tab%) do (
  set blocked=!blocked!'%%i',
)
set codes=!codes:~0,-1!
set names=!names:~0,-1!
set langs=!langs:~0,-1!
set blocked=!blocked:~0,-1!
echo delete from Branding where ProductID not in (!codes!);
echo delete from DependencyData where PayloadID not in (!codes!);
echo delete from DependencyData where product_name not in ('',!names!);
echo update DependencyData set type = 'recommended' where type not in ('conflict','upgrade','langPack') and product_name not in (!blocked!);
echo delete from EULA_Files where productID not in (!codes!);
echo delete from EULA_Files where langCode not in (!langs!);
echo delete from PayloadData where PayloadID not in (!codes!);
echo delete from Payloads where PayloadID not in (!codes!);
echo delete from SuitePayloads where PayloadID not in (!codes!);
exit /b

:PatchRootMediaDb
echo == remove payloads
echo .read %taq% | %sqlite% %mdb%

echo == dump table "PayloadData"
echo .dump PayloadData | %sqlite% %mdb% > adobePayloadData.txt

echo == pause for edit "adobePayloadData.txt" [press enter]
pause >> nul

echo == replace table "PayloadData"
echo drop table PayloadData; | %sqlite% %mdb%
echo .read adobePayloadData.txt | %sqlite% %mdb%

echo == reduce size %mdb%
echo .output dump.txt> tmp.txt
echo .dump>> tmp.txt
if exist dump.txt del /q dump.txt
echo .read tmp.txt | %sqlite% %mdb%
del /q %mdb%
echo .read dump.txt> tmp.txt
echo .backup %mdb%>> tmp.txt
echo .read tmp.txt | %sqlite%
del /q dump.txt
del /q tmp.txt
exit /b
