Version 1.7.1 - Oct 9th 2019 - BrickSync is open source! Version 1.7.0 - ?? - An experimental build to fix a rare Windows networking issue - Some minor bug fixes Version 1.6.9 - Feb 5th 2016 - New command: "setallremarksfromblid" to set the remarks of all your items to their BLID (this can help BrickOwl order picking for the sellers sorting their inventory by BLID) - As usual, that command can consume thousands of API calls, so BrickSync will finish later if the BL daily pool runs out (or use "resetapihistory") Version 1.6.8 - Feb 2nd 2016 - Bug fix: Empty BrickOwl lots would often not be reused even when "brickowl.reuseempty" is set and the external ID matched - Bug fix: Added support for the new "Curry" color which previously failed to translate - Bug fix: A BrickOwl order's "total_quantity" can somehow be "null" for some reason, BrickSync didn't like that - BrickSync now fetches store information from BrickOwl, mostly just for the currency used - The evalset/evalgear/evalinv commands now also list the price totals from the store's own inventory - Other minor improvements Version 1.6.7 - Sep 5th 2015 - Bug fix: Fixed a BrickSync crash when processing a completely empty BrickLink order - When there's a BrickSync broadcast message with priority High of Critical, print it right away, especially when launching the software Version 1.6.6 - Aug 19th 2015 - Extra robustness against BrickLink API server bugs Version 1.6.5 - Aug 19th 2015 - New command: "resetapihistory" to reset the API usage history to zero, for both BrickLink and BrickOwl - Apparently, the BL API 5000/day limit has been removed? Version 1.6.4 - Jun 16th 2015 - Fixed some networking error handling, again Version 1.6.3 - Jun 5th 2015 - Fixed the fix from 1.6.2 regarding tier-pricing, the code could sometimes want to update tier-pricing that was already matching - Improved networking error handling in case of a non-responsive server or a bad connection - Fixed a bug related to the API usage history when you would rewind the operating system's clock back in time - Fixed a bug related to some JSON value that can unexpectedly be an empty string (instead of null or an integer) coming from BrickOwl's API Version 1.6.2 - May 14th 2015 - Fixed a tier-price issue where BrickLink would output 4 decimals but they round to the same value with 3 decimals Version 1.6.1 - May 13th 2015 - Fixed a bug introduced in 1.5.9 where the -f flag would be ignored for various commands loading a BSX file - Run a check for free disk space (and automated emergency pruning of backups) when starting BrickSync, before attempting to write any file Version 1.6.0 - May 7th 2015 - BrickSync's color tables were updated to welcome some new colors to the family (a future version will provide a command to update said color tables) - Bug fix: if you edited data/bricksync.inventory.bsx and removed BrickOwl Lot ID tags, BrickSync had issues deleting BrickOwl lots and needed a "sync" operation, this is now fixed Version 1.5.9 - May 5th 2015 - Commands loading BSX files now discard LotID references if the inventory item matching said LotID doesn't also match exactly ID:Color:Condition Version 1.5.8 - Apr 30th 2015 - Bug fix: Fixed a serious initialization bug when you have past BrickOwl orders but the most recent order is older than 6 months - More robust initialization to figure out the latest order's timestamp when the BrickOwl order list has more than 16384 entries - Fixed minor comestic issue when running the disk space check Version 1.5.7 - Apr 30th 2015 - BrickSync now monitors available disk space and will print warnings if it's getting low - If available disk space becomes critically low (512 MB), the software will automatically start deleting old inventory backups (data/backups/) on its own - Improved journalling robustness in case of failed writes (running out of disk space, dying hard drive, etc.) Version 1.5.6 - Apr 29th 2015 - New command: "prunebackups" to delete BrickSync's backups of your store's inventory older than the specified count of days (syntax: prunebackups 30) - Use the pretend flag (-p) to see disk space used by backups without deleting anything (example: prunebackups -p 14) - Note that automated backups can take gigabytes of disk space for a large store, and backups can also be deleted manually (data/backups/) - Printed summary of "saveorderlist" no longer includes cancelled orders Version 1.5.5 - Apr 26th 2015 - BrickOwl and BrickLink don't always agree on what qualifies as set or as gear, BrickSync can now properly resolve BOIDs even when item types don't match Version 1.5.4 - Apr 18th 2015 - Minor bug fix: fixing flawed logic when we have cached a BLID<->BOID translation and the cached BOID gets deleted, typically due to duplicate entries in the BrickOwl catalog being cleaned up - Minor bug fix: a "owlqueryblid -f" that updates an outdated BOID translation will now properly fix inventory items - Added some tips on the procedure to follow when the creation of an item fails (on either BrickLink or BrickOwl) due to a changed BLID or an obsolete removed BOID Version 1.5.3 - Apr 15th 2015 - New command: "saveorderlist" to save a list of all BrickLink and BrickOwl orders from the past N days, both as text and tab-delimited files (syntax: saveorderlist 30) - Basic order information is now saved as an extra block in the headers of order BSX files (in data/orders/) - BrickSync doesn't yet use that BSX order information, but let's start saving that data for future software Version 1.5.2 - Apr 11th 2015 - New command: "setblid" to change the BLID of a lot, especially useful to fix lots listed with an incorrect variant - Added a big flashy warning when BrickSync is run for the first time: please minimally read the Frequently Asked Questions Version 1.5.1 - Apr 1st 2015 - BrickSync now also attempts to resolve unknown BLIDs by looking up BrickOwl items under the Minibuild type, in case a part/minifig/whatever was instead categorized as a Minibuild on BrickOwl - Minor bug fix: Outputting BL XML for items without a known BL category would produce an invalid 0 tag - Minor bug fix: When identifying items by BOID rather than BLID, the command owlsubmitdims would abort without sending anything Version 1.5.0 - Mar 23rd 2015 - New command: "owlforceblid" to force the addition of a BLID<->BOID mapping in BrickSync's translation cache (syntax: owlforceblid BOID BLID) Version 1.4.9 - Mar 21st 2015 - Unsorted lots on BrickLink are now properly ignored, instead of throwing weird errors - OSX binaries will now run on older versions of OSX, instead of throwing "Illegal instruction" errors (all due to a missing obscure compilation switch, -mmacosx-version-min, blergh!) Version 1.4.8 - Mar 3rd 2015 - Bug fix: When fetching new BrickSync messages, a type of networking error wasn't properly handled and it could retry endlessly when faced with that error (and www.bricksync.net apparently had a glitch earlier today) Version 1.4.7 - Feb 28th 2015 - BrickSync is now able to remove tier prices from a BrickOwl lot, as the relevant BrickOwl glitch was fixed - Bug fix: Fixed a rare crash when using the "owlresolve" command Version 1.4.6 - Feb 10th 2015 - Bug fix: Fixed a bug that could occur (on a very poor internet connection) when processing new BrickOwl orders and the code, due to many networking errors, finally gives up on retrieving data half-way through the new orders Version 1.4.5 - Feb 6th 2015 - New command: "evalgear" to evaluate a gear's inventory, functionally identical to "evalset" but for gear items (syntax: evalgear 850425) - Bug fix: When a BrickLink update is rejected by the server, it could incorrectly decide to drop non-existing low-priority updates and keep on trying (bug was introduced in 1.4.3) Version 1.4.4 - Feb 1st 2015 - Improved handling of rejected updates, don't increment the error count when a low-priority update fails (like being unable to remove tier prices on BrickOwl) - Prevent the debugging watchdog thread from complaining if the user waits more than 10 minutes to answer the yes/no question when initializing from scratch Version 1.4.3 - Jan 31st 2015 - Improved error handling when the creation/update of an item is clearly rejected by either API (not due to networking errors) - When an item update is rejected by an API, it will be discarded until the next 'sync' *except* for quantities adjustments: BrickSync won't give up on quantity adjustments (BrickLink's API gives weird errors during maintenance) - The BrickOwl API seems to have an issue related to removing tier prices. Either that or I have no idea how to do it. The improved rejection handling above should help until this is resolved... Version 1.4.2 - Jan 30th 2015 - Fixed some issue in the HTTP error handling that was "improved" in 1.4.1 - The root cause was actually an old bug related to handling a server's "Keep-alive: max=" header, we would pipeline extra requests *after* scheduling a friendly FIN,ACK socket shutdown due to the "max" count being decremented by the server at every request Version 1.4.1 - Jan 30th 2015 - The "checkprices" command can now take an optional argument to check a given BSX file rather than the tracked inventory (syntax: checkprices 0.5 1.5 stuff.bsx) - Increased HTTP timeouts since BrickOwl can somehow take a while to start sending any data when an user is retrieving a very large inventory - Reworked error handling in HTTP stack (let me know if you see anything weird) Version 1.4.0 - Jan 28th 2015 - New command: "findorder" to search through the inventory of all orders saved on disk in the past X days for a match of all following arguments, in all item fields (syntax: findorder 3001 Black) - New command: "findordertime" to set how far back to search, in days, when using the "findorder" command (syntax: findordertime 21) - New command: "checkprices" to list inventory prices outside a relative range of price guide data (syntax: checkprices 0.5 1.5) - The output of BL XML now also supports tier prices - Fixed some stall warnings from the debugging watchdog thread when the internet connection is so poor that it connects but doesn't manage to get anything done for over 10 minutes Version 1.3.9 - Jan 25th 2015 - We finally have support for tier prices! - After upgrading to 1.3.9, I *strongly* recommend to type "blmaster on" followed by "blmaster off" right away to load all your tier prices in. - Improved "help" overview of commands Version 1.3.8 - Jan 24th 2015 - New command: "invblxml" to output BrickLink XML upload file(s) for a specified BrickStore BSX file (syntax: invblxml stuff.bsx) - Minor bug fix: Make the "runfile" command say something when the specified file can't be read (doh!) - Minor bug fix: the command "runfile" would ignore the last line of a file if it didn't contain a line break - New help topic: "help conf" to print the current configuration (except API keys, we don't want that to appear in logs) - The command "partout" was renamed "evalpartout" to avoid confusion (which is almost the same thing as "evalset" anyway) Version 1.3.7 - Jan 22nd 2015 - Fixing an old bug (that was once fixed and brought back) regarding uploading boxes/packaging in "new" condition to BrickOwl Version 1.3.6 - Jan 22nd 2015 - New command: "owlsubmitdims" to submit part dimensions to the BrickOwl catalog (syntax: owlsubmitdims ID length width height) - New command: "owlsubmitweight" to submit weights to the BrickOwl catalog (syntax: owlsubmitweight ID weight) - For both commands, the ID can be either a BLID or a BOID using a '*' prefix, such as 3001 or *771344. Version 1.3.5 - Jan 22nd 2015 - New command: "merge" to merge new inventory, "merge foo.bsx" is functionally equivalent to "add foo.bsx" followed by "loadall foo.bsx" - New command: "invmycost" to update the MyCost fields of a specified BSX file (syntax: invmycost MyFile.bsx 78.55) - New command: "loadmycost" to update the MyCost fields of inventory lots matching lots of the specified BSX file (syntax: loadmycost MyFile.bsx) - The comments parser determining the grades of used parts was tweaked, you can type "regradeused" to update used grades Version 1.3.4 - Jan 19th 2015 - Small correction for the owlupdateblid command Version 1.3.3 - Jan 18th 2015 - New commands: "owlqueryblid", "owlsubmitblid", "owlupdateblid" and "runfile" - The command owlqueryblid resolves the BOID for a specified BLID (syntax: owlqueryblid BLID) - The command owlsubmitblid edits the BrickOwl catalog, it submits a new BLID to a BOID (syntax: owlsubmitblid BOID BLID). - The command owlupdateblid edits the BrickOwl catalog, it resolves the BOID for a given BLID, then submits a new BLID to that resolved BOID (syntax: owlupdateblid oldBLID newBOID). - The command runfile loads a specified text file and runs all commands contained in it. The commands should be separated by line breaks (syntax: runfile FileWithCommands.txt). - Note that catalog submissions may take 24-48 hours to be accepted by a catalog administrator! Version 1.3.2 - Jan 11th 2015 - Bug fix: Fixed some crash just introduced in 1.3.1 hours ago, sorry about that! Version 1.3.1 - Jan 11th 2015 - Bug fix: Fixed a possible lot matching weakness of blmaster mode in some specific scenarios that involve creating new multiple identical lots, for an item that already existed, while in blmaster mode. - Bug fix: Fixed some minor issue with the command "regradeused". - After updating to 1.3.1, I recommend typing "sync brickowl" to check and repair any possible issue. Version 1.3.0 - Jan 11th 2015 - New command: "regradeused" to update the BrickOwl grade of all used parts by parsing the comments of each lot. - The comments parser recognizes many keywords and understands basic grammar rules from modifier keywords (such as 'not' or 'many') to form compound statements. - The "My Cost" field is now synchronized between BrickLink and BrickOwl. - Bug fix: I believe a weird networking issue affecting some users has finally been fixed. (I have never seen it myself...) Version 1.2.9 - Jan 5th 2015 - BrickLink's buggy API can get an inventory lot into negative quantities in some specific circumstances, and the API would then produce weird errors when BrickSync tries to fix that lot after an automated 'sync' due to empty/buggy API replies. This update works around BrickLink API bugs to correct negative quantity lots. Version 1.2.8 - Dec 27th 2014 - Important bug fix: When retainemptylots is enabled and a 'sync' operation faced active BrickLink lots for which the tracked inventory had zero quantities, the "move to stockroom" flag wasn't being set. BrickLink would then complain about trying to set a lot quantity of zero. Version 1.2.7 - Dec 24th 2014 - This is a debugging release, there are no extra features compared to 1.2.6 - It logs much more information than 1.2.6 to help figure out a weird "freezing" bug reported by 3 users (never seen it myself) - If you get an error message that asks you to send me the file "debugtracker.txt", please do so! Thanks :) Version 1.2.6 - Nov 27th 2014 - New command: "verify" to list any discrepency between the BL/BO inventories and the local inventory, it lists all operations that would be performed by a "sync" command, without actually performing them - Other minor corrections and improvements Version 1.2.5 - Nov 25th 2014 - Minor correction: also check for item condition when doing LotID matching (ID and Color were already checked) - When the option "retainemptylots" is set and a sync operation encounters BL lots that shouldn't be there, the lots are now moved empty to the BL stockroom instead of deleting them Version 1.2.4 - Nov 22nd 2014 - Important bug fix: for some HTTP queries, a network timeout prior to sending the query for an already connected socket wouldn't abort the current operation - Improved accuracy of acquired price guide data (evalset, etc.) Version 1.2.3 - Nov 20th 2014 - Extra warnings and safeguards against synchronizing from a closed BrickLink store (the inventory of a closed store appears totally empty) - Progress indicators when updating many lots at once - New configuration variable: bricklink.pipelinequeue to set the maximum count of pipelined HTTP BrickLink API queries - New configuration variable: brickowl.pipelinequeue to set the maximum count of pipelined HTTP BrickOwl API queries - The two pipelinequeue variables define how many HTTP queries can be maintained "in flight" over the same socket. Default values are now 8 (used to be 4), even higher values can speed up all operations if your internet connection is reasonably stable. Version 1.2.2 - Nov 19th 2014 - Minor correction: don't print activity stall warnings from the new background watchdog thread when the "init" stage takes a very long time Version 1.2.1 - Extra robustness in the very specific case of using the "add" command to add inventory containing multiple identical lots while running low of daily BrickLink API calls (therefore delaying the creation of some lots), but these lots are still created on BrickOwl, and BrickOwl orders are later received that consume some of these duplicate lots - Extra robustness in the "sync" operation when duplicate lots weren't created on BrickLink due to running low of daily API calls, but these lots were still uploaded to BrickOwl - New debugging capability: background watchdog thread monitoring activity of the main and networking threads Version 1.2.0 - Some bug fix in BrickOwl JSON parsing, some JSON values can unexpectedly be 'null' for some reason - Some bug fix related to comments/remarks longer than 255 bytes, BrickLink doesn't like that Version 1.1.9 - Important bug fix related to fetching the BrickLink inventory while coming out of blmaster mode with an incorrect API key, for example due to a changed IP Version 1.1.8 - BrickSync can now verify if a more recent version of the software exists and if there's some broadcast message for all users - You can disable this feature by setting this configuration variable: checkmessage = 0; - New command: message to read any received broadcast message - Partial support for "My Cost" field (waiting for some API support on the BrickOwl side) Version 1.1.7 - Improved error messages when BrickSync is executed with an incorrect current working directory, especially for OSX users Version 1.1.6 - Improved error messages when pipelined API calls never get a reply due a service's low Keep-Alive timeout and/or a poor connection (BrickSync just retries and/or will later sync) Version 1.1.5 - BrickOwl: Additional checks of BOID and Color for "sync" even when we get a LotID match, since BrickLink can reuse the LotID from a deleted lot for a new lot - Other minor corrections Version 1.1.4 - Some bug fix related to 1.1.3 modifications Version 1.1.3 - A "sync" operation used not to compare colors when LotIDs match, but now it does starting from version 1.1.3 Version 1.1.2 - For extra safety: if the loaded state file is older than 12 hours, BrickSync now saves to disk a backup of the current BrickLink inventory as BSX before any other operation - BrickLink API calls made during init from scratch are now properly tracked by API usage history Version 1.1.1 - A BrickOwl glitch was fixed, BrickSync can now create items in a color that was previously unknown to BrickOwl for that part Version 1.1.0 - New optional configuration option: brickowl.reuseempty with a value of zero by default - During init and sync, if brickowl.reuseempty is set to 1, BrickSync will see zero quantity BrickOwl lots and add to these (*only* when the externalID/BlLotID matches) instead of creating new lots - You may want to enable brickowl.reuseempty when retainemptylots is also enabled, if you expect to preserve tier-based prices and other such options Version 1.0.9 - Fixed a rare glitch caused by not being able to update a lot's external_id on BrickOwl. We can return to reusing existing lots if BrickOwl allows editing a lot's external_id. Version 1.0.8 - Fixed glitch in new backup path introduced in 1.0.7 about 3 hours ago. Oops. Version 1.0.7 - The data/ directory was getting a little crowded, so future inventory backups are now stored at data/backups/%Y-%m-%d/ instead of data/backups-%Y-%m-%d/ - The Vista 32 bits glitch should now be solved definitely. (BrickItOn, can you confirm?) - Other minor improvements. Version 1.0.6 - Fix for old Windows 32 bits with old C runtimes (2003) which don't understand C99 %lld specifiers - Also now logging the exact OS on init and added a "help sysinfo" command Version 1.0.5 - New command: evalinv to evaluate a specified BSX file, comparing how it would combine and improve the current inventory. Syntax: evalinv EvaluateThis.bsx [OptionalOutputEvalulation.bsx] Version 1.0.4 - Fix for BrickLink Master Mode, resolve BOIDs for newly created lots right away. Version 1.0.3 - Fixed some BrickLink Master Mode glitch where certain updates could be skipped for BrickOwl until a "sync". - Windows fix: MoveFileEx() can fail if some indexing or anti-virus software is scanning either file at the same time, so we have to try many times in a loop after a delay (Geez Windows...). - Another attempt at working around a strange behavior on Vista 32 bits (I can't test the result myself...). Version 1.0.2 - Some work-around for a strange behavior/bug on Windows Vista 32 bits. Thanks to BrickItOn for his help on debugging that! Version 1.0.1: - More log fflush() during initialization to identify the exact stalling point for an user. Version 1.0.0: - We are out of beta testing! Thanks everybody for your beta testing and support. Version 0.33: - Minor corrections related to registration. - Other cosmetic improvements Version 0.32: - Improved registration handling through custom 1024 bits asymmetric encryption. (Note again that an unregistered copy works perfectly well. If your inventory has over 250000 parts, it just asks a small math question to check orders (to keep that mind sharp and agile!).) - Various small improvements. Version 0.30: - New experimental "BL master" mode, through the blmaster [on/off] command. - New experimental option to retain empty lots (retainemptylots = 1; in data/bricksync.conf.txt). When enabled, empty lots aren't deleted on BO, BL or the tracked inventory. - New command: delete ItemIdentifier to truly delete an item even when retainemptylots is enabled. - The help command had an update, most commands now have at least a few lines of documentation. - Other stuff. Version 0.28: - Bug fix related to the MUST_SYNC flag not being automatically set when some queries are left without a reply during Init (a manual sync would still check and fix anything). - Little bug fix related to multiple commands outputing BL XML files due to running low on daily BL API calls; we want to create new files, not overwrite previous ones that haven't been applied yet. Note that pending XML files are removed when a sync (manual or automated) checks if the XML was applied or not, and new XML files may be produced if the daily API pool is still too low. Version 0.27: - Bug fix, some threading race condition related to the management of socket recv buffers in specific circumstances (bug can't cause any actual harm, three cheers for data journalling). Thanks budgetkids! Version 0.26: - Automated management of the limit of 5000 BL API calls per day, with optional output of BL XML - Added support for unusual BL order status: NPB NPX NRS NSS OCR - Other minor improvements and corrections (as usual, an update is recommended) Version 0.24: - Since we approach the end of beta testing, the limitation of inventory size has been removed. Though, if your inventory holds more than 250000 parts, you'll be kindly invited to support BrickSync or you'll be asked a small mathematical question/puzzle to "check" for new orders. Sounds fun, eh? :) - Various other improvements. Version 0.23: - New command: evalset to evaluate a set for partout, also optionally output a .bsx file for inspection with per-part evaluation statistics stored in comments (when a part has alternates, the cheapest one is assumed to be the right one). - New command: partout to produce a .bsx file very similar to evalset, but all part alternates are kept and identified as such in the comments fields (as well as being flagged "Extra"). - Other minor corrections and improvements. Version 0.21: - When multiple identical lots (same ID:color:condition) were created at the same time (add command), LotID/OwlLotID could be incorrectly assigned back to the main inventory. When receiving orders for these items, this could later lead to warnings and automatic sync to figure out what's going on. That's fixed. - Better handling of items known to BrickOwl but for which lot creation still fails for other reasons (part 97122, I'm looking at you!). When the server rejects creation of our lot, the operation will be attempted again if a sync command is issued. - New command: loadall to update prices, comments (public notes), remarks (private notes) and bulk from a specified BrickStore/BrickStock .bsx file all at once. As usual, only matching lots are updated and only the modified lots are issued API calls. - More verbose warning/error messages, without having to consult logs. (though *please* still send me log files if you suspect any bug) Version 0.20: - The code is now probably robust to handle duplicate lots (same ID, color and condition) after fixing a related glitch and reviewing a bunch of code. Though, when adding new inventory from a BSX file, it will still add the items to the first match it finds (unless there's a LotID match). Version 0.18: - Fixed a potential completeness status glitch when uploading new sets to BrickLink. - BrickSync is now tracking usage of API calls over the past 24 hours. You can monitor API usage with the status command, but a future version will use that information to avoid hitting BrickLink's limit of 5000 calls per day (delaying lower priority updates and outputting XML files for optional manual upload). - New command: consolidate to merge all identical lots (sharing the same ID, color and condition). It will also list identical lots that differ in their comments or remarks, but will not merge them. After reviewing, if you want to also merge such lots, you can run consolidate -f (with -f being the flag to force a command). - Some other commands also now print warnings which can be overriden with the -f flag (such as when uploading items with no remarks or with a price of 0.00). - Some other stuff. Version 0.16: - Fixed some Unicode/UTF8 conversion during JSON encoding and decoding. If you had Unicode characters in your comments/remarks and noticed unnecessary BrickOwl updates during "sync" when the comments/remarks already matched, that was the issue. - Fixed an old issue where a large queue of BrickOwl updates could pause after some read/write errors, to resume 30 seconds later. The actual issue was ignoring the server's HTTP Keep-Alive "max" parameter specifying a maximum count of pipelined HTTP queries on a same socket. - Inventory backups are now also stored before every add/sub/loadprices/loadnotes command. Version 0.13: - Fixed Windows-only issues related to some standard functions (snprintf(), vsnprintf(), etc.) not actually being standard-compliant on Windows (what else is new!). A symptom was skipping updates for BrickOwl comments/remarks in some circumstances (to fix everything, update executable and type "sync brickowl").