Thread viewer for Bluesky

don't start scan if list/users are missing

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