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)