Thread viewer for Bluesky

don't start scan if list/users are missing

Changed files
+31 -16
+31 -16
posting_stats_page.js
··· 96 96 let requestedDays = this.selectedDaysRange(); 97 97 let scanType = this.scanType.value; 98 98 99 - this.startScan(startTime, requestedDays); 100 - 101 99 /** @type {FetchAllOnPageLoad} */ 102 100 let onPageLoad = (data) => { 103 101 if (this.scanStartTime != startTime) { ··· 108 106 }; 109 107 110 108 if (scanType == 'home') { 111 - let items = await accountAPI.loadHomeTimeline(requestedDays, { 109 + this.startScan(startTime, requestedDays); 110 + 111 + let posts = await accountAPI.loadHomeTimeline(requestedDays, { 112 112 onPageLoad: onPageLoad, 113 113 keepLastPage: true 114 114 }); 115 115 116 - this.updateResultsTable(items, startTime, requestedDays); 116 + this.updateResultsTable(posts, startTime, requestedDays); 117 117 } else if (scanType == 'list') { 118 118 let list = this.listSelect.value; 119 - let items = await accountAPI.loadListTimeline(list, requestedDays, { 119 + 120 + if (!list) { 121 + return; 122 + } 123 + 124 + this.startScan(startTime, requestedDays); 125 + 126 + let posts = await accountAPI.loadListTimeline(list, requestedDays, { 120 127 onPageLoad: onPageLoad, 121 128 keepLastPage: true 122 129 }); 123 130 124 - this.updateResultsTable(items, startTime, requestedDays, { showReposts: false }); 131 + this.updateResultsTable(posts, startTime, requestedDays, { showReposts: false }); 125 132 } else if (scanType == 'users') { 126 133 let textarea = $(this.pageElement.querySelector('textarea'), HTMLTextAreaElement); 127 134 let users = textarea.value.split(/\n/).map(x => x.trim()).filter(x => x.length > 0); 135 + 136 + if (users.length == 0) { 137 + return; 138 + } 139 + 140 + this.startScan(startTime, requestedDays); 141 + 128 142 let dids = await Promise.all(users.map(u => accountAPI.resolveHandle(u))); 129 - 130 143 this.resetUserProgress(dids); 131 144 132 145 let requests = dids.map(did => this.appView.loadUserTimeline(did, requestedDays, { ··· 142 155 })); 143 156 144 157 let datasets = await Promise.all(requests); 145 - let items = datasets.flat(); 158 + let posts = datasets.flat(); 146 159 147 - this.updateResultsTable(items, startTime, requestedDays, { 160 + this.updateResultsTable(posts, startTime, requestedDays, { 148 161 showTotal: false, showPercentages: false, countFetchedDays: false 149 162 }); 150 163 } else { 151 - let items = await accountAPI.loadUserTimeline(accountAPI.user.did, requestedDays, { 164 + this.startScan(startTime, requestedDays); 165 + 166 + let posts = await accountAPI.loadUserTimeline(accountAPI.user.did, requestedDays, { 152 167 filter: 'posts_no_replies', 153 168 onPageLoad: onPageLoad, 154 169 keepLastPage: true 155 170 }); 156 171 157 - this.updateResultsTable(items, startTime, requestedDays, { showTotal: false, showPercentages: false }); 172 + this.updateResultsTable(posts, startTime, requestedDays, { showTotal: false, showPercentages: false }); 158 173 } 159 174 } 160 175 ··· 218 233 } 219 234 220 235 /** 221 - * @param {json[]} items 236 + * @param {json[]} posts 222 237 * @param {number} startTime 223 238 * @param {number} requestedDays 224 239 * @param {{ showTotal?: boolean, showPercentages?: boolean, showReposts?: boolean, countFetchedDays?: boolean }} [options] 225 240 */ 226 241 227 - updateResultsTable(items, startTime, requestedDays, options = {}) { 242 + updateResultsTable(posts, startTime, requestedDays, options = {}) { 228 243 if (this.scanStartTime != startTime) { 229 244 return; 230 245 } ··· 234 249 let allReposts = 0; 235 250 let allNormalPosts = 0; 236 251 237 - let last = items.at(-1); 252 + let last = posts.at(-1); 238 253 239 254 if (!last) { 240 255 this.stopScan(); ··· 258 273 } 259 274 260 275 let timeLimit = startTime - requestedDays * 86400 * 1000; 261 - items = items.filter(x => (feedPostTime(x) > timeLimit)); 276 + posts = posts.filter(x => (feedPostTime(x) > timeLimit)); 262 277 263 - for (let item of items) { 278 + for (let item of posts) { 264 279 if (item.reply) { continue; } 265 280 266 281 let user = item.reason ? item.reason.by : item.post.author;