rpiwebapp-public/scripts/func.py

179 lines
5.1 KiB
Python
Raw Normal View History

2019-07-06 23:00:00 -07:00
from comicapi import comicarchive
from blinker import Namespace
from io import BytesIO
from wand.image import Image
import os, sys, re
2019-07-06 23:00:00 -07:00
from scripts import database
rpi_signals = Namespace()
comic_loaded = rpi_signals.signal("comic-loaded")
movie_loaded = rpi_signals.signal("movie-loaded")
2019-07-06 23:00:00 -07:00
publishers_to_ignore = ["***REMOVED***"]
2019-07-06 23:00:00 -07:00
# Directories
RPI_COMICS_DIRECTORY = "/usb/storage/media/Comics/"
RPI_MOVIES_DIRECTORY = "/usb/storage/media/Videos/Movies/"
RPI_TV_SHOWS_DIRECTORY = "/usb/storage/media/Videos/TV/"
RPI_VIDEOS_DIRECTORY = "/usb/storage/media/Videos/Videos/"
RPI_GAMES_DIRECTORY = "/usb/storage/media/games/"
RPI_MUSIC_DIRECTORY = "/usb/storage/media/Music/"
MC_COMICS_DIRECTORY = "C:\\Users\\Matthew\\Documents\\Comics"
COMICS_DIRECTORY = RPI_COMICS_DIRECTORY if os.path.exists(RPI_COMICS_DIRECTORY) else MC_COMICS_DIRECTORY
MOVIES_DIRECTORY = RPI_MOVIES_DIRECTORY
2019-07-06 23:00:00 -07:00
#############
def get_comics():
total_comics = 0
comics_in_db = 0
comics_added = 0
2019-07-06 23:00:00 -07:00
meta = []
thumbnails = []
2019-07-06 23:00:00 -07:00
i = 0
for root, dirs, files in os.walk(COMICS_DIRECTORY):
for f in files:
if "temp" in root:
continue
2019-07-06 23:00:00 -07:00
if f.endswith(".cbr"):
total_comics += 1
2019-07-06 23:00:00 -07:00
path = os.path.join(root, f)
if not database.comic_path_in_db(path):
try:
test_path = path.encode("utf8")
except Exception as e:
print("encoding failed on:", path)
continue
archive = open_comic(path)
md = archive.readCIX()
if md.publisher in publishers_to_ignore:
continue
print(path)
meta.append((path, md))
thumbnails.append(get_comic_thumbnails(archive))
comics_added += 1
2019-07-06 23:00:00 -07:00
i += 1
if i >= 2:
comic_loaded.send("anonymous", meta=meta.copy(), thumbnails=thumbnails.copy())
2019-07-06 23:00:00 -07:00
meta.clear()
thumbnails.clear()
2019-07-06 23:00:00 -07:00
i = 0
comics_in_db += 1
print("total number of comics:", total_comics)
print("comics in database:", comics_in_db)
print("number of comics added:", comics_added)
comic_loaded.send("anonymous", meta=meta, thumbnails=thumbnails)
def get_comic(path):
meta = []
thumbnails = []
if not database.comic_path_in_db(path):
try:
test_path = path.encode("utf8")
except Exception as e:
print("encoding failed on:", path)
return
archive = open_comic(path)
md = archive.readCIX()
if md.publisher in publishers_to_ignore:
return
print(path)
meta.append((path, md))
thumbnails.append(get_comic_thumbnails(archive))
comic_loaded.send("anonymous", meta=meta, thumbnails=thumbnails)
def get_comic_thumbnails(comic):
thumbnails = []
size = "256x256"
new_height = 256
new_width = 256
for page in range(comic.getNumberOfPages()):
image_bytes = BytesIO(comic.getPage(page))
image = Image(file=image_bytes)
orig_height = image.height
orig_width = image.width
if orig_height >= orig_width:
width = int((orig_width/orig_height) * new_height)
height = new_height
else:
height = int((orig_height/orig_width) * new_width)
width = new_width
image.thumbnail(width, height)
thumbnails.append((image.make_blob(), "image/"+image.format))
return thumbnails
def open_comic(path):
archive = comicarchive.ComicArchive(path, default_image_path="static/images/icon.png")
return archive
2019-07-06 23:00:00 -07:00
def get_movies():
print("start load movies")
pattern = r"(.+)( \(....\))(\(extended\))?( Director's Cut)?(\.mkv)"
movies = []
total_movies = 0
movies_in_db = 0
movies_added = 0
for root, dirs, files in os.walk(MOVIES_DIRECTORY):
for f in files:
if f.endswith(".mkv"):
total_movies += 1
path = os.path.join(root, f)
if not database.movie_path_in_db(path):
try:
match = re.fullmatch(pattern, f)
if not match:
print(f, "did not match regex.")
continue
print("movie path:", path)
title = f[:-4].replace(match.group(2), "")
print("movie title:", title)
year = int(match.group(2)[2:-1])
extended = 0
directors_cut = 0
if match.group(3):
extended = 1
imdb_data = database.imdb_get_movie(title.replace(match.group(3), ""), year)
elif match.group(4):
imdb_data = database.imdb_get_movie(title.replace(match.group(4), ""), year)
directors_cut = 1
else:
imdb_data = database.imdb_get_movie(title, year)
if not imdb_data:
print("could not get imdb data")
continue
imdb_id = imdb_data["tconst"]
length = imdb_data["runtimeMinutes"]
tmdb_data = database.tmdb_get_movie_by_imdb_id(imdb_id)
if not tmdb_data:
print("could not get tmdb data")
continue
tmdb_id = tmdb_data[0]
description = tmdb_data[1]
poster_path = tmdb_data[2]
backdrop_path = tmdb_data[3]
movies_added += 1
movies.append((path, imdb_id, tmdb_id, title, year, length, description, extended, directors_cut, poster_path, backdrop_path))
if len(movies) >= 20:
movie_loaded.send("anonymous", movies=movies.copy())
movies.clear()
except Exception as e:
print(e)
movies_in_db += 1
movie_loaded.send("anonymous", movies=movies)
print("finish load movies")
print("total movies:", total_movies)
print("movies in database:", movies_in_db)
print("movies added:", movies_added)