From 01c44dead21298b22367c8817ce660e75c23dd04 Mon Sep 17 00:00:00 2001 From: Tristan Williams Date: Wed, 19 Mar 2025 12:14:25 -0400 Subject: Create sortashuffle.py --- sortashuffle.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 sortashuffle.py (limited to 'sortashuffle.py') diff --git a/sortashuffle.py b/sortashuffle.py new file mode 100644 index 0000000..e15b357 --- /dev/null +++ b/sortashuffle.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +# sortashuffle.py +# Shuffles shows but keeps episodes in order. + +# USAGE +# 1. Modify the TARGET variable below +# 2. Modify the SOURCES variable below +# 3. Run the script as administrator + +import os +import random + +# Playlist destination folder +TARGET = "" + +# Shows to include +# MUST be in format "C://Dir1//Dir2" +SOURCES = ["", + ""] + +def get_episode_list(): + """Get list of episodes for each show in SOURCES.""" + SHOWLIST = [[f for f in os.listdir(source)] for source in SOURCES] + +def get_weight_list(): + """Determine weights (# of episodes) so shows get spread evenly.""" + WEIGHTLIST = [len(show) for show in showlist] + +def shuffle(): + """Shuffle shows, randomly selected according to weight.""" + SHUFFLED = [] + while any(SHOWLIST): + selection = random.choices(range(len(SHOWLIST)), weights=WEIGHTLIST, k=1)[0] + SHUFFLED.append(SOURCES[selection] + "//" + SHOWLIST[selection].pop(0)) + WEIGHTLIST[selection] = len(SHOWLIST[selection]) + +def deploy_symlinks(): + """Deploy a symlink for each episode in the playlist.""" + count = 0 + for episode in SHUFFLED: + os.symlink(episode, TARGET + str(count)) + count += 1 + +def deploy_index(): + """Deploy playlist index file.""" + INDEX = open(TARGET + "//" + "_PLAYLIST_INDEX.txt", 'w') + INDEX.write("\n".join(SHUFFLED)) + INDEX.close() + +def main(): + get_episode_list() + get_weight_list() + shuffle() + deploy_symlinks() + deploy_index() + +if __name__=="__main__": + main() -- cgit v1.2.3