diff options
| author | Syndamia <kamen@syndamia.com> | 2025-02-02 20:57:31 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2025-02-02 20:57:31 +0200 |
| commit | cea80fb8fafa21f3e8078be720826da2e4642719 (patch) | |
| tree | f0c0d3d52ab5bd54718f9c9984cd13424e8e1586 /views | |
| parent | e152b791f45b02c20b00e248f1502bc144e8a9a8 (diff) | |
| download | nowayforward_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.php | 18 | ||||
| -rw-r--r-- | views/archive/create/index.php | 47 | ||||
| -rw-r--r-- | views/archive/create/status.php | 5 |
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']; |
