Exemple #1
0
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")
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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")
Exemple #7
0
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)
Exemple #8
0
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)