Beispiel #1
0
def multimedia(aa):
    ''' uploading multimedia files '''
    if aa == 0:
        flash('Notice: if you followed the rules, it should be uploaded ..',
              'success')

    files_limit_indicator = 300
    folder_size_limit_indicator = 2000
    media_path = absolute_path('static/multimedia')
    form = MultimediaForm()
    medias = data.Media.query
    page = request.args.get('page', 1, type=int)
    pagination = data.Media.query.paginate(page, per_page=10, error_out=False)
    supported_images = SUPPORTED_MEDIA_FILES[0]
    supported_audios = SUPPORTED_MEDIA_FILES[1]
    supported_videos = SUPPORTED_MEDIA_FILES[2]
    supported_all = supported_images + supported_audios + supported_videos

    if medias.count():  # cleanup unused media files
        for media in medias:
            if os.path.isfile(os.path.join(media_path, media.name)):
                media.used = media.is_used()
            else:
                db.session.delete(media)

        db.session.commit()

    if form.validate_on_submit():
        name = secure_filename(form.mf.data.filename)
        extension = name[-3:]

        if extension in supported_all:
            files.save(request.files['mf'], name=name)
            db.session.add(
                data.Media(
                    extension in supported_videos
                    or name[-4:] in supported_videos, extension
                    in supported_audios, extension in supported_images, False,
                    name))
        else:
            flash('Error: wrong entry, something went wrong', 'danger')
            return redirect(url_for('cust_app.multimedia', aa=1))

        db.session.commit()
        return redirect(url_for('cust_app.multimedia', aa=0))

    return render_template('multimedia.html',
                           page_title='Multimedia',
                           navbar='#snb2',
                           form=form,
                           hash='#da1',
                           mmm=medias,
                           len=len,
                           ml=SUPPORTED_MEDIA_FILES,
                           mmmp=pagination.items,
                           pagination=pagination,
                           tc=data.Touch_store.query,
                           sl=data.Slides.query,
                           dc=data.Display_store.query,
                           fs=int(getFolderSize(media_path, True)),
                           nofl=files_limit_indicator,
                           sfl=folder_size_limit_indicator,
                           vtrue=data.Vid.get().enable,
                           strue=data.Slides_c.get().status)
Beispiel #2
0
def multimedia(aa):
    """ uploading multimedia files """
    # Number of files limit
    nofl = 300
    # size folder limit in MB
    sfl = 2000  # Fix limited upload folder size
    dire = absolute_path('static/multimedia/')
    pf = data.Media.query.order_by(data.Media.id.desc()).first()
    if pf is not None:
        pf = pf.name
    if aa == 0:
        if data.Media.query.count() >= nofl:
            flash(
                "Error: you have reached the amount limit of multimedia files "
                + str(nofl), 'danger')
            return redirect(url_for('cust_app.multimedia', aa=1))
        else:
            flash(
                "Notice: if you followed the rules, it should be uploaded ..",
                "success")
    elif aa != 1:
        flash('Error: wrong entry, something went wrong', 'danger')
        return redirect(url_for("core.root"))
    mmm = data.Media.query
    page = request.args.get('page', 1, type=int)
    pagination = data.Media.query.paginate(page, per_page=10, error_out=False)
    form = forms.Multimedia(session.get('lang'))
    if mmm.count() >= 1:
        from sqlalchemy.sql import or_
        for me in mmm:
            if os.path.isfile(dire + me.name):
                dl = [
                    data.Display_store.query.filter(
                        or_(data.Display_store.ikey == me.id,
                            data.Display_store.akey == me.id)).first(),
                    data.Touch_store.query.filter(
                        or_(data.Touch_store.ikey == me.id,
                            data.Touch_store.akey == me.id)).first(),
                    data.Slides.query.filter_by(ikey=me.id).first(),
                    data.Vid.query.filter_by(vkey=me.id).first()
                ]
                me.used = False
                for d in dl:
                    if d is not None:
                        me.used = True
                        break
                db.session.add(me)
                db.session.commit()
            else:
                if me.img or me.audio or me.vid:
                    for t in [
                            data.Touch_store, data.Display_store, data.Slides
                    ]:
                        t = t.query.filter_by(
                            or_(data.Display_store.ikey == me.id,
                                data.Display_store.vkey == me.id)).first()
                        if me.img or me.vid and t is not None:
                            if me.img:
                                t.ikey = None
                            if me.vid:
                                t.vid = None
                            if t != data.Slides:
                                t.bgcolor = "bg-danger"
                            else:
                                t.bgname = "bg-danger"
                            db.session.add(t)
                        ttt = t.query.filter_by(akey=me.id).first()
                        if me.audio and ttt is not None:
                            if t != data.Slides:
                                t.akey = None
                                t.audio = "false"
                                db.session.add(t)
                db.session.delete(me)
        db.session.commit()
    if form.validate_on_submit():
        ff = form.mf.data
        ffn = secure_filename(ff.filename)
        # dc = data.Media.query.count()
        # FIX ISSUE Remove folder size limitation
        # if int(utils.getFolderSize(dire)) >= sfl or dc >= nofl:
        #     return redirect(url_for('cust_app.multimedia', aa=1))
        e = ffn[-3:]
        if e in SUPPORTED_MEDIA_FILES[0]:
            files.save(request.files['mf'], name=ffn)
            if imghdr.what(dire + ffn) is None:
                os.remove(dire + ffn)
                return redirect(url_for("cust_app.multimedia", aa=1))
            db.session.add(data.Media(False, False, True, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        elif e in SUPPORTED_MEDIA_FILES[1]:
            files.save(request.files['mf'], name=ffn)
            # FIXME: Find an alternative to sndhdr for audio file detection
            # if sndhdr.what(dire + ffn) is None:
            #     os.remove(dire + ffn)
            #     return redirect(url_for("cust_app.multimedia", aa=1))
            db.session.add(data.Media(False, True, False, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        elif e in SUPPORTED_MEDIA_FILES[2] or ffn[
                -4:] in SUPPORTED_MEDIA_FILES[2]:
            files.save(request.files['mf'], name=ffn)
            db.session.add(data.Media(True, False, False, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        else:
            flash('Error: wrong entry, something went wrong', 'danger')
            return redirect(url_for("cust_app.multimedia", aa=1))
    return render_template("multimedia.html",
                           page_title="Multimedia",
                           navbar="#snb2",
                           form=form,
                           hash="#da1",
                           mmm=mmm,
                           len=len,
                           ml=SUPPORTED_MEDIA_FILES,
                           mmmp=pagination.items,
                           pagination=pagination,
                           tc=data.Touch_store.query,
                           sl=data.Slides.query,
                           dc=data.Display_store.query,
                           fs=int(getFolderSize(dire, True)),
                           nofl=nofl,
                           sfl=sfl,
                           vtrue=data.Vid.query.first().enable,
                           strue=data.Slides_c.query.first().status)