Last active
February 19, 2024 06:04
-
-
Save nikhilweee/fdf7b471a31c2f1c2b9527c51d734d86 to your computer and use it in GitHub Desktop.
Zotero re-download missing PDFs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async function replacePDF(item) { | |
// filter annotations, attachments, notes | |
if (!item.isRegularItem()) { | |
return; | |
} | |
let fileExists = []; | |
let oldPDF = null; | |
// filter multiple or existing PDFs | |
const attachmentIDs = item.getAttachments(); | |
for (let itemID of attachmentIDs) { | |
const attachment = Zotero.Items.get(itemID); | |
if (!attachment.isPDFAttachment()) { | |
continue; | |
} | |
oldPDF = attachment; | |
const exists = await attachment.fileExists(); | |
fileExists.push(exists); | |
} | |
if (fileExists.length > 1) { | |
return; // multiple PDFs found | |
} | |
if (fileExists.pop()) { | |
return; // PDF already exists | |
} | |
console.log("Updating PDF for", item.getDisplayTitle()); | |
// manually invoke "Find Available PDF" | |
const newPDF = await Zotero.Attachments.addAvailablePDF(item); | |
if (oldPDF) { | |
await OS.File.move(newPDF.getFilePath(), oldPDF.getFilePath()); | |
await newPDF.eraseTx(); | |
} | |
} | |
// loop replacePDF() over all items in our library | |
const libraryID = Zotero.Libraries.userLibraryID; | |
let items = await Zotero.Items.getAll(libraryID); | |
for (let item of items) { | |
await replacePDF(item); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This script will scan your Zotero library for missing attachments and re-download them.
To run, click on
Tools
>Developer
>Run JavaScript
and paste this code. Make sure "Run as async function" is checked.To view console logs, click on
Tools
>Developer
>Error Console
.Here's the blog post about this: https://nikhilweee.me/blog/2024/zotero-file-sync/