100 lines
3.2 KiB
Python
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()
|