コード例 #1
0
ファイル: web.py プロジェクト: foobarlab/UpStage-Video-Hack
    def success(self, exitcode, swf, thumbnail, form, request):
        """Catch results of the process.  If it seems to have worked,
        register the new thing."""
        if exitcode:
	    #request.write(exitcode)
            return self.failure(exitcode, swf, thumbnail, form, request)

        # if the name is in use, mangle it until it is not.
        #XXX this is not perfect, but
        # a) it is kinder than making the person resubmit, without actually
        #    telling them what a valid name would be.
        # b) it doens't actually matter what the name is.
        #natasha check name
        name = form.get('name', '')
        while self.name_is_used(name):
            name += random.choice('1234567890')
        #Added by Heath, Karena, Corey 26/08/2011 - added to store tags from the form    
        tags = form.get('tags','')
        # if the thumbnail is not working (usually due to an swf file
        # being uploaded, which the img2swf script doesn't know how to
        # thumbnail), detect it now and delete it.
    
        #natasha add to dictionary
        thumbnail_full = os.path.join(config.THUMBNAILS_DIR, thumbnail)
        pin, pipe = os.popen4(('file', '-ib', thumbnail_full))
        mimetype = pipe.read()
        pipe.close()
        now = datetime.datetime.now() # AC () - Unformated datetime value
        if not mimetype.startswith('image/'):
            self.media_dict.add(file=swf,
                                name=name,
                                voice=form.get('voice', ''),
                                # AC (10.04.08) - This section needs uploader and dateTime also.
                                uploader=self.player.name,
                                dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                                tags=tags#Corey, Heath, Karena 24/08/2011 - Added for tagging media
                                )

        else:
            #Corey, Heath, Karena 24/08/2011
            self.media_dict.add(file=swf,
                                name=name,
                                voice=form.get('voice', ''),
                                thumbnail=config.THUMBNAILS_URL + thumbnail,
                                # AC (29.09.07) - Passed values to be added to media XML files.
                                uploader=self.player.name,
                                dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                                tags=tags#Corey, Heath, Karena 24/08/2011 - Added for tagging media
                                )
        log.msg("got past media_dict.add, YES")
        form['media'] = swf
        
        # NB: doing external redirect, but really there's no need!
        # could just call the other pages render method
        #assign_media_to_stages()
        def _value(x):
            return form.get(x, [None])
        
        self.media_dict = self.mediatypes[self.mediatype]
        if self.assignedstages is not None:
            self.assign_media_to_stages(self.assignedstages, swf, self.mediatype)
        
        #self.refresh(request, swf)

        request.write(successpage(request, 'Your Media "' + name + '" has uploaded successfully'))
        request.finish()
コード例 #2
0
ファイル: web.py プロジェクト: foobarlab/UpStage-Video-Hack
    def render(self, request):
        #XXX not checking rights.
        args = request.args
        
        
        # Natasha - get assigned stages
        self.assignedstages = request.args.get('assigned')
        name = args.pop('name',[''])[0]
        audio = args.pop('aucontents0', [''])[0] #was 'audio' before, aucontents0 is the name of the mp3 file field
        type = args.pop('audio_type', [''])[0]
        mediatype = args.pop('type',['audio'])[0]
        self.message = 'Audio file uploaded & registered as %s, called %s. ' % (type, name)
        #Corey, Heath, Karena 24/08/2011 - Added to store tags for this audiothing
        self.tags = args.pop('tags',[''])[0]
        # PQ & EB Added 13.10.07
        # Chooses a thumbnail image depending on type (adds to audios.xml file)
        
        if type == 'sfx':
             thumbnail = config.SFX_ICON_IMAGE_URL
        else:
             thumbnail = config.MUSIC_ICON_IMAGE_URL

        self.media_dict = self.mediatypes[mediatype]
        
        mp3name = new_filename(suffix=".mp3")
        the_url = config.AUDIO_DIR +"/"+ mp3name
        
        file = open(the_url, 'wb')
        file.write(audio)
        file.close()
        
        filenames = [the_url]
        
        # Alan (09/05/08) ==> Gets the size of audio files using the previously created temp filenames.
        fileSizes = getFileSizes(filenames)
        
        if not (fileSizes is None):
            if (validSizes(fileSizes, self.player.can_su()) or self.player.can_unlimited()):
                now = datetime.datetime.now() # AC () - Unformated datetime value
                self.media_dict.add(url='%s/%s' % (config.AUDIO_SUBURL, mp3name), #XXX dodgy? (windows safe?)
                               file=mp3name,
                               name=name,
                               voice="",
                               thumbnail=thumbnail, # PQ: 13.10.07 was ""
                               medium="%s" %(type),
                               # AC (14.08.08) - Passed values to be added to media XML files.
                               uploader=self.player.name,
                               dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                               tags=self.tags)#Corey, Heath, Karena 24/08/2011 - Added for media tagging set the tags to self.tags
                
                if self.assignedstages is not None:
                    for x in self.assignedstages:
                        self.media_dict.set_media_stage(x, mp3name)
                        
                request.write(successpage(request, 'Your Media "' + name + '" has uploaded successfully'))
                request.finish()
            else:
                try:
                    ''' Send new audio page back containing error message '''
                    """
                    self.player.set_setError(True)
                    os.remove(the_url)
                    request.redirect('/admin/new/%s' %(mediatype))
                    request.finish()
                    """
                    AdminError.errorMsg = 'File over 1MB' #Change error message to file exceed - Gavin
                    request.write(errorpage(request, 'Media uploads are limited to files of 1MB or less, to help ensure that unnecessarily large files do not cause long loading times for your stage. Please make your file smaller or, if you really need to upload a larger file, contact the administrator of this server to ask for permission.'))
                    request.finish()
                except OSError, e:
                    log.err("Error removing temp file %s (already gone?):\n %s" % (tfn, e))
コード例 #3
0
ファイル: web.py プロジェクト: NickF40/upstage
    def render(self, request):
        #XXX not checking rights.
        args = request.args
        
        # FIXME see SwfConversionWrapper: prepare form data
        
        # FIXME: trim spaces from form values? (#104)
        
        # Natasha - get assigned stages
        self.assignedstages = request.args.get('assigned')
        name = args.pop('name',[''])[0]
        audio = args.pop('aucontents0', [''])[0] #was 'audio' before, aucontents0 is the name of the mp3 file field
        type = args.pop('audio_type', [''])[0]
        mediatype = args.pop('type',['audio'])[0]
        self.message = 'Audio file uploaded & registered as %s, called %s. ' % (type, name)
        #Corey, Heath, Karena 24/08/2011 - Added to store tags for this audiothing
        self.tags = args.pop('tags',[''])[0]
        # PQ & EB Added 13.10.07
        # Chooses a thumbnail image depending on type (adds to audios.xml file)
        
        if type == 'sfx':
             thumbnail = config.SFX_ICON_IMAGE_URL
        else:
             thumbnail = config.MUSIC_ICON_IMAGE_URL

        self.media_dict = self.mediatypes[mediatype]

        mp3name = unique_custom_string(suffix=".mp3")
        mode = args.pop('mode', [''])[0]
        oldfile = args.pop('oldfile', [''])[0]
        if mode == 'replace':
            key = args.pop('key')[0]
            try:
                self.media_dict.deleteFile(oldfile)
            except KeyError:
                log.msg('the file does not exist. nothing was deleted.')
                request.write(errorpage(request, 'The file you want to replace does not exist. Accidentally pressed the back button? Tut, tut..', 'mediaedit'))
                request.finish()
        
        the_url = config.AUDIO_DIR +"/"+ mp3name
        
        file = open(the_url, 'wb')
        file.write(audio)
        file.close()
        
        filenames = [the_url]
        
        # Alan (09/05/08) ==> Gets the size of audio files using the previously created temp filenames.
        fileSizes = getFileSizes(filenames)

        from mad import MadFile
        duration = MadFile(the_url).total_time()
        
        if not (fileSizes is None and duration > 0):
            if validSizes(fileSizes, self.player.can_upload_big_file()):
                now = datetime.datetime.now() # AC () - Unformated datetime value
                duration = str(duration/float(1000))

                success_message = ''
                if mode == 'replace':
                    media = self.media_dict[key]

                    media.setUrl(mp3name)
                    setattr(media, 'file', mp3name)
                    setattr(media, 'width', duration) # Ing - width attribute is already there
                    setattr(media, 'uploader', self.player.name)
                    setattr(media, 'dateTime', now.strftime("%d/%m/%y @ %I:%M %p"))
                    self.media_dict.save()

                    success_message = 'Your Media "' + name + '" has been replaced successfully! '

                    # refresh assigned stages
                    stages = args.pop('stages', [''])[0]
                    if stages:
                        success_message += 'The following stage(s) has been reloaded:<strong> ' + stages +'</strong>.<br />'
                        reloadStagesInList(self.stages, stages.split(', '), media.url)
                    
                    success_message += 'Redirecting back to <a href="admin/workshop/mediaedit">Media Management...</a>'
                    redirectTo = 'mediaedit'

                else:
                    key = unique_custom_string(prefix='audio_', suffix='')
                    while self.name_is_used(name):
                        name += random.choice('1234567890')
                    # upload new assets
                    self.media_dict.add(url='%s/%s' % (config.AUDIO_SUBURL, mp3name), #XXX dodgy? (windows safe?)
                                       file=mp3name,
                                       name=name,
                                       voice="",
                                       thumbnail=thumbnail, # PQ: 13.10.07 was ""
                                       medium="%s" %(type),
                                       # AC (14.08.08) - Passed values to be added to media XML files.
                                       uploader=self.player.name,
                                       dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                                       tags=self.tags, #Corey, Heath, Karena 24/08/2011 - Added for media tagging set the tags to self.tags
                                       key=key,
                                       width=duration) # Ing - width attribute is already there, width-length-length-width, kinda similar ;p

                    if self.assignedstages is not None:
                        for x in self.assignedstages:
                            self.media_dict.set_media_stage(x, key)

                    redirectTo = 'mediaupload'
                    success_message = 'Your Media "' + name + '" has uploaded successfully'
                        
                request.write(successpage(request, success_message, redirect=redirectTo))
                request.finish()
            else:
                try:
                    ''' Send new audio page back containing error message '''
                    """
                    self.player.set_setError(True)
                    os.remove(the_url)
                    request.redirect('/admin/new/%s' %(mediatype))
                    request.finish()
                    """
                    errMsg = 'File over 1MB' #Change error message to file exceed - Gavin

                    if mode == 'replace':
                        errMsg += ' Your media was not replaced.'
                        # restore old file
                        self.media_dict.restoreOldFile(oldfile)

                    AdminError.errorMsg = errMsg
                    request.write(errorpage(request, 'Media uploads are limited to files of 1MB or less, \
                                                    to help ensure that unnecessarily large files do not cause long loading times for your stage. \
                                                    Please make your file smaller or, if you really need to upload a larger file, \
                                                    contact the administrator of this server to ask for permission.', 'mediaupload'))
                    request.finish()
                except OSError, e:
                    log.err("Error removing temp file %s (already gone?):\n %s" % (tfn, e))
コード例 #4
0
ファイル: web.py プロジェクト: NickF40/upstage
    def success_upload(self, exitcode, swf, thumbnail, form, request):
        """Catch results of the process.  If it seems to have worked,
        register the new thing."""
        if exitcode:
        #request.write(exitcode)
            return self.failure_upload(exitcode, swf, thumbnail, form, request)

        # if the name is in use, mangle it until it is not.
        #XXX this is not perfect, but
        # a) it is kinder than making the person resubmit, without actually
        #    telling them what a valid name would be.
        # b) it doens't actually matter what the name is.
        #natasha check name
        name = form.get('name', '')
        while self.name_is_used(name):
            name += random.choice('1234567890')
        #Added by Heath, Karena, Corey 26/08/2011 - added to store tags from the form    
        tags = form.get('tags','')
        # if the thumbnail is not working (usually due to an swf file
        # being uploaded, which the img2swf script doesn't know how to
        # thumbnail), detect it now and delete it.
    
        has_streaming = form.get('hasstreaming','false')
        streamtype = form.get('streamtype','auto')
        streamserver = form.get('streamserver','')
        streamname = form.get('streamname','')
        
        log.msg("success_upload(): has streaming? %s" % has_streaming)
        log.msg("success_upload(): streamtype: %s" % streamtype)
        log.msg("success_upload(): streamserver: %s" % streamserver)
        log.msg("success_upload(): streamname: %s" % streamname)
        
        medium = ''
        if (has_streaming.lower() == 'true'):
            medium = 'stream'
            
        log.msg("success_upload(): medium: %s" % medium)
        
        # FIXME why determine mimetype of thumbnail only?
    
        # natasha add to dictionary
        thumbnail_full = os.path.join(config.THUMBNAILS_DIR, thumbnail)
        #_pin, pipe = os.popen4(('file', '-ib', thumbnail_full))
        _pin, pipe = os.popen4(('file', '--brief', '--mime-type', thumbnail_full))
        mimetype = str(pipe.read()).strip()
        pipe.close()
        now = datetime.datetime.now() # AC () - Unformated datetime value
        
        # FIXME insecure mimetype detection!
        log.msg("success_upload(): mimetype (thumbnail) = %s" % mimetype)
        
        swf_mimetypes = ["application/x-shockwave-flash"]
        image_mimetypes = ["image/jpeg","image/gif","image/png"]
        
        log.msg("success_upload(): image mimetypes: %s" % image_mimetypes)
        log.msg("success_upload(): swf mimetypes: %s" % swf_mimetypes)
        
        is_image = mimetype in image_mimetypes
        is_swf = mimetype in swf_mimetypes
        
        log.msg("success_upload(): mimetype: is_image = %s" % is_image)
        log.msg("success_upload(): mimetype: is_swf = %s" % is_swf)
        
        voice = form.get('voice','')
        
        log.msg("success_upload(): swf = %s" % swf)
        log.msg("success_upload(): form: name = %s" % name)
        log.msg("success_upload(): form: tags = %s" % tags)
        log.msg("success_upload(): thumbnail_full = %s" % thumbnail_full)
        log.msg("success_upload(): now = %s" % now)
        log.msg("success_upload(): voice = %s" % voice)

        size_x = ''
        size_y = ''
        # get actual swf width and height from the file
        if swf.endswith('.swf'):
            size_x = commands.getoutput("swfdump -X html/media/" + swf).split()[1];
            size_y = commands.getoutput("swfdump -Y html/media/" + swf).split()[1];

        success_message = ''


        if form.get('mode', '') == 'replace':
            oldfilename = form.get('oldfile')
            key = form.get('key')
            media = self.media_dict[key]

            setattr(media, 'file', swf)
            setattr(media, 'uploader', self.player.name)
            setattr(media, 'dateTime', now.strftime("%d/%m/%y @ %I:%M %p"))
            setattr(media, 'width', size_x)
            setattr(media, 'height', size_y)
            # thumbnail conversion is currently broken - not really converted
            # if is_image:
            #    media.setThumbnail(config.THUMBNAILS_URL + thumbnail)
            media.setThumbnail('')
            media.setUrl(swf)

            self.media_dict.save()
            success_message = 'Your Media "' + form.get('name') + '" has been replaced successfully! '

            # refresh assigned stages
            stages = form.get('stages', '')
            if stages:
                success_message += 'The following stage(s) has been reloaded:<strong> ' + stages +'</strong>.<br />'
                reloadStagesInList(self.stages, stages.split(', '))
            
            success_message += 'Redirecting back to <a href="admin/workshop/mediaedit">Media Management...</a>'
            redirectTo = 'mediaedit'

        else:
            # upload new assets
            key = unique_custom_string(prefix=self.mediatype+'_', suffix='')
            # if not mimetype.startswith('image/'):
            if not is_image:
                self.media_dict.add(file=swf,
                                    name=name,
                                    voice=form.get('voice', ''),
                                    # AC (10.04.08) - This section needs uploader and dateTime also.
                                    uploader=self.player.name,
                                    dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                                    tags=tags, # Corey, Heath, Karena 24/08/2011 - Added for tagging media
                                    streamserver=streamserver,
                                    streamname=streamname,
                                    medium=medium,
                                    width=size_x,
                                    height=size_y,
                                    key=key
                                    )

            else:
                #Corey, Heath, Karena 24/08/2011
                self.media_dict.add(file=swf,
                                    name=name,
                                    voice=form.get('voice', ''),
                                    thumbnail=config.THUMBNAILS_URL + thumbnail,
                                    # AC (29.09.07) - Passed values to be added to media XML files.
                                    uploader=self.player.name,
                                    dateTime=(now.strftime("%d/%m/%y @ %I:%M %p")),
                                    tags=tags, # Corey, Heath, Karena 24/08/2011 - Added for tagging media
                                    streamserver=streamserver,
                                    streamname=streamname,
                                    medium=medium,
                                    width=size_x,
                                    height=size_y,
                                    key=key
                                    )
        
            log.msg("success_upload(): got past media_dict.add, YES")
            
            #form['media'] = swf
            
            # NB: doing external redirect, but really there's no need!
            # could just call the other pages render method
            # assign_media_to_stages()
            
            #def _value(x):
            #    return form.get(x, [None])
            
            # assign to stage?
            self.media_dict = self.mediatypes[self.mediatype]
            if self.assignedstages is not None:
                log.msg("success_upload(): assigning to stages: %s" % self.assignedstages)
                self.assign_media_to_stages(self.assignedstages, key, self.mediatype)
            
            #self.refresh(request, swf)
            success_message = 'Your Media "' + name + '" has uploaded successfully'
            redirectTo = 'mediaupload'

        request.write(successpage(request, success_message, redirect=redirectTo))
        request.finish()
コード例 #5
0
ファイル: web.py プロジェクト: NickF40/upstage
                                    medium=medium,
                                    thumbnail=thumbnail,
                                    key=key
                                    )
                
                # assign to stage?
                if self.assignedstages is not None:
                    log.msg("render(): assigning to stages: %s" % self.assignedstages)
                    self.assign_media_to_stages(self.assignedstages, key, self.mediatype)
                    
            except UpstageError, e:            
                return errorpage(request, e, 'mediaupload')
            
            log.msg("render(): got past media_dict.add, YES")
            
            request.write(successpage(request, 'Your Avatar "' + name + '" has been added successfully'))
            request.finish()
        
        # handle unknown imagetypes
        else:
            # output error, because we do not have a valid imagetype
            log.err('SwfConversionWrapper: render(): Unsupported imagetype: %s' % imagetype)
            request.write(errorpage(request, "Unsupported image type '%s'." % imagetype, 'mediaupload'))
            request.finish() 
        
        return server.NOT_DONE_YET
    
    """
     Modified by: Corey, Heath, Karena 24/08/2011 - Added media tagging to self.media_dict.add
    """