Exemple #1
0
    def PlayingVideoType(self):
	#import pdb; pdb.set_trace()
	registry = getUtility(IRegistry)
	settings = registry.forInterface(ITranscodeSetings)
	self.SERVER = self.RemoveSlash(settings.adress_of_streaming_server)
	VIDEO_PARAMETRES_TRANSCODE = settings.ffmpeg_parameters_video_line
	AUDIO_PARAMETRES_TRANSCODE = settings.ffmpeg_parameters_audio_line
	audio_content_types=settings.audio_valid_content_types
	video_content_types=settings.video_valid_content_types
	portal = getSite()
	self.STORAGE=ZCONFIG.storagePathForSite(portal)
	self.MyTitle = self.context.Title()
	idvideo=self.context.getId()
	self.MyTitleWhitOutSpace = MFNI.DeleteSpaceinNameOfFolderFile(MFNI.TitleDeleteSpace(self.MyTitle))
	self.PathOfFile = self.context._getURL()
	virtualobject=self.context.getVideo()
	self.filenamesaved=virtualobject.filename
	self.extension=MTDI.CheckExtension(self.filenamesaved)
	if self.extension=="ogg" or self.extension=="ogv" or self.extension=="OGG" or self.extension=="OGV":
	    self.folderfileOGG=path.join(self.PathOfFile,quote(self.filenamesaved))
	    self.prefiletranscoded=path.join(self.STORAGE,self.PathOfFile,self.filenamesaved)
	    if path.isfile(self.prefiletranscoded)==True:
		self.StatusOfFile=ServiceList.available(idvideo,self.prefiletranscoded)
		if self.StatusOfFile == False:
		    ServiceList.AddReadyElement(idvideo,self.prefiletranscoded)
		    self.StatusOfFile=True
		    ServiceList.SaveInZODB()
		    self.AbsoluteServerPath = path.join(self.SERVER,self.folderfileOGG)
		else:
		    self.AbsoluteServerPath = path.join(self.SERVER,self.folderfileOGG)
	    else:
		print _("File not found "+self.prefiletranscoded)
		self.Error=True
		self.ErrorSituation()
	else:
	    newtrans_init_(self.STORAGE,
			   self.PathOfFile,
			   self.filenamesaved,
			   idvideo,
			   VIDEO_PARAMETRES_TRANSCODE,
			   AUDIO_PARAMETRES_TRANSCODE,
			   audio_content_types,
			   video_content_types)
	    self.folderfileOGG=MTDI.newname(path.join(self.PathOfFile,self.filenamesaved))
	    self.AbsoluteServerPath = path.join(self.SERVER,MTDI.nginxpath(self.folderfileOGG))
	    self.newfiletranscoded=MTDI.nginxpath(path.join(self.STORAGE,self.folderfileOGG))
	    self.StatusOfFile = ServiceList.available(idvideo,self.newfiletranscoded)
	    #import pdb;pdb.set_trace()
	    if self.StatusOfFile == True:
		self.newfilename=MTDI.newname(self.filenamesaved)
	    else:
		self.newfilename=_('The file is not ready yet, please contact site administration')
	return
def RenameObject(object, evt, STORAGE):
    #pdb.set_trace()
    file_object=object.getField(object.portal_type)
    name_original_file=file_object.getFilename(object)
    original_path=path.join(STORAGE,evt.oldParent._getURL(), evt.oldName)
    extension=MTD.CheckExtension(name_original_file)
    path_of_original_object=path.join(original_path,name_original_file)
    original_trascoded_file=MTD.nginxpath(path_of_original_object)
    if evt.oldParent is evt.newParent:
        destination_path=path.join(STORAGE,evt.oldParent._getURL(),evt.newName)
    else:
        destination_path=path.join(STORAGE,evt.newParent._getURL(),evt.newName)
    moved_object=path.join(destination_path, name_original_file)
    moved_transcode_object=path.join(destination_path,MTD.nginxpath(name_original_file))
    #pdb.set_trace()
    if extension is 'ogg' or extension is 'OGG' or extension is 'ogv' or extension is 'OGV':
        return
    else:
        #pdb.set_trace()
        if ServiceList.root['waiting'] is not None:
            #El elemento esta en lista de espera para ser codificado
            if {evt.oldName:path_of_original_object} in ServiceList.root['waiting']:
                ServiceList.root['waiting'].remove({evt.oldName:path_of_original_object})
                ServiceList.root['waiting'].append({evt.newName:moved_object})
                ServiceList.SaveInZODB()
        elif ServiceList.root['ready'] is not None:
            if {evt.oldName:original_trascoded_file} in ServiceList.root['ready']:
                #El elemento fue recodificado
                ServiceList.root['ready'].remove({evt.oldName:original_trascoded_file})
                if path.isfile(original_trascoded_file)==True and path.isdir(destination_path)==True:
                    move(original_trascoded_file,destination_path)
                    ServiceList.root['ready'].append({evt.newName:moved_transcode_object})
                    ServiceList.SaveInZODB()
                else:
                    return
        elif path_of_original_object==ServiceList.root['current'] and isThisRunning('/usr/bin/ffmpeg -i '+path_of_original_object):
            # El elemento esta siendo codificado
            print "El archivo actual esta siendo codificado"
            system('/usr/bin/killall ffmpeg')
            if path.isdir(original_path)==True:
                if path.isfile(original_trascoded_file)==True:
                    sleep(3)
                    remove(trascoded_file)
                    ServiceList.root['ready'].remove({object.id:original_trascoded_file})
                    ServiceList.root['waiting'].append({object.id:moved_object})
                    ServiceList.root['current']=""
                    ServiceList.SaveInZODB()
                else:
                    return
        else:
            return
def ModifiedElement(object, evt):
    request = getattr(object, "REQUEST", None)
    try:
        integrity_info = request.link_integrity_info
        if integrity_info.has_key("deleted") == True:
            return
        else:
            pass
    except AttributeError:
        pass
    portal = getSite()
    portal_path = "/".join(portal.getPhysicalPath())
    STORAGE = ZCONFIG.storagePathForSite(portal)
    # pdb.set_trace()
    file_object = object.getField(object.portal_type)
    name_original_file = file_object.getFilename(object)
    original_path = path.join(STORAGE, evt.object._getURL())
    # pdb.set_trace()
    for file_name in listdir(original_path):
        # pdb.set_trace()
        if (
            (file_name == name_original_file)
            or (file_name == "fss.cfg")
            or (file_name == MTD.nginxpath(name_original_file))
        ):
            pass
        else:
            remove(path.join(original_path, file_name))
    return
def Custom_CopyObjet(object, evt):
    #TODO
    #pdb.set_trace()
    request=getattr(evt.original, 'REQUEST', None)
    portal = getSite()
    portal_path = '/'.join(portal.getPhysicalPath())
    STORAGE=ZCONFIG.storagePathForSite(portal)
    destination_path=path.join(STORAGE,request['PARENTS'][0]._getURL(),evt.object.tpURL())
    original_path=path.join(STORAGE,evt.original._getURL())
    
    """
    while path.isdir(destination_path)==False:
        if path.isdir(destination_path)==False:
            pass
        else:
    """
    file_object=evt.original.getField(evt.original.portal_type)
    file_name=file_object.getFilename(evt.original)
    path_of_original_object=path.join(original_path, file_name)
    extension=MTD.CheckExtension(file_name)
    copy_object=path.join(destination_path, MTD.nginxpath(file_name))
    #pdb.set_trace()
    if extension is 'ogg' or extension is 'OGG'\
    or extension is 'ogv' or extension is 'OGV':
        return
    else:
        #pdb.set_trace()
        if ServiceList.root['waiting'] is not None:
            #El elemento esta en lista de espera para ser codificado
            if {object.id:path_of_original_object} in ServiceList.root['waiting']:
                ServiceList.root['waiting'].append({object.id:copy_object})
                ServiceList.SaveInZODB()
        #pdb.set_trace()
        elif ServiceList.root['ready'] is not None:
            original_trascoded_file=MTD.nginxpath(path_of_original_object)
            
            if {object.id:original_trascoded_file} in ServiceList.root['ready']:
                #El elemento fue recodificado
                pdb.set_trace()
                if path.isdir(destination_path)==False:
                    mkdir(destination_path)
                    copy(original_trascoded_file,copy_object)
                    ServiceList.root['ready'].append({object.id:copy_object})
                    ServiceList.SaveInZODB()
                else:
                    pdb.set_trace()
                    if path.isfile(original_trascoded_file)==True:
                        copy(original_trascoded_file,copy_object)
                        ServiceList.root['ready'].append({object.id:copy_object})
                        ServiceList.SaveInZODB()
        #pdb.set_trace()
        elif path_of_original_object==ServiceList.root['current'] and isThisRunning('/usr/bin/ffmpeg -i '+path_of_original_object):
            # El elemento esta siendo codificado
            print "El archivo actual esta siendo codificado"
            system('/usr/bin/killall ffmpeg')
            if path.isdir(original_path)==True:
                if path.isfile(original_trascoded_file)==True:
                    sleep(3)
                    remove(trascoded_file)
                    ServiceList.root['ready'].remove({ElementID:original_trascoded_file})
                    ServiceList.root['waiting'].append({object.id:copy_object})
                    ServiceList.root['current']=""
                    ServiceList.SaveInZODB()
        else:
            return
def type_custom_delete(object, evt):
    request = getattr(object, 'REQUEST', None)
    registry = getUtility(IRegistry)
    settings = registry.forInterface(ITranscodeSetings)
    """
    self.SERVER = self.RemoveSlash(settings.adress_of_streaming_server)
    Probablemente no sea usado
    """
    STORAGE = RemoveSlash(settings.mount_point_fss)
    try:
        name_original_file=object._v_fss_props[object.Type()].title
    except KeyError:
        name_original_file=object._v_fss_props[object.portal_type].title
    extension=MTD.CheckExtension(name_original_file)
    folderpath=RemoveSlashIfNecesary(urlparse(object.absolute_url())[2])
    path_of_object=path.join(STORAGE,folderpath,name_original_file)
    path_of_dir=path.join(STORAGE,folderpath)
    extension=MTD.CheckExtension(name_original_file)
    trascoded_file=MTD.nginxpath(path_of_object)
    realDelete = False
    ElementID=object.id
    """
    existe un caso distinto para request cuando es una copia
    """
    if request.has_key('form.submitted')==True and request.has_key('REQUEST_METHOD')==True \
    and request.has_key('form.button.Cancel')==False:
        if request['REQUEST_METHOD']=='POST':
            """
            Se ejecuta dos veces
            """
            RemoveObjectsFromHDD(extension, path_of_dir, path_of_object, trascoded_file, ElementID)
    elif request.has_key('form.submitted')==False and request.has_key('form.request')==False \
    and request.has_key('selected_obj_paths')== False and request.has_key('paths')==False and \
    request.has_key('-C')==True:
        return
    if request.has_key('form.submitted')==True and request.has_key('form.button.Cancel')==True:
        print "se cancelo el borrado del elemento"
        return
    if request.has_key('selected_obj_paths')==True and request.has_key('paths')==True:
        RemoveObjectsFromHDD(extension, path_of_dir, path_of_object, trascoded_file, ElementID)
        return
    if request.has_key('manage_delObjects')==True and request.has_key('ids'):
        """
        Borrar los archivos de file system storage
        """
        print "Borrado del sitio"
    """
    if self.request.form.has_key('form.button.Cancel'):
            import pdb; pdb.set_trace()
            
            Obtener el id y la url absoluta,
            de convert extraer al metodo newfilename para poder obtener el path
            del archivo transcodificado. Verificar si existe. Si el archivo existe
            pero es igual al nombre del objeto recibido, entonces el archivo no lo
            creo ffmpeg si no que fue precargado en ese formato y no hacemos nada.
            De lo contrario el archivo es creado por ffmpeg y procedemos a borrarlo y
            removerlo de la lista de la lista de archivos transcodificados.
            return request.RESPONSE.redirect('www.google.com') 
            parent=self.context.aq_parent
            absolutepath= self.STORAGE + self.PathOfFile + self.filenamesaved
            idfile=self.context.getId
            first_object={idfile:absolutepath}
            second_object={idfile:self.newfiletranscoded}
            if first_object in ServiceList['waiting']:
                ServiceList['waiting'].remove(first_object)
                parent.manage_delObjects(self.context.getId)
            if second_object in ServiceList['ready']:
                parent.manage_delObjects(self.context.gedId)
                ServiceList['ready'].remove(second_object)
                try:
                    os.remove(self.newfiletranscoded)
                except os.error:
                    print "We have a exception deleting the file %s" % (self.newfiletranscoded, )
            ServiceList.SaveInZODB()
    """
    return