morphbr@723: #!/usr/bin/env python
morphbr@723: 
morphbr@723: __author__ = "Artur Duque de Souza"
morphbr@723: __author_email__ = "artur.souza@indt.org.br"
morphbr@723: __license__ = "GPL"
morphbr@723: __version__ = "0.1"
morphbr@723: 
morphbr@723: import os
morphbr@727: import sys
morphbr@723: import pickle
morphbr@775: import logging
morphbr@723: import lib.utils as utils
morphbr@723: 
morphbr@723: from stat import *
morphbr@723: 
morphbr@723: __all__ = ("FileList", "list_media_files")
morphbr@723: 
morphbr@723: 
morphbr@723: class TranscodedFile(object):
morphbr@723:     """This class creates and reads information about transcoded files."""
morphbr@723:     opts = {}
morphbr@775:     log = logging.getLogger("gms.file_handler")
morphbr@723: 
morphbr@723:     def __init__(self, filename, args):
morphbr@723:         if filename == "" or not os.path.exists(filename):
morphbr@723:             self.opts = args.copy()
morphbr@723: 
morphbr@726:             if self.opts["type"][0] != "myth":
morphbr@727:                 self.opts["original_mtime"] = os.path.getmtime(
morphbr@727:                     self.opts["uri"][0])
morphbr@726: 
morphbr@726:             name = os.path.basename(self.opts["uri"][0])
morphbr@776:             self.opts["original"] = [name]
morphbr@727:             output_file = os.path.basename(self.opts["outfile"][0])
morphbr@726:             output = open(".transcoded/%s.dat" % \
morphbr@727:                           os.path.splitext(output_file)[0], "wb")
morphbr@723:             # dumps data using the highest protocol
morphbr@723:             pickle.dump(self.opts, output, -1)
morphbr@723:             output.close()
morphbr@723:         else:
morphbr@775:             name = os.path.splitext(os.path.basename(filename))[0]
morphbr@723:             pkl_file = open(".transcoded/%s.dat" % name, "rb")
morphbr@723:             self.opts = pickle.load(pkl_file)
morphbr@723:     # __init__()
morphbr@723: 
morphbr@723: # TranscodedFile
morphbr@723: 
morphbr@723: 
morphbr@723: class FileList(list):
morphbr@723:     """Class to hold file's list - reimplements str and repr."""
morphbr@723:     def __str__(self):
morphbr@723:         ret = ""
morphbr@723:         if len(self) > 0:
morphbr@723:             for item in self:
morphbr@731:                 ret = ret + "%s" % item
morphbr@723:         return ret
morphbr@723:     # __str__()
morphbr@723: 
morphbr@723:     def __repr__(self):
morphbr@723:         return self.__str__()
morphbr@723:     # __repr__()
morphbr@723: 
morphbr@723: # FileList
morphbr@723: 
morphbr@723: def list_media_files(directory, file_list):
morphbr@723:     """Show all the media files with extension defined in the var 'ext'
morphbr@723:     that are in the directory, appending each one to 'file_list'."""
morphbr@723:     ext = ['mpg', 'avi', 'mp4', 'nuv', 'mpeg', 'mov']
morphbr@723:     for root, dirs, files in os.walk(directory):
morphbr@723:         for name in files:
morphbr@723:             if os.path.splitext(name)[1].strip(".") in ext:
morphbr@727:                 dat_file = os.path.join(sys.path[0],root,
morphbr@727:                                         os.path.splitext(name)[0]+".dat")
morphbr@727: 
morphbr@727:                 if name not in file_list and \
morphbr@727:                        os.path.exists(dat_file):
morphbr@724:                     file_list.append(name)
morphbr@723: 
morphbr@723:     return True
morphbr@723: # list_media_files()