Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue #1208 #1213

Open
wants to merge 3 commits into
base: dev
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions functions/ToolScripts/emuDeckM3U.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
#!/bin/bash
#based in https://gist.github.com/ibackz/b959df705ed071852146510714f970d7

EmuDeckM3U(){
local system=$1
# A variable to store all M3U files to be created
declare -A m3u_files

# Iterate through all directories in the current location
for dir in $romsPath/$system; do
# Skip if not a directory
[ -d "$dir" ] || continue

# Change into the directory
cd "$dir"

# Iterate through all files in the directory
for file in *; do
# Check if the file contains the pattern '(Disc {digit})', skip if not
if [[ ! $file =~ \(Disc\ [0-9]+\).* ]]; then
continue
fi

# Extract the base filename by removing everything from the pattern '(Disc {digit})' onward
base_name="${file%% (Disc [0-9]*).*}"

# Skip if the M3U file already exists
if [ -f "$base_name.m3u" ]; then
continue
fi

# Append the file to the list associated with its base name
m3u_files["$base_name"]+="$base_name/$file"$'\n'

done

# Change back to the parent directory
cd ..
done

# Check if there are any M3U files to be created
if [ ${#m3u_files[@]} -eq 0 ]; then
text="$(printf "<b>No M3U files to be created.</b>\nMake sure your files are named\n<b>Game (Disc X)</b> with no spaces in (Disc X)")"
zenity --error \
--title="EmuDeck M3U tool" \
--width=250 \
--ok-label="Bye" \
--text="${text}" 2>/dev/null
exit
fi

# List all M3U files to be created

concatenated=""
for base_name in "${!m3u_files[@]}"; do
concatenated+="$base_name.m3u "
done
concatenated="${concatenated% }"

# Provide a rough estimate for time needed
#echo "Estimated time to complete: ${#m3u_files[@]} seconds."

# Ask the user for confirmation
text="$(printf "Lists to be created: $concatenated")"
zenity --question \
--title="Would you like to create the playlists?" \
--width=450 \
--cancel-label="Exit" \
--ok-label="Continue" \
--text="${text}" 2>/dev/null
ans=$?
if [ $ans -eq 0 ]; then
echo "Continue..."
else
exit
fi

for dir in $romsPath/$system; do
# Skip if not a directory
[ -d "$dir" ] || continue

# Change into the directory
cd "$dir"

# Iterate through all files in the directory
for file in *; do
# Check if the file contains the pattern '(Disc {digit})', skip if not
if [[ ! $file =~ \(Disc\ [0-9]+\).* ]]; then
continue
fi

# Extract the base filename by removing everything from the pattern '(Disc {digit})' onward
base_name="${file%% (Disc [0-9]*).*}"

#We move the files in its own subfolders
mkdir -p $base_name
mv "$file" "$base_name/$file"
done

# Change back to the parent directory
cd ..
done


# Iterate through the base filenames and create .m3u files for each
for dir in */; do
# Skip if not a directory
[ -d "$dir" ] || continue

# Change into the directory
cd "$dir"

for base_name in "${!m3u_files[@]}"; do
# Get the files for this base name
files="${m3u_files["$base_name"]}"

# Define the M3U file path
m3u_file="$base_name.m3u"

# Create an .m3u file
echo -e "$files" > "$m3u_file"

echo "Created $m3u_file"

done

# Change back to the parent directory
cd ..

done

zenity --info \
--text="Lists created, old files moved to new subfolders" \
--title="EmuDeck M3U Tool" \
--width=400 \
--height=300

# Close the window (this might be OS-dependent)
exit
}
Loading