diff --git a/owe.js b/owe.js
index e335b24..83f536b 100644
--- a/owe.js
+++ b/owe.js
@@ -2,7 +2,7 @@ var previousTextLength;
var config_data;
var unread_words = 0;
-function loadSentences(alertIfNew = false, increaseUnread = true) {
+async function loadSentences(alertIfNew = false, increaseUnread = true) {
fetch("./data/sentences.txt", {headers: {"Cache-Control": "no-cache, no-store"}})
.then((response) => {
return response.text().then((text) => {
@@ -44,7 +44,7 @@ function loadSentences(alertIfNew = false, increaseUnread = true) {
});
}
-function loadConfig() {
+async function loadConfig() {
fetch("./data/config.json", {headers: {"Cache-Control": "no-cache, no-store"}}).then((response) => {
return response.text().then((text) => {
config_data = JSON.parse(text);
@@ -108,30 +108,133 @@ function resetUnread() {
}
function getNextPlayer() {
- var spans = document.querySelector(".sentences").getElementsByTagName("span");
- var lastspan = spans[spans.length - 1];
- var lastplayer = lastspan.dataset.user;
- var idx_next = (config_data.users.indexOf(lastplayer) + 1) % config_data.users.length;
- return config_data.users[idx_next];
+ var sentencesDiv = document.querySelector(".sentences");
+ var spans = sentencesDiv.getElementsByTagName("span");
+
+ if (spans.length > 0) {
+ var lastSpan = spans[spans.length - 1];
+ var lastPlayer = lastSpan.dataset.user;
+ var idxNext = (config_data.users.indexOf(lastPlayer) + 1) % config_data.users.length;
+ return config_data.users[idxNext];
+ } else {
+ // If there are no spans, determine the next user from the archive file
+ var archiveFileUrl = getArchiveFileUrl(); // Replace with the actual function that returns the archive file URL
+ return getLastUserFromArchive(archiveFileUrl)
+ .then(lastUser => {
+ if (lastUser) {
+ // Calculate the next user's index based on the list of users
+ var idxNext = (config_data.users.indexOf(lastUser) + 1) % config_data.users.length;
+ return config_data.users[idxNext];
+ } else {
+ // Handle the case when the archive file is empty or contains no spans
+ console.error("Archive file is empty or contains no spans.");
+ return null;
+ }
+ })
+ .catch(error => {
+ console.error("Error fetching archive file:", error);
+ return null;
+ });
+ }
}
-function getTimeSinceLast() {
- var spans = document.querySelector(".sentences").getElementsByTagName("span");
- var lastspan = spans[spans.length - 1];
- var lasttime = lastspan.dataset.time;
- return Date.now()/1e3 - lasttime; // in seconds
+
+function getLastUserFromArchive(archiveFileUrl) {
+ // Fetch the last span from the archive file and extract the username
+ return getLastSpanFromArchive(archiveFileUrl)
+ .then(lastArchiveSpan => {
+ if (lastArchiveSpan) {
+ return lastArchiveSpan.dataset.user;
+ } else {
+ // Handle the case when the archive file is empty or contains no spans
+ console.error("Archive file is empty or contains no spans.");
+ return null;
+ }
+ })
+ .catch(error => {
+ console.error("Error fetching archive file:", error);
+ return null;
+ });
}
-function initializeLoginArea() {
- var loginArea = document.getElementById('login_area');
- //loginArea.innerHTML = "Eingeloggt als NOCH NICHT IMPLEMENTIERT";
- loginArea.innerHTML = ""; // first clear it out
- loginArea.innerHTML += getNextPlayer() + " ist dran!
\n";
- var relative_time = getTimeSinceLast();
- var days = Math.floor(relative_time/(3600*24));
- var hours = Math.floor(relative_time/(3600))%24;
- var minutes = Math.floor(relative_time/(60))%60;
- loginArea.innerHTML += "Schon seit " + days + " Tagen, " + hours + " Stunden und " + minutes + " Minuten!";
+function getLastSpanFromArchive(archiveFileUrl) {
+ // Make an asynchronous request to fetch the content of the archive file
+ return fetch(archiveFileUrl)
+ .then(response => response.text())
+ .then(htmlContent => {
+ // Parse the HTML content to get the last span
+ var parser = new DOMParser();
+ var doc = parser.parseFromString(htmlContent, 'text/html');
+ var archiveSpans = doc.querySelectorAll("span");
+
+ if (archiveSpans.length > 0) {
+ return archiveSpans[archiveSpans.length - 1];
+ } else {
+ // Return null if the archive file is empty or contains no spans
+ return null;
+ }
+ });
+}
+
+// bullshit implementation:
+function getArchiveFileUrl() {
+ return "./data/sentences-archive-25-nov-23-26-jan-24.txt";
+}
+
+async function getTimeSinceLast() {
+ var sentencesDiv = document.querySelector(".sentences");
+ var spans = sentencesDiv.getElementsByTagName("span");
+
+ if (spans.length > 0) {
+ var lastSpan = spans[spans.length - 1];
+ var lastTime = lastSpan.dataset.time;
+ return Date.now() / 1e3 - lastTime; // in seconds
+ } else {
+ // If there are no spans, determine the last time from the archive file
+ var archiveFileUrl = getArchiveFileUrl(); // Replace with the actual function that returns the archive file URL
+ return getLastTimeFromArchive(archiveFileUrl);
+ }
+}
+
+async function getLastTimeFromArchive(archiveFileUrl) {
+ try {
+ // Fetch the last span from the archive file
+ var lastSpan = await getLastSpanFromArchive(archiveFileUrl);
+
+ if (lastSpan) {
+ var lastTime = lastSpan.dataset.time;
+ return Date.now() / 1e3 - lastTime; // in seconds
+ } else {
+ // Handle the case when the archive file is empty or contains no spans
+ console.error("Archive file is empty or contains no spans.");
+ return null;
+ }
+ } catch (error) {
+ console.error("Error fetching archive file:", error);
+ return null;
+ }
+}
+
+
+async function initializeLoginArea() {
+ var loginArea = document.getElementById('login_area');
+
+ // Use async/await to wait for the result of getNextPlayer
+ try {
+ var nextPlayer = await getNextPlayer();
+ var relative_time = await getTimeSinceLast();
+ // Clear the login area
+ loginArea.innerHTML = "";
+ loginArea.innerHTML += nextPlayer + " ist dran!
\n";
+
+ var days = Math.floor(relative_time / (3600 * 24));
+ var hours = Math.floor(relative_time / 3600) % 24;
+ var minutes = Math.floor(relative_time / 60) % 60;
+ loginArea.innerHTML += "Schon seit " + days + " Tagen, " + hours + " Stunden und " + minutes + " Minuten!";
+ } catch (error) {
+ // Handle any errors that may occur in the getNextPlayer function
+ console.error("Error in initializeLoginArea:", error);
+ }
}
window.onfocus = resetUnread;