mirror of
https://github.com/PhoenixTwoFive/karaoqueue.git
synced 2025-07-04 01:01:41 +02:00
Add suggestions
This commit is contained in:
@ -40,6 +40,17 @@ def import_songs(song_csv):
|
||||
return ("Imported songs ({} in Database)".format(num_songs))
|
||||
|
||||
|
||||
def create_schema():
|
||||
create_song_table()
|
||||
create_entry_table()
|
||||
create_done_song_table()
|
||||
create_config_table()
|
||||
create_long_term_stats_table()
|
||||
create_list_view()
|
||||
create_done_song_view()
|
||||
init_event_id()
|
||||
|
||||
|
||||
def create_entry_table():
|
||||
with get_db_engine().connect() as conn:
|
||||
stmt = text(
|
||||
@ -75,6 +86,17 @@ def create_song_table():
|
||||
conn.commit()
|
||||
|
||||
|
||||
def create_long_term_stats_table():
|
||||
with get_db_engine().connect() as conn:
|
||||
stmt = text("""CREATE TABLE IF NOT EXISTS `long_term_stats` (
|
||||
`Id` INTEGER,
|
||||
`Playbacks` INTEGER,
|
||||
PRIMARY KEY (`Id`)
|
||||
)""")
|
||||
conn.execute(stmt)
|
||||
conn.commit()
|
||||
|
||||
|
||||
def create_list_view():
|
||||
with get_db_engine().connect() as conn:
|
||||
stmt = text("""CREATE OR REPLACE VIEW `Liste` AS
|
||||
@ -121,6 +143,24 @@ def get_played_list():
|
||||
return cur.fetchall()
|
||||
|
||||
|
||||
def get_song_suggestions(count: int):
|
||||
with get_db_engine().connect() as conn:
|
||||
# Get the top 10 songs with the most plays from the long_term_stats table and join them with the songs table to get the song details.
|
||||
# Exclude songs that are already in the queue, or in the done_songs table.
|
||||
stmt = text("""
|
||||
SELECT s.Id, s.Title, s.Artist, s.Year, s.Duo, s.Explicit, s.Styles, s.Languages
|
||||
FROM long_term_stats lts
|
||||
LEFT JOIN songs s ON lts.Id = s.Id
|
||||
LEFT JOIN entries e ON lts.Id = e.Song_Id
|
||||
LEFT JOIN done_songs ds ON lts.Id = ds.Song_Id
|
||||
WHERE e.Id IS NULL AND ds.Song_Id IS NULL
|
||||
ORDER BY lts.Playbacks DESC
|
||||
LIMIT :count;
|
||||
""")
|
||||
cur = conn.execute(stmt, {"count": count})
|
||||
return cur.fetchall()
|
||||
|
||||
|
||||
def get_song_list():
|
||||
with get_db_engine().connect() as conn:
|
||||
stmt = text("SELECT Artist || \" - \" || Title AS Song, Id FROM songs;")
|
||||
@ -224,6 +264,23 @@ def check_queue_length():
|
||||
return cur.fetchall()[0][0]
|
||||
|
||||
|
||||
def transfer_playbacks():
|
||||
with get_db_engine().connect() as conn:
|
||||
# Use SQL to update the long_term_stats table. Add the playbacks of the songs in the done_songs table to the playbacks of the songs in the long_term_stats table.
|
||||
stmt = text("""
|
||||
INSERT INTO long_term_stats(Id, Playbacks)
|
||||
SELECT ds.Song_Id, ds.Plays
|
||||
FROM done_songs ds
|
||||
LEFT JOIN long_term_stats lts ON ds.Song_Id = lts.Id
|
||||
ON DUPLICATE KEY
|
||||
UPDATE Playbacks = lts.Playbacks + VALUES(Playbacks);
|
||||
""")
|
||||
result = conn.execute(stmt)
|
||||
print(result)
|
||||
conn.commit()
|
||||
return True
|
||||
|
||||
|
||||
def clear_played_songs():
|
||||
with get_db_engine().connect() as conn:
|
||||
conn.execute(text("DELETE FROM done_songs"))
|
||||
|
Reference in New Issue
Block a user