Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions app/routes/screens.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,18 @@

@screens_bp.route("/api/screens")
def get_screens():
return jsonify(
{"version": os.getenv("GIT_COMMIT", None), "screens": ["/table", "/pending"]}
)
screens = ["/table"]

try:
if len(app.github_service.latest_data["pending_reviews"]) > 0:
screens.append("/pending")
except:
pass

if os.getenv("COUNT_DOWN"):
screens.append("/countdown")

return jsonify({"version": os.getenv("GIT_COMMIT", None), "screens": screens})


@screens_bp.route("/test")
Expand Down Expand Up @@ -57,3 +66,18 @@ def table_screen():
**app.github_service.latest_data,
last_updated=app.github_service.last_updated,
)


@screens_bp.route("/countdown")
def countdown():
countdown_env = os.getenv("COUNT_DOWN", "0:Unknown Event")
timestamp, event_name = countdown_env.split(":", 1)

try:
target_time = int(timestamp)
except ValueError:
target_time = 0 # Fallback if invalid

return render_template(
"countdown.html", target_time=target_time, event_name=event_name
)
21 changes: 18 additions & 3 deletions app/services/github_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ def update_general_data(self):
for label in pr.labels
],
"updated_at": pr.updated_at,
"is_draft": pr.draft,
}
)

Expand All @@ -124,6 +125,9 @@ def update_pending_reviews(self):
for pr in pull_requests:
pr_details = repo.get_pull(pr.number)

if pr.draft: # Skip drafts
continue

# Check for users with pending review requests
requested_reviewers = pr_details.get_review_requests()
for reviewer in requested_reviewers[
Expand All @@ -134,7 +138,7 @@ def update_pending_reviews(self):
{
"pr_number": pr.number,
"repo_name": repo.name,
"is_review": True,
"is_review": True, # This is a review request
}
)

Expand All @@ -150,12 +154,23 @@ def update_pending_reviews(self):
{
"pr_number": pr.number,
"repo_name": repo.name,
"is_review": False,
"is_review": False, # Regular assignment
}
)

# Sort each reviewer's assignments: review-pending first
for reviewer in pending_reviews:
pending_reviews[reviewer] = sorted(
pending_reviews[reviewer], key=lambda x: not x["is_review"]
)

# Sort reviewers by the number of assignments (most important at top)
sorted_reviewers = sorted(
pending_reviews.items(), key=lambda x: len(x[1]), reverse=True
)

# Update pending reviews in the global data
self.latest_data["pending_reviews"] = [
{"name": name, "assignments": assignments}
for name, assignments in pending_reviews.items()
for name, assignments in sorted_reviewers
]
31 changes: 31 additions & 0 deletions app/static/scripts/countdown.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
document.addEventListener("DOMContentLoaded", () => {
const countdownElement = document.getElementById("countdown");
const targetTime = parseInt(countdownElement.dataset.targetTime) * 1000; // Convert to milliseconds

function updateCountdown() {
const now = Date.now();
let timeLeft = targetTime - now;

if (timeLeft < 0) {
countdownElement.innerText = "000:00:00:00.00";
return;
}

let days = Math.floor(timeLeft / (1000 * 60 * 60 * 24));
let hours = Math.floor((timeLeft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
let minutes = Math.floor((timeLeft % (1000 * 60 * 60)) / (1000 * 60));
let seconds = Math.floor((timeLeft % (1000 * 60)) / 1000);
let tenths = Math.floor((timeLeft % 1000) / 10); // Extract tenths & hundredths

let countdownString = `${days.toString().padStart(3, '0')}:` +
`${hours.toString().padStart(2, '0')}:` +
`${minutes.toString().padStart(2, '0')}:` +
`${seconds.toString().padStart(2, '0')}.` +
`${tenths.toString().padStart(2, '0')}`; // Show two-digit tenths & hundredths

countdownElement.innerText = countdownString;
}

setInterval(updateCountdown, 10); // Update every 10ms
updateCountdown();
});
35 changes: 35 additions & 0 deletions app/static/styles/countdown.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
body {
font-family: "Courier New", Courier, monospace;
background: rgb(40, 40, 40);
color: white;
text-align: center;
}

.countdown-container {
margin-top: 8vh;
}

h1 {
font-size: 12em;
color: rgb(163, 0, 46);
text-shadow: 2px 2px 5px red;
}

#countdown {
font-size: 7em;
font-weight: bold;
letter-spacing: 5px;
background: rgb(40, 40, 40);
color: rgb(163, 0, 46);
padding: 20px;
border-radius: 10px;
display: flex; /* Use flexbox for centering */
justify-content: center; /* Center text horizontally */
align-items: center; /* Center text vertically */
text-align: center;
text-shadow: 2px 2px 10px red;
width: 100vw; /* Full viewport width */
height: auto; /* Auto height */
box-sizing: border-box; /* Include padding in width calculation */
overflow: hidden; /* Prevent any text overflow */
}
6 changes: 6 additions & 0 deletions app/static/styles/table.css
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,12 @@ body {
white-space: nowrap; /* Prevent text wrapping */
}

/* Draft PR Styling */
.draft-pr {
opacity: 0.5;
background: #444 !important;
}

/* ========================= */
/* Responsive Tweaks */
/* ========================= */
Expand Down
19 changes: 19 additions & 0 deletions app/templates/countdown.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Countdown to {{ event_name }}</title>
<link rel="stylesheet" href="/static/styles/countdown.css">
</head>

<body>
<div class="countdown-container">
<h1>{{ event_name }}</h1>
<div id="countdown" data-target-time="{{ target_time }}"></div>
</div>

<script src="/static/scripts/countdown.js"></script>
</body>

</html>
2 changes: 1 addition & 1 deletion app/templates/table.html
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ <h2>Issues ({{ issues_count }})</h2>
<h2>Pull Requests ({{ pull_requests_count }})</h2>
<div class="card-container">
{% for pr in pull_requests %}
<div class="card">
<div class="card {% if pr.is_draft %}draft-pr{% endif %}">
<!-- Number & Repo Name -->
<div class="number-box">
<div class="card-number">#{{ pr.number }}</div>
Expand Down
Loading