Commit Graph

217 Commits

Author SHA1 Message Date
Dan Mills
58affe8131 Implement FileEngine 2008-07-25 17:02:43 -07:00
Dan Mills
c678010dcf split Engine into SyncEngine and FileEngine 2008-07-25 01:06:23 -07:00
Dan Mills
8a7e0e07a2 only wrap the first 10 entries in a tab 2008-07-23 15:46:13 -07:00
Dan Mills
112006ce5f rollback last commit (1843a139184a), it causes cookie unit test to fail 2008-07-16 21:11:18 -07:00
Dan Mills
76d45e6917 Bug 443489: Use nsICookie2 interface instead of nsICookie. Patch by fabrice@bellet.info 2008-07-16 20:51:25 -07:00
Chris Beard
e9ac166a41 * major revision to the login dialog to be more robust, adding error handling, styling and a help link
* some minor hacking of the login progress to improve performance
* expanded the application exit sync dialog to be a general modal sync dialog that will display whenever appropriate (e.g. during initial setup, on manual "sync now" requests, and on application exit)
* added a progress meter and status messages to the modal sync dialog to provide users with a better understanding of what's going on, and to assist in debugging
* added ability to cancel a modal sync request, including on application exit. when cancel is clicked on by the user, it will attempt to cancel the sync at the next opportunity (i.e. before the next sync engine is processed)
2008-07-09 17:17:24 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
98215f2fc8 Made bookmarkSharingManager._updateOutgoingShare tolerant of outgoing shares that are lacking a server path annotation: it will warn that they're invalid and return, rather than dying. 2008-07-09 16:57:55 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
436fb329bb Made wrapping of outgoing shares not crash if an outgoing share is missing an exptected annotation. 2008-07-09 13:45:10 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
3cc4b5541f Restored a line in bookmarkSharingManager.js which I took out by accident when removing debugging dumps and stuff, changeset 969. It should not have been taken out; without it you get 'mounts undefined' error. 2008-07-09 13:24:49 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
a0611ee8e1 I think I have fixed updateIncomingShare now. So everything should work, if I share with a user not myself. 2008-07-08 22:39:05 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
7f36e552e6 Removed a bunch of dump statements that were in bookmarkSharingManager for old debugging stuff that is now done; they were just cluttering up the log. 2008-07-08 15:05:24 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
cfe420f221 updateOutgoingShare now explicitly encodes data to json before encrypting and uploading. 2008-07-08 14:52:31 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
5d937affe2 Fixed a typo in sendXmppNotification call 2008-07-08 14:51:14 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
2895b903a2 Fixed another trivial bug in BookmarkSharingManager._stopSharing that was making it fail at sending out the xmpp notification. 2008-07-08 14:19:26 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
55ec19cf3c Fixed some trivial bugs in BookmarkStore._wrapMountOutgoing that were preventing the outgoing share from working properly. 2008-07-08 14:15:55 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
2b8d2d7cb3 Factored the sending of xmpp notifications in bookmarkSharingManager out into a separate function, to save some duplicated code and make it easier to break xmpp stuff into a separate class later. Also made the bookmarkSharingManager cache the current weave username, which it uses a lot. Finally it now prepends /user/this._myUsername/ to server URLs to make them into absolute paths before sending them to the sharing partner over xmpp, which fixes a leftover TODO from a copule days ago. 2008-07-08 14:11:21 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
1cf9a1dea9 Fixed a bunch of bugs in bookmark share: stuf related to server-side paths being incorrect (because the defaultPrefix in DAV was getting reset to an empty string or was getting applied wrong). Discovered that updateOutgoingShare and updateIncomingShare were both calling the same _wrapMount() function, which was incorrect, so I broke that up and fixed what parts are meant to be outgoing and which incoming. 2008-07-08 01:18:30 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
9cfef4be35 Fixed a whole bunch of bugs in bookmark share, mostly related to adding in needed JsonFilters for remote Resources and fixing the server paths which are passed into DAV for the keyring file and encrypted share data files. (Also fixed a minor bug in DAV itself so that mkcol won't quit right away if you pass it something that starts with a slash.) 2008-07-03 17:57:21 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
f11ad3f3e3 Updated a couple of comments in bookmark sharing 2008-07-01 14:41:04 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
11dda58df6 Fixed yet another typo: this._sharing._share, not this._sharing.share. 2008-07-01 10:35:15 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
b7f7372c9f Fixed typo where undefined value was getting passed into share and stopSharing: should be node.itemId, not node.id 2008-07-01 10:31:16 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
fd7f338963 Fixed missing import 2008-07-01 10:27:19 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
a410545ba4 Fixed another typo 2008-07-01 10:26:01 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
fcb7743ce0 Fixed typo in BookmarkSharingManager._bms initialization 2008-07-01 10:24:52 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
10d9360015 Merged 2008-07-01 10:18:43 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
ba7249a10a Made _share() and _stopSharing() take bookmark item ID numbers instead of XUL nodes. 2008-07-01 10:18:35 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
aa859a7626 Made _stopSharing and _stopOutgoingShare more fault-tolerant (they will no longer die if the expected annotation is missing. 2008-07-01 09:58:00 -07:00
Dan Mills
802f7a254d fix cookie command logging; skip cookie commands for items we don't have 2008-06-30 23:26:35 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
5d960d2e8f Combined shareData and stopSharingData into one function to reuse code; made it so that if it gets called when Weave.DAV is already locked, instead of failing it sets up an observer that will trigger the share to happen as soon as the sync-succeeded or sync-failed message is received. 2008-06-30 22:30:04 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
dae06b83f1 Added test_bookmark_sharing to version control; note this doesn't pass right now (and in fact the main test is commented out.) 2008-06-30 18:50:06 -07:00
Myk Melez
3f7efe892f bug 442711: validate virtual tabs to make sure they have the minimal information necessary to recreate them before trying to save them or notify the user about them 2008-06-30 15:13:07 -07:00
Anant Narayanan
7f8e383db6 Fix syntax errors that were causing unit tests to fail 2008-06-30 12:26:41 -07:00
Anant Narayanan
645c447eb6 Fix small bug with PasswordTracker returning scores > 100 2008-06-30 11:33:25 -07:00
Anant Narayanan
f7911b9746 Primitive password tracking support (bug 435320, r=thunder) 2008-06-30 11:19:07 -07:00
Dan Mills
cbd9cd6819 import async module 2008-06-29 17:37:11 -07:00
Dan Mills
a4ae67b71a define _resetGUIDs in store 2008-06-29 17:36:59 -07:00
Dan Mills
091c571bd1 import async module 2008-06-29 17:36:35 -07:00
Dan Mills
293b220818 use this._lookup instead of command.data for remove commands 2008-06-29 17:36:13 -07:00
Dan Mills
3d16ec76a6 fix cooe engine's resetGUIDs method by importing async module; don't call runInBatchMode in bookmark engine's resetGUIDs, it doesn't work atm 2008-06-29 11:44:27 -07:00
Dan Mills
80417871c4 merge upstream changes 2008-06-29 07:07:11 -07:00
Dan Mills
e03543007a make resetguids async 2008-06-29 07:00:53 -07:00
Anant Narayanan
d2a1e9e87d Make PasswordStore process removeCommands correctly (bug 442090, r=thunder) 2008-06-28 01:13:14 -07:00
Anant Narayanan
089c1c0f42 General restructure for performance improvements (bug 441907, r=thunder) 2008-06-27 20:16:43 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
448ef4478e Merged 2008-06-26 17:01:12 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
d654677b9a Fixed several minor bugs with bookmark sharing 2008-06-26 17:00:55 -07:00
Anant Narayanan
62a0ebb31e Add license headers to all files which didn't have them. 2008-06-26 14:49:01 -07:00
Dan Mills
277753d21a tone down tab engine debugging output a bit 2008-06-26 14:34:32 -07:00
Justin Dolske
4abaf0f90c bustage fix: call this.foo(), not foo(). 2008-06-25 18:32:59 -07:00
Anant Narayanan
b53674f5dc Handle removeCommand in FormEngine correctly. (bug 441874, r=thunder) 2008-06-25 17:09:18 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
3f37543011 Set up bookmarkEngine._incomingShareOffer to use Myk's new Notification stuff to offer a notification to the user, asking them to accept or reject the incoming share. 2008-06-25 15:54:33 -07:00
Myk Melez
b379fdece8 the tabs engine needs a constant 2008-06-25 13:51:32 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
6f37a50f99 The share/stop sharing menu item is now added only to normal bookmark folders: Not to the main bookmark menu or to magic folders like 'recently tagged' or whatever. 2008-06-25 11:58:04 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
b24d0c7180 Moved all of the bookmark-share stuff out of the bookmarkEngine class into a new BookmarksSharingManager class. 2008-06-24 21:15:14 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
bc4d891c3a Moved the folder name and annotation for the incoming shares root folder to string constants. 2008-06-24 18:38:29 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
fcd94e31e2 Fixed all the places where I was accidentally calling it incomingShareAnno instead of incomingSharedAnno (note the missing letter d). Same for outgoingSharedAnno. 2008-06-24 18:28:01 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
4cba1fd51c Removed all uses of the 'weave/mounted-shares-id' annotation, since it's been made obsolete by INCOMING_SHARED_ANNO. 2008-06-24 18:23:43 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
0edbf9998f Changes in the annotations relevant to incoming/outgoing share folders are now handled by editCommands in the syncCore. 2008-06-24 18:15:17 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
4bc77b8e05 Annotations on incoming and outgoing share folders are now wrapped for sync, and handled on incoming createCommands. 2008-06-24 18:09:41 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
c4fa84f683 Merged 2008-06-24 13:41:12 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
03d94018af Added todo about exception handling 2008-06-24 13:41:01 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
ed99f7cb53 Make the stop-sharing-data command work 2008-06-23 18:23:08 -07:00
Justin Dolske
6ed3755104 Bug 433949 - Use WeaveCrypto component (NSS) instead of OpenSSL 2008-06-23 16:23:57 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
4489fb2ce3 The XMPP server is now configured to use LDAP for authentication (on sm-labs01, and soon to be on services.mozilla too) so the xmpp username/password will now be the same as the weave username/password. So I now use those to login, and I got rid of the two extra preferences which we used to have for xmpp username/password. 2008-06-20 17:19:10 -07:00
Atul Varma
ac90aaff04 Refactoring: consolidated duplicate code creating GUIDs via XPCOM gunk into a new function, Utils.makeGUID().
Note that there are some strange things re: whitespace in engines/bookmarks.js in this changeset; I literally only changed one line, though, and I'm not sure where they came from.  Maybe it was js2-mode?
2008-06-20 12:34:29 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
4f11d0d14d Fixed some more missing commas that were preventing engines/bookmarks.js from loading 2008-06-19 15:25:25 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
28bf4dc4f6 Added missing comma after function definition 2008-06-19 15:23:01 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
d58bdfe874 Backed out changeset 7720a1dd564a because the new crypto stuff that it uses hasn't been enabled yet. 2008-06-19 11:59:52 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
bff803b730 Applied dolske's patch from bug 433949 to make the bookmarkEngine work with the new improved Crypto interface. 2008-06-19 11:41:57 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
5725f10629 Reimplemented most of _updateIncomingShare to work with the new implementation of _updateOutgoingShare. No more need for the ugly hack to temporarily set the root directory of DAV, hooray 2008-06-18 23:27:48 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
423c88e98c Implemented _stopOutgoingShare (though it's still not being called from anywhere). 2008-06-18 23:00:09 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
624280ac82 Added documentation to createIncomingShare, rewrote it a little to be consistent with the other new stuff, and made it use annotations to keep track of the server path to the shared data. 2008-06-18 22:37:06 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
e4d31fe71d Gave the bookmarksEngine a permanent (lazy-initialized) reference to the annotation service, rather than recreating the reference every single time we use the service. Which is a lot of times now. 2008-06-18 20:53:11 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
9cc02dd84a Implemented _updateAllOutgoingShares in bookmarkEngine. 2008-06-18 20:45:01 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
f903901b8e Removed an unneeded yield statement from startXmppClient (this was raising warnings about yeilding without a callback.) 2008-06-18 18:48:17 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
8c09f36ad5 The xmpp messages that are sent when a share is offered now include the server-side path to the share directory. 2008-06-18 13:16:32 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
2a1462352b Merged 2008-06-18 12:48:26 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
0bef123361 made all calls to Resource.get() and Resource.put() properly asynchronous. 2008-06-18 12:48:20 -07:00
Atul Varma
1ab8baed0c Fixed typos. 2008-06-18 12:45:02 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
03cf0d6f73 Removed the check of whether the directory exists before creating it, in _createOutgoingShare(): realized it's not neccessary since DAV.MKCOL already does it. 2008-06-18 12:41:34 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
68669b6a0f Merged changes 2008-06-18 12:29:39 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
6503df042f Added documentation to BookmarkEngine._updateOutgoingShare. 2008-06-18 12:29:25 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
eb2aa3c9bb Complete rewrite of _createOutgoingShare and _updateOutgoingShare in BookmarkEngine, using remote.Resource objects and Crypto. 2008-06-18 12:26:51 -07:00
Atul Varma
ce9f6b0af8 Removed an unused constructor parameter from PasswordEngine. 2008-06-18 12:04:49 -07:00
Atul Varma
22a628bfea Moved XPCOM-specific stuff from engines/passwords.js to util.js so they could be easily stubbed-out by unit tests. 2008-06-18 11:54:24 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
43eec5b867 In the middle of trying to make createOutgoingShare work with Dan's changes (getSymKey having been moved to remote.js, etc.) 2008-06-16 17:52:24 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
f6cc70889f Trying to debug _createOutgoingShare... 2008-06-16 15:52:15 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
6ce93ffd1d Merged 2008-06-16 11:24:41 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
835100b96d Fixed some minor bugs -- the name of the incoming shared folder is parsed correctly, and xmppClient now catches bounce errors that were previously parsed as messages. 2008-06-13 16:20:43 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
c548d4b940 Made the initialization of the xmppClient an asynchronous call. This included modifying xmppClient.js so that connect() can be passed a callback function that will get called once the connection has succeeded or failed. For most of our purposes this is probably a better API than what we had before where you call waitForConnection() and it busy-waits until the connection has succeeded or failed. 2008-06-12 17:35:44 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
b462aad4a5 Merged changes. 2008-06-12 14:30:46 -07:00
Myk Melez
5d50fffd37 don't sync tab entry IDs, which change with every session, to avoid generating edit commands for every tab on restart even when the tabs haven't actually changed 2008-06-11 20:00:48 -07:00
Myk Melez
a850ec7b70 numChanged should be the number of shared items whose data is different, not the same 2008-06-11 18:47:56 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
97f788bb51 Fixed Utils.prefs.getStringPref (should be getCharPref) 2008-06-11 15:43:12 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
5459e1733a Resolved merging conflicts to service.js. 2008-06-11 11:54:44 -07:00
jonathandicarlo@localhost
4bb05d10b5 Created preferences for xmpp connection info (server url, realm, username, password), and a preference to turn xmpp messaging on or off, and made BookmarkEngine._init() call startXmppClient when this preference is true. 2008-06-11 11:13:35 -07:00
jonathandicarlo@localhost
918cc51c7f Expanded bookmarkEngine.share and added some more todos for the next round of functions to implement 2008-06-11 11:01:45 -07:00
Myk Melez
4a8808e790 bug 430363: ignore remove commands when generating deltas for history so the deltas file on the server doesn't grow too large; r=thunder 2008-06-11 10:40:24 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
b22dd7428c Fixed a couple of minor bugs that were preventing bookmark share from starting (like, i was skipping enabled engines instead of disabled engines... duhh) 2008-06-09 18:44:13 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
dc2d1940dd Moved the writing of the outgoing-share annotation on the bookmark folder to BookmarkEngine._share, where it makes a lot more sense than it does in the share.js dialog-box code where it used to be. 2008-06-09 16:49:04 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
7ca2dae349 Fixed a couple minor bugs that were preventing bookmark engine from starting up properly 2008-06-09 16:19:58 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
a1c5da3eeb Renamed bookmarkeEngine methods so they make more sense with the new sharing model, e.g. updateAllIncomingShares instead of syncMounts. 2008-06-09 15:27:09 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
b6a2028a3c Fixed my code so that BookmarkEngine._sync() now works correctly to call Engine._sync() and BookmarkEngine.syncMounts(), asynchronously. Added in some TODO comments about what's going to happen in the next round of refactoring. 2008-06-09 11:48:52 -07:00
jonathandicarlo@localhost
f26ddc5f76 Added license block and explanatory comments to bookmarks.js 2008-06-06 19:28:01 -07:00
jonathandicarlo@localhost
98d1bf05f4 Made BookmarkEngine.sync() responsible for calling BookmarkEngine.syncMounts (to get the incoming shared bookmark folder contents), eliminating the FIXME that previously had this being called from special-case code in WeaveSvc.sync(). 2008-06-06 19:22:23 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
473352178e Resolved conflicts with Chris's changes (to use the username, unhashed, as the name of the server-side sharing directory) 2008-06-06 17:43:15 -07:00
jonathandicarlo@jonathan-dicarlos-macbook-pro.local
3db8dcb84c Moved _createShare and _share() from engines.js to BookmarkEngine class in engines/bookmarks.js. The identity of the folder to be shared is now passed from the share dialog box (share.xul) into BookmarkEngine._share(). 2008-06-06 17:33:44 -07:00
chris@h-194.office.mozilla.org
d7c750f0f9 - this check in will break everyone temporarily, as it involves the changes necessary to shift us from sha1(email) to usernames, and to enable sharing on the server.
- we are also changing the default preferences on the trunk to point to the new staging server at https://sm-labs01.mozilla.org:81 that has been modified to support usernames
- everyone will need to create a new account and this will be streamlined within the startup function, which will now kick off on first run (we'll check in the updated setup wizard shortly)
- this checkin also cleans up a number of strings
2008-06-06 14:18:50 -07:00
Myk Melez
f096ecbbf4 bug 437523: fix NS_ERROR_FAILURE on nsIJSON.decode in JsonFilter_afterGET 2008-06-05 16:25:55 -07:00
Myk Melez
b3bf939ec2 bug 436696: make sure we pass a valid URI to nsITaggingService::getTagsForURI when the bookmark record doesn't include a URI so the method doesn't throw and hork bookmarks sync 2008-06-04 13:40:53 -07:00
Atul Varma
3a9ddcad85 In passwords.js, turned _hashLoginInfo() into a module-level function. 2008-06-03 16:56:58 -07:00
Atul Varma
e5bb509e17 Removed unused code from cookies.js, fixed a few js2-mode warnings. 2008-06-03 14:49:22 -07:00
Atul Varma
b74958a214 Moved all tab-syncing code to modules/engines/tabsjs. 2008-06-03 14:45:53 -07:00
Atul Varma
daf3be7564 Moved all form-syncing code into modules/engines/forms.js. 2008-06-03 14:20:51 -07:00
Atul Varma
1e0a1d1e06 Moved all password-syncing code into modules/engines/passwords.js. 2008-06-03 14:08:53 -07:00
Atul Varma
e2ce660c53 Moved all history-related functionality into modules/engines/history.js. 2008-06-03 13:56:16 -07:00
Atul Varma
f365f924cf Re-removed cookie-related changes that were accidentally re-added by c1a58b24679c and/or 5a49daf87c94.
Also moved all bookmark syncing logic into modules/engines/bookmarks.js.
2008-06-03 12:38:48 -07:00
Atul Varma
ada0204cac Moved all code related to the syncing of cookies--e.g. CookieStore, CookieTracker, CookieEngine, CookieSyncCore--into their own file at modules/engines/cookies.js. I'll be doing the same to the other engines shortly.
This helps with code organization--all the logic for dealing with a particular data type is now in one place--and should also make it easier to write unit/regression tests.
2008-06-03 11:11:44 -07:00