tangled
alpha
login
or
join now
indexx.dev
/
tweets2bsky
forked from
j4ck.xyz/tweets2bsky
0
fork
atom
A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
0
fork
atom
overview
issues
pulls
pipelines
feat: add 'Reset & Backfill' button to clear cache and re-sync
jack
2 months ago
225b5f0a
90b70a02
+26
-3
1 changed file
expand all
collapse all
unified
split
public
index.html
+26
-3
public/index.html
···
233
233
}
234
234
};
235
235
236
236
+
const resetAndBackfill = async (id, twitterUsername) => {
237
237
+
const limit = prompt(`Reset cache and backfill how many tweets for @${twitterUsername}?`, "100");
238
238
+
if (limit === null) return;
239
239
+
240
240
+
try {
241
241
+
// 1. Clear Cache
242
242
+
await axios.delete(`/api/mappings/${id}/cache`, {
243
243
+
headers: { Authorization: `Bearer ${token}` }
244
244
+
});
245
245
+
// 2. Queue Backfill
246
246
+
await axios.post(`/api/backfill/${id}`, { limit: parseInt(limit) || 100 }, {
247
247
+
headers: { Authorization: `Bearer ${token}` }
248
248
+
});
249
249
+
alert(`Cache cleared and backfill queued for @${twitterUsername}`);
250
250
+
setTimeout(fetchStatus, 1000);
251
251
+
} catch (err) {
252
252
+
alert('Reset & Backfill failed');
253
253
+
}
254
254
+
};
255
255
+
236
256
const updateTwitter = async (e) => {
237
257
e.preventDefault();
238
258
const formData = new FormData(e.target);
···
387
407
<td className="text-end">
388
408
{isAdmin && (
389
409
<>
390
390
-
<button onClick={() => runBackfill(m.id, m.twitterUsername)} className="btn btn-link btn-sm text-warning p-0 me-2" title="Backfill">
410
410
+
<button onClick={() => runBackfill(m.id, m.twitterUsername)} className="btn btn-link btn-sm text-warning p-0 me-2" title="Backfill (Keep Cache)">
391
411
<span className="material-icons">history</span>
392
412
</button>
393
393
-
<button onClick={() => clearCache(m.id, m.twitterUsername)} className="btn btn-link btn-sm text-secondary p-0 me-2" title="Clear Cache">
413
413
+
<button onClick={() => resetAndBackfill(m.id, m.twitterUsername)} className="btn btn-link btn-sm text-danger p-0 me-2" title="Reset & Backfill (Clears Cache)">
414
414
+
<span className="material-icons">restart_alt</span>
415
415
+
</button>
416
416
+
<button onClick={() => clearCache(m.id, m.twitterUsername)} className="btn btn-link btn-sm text-secondary p-0 me-2" title="Clear Cache Only">
394
417
<span className="material-icons">delete_sweep</span>
395
418
</button>
396
419
</>
397
420
)}
398
398
-
<button onClick={() => deleteMapping(m.id)} className="btn btn-link btn-sm text-danger p-0" title="Delete">
421
421
+
<button onClick={() => deleteMapping(m.id)} className="btn btn-link btn-sm text-danger p-0" title="Delete Account">
399
422
<span className="material-icons">delete</span>
400
423
</button>
401
424
</td>