def get_songs_play(ids, full=False): ids = list(map(int, ids.split(','))) res_files = [] covers = [] titles = [] artists = [] for id in ids: song = Song.query.filter(Song.id == id).first() if song is None: return jsonify({'status': False}) fn = get_song_filename(song) link = '' for key in ['file_flac', 'file']: mfn = song.__dict__[key] if mfn: link = files.get_link(mfn, fn + '.' + get_ext(mfn, ''), 86400) break res_files.append(link) album = Album.query.filter(Album.id == song.album_id).one() if len(album.cover_files): covers.append(files.get_link(album.cover_files[0], 'cover.jpg')) else: covers.append('') if full: titles.append(song.title) artists.append(song.artist) res = {'files': res_files, 'covers': covers} if full: res['titles'] = titles res['artists'] = artists return jsonify({'status': True, 'data': res})
def get_album_scans(id): id = int(id) album = Album.query.filter(Album.id == id).first() if album is None: return jsonify({'status': False}) scans = Scan.query.filter(Scan.album_id == id).all() res = [] for scan in scans: imgs = json.loads(scan.files) tmp = [] for fn, thb, src in imgs: tmp.append([fn, files.get_link(thb, fn + '.thumb.png'), files.get_link(src, fn)]) res.append({'id': scan.id, 'packname': scan.name, 'files': tmp}) return jsonify({'status': True, 'data': res})
def get_song_link(id): id = int(id) song = Song.query.filter(Song.id == id).first() if song is None: return jsonify({'status': False}) fn = get_song_filename(song) data = {} for key in ['file', 'file_flac']: mfn = song.__dict__[key] data[key] = files.get_link(mfn, fn + '.' + get_ext(mfn, ''), 86400) if mfn else '' return jsonify({'status': True, 'data': data})
def random_album(): count = int(request.values.get('count')) if count <= 0 or count > 100: return jsonify({'status': False}) albums = Album.query.order_by(func.rand()).all()[:count] res = [] for album in albums: tmp = album_schema.dump(album) tmp['cover_files'] = list(map(lambda x: files.get_link(x, 'cover.jpg'), tmp['cover_files'])) res.append(tmp) return jsonify({'status': True, 'data': res})
def random_song(): count = int(request.values.get('count')) if count <= 0 or count > 100: return jsonify({'status': False}) songs = Song.query.order_by(func.rand()).all()[:count] res = [] for song in songs: album = Album.query.filter(Album.id == song.album_id).one() tmp = song_schema.dump(song) tmp['album_title'] = album.title tmp['cover_files'] = list(map(lambda x: files.get_link(x, 'cover.jpg'), album.cover_files)) res.append(tmp) return jsonify({'status': True, 'data': res})
def get_album_info(id): id = int(id) album = Album.query.filter(Album.id == id).first() if album is None: return jsonify({'status': False}) res = album_schema.dump(album) res['cover_files'] = list(map(lambda x: files.get_link(x, 'cover.jpg'), res['cover_files'])) songs = Song.query.filter(Song.album_id == id).order_by(Song.track).all() res['songs'] = [] for i in songs: res['songs'].append(song_schema.dump(i)) if request.values.get('extra_data') is not None: res['songs'][-1]['extra_data'] = i.extra_data if request.values.get('extra_data') is not None: res['extra_data'] = album.extra_data return jsonify({'status': True, 'data': res})
def get_log_download(id): if re.match(r'^[a-zA-Z0-9\._]+$', id) is None: return jsonify({'status': False}) return jsonify({'status': True, 'data': files.get_link(id, 'album.log')})