Add message counting and date-bounded scrapes
This commit is contained in:
+59
-3
@@ -199,7 +199,7 @@
|
||||
renderGrid();
|
||||
}
|
||||
|
||||
async function startScrape(channelId, guildId, mode, downloadDir) {
|
||||
async function startScrape(channelId, guildId, mode, downloadDir, after, before) {
|
||||
if (!channelId) {
|
||||
setStatus("no channel selected");
|
||||
return;
|
||||
@@ -211,7 +211,9 @@
|
||||
guildId: guildId ?? null,
|
||||
mode,
|
||||
backend: guildId ? "auto" : "puppet",
|
||||
downloadDir: downloadDir ?? null
|
||||
downloadDir: downloadDir ?? null,
|
||||
after: after ?? null,
|
||||
before: before ?? null
|
||||
});
|
||||
setStatus(`started ${scrape.id} (${mode})`);
|
||||
scrapeModal.hidden = true;
|
||||
@@ -670,6 +672,16 @@
|
||||
placeholder="/path/to/download/"
|
||||
hidden
|
||||
/>
|
||||
<div class="vk-media-toolbar">
|
||||
<span class="vk-media-status">From</span>
|
||||
<input id="confirm-after" class="vk-media-input" type="date" />
|
||||
<span class="vk-media-status">To</span>
|
||||
<input id="confirm-before" class="vk-media-input" type="date" />
|
||||
<button id="confirm-count" class="btn btn-secondary vk-small-btn" type="button">
|
||||
Check Message Count
|
||||
</button>
|
||||
<span id="confirm-count-result" class="vk-media-status"></span>
|
||||
</div>
|
||||
<div class="vk-media-toolbar">
|
||||
<button id="confirm-cancel" class="btn btn-secondary vk-small-btn" type="button">Cancel</button>
|
||||
<button id="confirm-start" class="btn btn-primary vk-small-btn" type="button">Start</button>
|
||||
@@ -700,8 +712,40 @@
|
||||
destInput.hidden = !checkbox.checked;
|
||||
};
|
||||
|
||||
const afterInput = confirmModal.querySelector("#confirm-after");
|
||||
const beforeInput = confirmModal.querySelector("#confirm-before");
|
||||
const countResult = confirmModal.querySelector("#confirm-count-result");
|
||||
afterInput.value = "";
|
||||
beforeInput.value = "";
|
||||
countResult.textContent = "";
|
||||
|
||||
confirmModal.querySelector("#confirm-count").onclick = async () => {
|
||||
countResult.textContent = "checking...";
|
||||
try {
|
||||
const response = await window.VK.api.post("/api/media/count", {
|
||||
channelId,
|
||||
guildId: guildId ?? null,
|
||||
after: afterInput.value ? `${afterInput.value}T00:00:00.000Z` : null,
|
||||
before: beforeInput.value ? `${beforeInput.value}T23:59:59.999Z` : null
|
||||
});
|
||||
countResult.textContent =
|
||||
response.count === null
|
||||
? response.reason ?? "unavailable"
|
||||
: `${response.count} messages`;
|
||||
} catch (error) {
|
||||
countResult.textContent = `failed: ${error.message}`;
|
||||
}
|
||||
};
|
||||
|
||||
confirmAction = () =>
|
||||
startScrape(channelId, guildId, mode, isDownload && checkbox.checked ? destInput.value.trim() : null);
|
||||
startScrape(
|
||||
channelId,
|
||||
guildId,
|
||||
mode,
|
||||
isDownload && checkbox.checked ? destInput.value.trim() : null,
|
||||
afterInput.value ? `${afterInput.value}T00:00:00.000Z` : null,
|
||||
beforeInput.value ? `${beforeInput.value}T23:59:59.999Z` : null
|
||||
);
|
||||
confirmModal.hidden = false;
|
||||
}
|
||||
|
||||
@@ -776,6 +820,18 @@
|
||||
null,
|
||||
`${scrape.state} · started ${new Date(scrape.createdAt).toLocaleString()} · ` +
|
||||
`took ${durationLabel(scrape)} · ${scrape.pages}p/${scrape.messages}m · ` +
|
||||
(scrape.estimatedMessages != null
|
||||
? `~${scrape.estimatedMessages} total · `
|
||||
: "") +
|
||||
(scrape.fromDate || scrape.toDate
|
||||
? `range ${
|
||||
scrape.fromDate
|
||||
? new Date(scrape.fromDate).toLocaleDateString()
|
||||
: "..."
|
||||
} to ${
|
||||
scrape.toDate ? new Date(scrape.toDate).toLocaleDateString() : "..."
|
||||
} · `
|
||||
: "") +
|
||||
`img ${media.image ?? 0} gif ${media.gif ?? 0} vid ${media.video ?? 0} aud ${media.audio ?? 0} · ` +
|
||||
`${formatBytes(bytesById.get(scrape.id) ?? 0)} · files ${scrape.downloaded ?? 0} · previews ${scrape.previewed ?? 0}`
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user