EmuDeck/tools/scrapers/screenscraper.sh
Dragoon Dorise 00a8f1c19c
New paths (#1381)
* new paths

* /

* EmuDeck/

* mv

* no &

* ESDE new location

* ESDE new path

* no symlink load

* bigpemu new path

* force move

* global vars

* oopsie

* missing $emudeckBackend

* better migration detection

* Keep Appimages in Applications

* Keep Appimages in Applications
2025-01-02 13:42:31 +01:00

379 lines
7 KiB
Bash

#!/bin/bash
. "$HOME/.config/EmuDeck/backend/functions/all.sh"
NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'
BLINK='\x1b[5m'
if [ ! -f "$emudeckFolder/.userSS" ]; then
user=$(zenity --entry --title="ScreenScrapper" --text="User:")
password=$(zenity --password --title="ScreenScrapper" --text="Password:")
encryption_key=$(openssl rand -base64 32)
encrypted_password=$(echo "$password" | openssl enc -aes-256-cbc -pbkdf2 -base64 -pass "pass:$encryption_key")
echo "$encryption_key" > "$emudeckLogs/.key"
echo "$encrypted_password" > "$emudeckFolder/.passSS"
echo "$user" > "$emudeckFolder/.userSS"
fi
romParser_SS_get_url(){
local romName=$1
local system=$2
local type=$3
local userSS=$(cat "$emudeckFolder/.userSS")
local encryption_key=$(cat "$emudeckLogs/.key")
local encrypted_password=$(cat "$emudeckFolder/.passSS")
local decrypted_password=$(echo "$encrypted_password" | openssl enc -d -aes-256-cbc -pbkdf2 -base64 -pass "pass:$encryption_key")
local passSS=$decrypted_password
rom_clean=$(echo "$romName" | sed 's/([^)]*)//g; s/\[[^]]*\]//g')
rom_clean=$(echo "$rom_clean" | tr ' ' '_')
rom_clean="${rom_clean%.*}"
FILE=$romsPath/$system/media/$type/$romName.png
if [ ! -f "$FILE" ]; then
urlIDSS="https://www.screenscraper.fr/api2/jeuInfos.php?devid=djrodtc&devpassword=diFay35WElL&softname=zzz&output=json&ssid=${userSS}&sspassword=${passSS}&crc=&systemeid=${ssID}&romtype=rom&romnom=${rom_clean}"
#echo $urlIDSS
#Cleaning URL
urlIDSS=$(echo "$urlIDSS" | sed 's/ /%20/g')
#ID Game
content=$(curl -s $urlIDSS)
if [ $type = 'screenshots' ]; then
echo "$content" | jq -r '.response.jeu.medias[] | select(.type == "ss") | .url' | head -n 1
elif [ $type = 'wheel' ]; then
echo "$content" | jq -r '.response.jeu.medias[] | select(.type == "wheel") | .url' | head -n 1
elif [ $type = 'box2dfront' ]; then
echo "$content" | jq -r '.response.jeu.medias[] | select(.type == "box-2D") | .url' | head -n 1
fi
fi
}
romParser_SS_getAlias(){
#SS ID systems
case $1 in
genesis)
ssID="1";;
genesiswide)
ssID="1";;
mastersystem)
ssID="2";;
nes)
ssID="3";;
snes)
ssID="4";;
gb)
ssID="9";;
gbc)
ssID="10";;
virtualboy)
ssID="11";;
gba)
ssID="12";;
gc)
ssID="13";;
n64)
ssID="14";;
nds)
ssID="15";;
wii)
ssID="16";;
3ds)
ssID="17";;
sega32x)
ssID="19";;
segacd)
ssID="20";;
gamegear)
ssID="21";;
saturn)
ssID="22";;
dreamcast)
ssID="23";;
ngp)
ssID="25";;
atari2600)
ssID="26";;
atarijaguar)
ssID="27";;
atarijaguarcd)
ssID="27";;
lynx)
ssID="28";;
3do)
ssID="29";;
pcengine)
ssID="31";;
bbcmicro)
ssID="37";;
atari5200)
ssID="40";;
atari7800)
ssID="41";;
atarist)
ssID="42";;
atari800)
ssID="43";;
wonderswan)
ssID="45";;
wonderswancolor)
ssID="46";;
colecovision)
ssID="48";;
pcengine)
ssID="50";;
gw)
ssID="52";;
psx)
ssID="57";;
ps2)
ssID="58";;
psp)
ssID="61";;
amiga600)
ssID="64";;
amstradcpc)
ssID="65";;
c64)
ssID="66";;
scv)
ssID="67";;
neogeocd)
ssID="70";;
pcfx)
ssID="72";;
vic20)
ssID="73";;
zxspectrum)
ssID="76";;
zx81)
ssID="77";;
x68000)
ssID="79";;
channelf)
ssID="80";;
ngpc)
ssID="82";;
apple2)
ssID="86";;
gx4000)
ssID="87";;
dragon)
ssID="91";;
bk)
ssID="93";;
vectrex)
ssID="102";;
supergrafx)
ssID="105";;
fds)
ssID="106";;
satellaview)
ssID="107";;
sufami)
ssID="108";;
sg1000)
ssID="109";;
amiga1200)
ssID="111";;
msx)
ssID="113";;
pcenginecd)
ssID="114";;
intellivision)
ssID="115";;
msx2)
ssID="116";;
msxturbor)
ssID="118";;
64dd)
ssID="122";;
scummvm)
ssID="123";;
gb)
ssID="127";;
gb)
ssID="128";;
amigacdtv)
ssID="129";;
amigacd32)
ssID="130";;
oricatmos)
ssID="131";;
amiga)
ssID="134";;
dos)
ssID="135";;
prboom)
ssID="135";;
amigacd32)
ssID="139";;
thomson)
ssID="141";;
neogeo)
ssID="142";;
psp)
ssID="172";;
snes)
ssID="202";;
sneswide)
ssID="202";;
megadrive)
ssID="203";;
ti994a)
ssID="205";;
lutro)
ssID="206";;
supervision)
ssID="207";;
pc98)
ssID="208";;
pokemini)
ssID="211";;
samcoupe)
ssID="213";;
openbor)
ssID="214";;
uzebox)
ssID="216";;
apple2gs)
ssID="217";;
spectravideo)
ssID="218";;
palm)
ssID="219";;
x1)
ssID="220";;
pc88)
ssID="221";;
tic80)
ssID="222";;
solarus)
ssID="223";;
mame)
ssID="230";;
easyrpg)
ssID="231";;
pico8)
ssID="234";;
pcv2)
ssID="237";;
pet)
ssID="240";;
lowresnx)
ssID="244";;
*)
echo -n "unknown"
;;
esac
}
romParser_SS_download(){
local games=$1
local platform=$2
local type=$3
for game in $games; do
#We bring back the spaces
game=${game//_/ }
file_to_check="$romsPath/$platform/media/$type/${game}.png"
#echo $file_to_check
if ! ls "$file_to_check" 1> /dev/null 2>&1; then
#if ! ls $file_to_check 1> /dev/null 2>&1 && [ -z "${processed_games[$game]}" ]; then
#romParser_SS_get_url "$game" $platform $type
game_screenshot_url=$(romParser_SS_get_url "$game" $platform $type)
if [[ "$game_screenshot_url" == *"screenscraper"* ]]; then
echo -e ${GREEN}"$game added to batch"${NONE}
download_array+=("$game_screenshot_url")
download_dest_paths+=("$file_to_check")
processed_games[$game]=1
if [ ${#download_array[@]} -ge 10 ]; then
echo ""
echo "Start batch $platform $type"
for i in "${!download_array[@]}"; do
{
curl -s -o "${download_dest_paths[$i]}" "${download_array[$i]}" > /dev/null 2>&1
} &
done
wait
# Clear the arrays for the next batch
download_array=()
download_dest_paths=()
echo "Completed batch"
echo ""
fi
else
echo -e ${RED}"$game not found"${NONE}
fi
else
echo -e ${CYAN}"$game already scraped"${NONE}
fi
done
}
romParser_SS_start(){
#generateGameLists
echo -e "${BOLD}Starting ScreenScraper Thumbnails Scraper...${NONE}"
python $emudeckBackend/tools/generate_game_lists.py "$romsPath"
json=$(cat "$emudeckFolder/cache/roms_games.json")
platforms=$(echo "$json" | jq -r '.[].id')
declare -A processed_games
for platform in $platforms; do
echo -e ${YELLOW}"Processing platform: $platform"${NONE}
games=$(echo "$json" | jq -r --arg platform "$platform" '.[] | select(.id == $platform) | .games[]?.file')
declare -a download_array
declare -a download_dest_paths
romParser_SS_getAlias $platform
#screenshots
romParser_SS_download "$games" "$platform" "screenshots"
romParser_SS_download "$games" "$platform" "box2dfront"
romParser_SS_download "$games" "$platform" "wheel"
#Wheel
done
#Missing files
for i in "${!download_array[@]}"; do
{
echo ${download_array[$i]}
curl -s -o "${download_dest_paths[$i]}" "${download_array[$i]}" > /dev/null 2>&1
} &
done
echo -e "${GREEN}ScreenScrapper Parser completed!${NONE}"
}
clear
#
romParser_SS_start