Adapt for current songs

This commit is contained in:
matthias@matsewe.de
2024-05-24 23:21:50 +02:00
parent 41c0c1912f
commit 010d6fc8d6
6 changed files with 33 additions and 14 deletions

View File

@@ -2,10 +2,12 @@ import app.models as models
from sqlalchemy import func
from sqlalchemy.orm.attributes import flag_modified
def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]:
session_entry = activate_session(db, session_name)
votes = db.query(models.Vote).filter(models.Vote.session_id == session_entry.id).subquery()
votes = db.query(models.Vote).filter(
models.Vote.session_id == session_entry.id).subquery()
songs_and_votes = db.query(
models.Song, votes.c.vote
@@ -17,17 +19,19 @@ def get_songs_and_vote_for_session(db, session_name) -> list[models.Song]:
def get_all_songs_and_votes(db) -> dict[int, dict[int, int]]:
_v = db.query(models.Vote.song_id, models.Vote.vote, func.count(models.Vote.song_id)).group_by(models.Vote.song_id, models.Vote.vote).all()
_v = db.query(models.Vote.song_id, models.Vote.vote, func.count(
models.Vote.song_id)).group_by(models.Vote.song_id, models.Vote.vote).all()
votes = {}
for v in _v:
if v[0] not in votes:
votes[v[0]] = {-1 : 0, 0 : 0, 1 : 0}
votes[v[0]] = {-1: 0, 0: 0, 1: 0}
votes[v[0]][v[1]] = v[2]
return votes
def create_song(db,
og_artist,
aca_artist,
@@ -37,6 +41,7 @@ def create_song(db,
yt_id,
spfy_id,
thumbnail,
is_current,
is_aca,
arng_url,
categories,
@@ -51,6 +56,7 @@ def create_song(db,
yt_id=yt_id,
spfy_id=spfy_id,
thumbnail=thumbnail,
is_current=is_current,
is_aca=is_aca,
arng_url=arng_url,
categories=categories,
@@ -69,7 +75,8 @@ def create_or_update_vote(db, song_id, session_name, vote):
if vote_entry:
vote_entry.vote = str(vote) # type: ignore
else:
vote_entry = models.Vote(song_id=song_id, session_id=session_entry.id, vote=vote)
vote_entry = models.Vote(
song_id=song_id, session_id=session_entry.id, vote=vote)
db.add(vote_entry)
db.commit()
@@ -87,6 +94,7 @@ def activate_session(db, session_name):
return session_entry
def deactivate_session(db, session_name):
session_entry = db.query(models.Session).filter(
(models.Session.session_name == session_name)).first()

View File

@@ -39,8 +39,13 @@ async def vote(request: Request, session_id: str, db: Annotated[Session, Depends
all_categories = set()
wildcard_songs = []
current_songs = []
for song in songs:
if song.is_current:
current_songs.append(song)
continue
if not song.is_aca:
wildcard_songs.append(song)
continue
@@ -51,11 +56,13 @@ async def vote(request: Request, session_id: str, db: Annotated[Session, Depends
all_categories.update(song.categories.keys())
songs_by_category["Wildcard (nicht a cappella)"] = wildcard_songs
songs_by_category["Aktuelles Programm"] = current_songs
all_categories = list(all_categories)
all_categories.sort()
all_categories.append("Wildcard (nicht a cappella)")
all_categories.append("Aktuelles Programm")
print(all_categories)

View File

@@ -18,6 +18,7 @@ class Song(Base):
yt_id: Mapped[Optional[str]]
spfy_id: Mapped[Optional[str]]
thumbnail: Mapped[Optional[str]]
is_current: Mapped[Optional[bool]]
is_aca: Mapped[Optional[bool]]
arng_url: Mapped[Optional[str]]
categories: Mapped[Optional[dict[str, bool]]]

View File

@@ -75,7 +75,7 @@ async def create_upload_file(db: Session = Depends(get_db)):
song_list = song_list.replace({np.nan: None})
song_list = song_list.replace({"n/a": None})
category_names = list(song_list.iloc[0][7:16])
category_names = list(song_list.iloc[0][8:17])
for i, row in song_list[1:].iterrows():
row = np.array(row)
@@ -84,9 +84,9 @@ async def create_upload_file(db: Session = Depends(get_db)):
spfy_id = get_spotify_id(row[3])
categories = {n: v for n, v in zip(
category_names, row[7:16] != None)}
category_names, row[8:17] != None)}
if not np.any(list(categories.values())):
if (not np.any(list(categories.values()))) and (row[5] != "ja"):
continue
create_song(db,
@@ -98,9 +98,10 @@ async def create_upload_file(db: Session = Depends(get_db)):
yt_id=yt_id,
spfy_id=spfy_id,
thumbnail=get_thumbnail(row[3]),
is_aca=row[5] == "ja",
arng_url=row[6],
is_current=row[5] == "ja",
is_aca=row[6] == "ja",
arng_url=row[7],
categories=categories,
main_category=category_names[get_main_category(row[7:16])],
singable=row[16] != "nein"
main_category=category_names[get_main_category(row[8:17])],
singable=row[17] != "nein"
)

View File

@@ -11,6 +11,7 @@ class Song(BaseModel):
yt_id: Optional[str]
spfy_id: Optional[str]
thumbnail: Optional[str]
is_current: Optional[bool]
is_aca: Optional[bool]
arng_url: Optional[str]
categories: Optional[dict[str, bool]]

View File

@@ -2,7 +2,7 @@
<html>
<head>
<title>Liederwahl</title>
<title>Choriosity Liederwahl</title>
<link rel="apple-touch-icon" href="https://choriosity.de/assets/images/apple-touch-icon.png" type="image/png">
<link rel="alternate icon" href="https://choriosity.de/assets/images/favicon.png" type="image/png">
@@ -31,6 +31,7 @@
$(window).on("load", activate_session);
$(window).on("beforeunload", deactivate_session);
$(window).on("unload", deactivate_session);
$(window).on("pagehide", deactivate_session);
$(document).on('visibilitychange', function () {
if (document.visibilityState == 'hidden') {