use glob to only find media files when we only want media files

This commit is contained in:
Sundog
2023-08-25 14:51:12 -04:00
parent 3e38c98c3b
commit f9e10ecb76
2 changed files with 75 additions and 3 deletions

View File

@ -1,6 +1,8 @@
import argparse
import datetime
from glob import glob
import json
from listdict import ListDict
import os
# globals
@ -11,9 +13,11 @@ verbose = False
from_date = datetime.date.today()
to_date = datetime.date.today()
playlist_duration = 6 * 60 * 60 # six hours, in seconds
mediadirs = ListDict()
def main():
parse_config()
get_media_dirs(mediadir)
for single_date in daterange(from_date, to_date):
if verbose:
print("Processing date", single_date)
@ -69,6 +73,19 @@ def parse_config():
print("from_date:", from_date)
print("to_date:", to_date)
def get_media_dirs(rootdir):
for file in os.listdir(rootdir):
if file == "Commercials":
pass
elif file == "Television":
get_media_dirs(os.path.join(rootdir, file))
else:
d = os.path.join(rootdir, file)
if os.path.isdir(d):
if verbose:
print("adding " + d + " to media dirs")
mediadirs.add_item(d)
def build_day(this_date):
d = {} # empty dict that will become our JSON output
@ -77,11 +94,14 @@ def build_day(this_date):
d["program"] = [] # empty list to populate with programs
total_time = 0
get_commercial = False
while total_time < playlist_duration:
entry, length = get_playlist_entry()
entry, length = get_playlist_entry(get_commercial)
d["program"].append(entry)
total_time += length
if length > 0:
get_commercial = not get_commercial
if verbose:
print(' added program:', json.dumps(entry), length)
@ -93,14 +113,34 @@ def build_day(this_date):
return playlist
def get_playlist_entry():
def get_playlist_entry(get_commercial):
exts = ['*.mp4', '*.webm', '*.mov']
entry_dir = mediadir + '/Commercials' if get_commercial else mediadirs.choose_random_item()
media_files = ListDict()
found_media = [f for ext in exts
for f in glob(os.path.join(entry_dir, '**', ext), recursive=True)]
for d in found_media:
media_files.add_item(d)
this_file = media_files.choose_random_item() if media_files.length() > 0 else ""
if this_file == "":
return "", 0 # get out of this oopsie situation and try again
# TODO: ffprobe file for duration
entry = {
"in": 0,
"out": 300,
"duration": 300,
"source": "test.mp4"
"source": this_file
}
if get_commercial:
entry["category"] = "advertisement"
length = entry["duration"]
return entry, length