Ejemplo n.º 1
0
def uploadr_file(file_type):
    if not session.get("logged_in"): abort(401)
    # return jsonify(name="filename", size="file_size", file_type=file_type)
    if request.method == 'POST':
        mix_title = request.form.get('mix_title')
        mix_summer = int(request.form.get('mix_summer', 0))
        mix_id = request.form.get('mix_id')
        mix_desc = request.form.get('mix_desc')
        mix_palette = request.form.get('mix_palette')
        no_img = request.form.get('no_img')
        user = session.get("user")
        file = request.files.get('file')
        artist = request.form.get('song_artist')
        title = request.form.get('song_title') or "Untitled"
        track_num = request.form.get('song_num')
        song_id = request.form.get('song_id')
        song_remove = request.form.get('song_remove')
        
        if not mix_id:
            new_mix_title = mix_title or 'Untitled Mix'
            mix_slug = make_slug(new_mix_title)
            mix_id = insert_db("mix", fields=('date', 'user', 'name', 'slug', 'desc', 'summer'), args=(str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')), user, new_mix_title, mix_slug, mix_desc, mix_summer))
            user_mix_dir = os.path.join(app.config['UPLOAD_FOLDER'], user, mix_slug)
            if not os.path.exists(user_mix_dir): os.makedirs(user_mix_dir)
        else:
            mix = query_db("SELECT * FROM mix WHERE id=?", (mix_id,), one=True)
            mix_slug = unicode(mix["slug"])
            user_mix_dir = os.path.join(app.config['UPLOAD_FOLDER'], user, mix_slug)
            
            if mix_title:
                if mix_title != mix["name"]:
                    new_mix_slug = make_slug(mix_title)
                    query_db("UPDATE mix SET name=?, slug=? WHERE id=?", (mix_title, new_mix_slug, mix_id), update=True)
                    # also need to rename upload directory
                    user_mix_dir = os.path.join(app.config['UPLOAD_FOLDER'], user, mix_slug)
                    new_user_mix_dir = os.path.join(app.config['UPLOAD_FOLDER'], user, new_mix_slug)
                    os.rename(user_mix_dir, new_user_mix_dir)
                    user_mix_dir = new_user_mix_dir
                    mix_slug = new_mix_slug
                if mix_summer != mix["summer"]:
                    query_db("UPDATE mix SET summer=? WHERE id=?", (mix_summer, mix_id), update=True)
            if mix_desc is not None:
                query_db("UPDATE mix SET `desc`=? WHERE id=?", [mix_desc, mix_id], update=True)
        
        b64_img = None
        if no_img:
            input_image_path = os.path.join(app.root_path, 'static/img/no_cover.jpg')
            (new_img, tinted_col) = image_tint(input_image_path)
            new_img.save(os.path.join(user_mix_dir, "default_cover.jpg"))
            jpeg_image_buffer = cStringIO.StringIO()
            new_img.save(jpeg_image_buffer, format="JPEG")
            b64_img = base64.b64encode(jpeg_image_buffer.getvalue())
            query_db("UPDATE mix SET cover=? WHERE id=?", ["default_cover.jpg", mix_id], update=True)
            # create thumbnail of default cover
            thumb_image = ImageOps.fit(new_img, (500,500), Image.ANTIALIAS)
            thumb_file_path = os.path.join(user_mix_dir, "default_cover_thumb.jpg")
            thumb_image.save(thumb_file_path, "JPEG", quality=90)
        
        if mix_palette:
            query_db("UPDATE mix SET palette=? WHERE id=?", [mix_palette, mix_id], update=True)
        
        if file and allowed_file(file.filename):
            if "image" in file.mimetype:
                filename = secure_filename(file.filename)
                
                lg_file_path = os.path.join(user_mix_dir, filename)
                filename_no_ext, file_extension = os.path.splitext(filename)
                thumb_file_path = os.path.join(user_mix_dir, filename_no_ext+"_thumb"+file_extension)
                
                MAX_SIZE = 1600
                QUALITY = 80
                image = Image.open(file)
                original_size = max(image.size[0], image.size[1])

                if original_size >= MAX_SIZE:
                    if (image.size[0] > image.size[1]):
                        resized_width = MAX_SIZE
                        resized_height = int(round((MAX_SIZE/float(image.size[0]))*image.size[1])) 
                    else:
                        resized_height = MAX_SIZE
                        resized_width = int(round((MAX_SIZE/float(image.size[1]))*image.size[0]))

                    full_image = image.resize((resized_width, resized_height), Image.ANTIALIAS)
                else:
                    full_image = image
                full_image.save(lg_file_path, image.format, quality=QUALITY)
                
                thumb_image = ImageOps.fit(image, (500,500), Image.ANTIALIAS)
                thumb_image.save(thumb_file_path, image.format, quality=90)
                
                # was there already a file? if so delete it
                cover = query_db("SELECT cover FROM mix WHERE id=?", (mix_id,), one=True)["cover"]
                if cover:
                    os.remove(os.path.join(user_mix_dir, cover))
                    # also remove thumb
                    cover_no_ext, cover_extension = os.path.splitext(cover)
                    os.remove(os.path.join(user_mix_dir, cover_no_ext+"_thumb"+cover_extension))
                # add cover img file_name to db
                query_db("UPDATE mix SET cover=?, palette=? WHERE id=?", [filename, mix_palette, mix_id], update=True)
                # add cover to all songs too
                songs = query_db("SELECT * FROM song WHERE mix=?", (mix_id,))
                for s in songs:
                    audio = Audio(os.path.join(user_mix_dir, s["slug"]))
                    audio.albumart(os.path.join(user_mix_dir, filename))
            if "audio" in file.mimetype:
                filename = secure_filename(u"{:02d} {} - {}.mp3".format(int(track_num), artist, title))
                file.save(os.path.join(user_mix_dir, filename))
                mix_title, cover = query_db("SELECT name, cover FROM mix WHERE id=?", (mix_id,), one=True)
                mix_title = unicode(mix_title)
                # add song file_name to db -
                audio = Audio(os.path.join(user_mix_dir, filename))
                audio.flush()
                audio.title(title)
                audio.artist(artist)
                audio.tracknumber(track_num)
                audio.album(mix_title)
                audio.compilation()
                if cover:
                    audio.albumart(os.path.join(user_mix_dir, cover))
                runtime = audio.runtime()
                insert_db("song", fields=('title','artist','position','runtime','slug','mix'), args=(title, artist, track_num, runtime, filename, mix_id))
        
        if song_id:
            if song_remove:
                song_file = query_db("SELECT slug FROM song WHERE id=?", (song_id,), one=True)["slug"]
                os.remove(os.path.join(user_mix_dir, song_file))
                query_db("DELETE FROM song WHERE id=?", [song_id], update=True)
            else:
                song = query_db("SELECT * FROM song WHERE id=?", (song_id,), one=True)
                mix_title, cover = query_db("SELECT name, cover FROM mix WHERE id=?", (mix_id,), one=True)
                filename = secure_filename(u"{:02d} {} - {}.mp3".format(int(track_num), artist, title))
                os.rename(os.path.join(user_mix_dir, song["slug"]), os.path.join(user_mix_dir, filename))
                # add song file_name to db -
                audio = Audio(os.path.join(user_mix_dir, filename))
                audio.flush()
                audio.title(title)
                audio.artist(artist)
                audio.tracknumber(track_num)
                audio.album(mix_title)
                audio.compilation()
                if cover:
                    audio.albumart(os.path.join(user_mix_dir, cover))
                query_db("UPDATE song SET title=?, artist=?, position=?, slug=? WHERE id=?", [title, artist, track_num, filename, song_id], update=True)

        
        return jsonify(mix_id=mix_id, mix_slug=mix_slug, b64_img=b64_img)