Include the build ID, platform version, modification times of the
executable, omni.ja, and application.ini, and the last update from the
update history, to help identify the cause. If the restart doesn't
resolve the mismatch, report it right away, since the regular
repository check won't run.
(cherry picked from commit 55e162ccf0)
An incompletely applied update can start code from the previous version
with the new version's resources. Record the version in both the code
and a bundled resource file, and on a mismatch at startup, invalidate
caches and restart. If the mismatch remains after the restart, show an
error telling people to reinstall. Also send the versions with the next
repository check so we can try to figure out what's causing this.
https://forums.zotero.org/discussion/134539/error-message-when-opening-zotero
(cherry picked from commit 7ca413236a)
An incompletely applied update can leave code from an older version of
Zotero running with a newer userdata.sql, which marks the database as
upgraded without running the new steps. Renumber step 130 as 131 so it
runs again for databases already at 130.
https://forums.zotero.org/discussion/134539/error-message-when-opening-zotero
(cherry picked from commit d9bd4404a5)
Discovered while working on something else. Non-HTML direct-attachments
of epub, etc used a generic item icon before.
(cherry picked from commit 1ca9d58c9a)
On Windows, Word and Outlook take the text over a plain file drop, so
dragging a PDF into an email inserted a useless citation for the
attachment instead of attaching it. Dragging attachments along with
parent items still adds citations for the parents.
https://forums.zotero.org/discussion/134075/
(cherry picked from commit 8b9961f13b)
Without a usable keystore, credentials saved by older versions can't be
migrated, and the alert about it appeared on every launch with no way to
dismiss it.
https://forums.zotero.org/discussion/133980/
(cherry picked from commit 30e6c4a05c)
We changed a few Read Aloud strings along with the cap updates. For
locales that were still using the English text, update to the new
strings. Strings that were already translated will be slightly outdated,
but that's better than reverting to English.
A typo left the fix flag unset, so invalid colored tags were logged as
removed but stayed in the setting unless another fix also applied.
(cherry picked from commit efb40e307c)
Resetting the columns of an item tree that hadn't rendered its table
yet threw inside a forceUpdate() callback before resolving the promise
ItemTree.notify() was waiting on, so the notification never reached
later observers. Regression from 5ca1fbb167, which dropped the
unmounted-tree check from ItemTree.notify().
https://forums.zotero.org/discussion/134185/
(cherry picked from commit f483c80f36)
The transaction didn't do any database work, but sync and other
transactions had to wait for it to finish, so an observer that never
returned could leave startup sync stuck at "Waiting for other operations
to finish".
https://forums.zotero.org/discussion/134185/
(cherry picked from commit 3378fc94f0)
A 4429 (Too Many Requests) close stopped streaming until restart along
with the other 44xx codes. Retry it on the normal backoff schedule.
(cherry picked from commit b0db83d9dc)
A rebuild interrupted after fulltextIndexMeta was dropped left the
index at the current version with no meta table, so every startup
failed with "no such table: ftindex.fulltextIndexMeta".
https://forums.zotero.org/discussion/134508/
(cherry picked from commit 5f1a304e52)
Dragging over a row re-rendered it, replacing the cell under the
pointer, so after a quick exit the row could miss the dragleave and
keep its highlight. Update the drop indicator on the existing row
instead, and also clear it on any dragleave that leaves the tree, since
a fast exit from the window can target the table body rather than the
row.
https://forums.zotero.org/discussion/133039/
(cherry picked from commit ca3261ae7a)
If a drag ended without the tree receiving a dragleave, drop, or dragend
(e.g., a drag that left the window), the drop-target row kept its
highlight until restart, and, being index-based, could move to other
rows as the view changed.
Clear the indicator on the next mousemove and whenever the rows in
the items list change.
This will hopefully fix https://forums.zotero.org/discussion/133039/,
though I couldn't reproduce it.
(cherry picked from commit 896a3f829a)
A plugin writing an arbitrary synced setting caused every settings
upload to fail with a 400, blocking sync. Throw on local writes of
names not allowed by the API, and skip any already stored on upload.
https://forums.zotero.org/discussion/134449/
(cherry picked from commit a6717ad540)
Mozilla sends CRL updates via Remote Settings, which we don't use, so we
continue to trust revoked CA and intermediate certificates, including
the compromised eMudhra intermediates. Fetch the current list from
Mozilla at build time and apply the changes to the list on the first run
of each build.
Updating to the latest 153 ESR will also remove the eMudhra roots, which
will invalidate the intermediates as well, but that won't help Zotero
10, since 140 ESR is EOL, and most revoked intermediates are blocked
only via OneCRL without a root removal.
The test imports the cross-signed certificate into the certificate
database instead of passing it to asyncVerifyCertAtTime(), which
doesn't accept intermediates in Firefox 140.
(cherry picked from commit e470557ff8)
Since HTTP.download() switched to fetch() in 10.0, a connection that
dropped mid-download threw a TypeError ("Error in input stream"), so
ZFS sync no longer retried interrupted S3 downloads and failed the file
sync immediately.
https://forums.zotero.org/discussion/134446/sync-error
(cherry picked from commit d85ec125be)
After the menu was built for a hideable row (My Publications, Unfiled
Items, etc.), the Delete Collection/Search item kept showing "Hide" for
collections and saved searches.
Temporary fix for 10.0. Fixed for real by switching the "Hide" label to
Fluent in 59aaf8dfef.
https://forums.zotero.org/discussion/134097/
MDPI serves a JS proof-of-work interstitial in place of the article
page, so Find Full Text found nothing. Run the challenge in a hidden
browser when a page's meta refresh points to a registered challenge
host, then retry the page.
Also match meta refresh URL= case-insensitively, since MDPI's is
uppercase, and bound meta refreshes by the redirect limit.
https://forums.zotero.org/discussion/132837/https://forums.zotero.org/discussion/134079/
(cherry picked from commit 09c3c8cd3d)
A file URL returning a server error was retried for up to an hour inside
the download, and a 429 or Retry-After was waited out there too. Since
the queue processes one item at a time, that blocked every other
selected item. Throttling now goes to Find Full Text's own per-domain
handling, as it did before 10.0, which also needed to read Retry-After
from a fetch Response and parse HTTP-date values.
https://forums.zotero.org/discussion/133703/
(cherry picked from commit cdf10bf62b)
This runs during Find Full Text and connector saves, where the default
30-second timeout and hour of 5xx retries are far longer than a user
wants to wait.
(cherry picked from commit d81484d2e8)
A custom resolver returning a 429/5xx inherited Zotero.HTTP's default
retry policy, which could cause the whole queue to stall for up to an
hour -- or indefinitely for a Retry-After -- on a dead resolver, despite
the 5-second timeout on the request.
https://forums.zotero.org/discussion/133642/
(cherry picked from commit 9b769d3987)
Since the switch to fetch() in 0fe31b0f04 (Zotero 10.0.0), download
requests didn't use cookies, and the Referer header was silently dropped
as a forbidden header. Sites that check either -- e.g., IEEE Xplore,
which returns a 502 -- failed during Find Full Text.
https://forums.zotero.org/discussion/133703/
(cherry picked from commit 364181f4e7)
As of Firefox 140.17/153.4 (Bug 2068406), setting nsIFilePicker's
displayDirectory to a directory that doesn't exist or isn't readable
throws instead of being ignored. This broke callers that pass a saved
path that may be stale (e.g., choosing a PDF/EPUB handler after the old
app's folder was removed, or a missing Scaffold translators directory).
(cherry picked from commit ae50d52589)
build-and-unify changes into a temp directory before unifying, so a
relative path (e.g., `.`) broke the mach and objdir references.
(cherry picked from commit 4118f47bc3)
`rustup target add` was run before `rustup default`, so targets were
added to the previous default toolchain rather than $RUST_VERSION.
(cherry picked from commit 9e234ee64f)