Thread viewer for Bluesky

allow cancelling scan before it finishes

+5 -1
minisky.js
··· 203 203 reqParams.cursor = cursor; 204 204 205 205 if (options.onPageLoad) { 206 - options.onPageLoad(items); 206 + let result = options.onPageLoad(items); 207 + 208 + if (result?.cancel) { 209 + break; 210 + } 207 211 } 208 212 209 213 if (items.length == 0 || !cursor) {
+26 -3
skythread.js
··· 127 127 }); 128 128 129 129 $(postingStatsPage.querySelector('form')).addEventListener('submit', (e) => { 130 - scanPostingStats(); 130 + if (!window.scanStartTime) { 131 + scanPostingStats(); 132 + } else { 133 + stopScan(); 134 + } 131 135 }); 132 136 133 137 $(postingStatsPage.querySelector('input[type="range"]')).addEventListener('input', (e) => { ··· 475 479 476 480 function scanPostingStats() { 477 481 let submit = $(postingStatsPage.querySelector('input[type=submit]'), HTMLInputElement); 478 - submit.disabled = true; 482 + submit.value = 'Cancel'; 479 483 480 484 let range = $(postingStatsPage.querySelector('input[type=range]'), HTMLInputElement); 481 485 let days = parseInt(range.value, 10); ··· 492 496 tbody.innerHTML = ''; 493 497 494 498 let now = new Date().getTime(); 499 + window.scanStartTime = now; 495 500 496 501 accountAPI.loadTimeline(days, { 497 502 onPageLoad: (data) => { 498 503 let minTime = now; 499 504 505 + if (window.scanStartTime != now) { 506 + return { cancel: true }; 507 + } 508 + 500 509 for (let item of data) { 501 510 let timestamp = item.reason ? item.reason.indexedAt : item.post.record.createdAt; 502 511 let date = Date.parse(timestamp); ··· 507 516 progressBar.value = daysBack; 508 517 } 509 518 }).then(items => { 519 + if (window.scanStartTime != now) { 520 + return; 521 + } 522 + 510 523 let users = {}; 511 524 let total = 0; 512 525 ··· 558 571 } 559 572 560 573 table.style.display = 'table'; 561 - submit.disabled = false; 574 + submit.value = 'Start scan'; 562 575 progressBar.style.display = 'none'; 576 + window.scanStartTime = undefined; 563 577 }); 578 + } 579 + 580 + function stopScan() { 581 + let submit = $(postingStatsPage.querySelector('input[type=submit]'), HTMLInputElement); 582 + submit.value = 'Start scan'; 583 + window.scanStartTime = undefined; 584 + 585 + let progressBar = $(postingStatsPage.querySelector('input[type=submit] + progress'), HTMLProgressElement); 586 + progressBar.style.display = 'none'; 564 587 } 565 588 566 589 function showNotificationsPage() {
+1
types.d.ts
··· 11 11 declare var api: BlueskyAPI; 12 12 declare var isIncognito: boolean; 13 13 declare var biohazardEnabled: boolean; 14 + declare var scanStartTime: number | undefined; 14 15 declare var loginDialog: HTMLElement; 15 16 declare var accountMenu: HTMLElement; 16 17 declare var postingStatsPage: HTMLElement;