def user_signin(): error_message = "" global email session.clear() if request.method == "POST": email = request.form["inputEmail"] password = request.form["inputPassword"] collection = mongo.db.profile user = list(collection.find({"email": email})) if (len(user) == 0): error_message = "Invalid email or password." return render_template("login.html", error_message=error_message) elif bcrypt.hashpw( password.encode('utf-8'), user[0]['password'].encode( 'utf-8')) == user[0]["password"].encode('utf-8'): session["email"] = user[0]["email"] session["name"] = user[0]["name"] session["bio"] = user[0]["bio"] session["song_ids"] = user[0]["song_ids"] pfp_url = user[0]["profile_pic_url"] list_of_songs = model.id_to_song( session["song_ids"]) #gives a list of dictionaries return render_template("overview.html", list_of_songs=list_of_songs, is_searching_songs=False, pfp_url=pfp_url) else: error_message = "Invalid email or password." return render_template("login.html", error_message=error_message) else: return render_template("login.html")
def search(): if session.get("email") == None or session["email"] != email: session.clear() return render_template("login.html") else: error_message = "" if request.method == "POST": song_query = request.form["song_query"] artist_query = request.form["artist_query"] song_ids = model.search_for_track_and_artist( song_query, artist_query ) #gives a list of up to 10 song_ids that have similar names to the search query songs_found = model.id_to_song( song_ids) #gives a list of dictionaries collection = mongo.db.profile user = list(collection.find({"email": session["email"]}))[0] session["song_ids"] = user["song_ids"] if (len(songs_found) == 0): error_message = "No songs found" list_of_songs = model.id_to_song(session["song_ids"]) pfp_url = user["profile_pic_url"] return render_template("overview.html", songs_found=songs_found, list_of_songs=list_of_songs, error_message=error_message, is_searching_songs=True, pfp_url=pfp_url) else: list_of_songs = model.id_to_song(session["song_ids"]) user = list(collection.find({"email": session["email"]}))[0] pfp_url = user["profile_pic_url"] return render_template("overview.html", list_of_songs=list_of_songs, error_message=error_message, is_searching_songs=False, pfp_url=pfp_url)
def index(): if session.get("email") == None or session["email"] != email: session.clear() return render_template("index.html") else: collection = mongo.db.profile user = list(collection.find({"email": session["email"]}))[0] session["song_ids"] = user["song_ids"] pfp_url = user["profile_pic_url"] list_of_songs = model.id_to_song(session["song_ids"]) return render_template("overview.html", list_of_songs=list_of_songs, pfp_url=pfp_url)
def overview(): if session.get("email") == None or session["email"] != email: session.clear() return render_template("login.html") else: collection = mongo.db.profile user = list(collection.find({"email": session["email"]}))[0] session["song_ids"] = user["song_ids"] pfp_url = user["profile_pic_url"] list_of_songs = model.id_to_song( session["song_ids"]) #gives a list of dictionaries return render_template("overview.html", list_of_songs=list_of_songs, is_searching_songs=False, pfp_url=pfp_url)
def removesong(song_id): if session.get("email") == None or session["email"] != email: session.clear() return render_template("login.html") else: collection = mongo.db.profile collection.update({"email": session["email"]}, {"$pull": { "song_ids": song_id }}) user = list(collection.find({"email": session["email"]}))[0] songs = user["song_ids"] session["song_ids"] = songs list_of_songs = model.id_to_song(session["song_ids"]) pfp_url = user["profile_pic_url"] return render_template("overview.html", list_of_songs=list_of_songs, is_searching_songs=False, pfp_url=pfp_url)
def store_users(): #this is the route for how the user creates an account global email error_message = "" if request.method == "POST": name = request.form["inputName"] email = request.form["inputEmail"] password = request.form["inputPassword"] collection = mongo.db.profile user = list(collection.find({"email": email})) if (len(user) == 0): collection.insert({ "password": str(bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt()), 'utf-8'), "email": email, "name": name, "bio": "I am feeling good", "profile_pic_url": "https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png", "song_ids": [] }) user = list(collection.find({"email": email})) session["email"] = user[0]["email"] session["name"] = user[0]["name"] session["bio"] = user[0]["bio"] session["song_ids"] = user[0]["song_ids"] pfp_url = user[0]["profile_pic_url"] list_of_songs = model.id_to_song(session["song_ids"]) return render_template("overview.html", list_of_songs=list_of_songs, is_searching_songs=False, pfp_url=pfp_url) else: error_message = "This email is already being used by an account." return render_template("signup.html", error_message=error_message) else: return render_template("signup.html")
def profile_song_match(name): if session.get("email") == None or session["email"] != email: session.clear() return render_template("login.html") else: collection = mongo.db.profile #these are the variables for the person whose profile is being viewed user_being_searched = collection.find({"name": name})[0] user_being_searched_email = user_being_searched["email"] bio = user_being_searched["bio"] user_song_ids = user_being_searched["song_ids"] match_percentage = user_being_searched["song_percentages"][ "match_percentage"] song_percentage = user_being_searched["song_percentages"][ "song_percentage"] artist_percentage = user_being_searched["song_percentages"][ "artist_percentage"] genre_percentage = user_being_searched["song_percentages"][ "genre_percentage"] user_pfp = user_being_searched["profile_pic_url"] #these are the variables for the user that is logged in my_user = collection.find({"email": session["email"]})[0] my_song_ids = my_user["song_ids"] common_song_ids = [] for song in user_song_ids: if song in my_song_ids: common_song_ids.append(song) list_of_common_songs = model.id_to_song(common_song_ids) return render_template("profile.html", user_pfp=user_pfp, name=name, email=user_being_searched_email, bio=bio, list_of_common_songs=list_of_common_songs, match_percentage=match_percentage, song_percentage=song_percentage, artist_percentage=artist_percentage, genre_percentage=genre_percentage)
def soulmates(): if session.get("email") == None or session["email"] != email: session.clear() return render_template("login.html") else: collection = mongo.db.profile users = collection.find({}) logined_user = list(collection.find({"email": session["email"]}))[0] session["song_ids"] = logined_user["song_ids"] p1 = model.id_to_song(session["song_ids"]) error_message = "" if len(p1) < 5: error_message = "You must have at least 5 songs in your playlist to match with a soulmate." return render_template("soulmates.html", error_message=error_message) song_matching_users = [] artist_matching_users = [] genre_matching_users = [] for user in users: song_percentages = {} artist_percentages = {} genre_percentages = {} if user["email"] != session["email"]: p2 = model.id_to_song(user["song_ids"]) if len(p2) >= 5: if match_score.is_matching(p1, p2, "song"): song_matching_users.append(user) song_percentages[ "match_percentage"] = match_score.match_percentage( ) song_percentages[ "song_percentage"] = match_score.song_percentage() song_percentages[ "artist_percentage"] = match_score.artist_percentage( ) song_percentages[ "genre_percentage"] = match_score.genre_percentage( ) user["song_percentages"] = song_percentages if match_score.is_matching(p1, p2, "artist"): artist_matching_users.append(user) artist_percentages[ "match_percentage"] = match_score.match_percentage( ) artist_percentages[ "song_percentage"] = match_score.song_percentage() artist_percentages[ "artist_percentage"] = match_score.artist_percentage( ) artist_percentages[ "genre_percentage"] = match_score.genre_percentage( ) user["artist_percentages"] = artist_percentages if match_score.is_matching(p1, p2, "genre"): genre_matching_users.append(user) genre_percentages[ "match_percentage"] = match_score.match_percentage( ) genre_percentages[ "song_percentage"] = match_score.song_percentage() genre_percentages[ "artist_percentage"] = match_score.artist_percentage( ) genre_percentages[ "genre_percentage"] = match_score.genre_percentage( ) user["genre_percentages"] = genre_percentages collection.update({"email": user["email"]}, {"$set": { "song_percentages": song_percentages }}) collection.update( {"email": user["email"]}, {"$set": { "artist_percentages": artist_percentages }}) collection.update( {"email": user["email"]}, {"$set": { "genre_percentages": genre_percentages }}) return render_template("soulmates.html", song_matching_users=song_matching_users, artist_matching_users=artist_matching_users, genre_matching_users=genre_matching_users, error_message=error_message)