KaruMediaServer/web/update-dirs.py

100 lines
3.2 KiB
Python

#!/usr/bin/env python3
import os
import re
import json
import logging
from pprint import pprint
from logging import info, debug, warning
logging.basicConfig(level=logging.INFO)
movie_dir = "/media/kraam/Videod/Filmid"
def get_list_of_genres():
genres = {}
for movie in os.listdir(movie_dir+"/Nimed"):
try:
metadata = json.loads(open(movie_dir+"/Nimed/"+movie+"/metadata.json").read())
for genre in metadata["genres"]:
try:
genres[genre].append(movie)
except:
genres[genre] = [movie]
except Exception as e:
info("bad metadata {} {}".format(movie, str(e)))
return genres
def create_genre_dirs_and_movie_symlinks(genres):
for genre, movies in genres.items():
try:
os.mkdir(movie_dir+"/Zanrid/"+genre)
except OSError as e:
debug("{} dir exists {}".format(genre, str(e)))
for movie in movies:
try:
os.symlink(movie_dir+"/Nimed/"+movie,
movie_dir+"/Zanrid/"+genre+"/"+movie)
except Exception as e:
pass
debug("error while symlinking {}".format(str(e)))
def sort_movies_by_year():
for movie_full in os.listdir(movie_dir+"/Nimed"):
try:
movie, year = re.search("(.*)\((\d{4})\)", movie_full).groups()
except:
continue
try:
os.symlink(movie_dir+"/Nimed/"+movie_full,
movie_dir+"/Aastad/({}) {}".format(year.strip(), movie.strip()))
except Exception as e:
debug("error while symlinking {}".format(str(e)))
def sort_by_adding_time():
for file_name in os.listdir(movie_dir+"/Viimati lisatud"):
try:
os.unlink(movie_dir+"/Viimati lisatud/"+file_name)
except Exception as e:
debug("unlink failed {}".format(str(e)))
movies_to_sort = []
for movie in os.listdir(movie_dir+"/Nimed"):
movie_files = os.listdir(movie_dir+'/Nimed/'+movie)
sizes = []
for movie_file in movie_files:
sizes.append((os.path.getsize(movie_dir+'/Nimed/'+movie+'/'+movie_file), movie_file))
file_name = sorted(sizes)[-1][1]
stat = os.stat(movie_dir+"/Nimed/"+movie+"/"+file_name)
st_atime = stat.st_atime
st_mtime = stat.st_mtime
st_ctime = stat.st_ctime
#print(st_atime, "\t", st_mtime, "\t", st_ctime)
movies_to_sort.append((int(st_atime), movie))
for index, (atime, movie) in enumerate(sorted(movies_to_sort)[::-1], start=1):
try:
os.symlink(movie_dir+"/Nimed/"+movie,
movie_dir+"/Viimati lisatud/{:03d} - {}".format(index, movie.strip()))
except Exception as e:
debug("error while symlinking {}".format(str(e)))
def main():
info("updating genres folder")
g = get_list_of_genres()
info("creating folders for {} genres and creating movie symlinks".format(len(g)))
create_genre_dirs_and_movie_symlinks(g)
info("sorting movies by year")
sort_movies_by_year()
info("sort by adding time")
sort_by_adding_time()
info("done")
if __name__ == '__main__':
main()