Commit graph

52 commits

Author SHA1 Message Date
Dan Stillman
9d3f55be51 Use async DB for autocomplete
This was probably hanging previously because I was passing a JS function for
onProgress, which apparently isn't allowed.
2013-08-07 11:01:12 -04:00
Dan Stillman
bb93f019dc File sync overhaul
- 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
2012-12-11 15:16:40 -05:00
Simon Kornblith
6e064bb4ce Avoid excessive calls to XPCWrappedNative::GetWrappedNativeOfJSObject when determining field type 2012-07-24 03:06:44 -04:00
Simon Kornblith
d3ddc03dc6 Remove dbLockExclusive hidden preference 2012-01-26 23:44:21 -05:00
Dan Stillman
75baa706cd Fix "Untitled" collection naming after "Untitled 10"
Fixes #16
2011-11-17 14:16:25 -05:00
Dan Stillman
e1cc377162 Show Zotero pane progress bar during sync processing
TODO: limit to large syncs?

This needs a lot of testing.

Also:
- Tweak pumpGenerator() wait level behavior to match Zotero.wait()
- If Zotero is closed in the top-most window, show a popup instead of the pane-covering progress meter, and take an optional icon in Zotero.showZoteroPaneProgressMeter() for use in the popup
- Restore protection against opening Zotero pane when Zotero.locked is set
- Display a nicer error if Zotero.DB.commitTransaction() is called without an active transaction
- Allow text with icons to extend to multiple lines in progressWindow popup
- Automatically use current window if one isn't specified in Zotero.repaint()
2011-09-21 23:00:20 +00:00
Dan Stillman
16a3d3f1ed Allow nested database transactions within the same wait level and disallow database access from higher levels 2011-08-30 01:05:12 +00:00
Dan Stillman
b27e64f9c8 Block database access during Zotero.wait() only if a transaction is in progress 2011-08-25 21:03:24 +00:00
Simon Kornblith
c1057e2587 Remove uses of "Firefox" and fix version 2011-08-10 07:07:26 +00:00
Dan Stillman
066cae3dbb Include query in db parameter errors 2011-07-14 14:19:16 +00:00
Simon Kornblith
0add2d07e6 Move Zotero.varDump to Zotero.Utilities 2011-07-06 07:39:49 +00:00
Simon Kornblith
8268d1b01c Zotero Everywhere megacommit
- 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
2011-06-14 00:36:21 +00:00
Dan Stillman
51f8c11ea0 Switch client code license to Affero GPL version 3 2011-05-18 18:34:22 +00:00
Simon Kornblith
06e446a527 Only start dummy statement when backup completes if it was running before backup. Fixes broken upgrades in 2.1b3. 2011-01-14 20:28:29 +00:00
Dan Stillman
2f802fe74d Don't start Standalone on databases from <2.1b3 2011-01-13 20:52:15 +00:00
Dan Stillman
f712ea8d40 - Reestablish database lock after on-idle backup -- the lock was being lost, which allowed Standalone (and other SQLite clients) to corrupt the database
- Don't attempt to backup database on shutdown, since it doesn't seem to work anymore and can delay shutdown
- Change idle backup check timer to 60 seconds from 10 seconds
2011-01-13 14:21:19 +00:00
Dan Stillman
2f7bf480c0 Display proper error message if Zotero directory or Zotero database is not writable, instead of just if the database isn't readable 2010-12-13 22:09:20 +00:00
Simon Kornblith
d22ccf2219 Zotero.Utilities changes:
- Zotero.Utilities is now a singleton
- Zotero.Utilities.HTTP is now Zotero.HTTP
- Zotero.Utilities.md5 and Zotero.Utilities.Base64 are now located under Zotero.Utilities.Internal
- Zotero.Utilities.AutoComplete has been eliminated

This needs testing to make sure there is no associated breakage.
2010-10-25 00:58:47 +00:00
Simon Kornblith
21a2188caa move getSQLDataType to Z.DB 2010-10-25 00:17:53 +00:00
Dan Stillman
053b6dace3 Fix JS strict warning 2010-08-27 19:08:41 +00:00
Dan Stillman
3adb9c8391 Fix NS_ERROR_XPC_NOT_ENOUGH_ARGS when reading blob from database (which currently can happen only in the case of bad data) 2010-05-13 07:42:28 +00:00
Dan Stillman
a2311bd52f Turn "Zotero.DB.transactionDate retrieved with no transaction" in Zotero.DB into debug output rather than a logged error 2010-04-27 07:28:30 +00:00
Dan Stillman
94e279e034 ECL 1.0 -> GPLv3 2009-12-28 09:47:49 +00:00
Dan Stillman
a5818604fb - When creating or adding to note from web page context menu, put text in <blockquote> with 'cite' attribute
- Zotero.Utilities.text2html(str, singleNewlineIsParagraph) -- conversion of 1.0 notes on upgrade to 2.0 uses the second parameter to treat a single newline as a paragraph, which may or may not be the desired behavior but is what was done previously
- Shortcut key for New Item wasn't properly selecting item type menu and wasn't preventing Firefox's Recently Closed Window shortcut
2009-12-26 03:40:30 +00:00
Dan Stillman
884e5474fe Zotero File Storage megacommit
- Group file sync via Zotero File Storage
- Split file syncing into separate modules for ZFS and WebDAV
- Dragging items between libraries copies child notes, snapshots/files, and links based on checkboxes for each (enabled by default) in the Zotero preferences
- Sync errors now trigger an exclamation/error icon separate from the sync icon, with a popup window displaying the error and an option to report it
- Various errors that could cause perpetual sync icon spinning now stop the sync properly
- Zotero.Utilities.md5(str) is now md5(strOrFile, base64)
- doPost(), doHead(), and retrieveSource() now takes a headers parameter instead of requestContentType
- doHead() can now accept an nsIURI (with login credentials), is a background request, and isn't cached
- When library access or file writing access is denied during sync, display a warning and then reset local group to server version
- Perform additional steps (e.g., removing local groups) when switching sync users to prevent errors
- Compare hash as well as mod time when checking for modified local files
- Don't trigger notifications when removing groups from the client
- Clear relation links to items in removed groups
- Zotero.Item.attachmentHash property to get file MD5
- importFromFile() now takes libraryID as a third parameter
- Zotero.Attachments.getNumFiles() returns the number of files in the attachment directory
- Zotero.Attachments.copyAttachmentToLibrary() copies an attachment item, including files, to another library
- Removed Zotero.File.getFileHash() in favor of updated Zotero.Utilities.md5()
- Zotero.File.copyDirectory(dir, newDir) copies all files from dir into newDir
- Preferences shuffling: OpenURL to Advanced, import/export character set options to Export, "Include URLs of paper articles in references" to Styles
- Other stuff I don't remember

Suffice it to say, this could use testing.
2009-09-13 07:23:29 +00:00
Dan Stillman
96345a3aa8 Don't hang UI when importing files
- File import now uses a translucent overlay over Zotero pane with a progress meter that doesn't hang
- New method Zotero.wait(timeout) to allow synchronous code to wait for events on main thread to be processed until timeout is reached
- Wait status can be tested with Zotero.waiting property
- Zotero.showZoteroPaneProgressBar(msg, determinate) locks Zotero and creates overlay with progress meter
- Code that might trigger via timers or external UI should check Zotero.lock

Lock checks so far:

- Translator save icon and RIS/Refer import display error if triggered while locked
- Browser content context menu options are now in a Zotero submenu and are disabled when Zotero is locked
- Sync, repository, and DB backup timers check for lock and bail
- If a new window is opened, Zotero pane can't be opened and display an error message until lock is released

Probably need to check lock in word processor integration code and advanced search window

Also:

- New method Zotero.sleep(ms) (currently unused) to allow synchronous code to sleep and allow events on main thread to be processed
2009-08-08 07:38:34 +00:00
Dan Stillman
52dda8ae0b Don't throw error on database backup failure, which was breaking some upgrades for unknown reasons 2009-07-03 05:11:22 +00:00
Dan Stillman
e59bb3078f Speed up large SELECT operations a bit 2009-06-10 08:22:00 +00:00
Dan Stillman
f93f7384a6 Fix incorrectly entered MIME types and the DB bug in 2.0b4 that caused it 2009-05-22 02:07:22 +00:00
Dan Stillman
643376769a Automatically hard-code NULL bound parameters (e.g., convert "WHERE foo=?" to "WHERE foo IS NULL" and "SET foo=?" to "SET foo=NULL") 2009-05-17 07:52:05 +00:00
Dan Stillman
66a92a5f43 Hide another idle message 2009-02-23 04:54:26 +00:00
Dan Stillman
b39054ddda Don't show debug message every 10 seconds of idle 2009-02-23 04:27:58 +00:00
Dan Stillman
df8e1f15f8 Cap numBackups at 24 2009-02-23 02:40:17 +00:00
Dan Stillman
dd230b278b Closes #972, Keep additional backups of zotero.sqlite
Closes #984, Switch database backup to use mozIStorageConnection.backupDB()
2009-02-23 02:34:40 +00:00
Dan Stillman
5f60f6043c - Fix problem that was causing lots of sync errors on upload, and adjust a previous attempted fix that was making it worse
- Should also keep timestamps from going too far into the future when saving many items at once (which they were after my previous fix), though this can still be improved
2009-02-21 04:23:50 +00:00
Dan Stillman
8e07effc0d Missed change from last week -- ensures that no two successive DB transactions use the same timestamp, to avoid some sync-related problems 2009-01-21 20:20:27 +00:00
Dan Stillman
3b0f20c493 Add initial implementations of "Restore to Server" and "Restore from Server" to the Sync pref pane 2009-01-02 00:35:09 +00:00
Dan Stillman
8512ba8d39 Merge revisions from branch 2008-12-29 07:57:20 +00:00
Dan Stillman
337b16361a Merge [3617-3838] from branch to trunk 2008-11-30 20:18:48 +00:00
Dan Stillman
651bcf2380 Adds rich text support to notes
- Still a few issues
- Converts plaintext notes to HTML on upgrade
2008-10-13 19:51:53 +00:00
Dan Stillman
675184d160 Firefox 3.1 compatibility fix (from Simon) 2008-10-07 02:56:06 +00:00
Dan Stillman
84ef07c874 Missed file from r3296 and better debugging of invalid DB parameters 2008-08-31 23:39:14 +00:00
Dan Stillman
1cb7aa6a06 Better detection of invalid parameter counts passed to Zotero.DB query methods (including inadvertently passing an undefined value) 2008-08-08 21:16:26 +00:00
Dan Stillman
08279f3ff2 Add REGEXP SQLite UDF
SQLite automatically uses this function for the "foo REGEX '/[a-z]+/'" syntax
2008-06-25 22:22:52 +00:00
Dan Stillman
245954b876 Add extensions.zotero.dbLockExclusive pref to control SQLite exclusive locking (default true)
Set to false to allow external access while Firefox is running
2008-06-25 00:21:37 +00:00
Dan Stillman
47137121c1 Move levenshtein() and min3() into Zotero.Utilities 2008-06-23 20:33:57 +00:00
Dan Stillman
cf34397d9e Implements levenshtein as SQLite UDF
Function from Ben
2008-06-23 20:28:42 +00:00
Dan Stillman
3de1789f26 Initial Zotero 1.5 Megacommit
Apologies for the massive (and, due to data_access.js splitting, difficult-to-follow) commit. Please note that external code that accesses the data layer may need to be tweaked for compatibility. Here's a comprehensive-as-possible changelog:

- Added server sync functionality (incomplete)
- Overhaul of data layer
  - Split data_access.js into separate files (item.js, items.js, creator.js, etc.)
  - Made creators and collections first-class objects, similar to items
  - Constructors now take id as first parameter, e.g. new Zotero.Item(1234, 'book'), to allow explicit id setting and id changing
  - Made various data layer operations (including attachment fields) require a save() rather than making direct DB changes
  - Better handling of unsaved objects
    - Item.setCreator() now takes creator objects instead of creator ids, and Item.save() will auto-save unsaved creators
    - clone() now works on unsaved objects
  - Newly created object instances are now disabled after save() to force refetch of globally accessible instance using Zotero.(Items|Creators|etc.).get()
  - Added secondary lookup key to data objects
  - Deprecated getID() and getItemType() methods in favor of .id and .itemTypeID properties
  - toArray() deprecated in favor of serialize(), which has a somewhat modified format
  - Added support for multiple creators with identical data -- currently unimplemented in interface and most of data layer
  - Added Item.diff() for comparing item metadata
- Database changes
  - Added SQLite triggers to enforce foreign key constraints
  - Added Zotero.DB.transactionVacuum flag to run a VACUUM after a transaction
  - Added Zotero.DB.transactionDate, .transactionDateTime, and transactionTimestamp to retrieve consistent timestamps for entire transaction
  - Properly store 64-bit integers
  - Set PRAGMA locking_mode=EXCLUSIVE on database
  - Set SQLite page size to 4096 on new databases
  - Set SQLite page cache to 8MB
  - Do some database cleanup and integrity checking on migration from 1.0 branch
  - Removed IF NOT EXISTS from userdata.sql CREATE statements -- userdata.sql is now processed only on DB initialization
  - Removed itemNoteTitles table and moved titles into itemNotes
- Abstracted metadata edit box and note box into flexible XBL bindings with various modes, including read-only states
- Massive speed-up of item tree view
- Several fixes from 1.0 branch for Fx3 compatibility
- Added Notifier observer to log delete events for syncing
- Zotero.Utilities changes
  - New methods getSQLDataType() and md5()
  - Removed onError from Zotero.Utilities.HTTP.doGet()
  - Don't display more than 1024 characters in doPost() debug output
  - Don't display passwords in doPost() debug output
- Added Zotero.Notifier.untrigger() -- currently unused
- Added Zotero.reloadDataObjects() to reset all in-memory objects
- Added |chars| parameter to Zotero.randomString(len, chars)
- Added Zotero.Date.getUnixTimestamp() and Date.toUnixTimestamp(JSDate)
- Adjusted zotero-service.js to simplify file inclusion

Various things (such as tags) are temporarily broken.
2008-05-04 08:32:48 +00:00
Dan Stillman
200cca74a6 Merged revisions 1986,1988-1990,1996,1998,2000-2004,2006,2008-2010,2013,2020-2028,2032-2034,2037,2039,2044-2049,2052-2056,2059,2065-2066,2068-2072,2075,2077-2079,2081,2083-2084,2086,2088-2094,2096,2099,2101,2103-2104,2107-2110,2115,2118,2120-2122,2126-2128,2131,2140,2142-2145,2149-2153,2155-2159,2165,2167-2168,2170-2171,2173-2176,2179-2183,2185-2186 via svnmerge from
https://www.zotero.org/svn/extension/branches/1.0
2008-01-30 09:53:19 +00:00
Dan Stillman
35ff52f2e8 Merged 1.0 branch back to trunk 2007-10-23 07:11:59 +00:00