titles, weights = zip(*titles)
title = random.choices(titles, weights)[0]
+ rows = db.query(
+ """
+ SELECT * FROM jams
+ INNER JOIN users ON jams.ownerid = users.userid
+ """)
+ all_jams = [jams.Jam.from_row(r) for r in rows]
+ all_events = []
+ for j in all_jams:
+ all_events.extend(j.events)
+ ongoing_events, upcoming_events, _, _ = jams._sort_events(all_events)
+
page_songs = songs.get_latest(50)
- return render_template("index.html", users=all_users, songs=page_songs, page_title=title)
+ return render_template(
+ "index.html",
+ users=all_users,
+ songs=page_songs,
+ page_title=title,
+ ongoing_events=ongoing_events,
+ upcoming_events=upcoming_events)
@app.get("/site-news")
def site_news():
INNER JOIN users ON jams.ownerid = users.userid
WHERE jam_events.threadid = ?
""", [comment["threadid"]], one=True)
+ # TODO: This is duplicated in the JamEvent class
+ startdate = datetime.fromisoformat(jam_event["startdate"]) if jam_event["startdate"] else None
+ hidden = ((startdate is None) or startdate > datetime.now(timezone.utc))
comment["eventid"] = jam_event["eventid"]
comment["jamid"] = jam_event["jamid"]
- comment["title"] = jam_event["title"]
+ comment["title"] = "[Upcoming Event]" if hidden else jam_event["title"]
comment["content_userid"] = jam_event["userid"]
comment["content_username"] = jam_event["username"]
from flask import abort, Blueprint, g, redirect, render_template, request, url_for
-from . import auth, comments, db, songs
+from . import auth, comments, db, jams, songs
from .sanitize import sanitize_user_text
bp = Blueprint("jams", __name__, url_prefix="/jams")
🎶 Welcome to a little song place. Make music, and share it with friends! 🎵
</p>
+{% if ongoing_events or upcoming_events %}
+<h2>Jams</h2>
+{% from "jam-event-list.html" import jam_event_list %}
+{{ jam_event_list("Ongoing Events", ongoing_events, "Ends", "end") }}
+{{ jam_event_list("Upcoming Events", upcoming_events, "Starts", "start") }}
+{% endif %}
+
<h2>Humans</h2>
<p>
Check out the music and profiles of the fine folks below!
{% for event in events %}
<li class="jam-event-list-entry">
{% if event.hidden -%}
- <span class="visibility-indicator">[Upcoming Event]</span>
+ <span class="visibility-indicator">
+ <a href="/jams/{{ event.jamid }}/events/{{ event.eventid }}">[Upcoming Event]</a>
+ </span>
{%- else -%}
<span class="jam-event-list-title">
<a href="/jams/{{ event.jamid }}/events/{{ event.eventid }}">{{ event.title }}</a>
</div>
<br/>
<div>
- {{ jam.description }}
+ {{ (jam.description.replace("\n", "<br>"))|safe }}
</div>
{% if not event.hidden -%}
<h2>Description</h2>
<div>
- {{ jam.description|safe }}
+ {{ (jam.description.replace("\n", "<br>"))|safe }}
</div>
<h2>Events</h2>
client.post("/login", data={"username": "user", "password": "password"})
response = client.get("/activity")
- assert b"New Event" in response.data, response.data.decode()
+ assert b"[Upcoming Event]" in response.data, response.data.decode()
assert b"hey cool event" in response.data, response.data.decode()
def test_activity_for_reply_to_comment(client):