+31
-16
posting_stats_page.js
+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;