It's not clear when this became an issue, but our usual background HTTP
requests (set that way to avoid triggering auth prompts when saving from
websites) weren't triggering proxy authentication dialogs, which was breaking
most network activity in Standalone. To fix this, we now make a foreground
request at startup to a file on S3 and resolve the Zotero.proxyAuthComplete
promise when we're done. Any network requests that want to wait for proxy
authentication can wait for that promise.
This behavior can be disabled via the triggerProxyAuthentication hidden pref.
Dual boot and VM setups worked, but only absolute paths were synced,
because syncing uses attachmentPath, which was resolving relative paths
itself (#51). attachmentPath now returns what's in the database (as it
did originally), and getFile() does the resolving instead.
This means that anything relying on attachmentPath directly needs to be
aware that it might get a placeholder-prefixed relative path.
- Catch additional errors on Windows (too-long paths, maybe aliases)
- Fix "Show File" button (which didn't show in some cases, at least on
Windows)
- Clarify error message
The hidden column caused collection names to be cut off unnecessarily,
and the extra icons were overly distracting. For now, just show the
first error that comes in in the main sync error panel, along with the
library name.
This is super annoying, but I can't seem to stop the separator row from
being selected in seltype="single" mode (where isSelectable() isn't
called). Until we have a better solution, at least clear the items list
and avoid an error.
- Remove all "Selected" from "Selected Item", because that's how a context menu works
- Change "Remove Selected Item" to "Remove Item from Collection" (fixes#122)
- Change "Delete Selected Item from Library" to "Move Item to Trash")
- Change "Remove" on Duplicate/Unfiled Items to "Hide" (fixes#122)
- Change "Create Parent Item from Selected Item" to "Create Parent Item"
- If attachment exists at same relative path in new base directory,
leave it alone so that it continues to work.
- If attachment doesn't exist in new base directory, revert it to an
absolute path.
- If new base directory is an ancestor or descendant of the previous
base directory, adjust relative paths below the new directory so that
they keep working.
- More dialog changes
- Select current base directory in file picker when changing directory
- Always use .persistentDescriptor instead of initWithPath(), though it
probably doesn't matter, and wrap in try/catch in case the old setting
is broken in some way.
- New function Zotero.File.directoryContains(dir, file), since
nsIFile.contains() isn't recursive
- Don't use a private Zotero.Item property from outside to force path changes.
For at least one Windows user, a .docx file was being interpreted as
text/plain. Instead of relying entirely on the system, hard-code some
extensions we know. (More can be added.)
Also:
- Determine MIME type when opening files instead of using stored type,
since we might have gotten smarter
- New promise-based architecture
- Library-specific file sync queues, allowing other libraries to
continue if there's an error in one library
- Library-specific sync errors, with error icons next to each library
- Changed file uploading in on-demand download mode, which had been missing
- On-demand download progress indicator in middle pane
- More accurate progress indicator
- Various tweaks and bug fixes
- Various future tweaks and bug fixes
- If a regular item is selected, use that as the parent.
- If a child item is selected, use its parent as the parent.
- Otherwise create a standalone note.
This might have been limited to case-insensitive filesystems.
Also fix renaming when the previous filename didn't include an
extension. Before, a file named "test" would be renamed from parent with
".test" as the extension.
- Don't run idle sync if manual sync is required or Zotero is locked
- Don't clear sync error icon when opening pane
- Better debug message on pane open for syncing not being enabled
Deleting is currently very slow (which will be fixed on master), which
can cause long delays when auto-emptying items older at pane open.
Instead, empty 10 items after 5 minutes of idle, and then another 10
every 5 seconds until there are no more items to empty or the user is back.
Falls back to /usr/bin/xdg-open by default, configurable via
extensions.zotero.fallbackLauncher.unix (or .windows, though that
should be much rarer). Also used for file revealing.
If xdg-open fails, files launch via the external helper app dialog and
URLs just don't work.
Use nsIExternalProtocolService.loadUrl() as a fallback rather than window.loadURI()
If "Remember my choice for file links" is selected, there's currently
no way to change that in Standalone short of deleting mimeTypes.rdf.
Can choose to download files "at sync time" or "as needed"
On-demand defaults to on, but remains off for existing users
To-do:
- Handling of local and remote file changes on on-demand download
(currently if a file exists it isn't downloaded, which means a
remotely modified file won't be redownloaded in on-demand mode)
- Additional control over file downloading and retention
Other changes:
- Overhauled entire file syncing architecture
- Replaced numAttachments column with Note and Attachment columns with
dynamic icons to indicate status
- Double-clicking a parent with a missing best attachment and on-demand
downloading off no longer loads the parent URL
- Bugs
- Properly strip newlines and tabs in filenames (broken since May 2011)
- If view isn't editable, don't show Locate button, since the updated path couldn't be sent back up
- Fix access error if a synced file needs to be renamed to be valid but user doesn't have group editing access
- Don't allow newlines in item titles (e.g., via copy/paste)
Also:
- Update trash icon properly when adding items to trash or emptying trash
- (dev) Zotero.Items.getDeleted() and Zotero.Items.emptyTrash() parameter order changed
- (dev) Zotero.Items.getDeleted() now returns an empty array rather than FALSE on no results
Group trash does not yet auto-empty
- Adds a per-library "Duplicate Items" virtual search to the source list -- shows up by default for "My Library" but can be added to and removed from all libraries
- Current matching algorithm is very basic: finds exact title matches (after normalizing case/diacritics/punctuation/spacing) and DOI/ISBN matches (untested)
- In duplicates view, sets are selected automatically; in other views, duplicate items can be selected manually and the merge interface can be brought up with "Merge Items" in the context menu
- Can select a master item and individual fields to merge from other versions
- Word processor integration code will automatically find mapped replacements and update documents with new item keys
Possible future improvements:
- Improved detection algorithms
- UI tweaks
- Currently if any items differ, all available versions will be shown as master item options, even if only one item is different; probably the earliest equivalent item should be shown for each distinct version
- Caching of results for performance
- Confidence scale
- Creator version selection (currently the creators from the chosen master item are kept)
- Merging of matching child items
- Better sorting of duplicates if not clustered together by the selected sort column
- Relation path compression when merging items that are already mapped to previously removed duplicates
Other changes in this commit:
- Don't show Trash in word processor integration windows
- Consider items in trash to be missing in word processor documents
- Selection of special views (Trash, Unfiled, Duplicates) is now restored properly in new windows
- Disabled field transform context menu when item isn't editable
- Left/right arrow now expands/collapses all selected items instead of just the last-selected row
- Relation deletions are now synced
- The same items row is now reselected after item deletion
- (dev) Zotero.Item.getNotes(), Zotero.Item.getAttachments(), and Zotero.Item.getTags() now return empty arrays rather than FALSE if no matches -- tests on those return values in third-party code will need to be changed
- (dev) New function Zotero.Utilities.removeDiacritics(str, lowercaseOnly) -- could be used to generate ASCII BibTeX keys
- (dev) New 'tempTable' search condition can take a table to join against -- useful for implementing virtual source lists
- (dev) Significant UI code cleanup
- (dev) Moved all item pane content into itemPane.xul
- Probably various other things
Needless to say, this needs testing.
- Implement connector for Firefox (should switch in/out of connector mode automatically when Standalone is launched or closed, although this has only been tested extensively on OS X)
- Share core translation code between Zotero and connectors
Still to be done:
- Run translators in non-Fx connectors (this works in theory, but it's not currently enabled for any translators)
- Show translation results in non-Fx connectors
- Ability to translate to server when Zotero Standalone is not running
Adds "Show Unfiled Items" context menu to libraries, which adds a virtual saved search for unfiled items. Right-click, Remove to hide. Per-library visibility is saved in prefs and persists across restarts.
Implemented as 'unfiled' search condition, but not accessible via search UI
Should probably use a different color icon to differentiate from real saved searches