def chagepasswd(): if request.method == "POST": userdict = dict(request.form) if userdict['def_passwd'][0] == db.get_by_id( request.form.get('id'))['password']: if userdict['rep_passwd'][0] == userdict['password'][0]: new_password = [ "%s='%s'" % (k, v[0]) for k, v in userdict.items() ][1] db.update_user_data(new_password, userdict['id'][0]) else: return render_template('chage_passwd.html', user=db.get_by_id( request.form.get('id')), info='Two different Password') else: return render_template('chage_passwd.html', user=db.get_by_id(request.form.get('id')), info='error password!') return render_template('chage_passwd.html', user=db.get_by_id(request.form.get('id')), info='chage complete!!!') else: return render_template('chage_passwd.html', user=db.get_by_id(request.args.get('id')))
def userchagepasswd(): if not session.get('name', None) or session.get('role', None) != 'user': return redirect('/login') if request.method == "POST": userdict = dict(request.form) if userdict['def_passwd'][0] != get_by_id( request.form.get('id'))['password']: errmsg = "password error!" return json.dumps({'code': '1', 'errmsg': errmsg}) if userdict['rep_passwd'][0] != userdict['password'][0]: errmsg = "the two passwords don't match" return json.dumps({'code': '1', 'errmsg': errmsg}) else: new_password = [ "%s='%s'" % (k, v[0]) for k, v in userdict.items() ][1] update_user_data(new_password, userdict['id'][0]) return json.dumps({'code': '0', 'errmsg': "chage password sucess"}) else: roles = session.get('role', None) names = session.get('name', None) return render_template('user_passwd.html', user=get_by_id(request.args.get('id')), name=names, role=roles)
def reset_preview(bot, update): query = update.callback_query data = str(query.data).split("=")[1] data = literal_eval(data) query_str, result, type = db.get_by_id(data['sId']) id = data['id'] for s in result: if s['id'] == id: song = s break keys = [[], [ InlineKeyboardButton("Preview", callback_data="/preview={}".format(data)), InlineKeyboardButton("Download", callback_data="/download={}".format(data)) ]] size = len(result) setup_keyboard(data, keys, size) bot.answer_callback_query(callback_query_id=update.callback_query.id) bot.edit_message_media( timeout=999, reply_markup=InlineKeyboardMarkup(keys), chat_id=query.message.chat_id, message_id=query.message.message_id, media=InputMediaPhoto( media="https://anghamicoverart.akamaized.net/?id={}".format( song["coverArt"]), caption="{} - {}".format(song["title"], song["artist"])))
def update(): if request.method == "POST": userdict = dict(request.form) userlist = ["%s='%s'" % (k,v[0]) for k,v in userdict.items()] db.update_user_data(','.join(userlist),userdict['id'][0]) return redirect('/admin') else: return render_template('update.html',user=db.get_by_id(request.args.get('id')))
def update(): if not session.get('name',None) or session.get('role',None) != 'admin': return redirect('/login') if request.method == "POST": userdict = dict(request.form) userlist = ["%s='%s'" % (k,v[0]) for k,v in userdict.items()] update_user_data(','.join(userlist),userdict['id'][0]) return json.dumps({'code':'0','errmsg':"update sucess"}) else: return render_template('update.html',user=get_by_id(request.args.get('id')))
def chagepasswd(): if not session.get('name', None) or session.get('role', None) != 'admin': return redirect('/login') if request.method == "POST": userdict = dict(request.form) new_password = ["%s='%s'" % (k, v[0]) for k, v in userdict.items()][1] update_user_data(new_password, userdict['id'][0]) return json.dumps({'code': '0', 'errmsg': "chage password sucess"}) else: roles = session.get('role', None) names = session.get('name', None) return render_template('admin_passwd.html', user=get_by_id(request.args.get('id')), name=names, role=roles)
def get_preview(bot, update): query = update.callback_query data = str(query.data).split("=")[1] data = literal_eval(data) id = data['id'] song_data = get_song_data(id) query_str, result, type = db.get_by_id(data['sId']) keys = [[], [ InlineKeyboardButton("Reset", callback_data="/reset={}".format(data)), InlineKeyboardButton("Download", callback_data="/download={}".format(data)) ]] size = len(result) setup_keyboard(data, keys, size) try: open("cache/preview/{}.mp3".format(id), 'rb') except Exception as e: print(e) url = "http://track.anghami.com/rest/v1/GETtrack.view?songid={}".format( id) r = requests.get(url) with open("cache/preview/{}".format(id), "wb") as f: f.write(r.content) f.flush() f.close() r.close() preview = AudioSegment.from_file("cache/preview/{}".format(id), "m4a") preview.export("cache/preview/{}.mp3".format(id), format="mp3") os.remove("cache/preview/{}".format(id)) bot.answer_callback_query(callback_query_id=update.callback_query.id) bot.edit_message_media( timeout=999, reply_markup=InlineKeyboardMarkup(keys), chat_id=query.message.chat_id, message_id=query.message.message_id, media=InputMediaAudio( media=open("cache/preview/{}.mp3".format(id), 'rb'), title=song_data['title'], performer=song_data['artist'], thumb="https://anghamicoverart.akamaized.net/?id={}".format( song_data["coverArt"])))
def get_download(bot, update): query = update.callback_query data = str(query.data).split("=")[1] data = literal_eval(data) query_str, result, type = db.get_by_id(data['sId']) id = data['id'] for s in result: if s['id'] == id: song = s break file = "{} - {}".format(song["title"], song["artist"]) keys = [[], [ InlineKeyboardButton("Reset", callback_data="/reset={}".format(data)) ]] size = len(result) setup_keyboard(data, keys, size) try: file = "{} - {}".format(song["title"], song["artist"]) open("cache/media/{}.mp3".format(file), 'rb') except Exception: url = get_download_url(id) r = requests.get(url, stream=True) with open("cache/media/{}".format(file), "wb") as f: for chunk in r.iter_content(4096): f.write(chunk) f.flush() f.close() r.close() url = "https://anghamicoverart.akamaized.net/?id={}".format( song["coverArt"]) r = requests.get(url) with open("cache/media/{}.jpg".format(id), "wb") as f: f.write(r.content) f.flush() f.close() r.close() preview = AudioSegment.from_file("cache/media/{}".format(file), "m4a") preview.export("cache/media/{}.mp3".format(file), format="mp3", tags={ 'artist': song['artist'], 'album': song['album'], 'title': song['title'] }, cover="cache/media/{}.jpg".format(id)) os.remove("cache/media/{}.jpg".format(id)) os.remove("cache/media/{}".format(file)) bot.answer_callback_query(callback_query_id=update.callback_query.id) bot.send_audio(chat_id=query.message.chat_id, message_id=query.message.message_id, audio=open("cache/media/{}.mp3".format(file), 'rb'), title=song['title'], performer=song['artist'], thumb="https://anghamicoverart.akamaized.net/?id={}".format( song["coverArt"]), timeout=999)
def search_for(bot, update, query=None, type="song", page=0, newSearch=False, search_id=None): if not fingerprint: get_fingerprint() if search_id: query, result, type = db.get_by_id(search_id) else: search_id, result = db.get_by_query(query, type) if newSearch or not result: url = "https://api.anghami.com/gateway.php?type=GETsearch&query={}&output=JSONhp&edge=1&count=18&language=en&lang=en&angh_type=GETsearch&fingerprint=65b4e419-ea9d-4d96-905e-a098fdfd6e50R".format( query) r = requests.get(url, headers=headers) result = [] for section in r.json()["sections"]: if not section["type"] == type: continue for item in section['data']: if type == 'song': s = { 'id': item['id'], 'coverArt': item['coverArt'], 'album': item['album'], 'artist': item['artist'], 'title': item['title'] } else: if type == 'album': s = { 'id': item['id'], 'coverArt': item['coverArt'], 'artist': item['artist'], 'title': item['title'] } else: if type == 'artist': s = { 'id': item['id'], 'coverArt': item['ArtistArt'], 'title': item['name'] } else: if type == 'playlist': s = { 'id': item['id'], 'coverArt': item['coverArt'], 'artist': item['details'], 'title': item['title'] } result.append(s) search_id = db.insert(query, result, type) size = len(result) if size == 0: bot.answer_callback_query(callback_query_id=update.callback_query.id) bot.edit_message_text( text='No {} result,Please Choose different Category for "{}"!'. format(type, query), chat_id=update.callback_query.message.chat_id, message_id=update.callback_query.message.message_id, reply_markup=InlineKeyboardMarkup(type_menu(query))) return item = result[page] data = {'page': page, 'sId': search_id, 'id': item['id']} send_back_result(bot, data, item, newSearch, size, type, update)
def button(bot, update): query = update.callback_query if u"/preview" in query.data: get_preview(bot, update) else: if u"/reset" in query.data: reset_preview(bot, update) else: if u"/download" in query.data: get_download(bot, update) else: if u"/song" in query.data: search_for(bot, update, str(query.data).split("=")[1], newSearch=True) else: if u'/other_page' in query.data: data = str(query.data).split("=")[1] data = literal_eval(data) search_for(bot, update, search_id=data['sId'], page=data['page']) else: if u'/album' in query.data: search_for(bot, update, str(query.data).split("=")[1], newSearch=True, type='album') else: if u'/back' in query.data: data = str(query.data).split("=")[1] data = literal_eval(data) query_str, result, type = db.get_by_id( data['sId']) keys = type_menu(query_str) bot.delete_message( chat_id=update.callback_query.message. chat_id, message_id=update.callback_query.message. message_id) update.callback_query.message.reply_text( 'Searching for "{}" , choose category!'. format(query_str), disable_web_page_preview=False, parse_mode=ParseMode.HTML, reply_markup=InlineKeyboardMarkup(keys)) else: if u'/open' in query.data: open_sub(bot, update) else: if u'/return' in query.data: data = str(query.data).split("=")[1] data = literal_eval(data) ret = db.get_parent([data['sId']]) search_for(bot, update, search_id=ret[0], page=ret[1]) else: if u'/artist' in query.data: search_for( bot, update, str(query.data).split("=")[1], type='artist', newSearch=True)
def get_metadata(id): return db.get_by_id(id)
def remove_form_by_id(id): good = db.get_by_id(db.open_db(db_url), id) return render_template('remove.html', item=good)
def edit_form_by_id(id): good = db.get_by_id(db.open_db(db_url), id) return render_template('edit.html', item=good)
def details_by_id(id): good = db.get_by_id(db.open_db(db_url), id) return render_template('details.html', item=good)