Commit graph

16162 commits

Author SHA1 Message Date
Dan Stillman
3ebd26acc0 Fix saving lastRead in read-only library from synced setting
The same skipEditCheck fix from 5dc9705294 but for the synced setting
handler, which updates lastRead when a lastRead setting arrives via
sync for a group attachment.
2026-03-20 11:25:27 -04:00
Dan Stillman
5dc9705294 Fix saving lastRead in read-only library 2026-03-20 08:48:03 -04:00
Dan Stillman
cf7fcd751f Move lastRead column string from .properties to .ftl
Follow-up to 34039991f8
2026-03-19 16:19:52 -04:00
Dan Stillman
1d31ed2508 Fix sync runner test for updated login error button text 2026-03-19 15:48:16 -04:00
Dan Stillman
1502214b5d Web-based login flow
Replaces the login form with a "Log In" button that creates a dataserver
login session and opens the website for logging in. The client polls for
session completion every few seconds and also watches for a notification
from the streaming server.
2026-03-19 15:07:53 -04:00
Abe Jellinek
1f702fc5dc Read Aloud: Add sentence-granularity skip strings 2026-03-19 13:46:44 -04:00
Dan Stillman
c9f893a5a2 Update reader submodule 2026-03-19 12:46:37 -04:00
Martynas Bagdonas
376fba55b6 Update note-editor submodule 2026-03-19 15:57:30 +00:00
Dan Stillman
8401b83cb6 Update dateModified and lastModifiedByUserID when trashing 2026-03-19 11:35:15 -04:00
Dan Stillman
1fad46f983 Disable OA PDF lookups in feed item translation test
Avoid external network requests during test that may have been a source
of intermittent CI failures.
2026-03-19 11:04:22 -04:00
Dan Stillman
5b5b70b499 Show file size in MB instead of KB in ZFS quota warning 2026-03-19 10:38:57 -04:00
Dan Stillman
489a46564f
Add "Remove from Recently Read" (#5847)
- Non-force delete clears `lastRead` on all child attachments (with
  prompt), force delete moves to trash (matching collection behavior)
- Re-run search on item modify in Recently Read view so items disappear
  when lastRead is cleared (also handles sync changes)
2026-03-19 10:30:18 -04:00
Dan Stillman
f0af0bec9d Fix lastModifiedByUserID update overwriting createdByUserID
Use ON CONFLICT to update only lastModifiedByUserID when
createdByUserID isn't being set, rather than REPLACE INTO, which
replaces the entire row.
2026-03-19 00:10:02 -04:00
Dan Stillman
07d99d891f Fix breakage from aaed7ddfc0 in non-standard collectionTreeRow objects
Guard against collectionTreeRow missing isWithinGroup() (e.g., in
Advanced Search)
2026-03-18 23:28:29 -04:00
Dan Stillman
aaed7ddfc0 Add Added By and Modified By columns for group libraries
- Add columns as options in item tree, visible only in group libraries
- Fall back to createdByUserID for Modified By when lastModifiedByUserID
  is not set
- Update lastModifiedByUserID on local saves when dateModified changes
- Fix backfill in _updateGroupItemUsers() to process all batches
- Update formatColumnName() to support Fluent string keys

Closes #233
2026-03-18 23:19:11 -04:00
abaevbog
288fa8e401
hide recently-read pseudo-collection during filter (#5849)
Same way as unfiled, duplicates and trash pseudo-collections
are hidden
2026-03-18 12:05:16 -04:00
Tom Najdek
085a6fa5e0
Move search condition localization strings to Fluent (#5848) 2026-03-18 11:25:58 -04:00
Dan Stillman
d20cac39c9 Fix unhandled promise rejections in ConcurrentCaller when clearing queue
When stop() or stopOnError rejected queued task promises, the rejection
handlers (via Promise.allSettled) weren't attached yet, causing Mozilla
to report each one as "uncaught exception: Object". Add no-op catch
handlers before rejecting so the runtime knows they'll be handled
downstream. Also fix stopOnError path to reject with CanceledException
instead of undefined, and remove legacy Bluebird handledRejection flag.
2026-03-17 13:59:52 -04:00
Abe Jellinek
34039991f8
Track attachment last-read time, add Recently Read virtual collection (#2854)
Track when attachments are last opened or read, storing a `lastRead` Unix timestamp on the attachment. For user library items, `lastRead` syncs as an attachment property in item JSON. For group library items, it syncs via a per-user synced setting (like `lastPageIndex`).

- Add `lastRead` column to `itemAttachments`
- Add `AttachmentReadObserver` to update `lastRead` on file open and page change (throttled to 5 min for page changes)
- Add "Recently Read" virtual collection (items read in last 14 days, sorted by `lastRead` descending)
- Add `lastRead` search condition with date operators
- Add `lastRead` item tree column with new `dependsOnChildren` property for parent item aggregation
- Add `getItemLastRead()` to return max `lastRead` across child attachments

Also:

- Generalize collection tree SCSS to support universal (context-fill) icons alongside themed icons

---------

Co-authored-by: Dan Stillman <dstillman@zotero.org>
2026-03-17 13:52:00 -04:00
Dan Stillman
0ce5cd5bac Clear Read Aloud voices pref when logging out 2026-03-17 11:44:09 -04:00
Dan Stillman
08c75006f3 Update English strings for Transifex 2026-03-16 15:26:28 -04:00
Dan Stillman
290d44480e Move new "Log In"/"Log Out…" strings to Fluent 2026-03-16 15:25:34 -04:00
Dan Stillman
43f422a989 Update English strings for Transifex 2026-03-16 15:16:10 -04:00
Dan Stillman
a9342cc242 "Log in with your zotero.org account" → "[…] Zotero account" 2026-03-16 15:15:07 -04:00
Dan Stillman
426d681b65 Remove Citation Explorer string
Final string should be committed with #3468 (and in Fluent)
2026-03-16 15:12:42 -04:00
abaevbog
fb4ac78291 citation dlg: fix details popup buttons overflow (#5838)
For locales with long button labels.
https://forums.zotero.org/discussion/130208/spacing-is-off-in-citation-detail-pop-up
2026-03-12 14:46:45 -04:00
Tom Najdek
fa476245fe
Fix "Rename from Parent" button sometimes not appearing (#5835)
After editing the parent item, switching back to the attachment item before the parent item's save completes creates a race condition between the save and the attachment render.

Moved item pane tests related to file renaming to a separate describe() block.
2026-03-11 14:39:37 -04:00
Tom Najdek
518e7d22a0 Fix a flaky test on CI 2026-03-11 14:35:39 -04:00
Tom Najdek
3328557d00 Revert "Temporarily disable attachment-pane tests due to test failures"
This reverts commit 810626e458.
2026-03-11 14:35:39 -04:00
Tom Najdek
259abb15f5 Revert "Temporarily disable attachments-pane tests due to test failures"
This reverts commit 3d09df1419.
2026-03-11 14:35:39 -04:00
Tom Najdek
d3509ae259 Add support for test retries and enable three retries on CI 2026-03-11 14:35:39 -04:00
Dan Stillman
be1373dd3a Update reader submodule 2026-03-10 11:35:46 -04:00
Tom Najdek
fcce3bb21d
Fix autocomplete popup always showing scrollbar
Previous styling caused the autocomplete popup to render a scrollbar even when all items were visible.
2026-03-09 23:32:41 +01:00
windingwind
f130e3b3e5
Fix menu API icon inheritance (#5832)
Also:

- Change menu API l10nArgs from object to string to be consistent with other APIs and function calls
2026-03-09 15:42:42 -04:00
abaevbog
25a96c35ca
citation dlg: fix itemTree dblclick stealing focus (#5833)
Make sure bubble-input is refocused after double-click
on itemTree, same as as after adding an item to citation
via Enter or + click.

Fixes: #5830
2026-03-09 14:56:47 -04:00
Dan Stillman
d2d66d322c Fix UNC paths test for updated Zotero RDF translator
zotero/translators@9906b24d changed the file path predicate from
rdf:resource to z:path.
2026-03-09 14:55:25 -04:00
Dan Stillman
db70d92b4c CLAUDE.md: Clarify that Fluent should be used for all new strings 2026-03-09 14:45:43 -04:00
Dan Stillman
2c234c4c0a Update reader submodule 2026-03-09 10:28:32 -04:00
Dan Stillman
2f6825027a Add Director fallback to firstCreator for Video Recording items
The firstCreator/sortCreator SQL now falls back through primary →
editor → director → contributor. This ensures Video Recording items
with only a Director creator show that creator in the items list.

Also refactors the repetitive SQL-building in _getFirstCreatorSQL()
and _getSortCreatorSQL() into helper functions.

Closes #5720
2026-03-09 10:28:06 -04:00
Dan Stillman
f9a10e1874 Fix Title column not recoverable when hidden by a plugin
If a plugin (or corrupt treePrefs.json) sets the Title column to
hidden and no other primary column is visible, force-show it.

Closes #5747
2026-03-09 10:28:06 -04:00
Dan Stillman
f6811bd1a8 Add Citation Key column
https://forums.zotero.org/discussion/130194/feature-request-citation-key-column-in-library-window
2026-03-08 14:46:39 -04:00
Dan Stillman
e60bf91e31 Fix PDF magic number sniffing matching anywhere in first 200 bytes
The %PDF- sniffer entry had no offset constraint, so it matched anywhere
in the file sample. This could cause ZIP files containing PDFs to be
misidentified as application/pdf when opened, since %PDF- could appear
within the first 200 bytes of the archive. Pin the match to offset 0,
where it must appear in a valid PDF.

Fixes https://forums.zotero.org/discussion/130161/zip-files-and-indexing
2026-03-08 14:46:39 -04:00
Abe Jellinek
81f80a62e3 Update RDF tests 2026-03-06 16:51:25 -05:00
Abe Jellinek
12942ec717 Update translators 2026-03-06 16:51:25 -05:00
Adomas Venčkauskas
ce11d5295c Update LibreOffice submodule 2026-03-06 13:57:53 +02:00
abaevbog
b80bcea184
add citationKey to quicksearch-titleCreatorYear (#5814)
So quicksearch and citation dialog in list mode search
by the citation key, in addition to title,creator,etc.

https://forums.zotero.org/discussion/130090/zotero-picker-i-cant-search-item-by-citation-key
2026-03-05 20:08:52 -05:00
Abe Jellinek
0abf2b455f
Add Read Aloud first-run guidance panel (#5818)
Plus guidance-panel changes:

- Fix description not updating when multiple panels exist
  in the document
- Fix nonfunctional noautohide attribute
- Show "Got It" button for noautohide with no navigation

---------

Co-authored-by: Dan Stillman <dstillman@zotero.org>
2026-03-05 20:07:06 -05:00
Dan Stillman
20735c425f
Add resetData() as lightweight alternative to resetDB() for sync tests (#5822)
resetData() clears user data and sync state using application APIs
instead of doing a full Zotero shutdown/reinit cycle, making it much
faster for tests that just need clean state between runs.

Also make Tags.init(), Creators.init(), Users.init(), and
SyncedSettings.loadAll() properly clear their caches before reloading,
so they are safe to call more than once.
2026-03-05 15:54:10 -05:00
windingwind
76c7a613a9 Fix attachment preview 2026-03-05 12:24:26 -05:00
Mi Ramon
c0c9437da8
use different notes icons in itempane and tab sidepane (#5799) 2026-03-04 23:46:17 -05:00