aboutsummaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
authorSyndamia <kamen@syndamia.com>2025-02-02 20:57:31 +0200
committerSyndamia <kamen@syndamia.com>2025-02-02 20:57:31 +0200
commitcea80fb8fafa21f3e8078be720826da2e4642719 (patch)
treef0c0d3d52ab5bd54718f9c9984cd13424e8e1586 /views
parente152b791f45b02c20b00e248f1502bc144e8a9a8 (diff)
downloadnowayforward_human-cea80fb8fafa21f3e8078be720826da2e4642719.tar
nowayforward_human-cea80fb8fafa21f3e8078be720826da2e4642719.tar.gz
nowayforward_human-cea80fb8fafa21f3e8078be720826da2e4642719.zip
feat: Async and queued page archival
Diffstat (limited to 'views')
-rw-r--r--views/admin/index.php18
-rw-r--r--views/archive/create/index.php47
-rw-r--r--views/archive/create/status.php5
3 files changed, 70 insertions, 0 deletions
diff --git a/views/admin/index.php b/views/admin/index.php
index 750a246..e633d32 100644
--- a/views/admin/index.php
+++ b/views/admin/index.php
@@ -35,6 +35,24 @@
<input type="submit" value="Delete">
</form>
+ <h2>Archive queue</h2>
+
+ <button id="manual-start">Start worker manually</button>
+ <script type="text/javascript">
+ document.getElementById('manual-start').onclick = function() {
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = function() {
+ if (request.readyState < 4) return;
+
+ console.log(request.responseText);
+ }
+ request.open("POST", "/archive/create", true);
+ request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+ request.withCredentials = true;
+ request.send('async=true&url=localhost&manual=true');
+ }
+ </script>
+
<?php else: ?>
<h2>Permission denied, you're not an admin!</h2>
diff --git a/views/archive/create/index.php b/views/archive/create/index.php
index 378d2de..b435e4d 100644
--- a/views/archive/create/index.php
+++ b/views/archive/create/index.php
@@ -1 +1,48 @@
<h2>Archiving <?= $url ?>...</h2>
+
+<p>Current position in queue: <span id="position">unavailable</span></p>
+
+<script type="text/javascript">
+// If our request is the one that starts the worker, it's output will be 0
+// and it won't update the variable soon (or ever)
+// But if it's not the worker, the variable will be updated (quickly)
+var queuePos = 0;
+
+function requestDownload(url) {
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = function() {
+ if (request.readyState < 4) return;
+
+ console.log(request.responseText);
+ queuePos = request.responseText;
+ }
+ request.open("POST", "#", true);
+ request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+ request.withCredentials = true;
+ request.send('async=true&url=' +
+ url +
+ '<?php if (array_key_exists("manual", $_POST)) { echo "&manual=" . $_POST["manual"]; } ?>');
+}
+requestDownload('<?= $url ?>');
+
+const position = document.getElementById('position');
+function updatePosition(url) {
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = function() {
+ if (request.readyState < 4) return;
+
+ if (queuePos < request.responseText) {
+ window.location.href = '/archive/?url=' + url;
+ return;
+ }
+
+ position.innerText = queuePos - request.responseText;
+ setTimeout(updatePosition, 1000, url);
+ }
+ request.open("POST", "/archive/create/status.php", true);
+ request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+ request.send('url=' + url);
+}
+
+updatePosition('<?= $url ?>');
+</script>
diff --git a/views/archive/create/status.php b/views/archive/create/status.php
new file mode 100644
index 0000000..d020c4a
--- /dev/null
+++ b/views/archive/create/status.php
@@ -0,0 +1,5 @@
+<?php
+
+session_start();
+
+echo $_SESSION['archive_current'];