Thread viewer for Bluesky

allow cancelling scan before it finishes

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