#!/usr/bin/python
# -*- coding: utf-8 -*-
# Tercer script Python.
# Fede Diaz (nordri) Mayo 2008
# Este script recorre el disco externo y genera un listado de las peliculas
# en HTML con enlaces a film affinity.

# 01-07-08 Las novedades se marcan en negrita.

import os
import avisoPorEmail

# Eliminamos la extension al nombre del archivo
def formateaNombrePeli(n):
t = n.split(".avi")
return t[0]

# Esta función recibe una ruta y la explora clonando el contenido.
def listado(path):
try:
for fichero in os.listdir(path):
fname = os.path.join(path, fichero)
if os.path.isdir(fname):
os.makedirs(pathOld + fname) # crea directorio y padres
listado(fname)
else:
file = open(pathOld + fname, "w")
file.close()
except OSError, e:
print e

# Esta función crea listas con el contenido del árbol de directorio.
def listadoCompletoPelis(path, i):
try:
for fichero in os.listdir(path):
fname = os.path.join(path, fichero)
if os.path.isdir(fname):
i.append(fichero)
listadoCompletoPelis(fname, i)
else:
i.append(fichero)
return i
except OSError, e:
print e

def listadoNovedades(a, b):
i = []
for peli in a:
if not peli in b:
i.append(peli)
return i

path = "/tmp/mnt/backup/pelis"
pathOld = "/home/nordri/bin/var"
listadoPelis = open("/tmp/listado.html", "w")

# Escribimos en el fichero la cabezera HTML
listadoPelis.write("<html><head><title>El Listado de Peliculas</title>"\
"</head><body bgcolor=\"#efefef\" text=\"black\" " \
"link=\"blue\" vlink=\"#551A8B\" alink=\"red\">")

# Creamos la lista de generos y los ordenamos
generos = os.listdir(path)
generos.sort()

# Creamos dos listas, una con la sesión anterior, otra con la actual, les
# hacemos la intersección y nos quedamos con las novedades.
sesionActual = listadoCompletoPelis(path, [])
sesionPasada = listadoCompletoPelis(pathOld, [])
novedades = listadoNovedades(sesionActual, sesionPasada)

# En generos tenemos la lista de generos, luego, por cada uno recorremos los
# archivos y los metemos en pelis. De igual forma, por cada peli la formateamos
# (le quitamos la extensión) y la añadimos a la lista.
# Se hace una discriminación para evitar archivos de subtitulo y añadir algun
# subdirectorio (de Series y Documentales)
for nombreGenero in generos:
listadoPelis.write("<p><b>Peliculas del genero: " + nombreGenero + "</b></p><ol>")
pelis = os.listdir(path + "/" + nombreGenero)
pelis.sort()
for nombrePeli in pelis:
if nombrePeli.endswith("avi") or os.path.isdir(path + "/" + nombreGenero + "/" + nombrePeli):
if nombrePeli in novedades:
nombrePeliFormato = formateaNombrePeli(nombrePeli)
listadoPelis.write("<li><b><a href=\"http://www.filmaffinity.com/es/" \
"search.php?stext=" + nombrePeliFormato + \
"&stype%5B%5D=title&genre=&country=&fromyear=&" \
"toyear=\">" + nombrePeliFormato + "</a></b>" \
"<font color=\"red\"><blink> Novedad</blink></font></li>")
else:
nombrePeliFormato = formateaNombrePeli(nombrePeli)
listadoPelis.write("<li><a href=\"http://www.filmaffinity.com/es/" \
"search.php?stext=" + nombrePeliFormato + \
"&stype%5B%5D=title&genre=&country=&fromyear=&" \
"toyear=\">" + nombrePeliFormato + "</a></li>")
listadoPelis.write("</ol>")

# Cerramos la página HTML
listadoPelis.write("</body></html>")

# Cerramos el fichero
listadoPelis.close()

# Avisamos a la peña con las nuevas pelis
dires = [ direcciones en una lista ]
avisoPorEmail.mail('/tmp/listado.html', "Listado de peliculas", dires, 'html')

# Regeneramos el arbol con el contenido actual del disco.
# Creamos la raiz del objetivo
os.system('rm -r ' + pathOld)
if not os.path.exists(pathOld): os.makedirs(pathOld)
if not os.path.exists(pathOld + path): os.makedirs(pathOld + path)
listado(path)