From 59ff504c960e25e5222ef21aa1676d61e54c2189 Mon Sep 17 00:00:00 2001 From: chuckbucket Date: Thu, 3 Jul 2025 08:05:57 -0600 Subject: [PATCH 1/4] trim white space. Trimming white space when comparing BL and BO items. Will now consider "c-03" and "c-03 " the same. BrickOwl appears to always trim whitespace, this would cause BrickSync to always try to update BrickOwl's inventory. --- bssync.c | 43 +++++++++++++++++++++++++++++++++++++++---- ccstr.c | 34 ++++++++++++++++++++++++++++++++++ ccstr.h | 1 + 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/bssync.c b/bssync.c index ae3cff2..4f3a231 100644 --- a/bssync.c +++ b/bssync.c @@ -168,6 +168,11 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st /* Find what needs an update */ updateflags = 0; + char *item_comments_trimmed = NULL; + char *stockitem_comments_trimmed = NULL; + char *item_remarks_trimmed = NULL; + char *stockitem_remarks_trimmed = NULL; + if( item->quantity != stockitem->quantity ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_QUANTITY; @@ -183,16 +188,27 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st updateflags |= BSX_ITEM_XFLAGS_UPDATE_PRICE; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Price from %.3f to %.3f%s\n", item->price, stockitem->price, itemstringbuffer ); } - if( !( ccStrCmpEqualTest( item->comments, stockitem->comments ) ) ) + + item_comments_trimmed = ccStrTrimWhitespace( item->comments ); + stockitem_comments_trimmed = ccStrTrimWhitespace( stockitem->comments ); + if( !( ccStrCmpEqualTest( item_comments_trimmed, stockitem_comments_trimmed ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_COMMENTS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Comments from \"%s\" to \"%s\"%s\n", item->comments, stockitem->comments, itemstringbuffer ); } - if( !( ccStrCmpEqualTest( item->remarks, stockitem->remarks ) ) ) + free( item_comments_trimmed ); + free( stockitem_comments_trimmed ); + + item_remarks_trimmed = ccStrTrimWhitespace( item->remarks ); + stockitem_remarks_trimmed = ccStrTrimWhitespace( stockitem->remarks ); + if( !( ccStrCmpEqualTest( item_remarks_trimmed, stockitem_remarks_trimmed ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_REMARKS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Remarks from \"%s\" to \"%s\"%s\n", item->remarks, stockitem->remarks, itemstringbuffer ); } + free( item_remarks_trimmed ); + free( stockitem_remarks_trimmed ); + if( ( item->bulk != stockitem->bulk ) && ( ( item->bulk >= 2 ) || ( stockitem->bulk >= 2 ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_BULK; @@ -450,6 +466,10 @@ int bsMergeInv( bsContext *context, bsxInventory *inv, bsMergeInvStats *stats, i bsxItem *item, *stockitem, *deltaitem; bsxInventory *stockinv; char itemstringbuffer[512]; + char *item_comments_trimmed = NULL; + char *stockitem_comments_trimmed = NULL; + char *item_remarks_trimmed = NULL; + char *stockitem_remarks_trimmed = NULL; DEBUG_SET_TRACKER(); @@ -604,6 +624,10 @@ int bsMergeLoad( bsContext *context, bsxInventory *inv, bsMergeUpdateStats *stat bsxItem *item, *stockitem, *deltaitem; bsxInventory *stockinv; char itemstringbuffer[512]; + char *item_comments_trimmed = NULL; + char *stockitem_comments_trimmed = NULL; + char *item_remarks_trimmed = NULL; + char *stockitem_remarks_trimmed = NULL; DEBUG_SET_TRACKER(); @@ -638,16 +662,27 @@ int bsMergeLoad( bsContext *context, bsxInventory *inv, bsMergeUpdateStats *stat updateflags |= BSX_ITEM_XFLAGS_UPDATE_PRICE; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set price from %.3f to %.3f for item%s\n", stockitem->price, item->price, itemstringbuffer ); } - if( ( mergeflags & BS_MERGE_FLAGS_COMMENTS ) && !( ccStrCmpEqualTest( item->comments, stockitem->comments ) ) ) + + item_comments_trimmed = ccStrTrimWhitespace( item->comments ); + stockitem_comments_trimmed = ccStrTrimWhitespace( stockitem->comments ); + if( ( mergeflags & BS_MERGE_FLAGS_COMMENTS ) && !( ccStrCmpEqualTest( item_comments_trimmed, stockitem_comments_trimmed ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_COMMENTS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set comments from \"%s\" to \"%s\"%s\n", stockitem->comments, item->comments, itemstringbuffer ); } - if( ( mergeflags & BS_MERGE_FLAGS_REMARKS ) && !( ccStrCmpEqualTest( item->remarks, stockitem->remarks ) ) ) + free( item_comments_trimmed ); + free( stockitem_comments_trimmed ); + + item_remarks_trimmed = ccStrTrimWhitespace( item->remarks ); + stockitem_remarks_trimmed = ccStrTrimWhitespace( stockitem->remarks ); + if( ( mergeflags & BS_MERGE_FLAGS_REMARKS ) && !( ccStrCmpEqualTest( item_remarks_trimmed, stockitem_remarks_trimmed ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_REMARKS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set remarks from \"%s\" to \"%s\"%s\n", stockitem->remarks, item->remarks, itemstringbuffer ); } + free( item_remarks_trimmed ); + free( stockitem_remarks_trimmed ); + if( ( mergeflags & BS_MERGE_FLAGS_BULK ) && ( item->bulk != stockitem->bulk ) && ( ( item->bulk >= 2 ) || ( stockitem->bulk >= 2 ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_BULK; diff --git a/ccstr.c b/ccstr.c index 789934b..6fc0f4f 100644 --- a/ccstr.c +++ b/ccstr.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "cc.h" #include "ccstr.h" @@ -41,7 +42,40 @@ //// +char *ccStrTrimWhitespace( char *str ) +{ + char *end; + char *new_str; + size_t len; + + if( str == NULL ) + return NULL; + + // Trim leading space + while( isspace( (unsigned char)*str ) ) + str++; + + if( *str == 0 ) // All spaces? + return ccStrDup( str ); + + // Trim trailing space + end = str + strlen(str) - 1; + while( end > str && isspace( (unsigned char)*end ) ) + end--; + // Write new null terminator character + *(end+1) = 0; + + len = (end - str) + 1; + new_str = (char *)malloc( len + 1 ); + if( new_str == NULL ) + return NULL; // Allocation failed + + memcpy( new_str, str, len ); + new_str[len] = 0; + + return new_str; +} #define CC_CHAR_IS_CONTROL(c) ((c)<' ') #define CC_CHAR_IS_DELIMITER(c) ((c)<=' ') diff --git a/ccstr.h b/ccstr.h index 77b8070..0edc28d 100644 --- a/ccstr.h +++ b/ccstr.h @@ -173,6 +173,7 @@ int ccSeqParseDouble( char *seq, int seqlength, double *retdouble ); int ccStrParseHex( char *str, int hexchars ); +char *ccStrTrimWhitespace( char *str ); //// From c50f33db44de4851cd383ae2ce038db01d97f729 Mon Sep 17 00:00:00 2001 From: chuckbucket Date: Thu, 3 Jul 2025 11:52:28 -0600 Subject: [PATCH 2/4] compare sale rates compare and update sale rates. --- bsapplydiff.c | 4 ++++ bssync.c | 9 ++++++++- bsx.h | 3 ++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/bsapplydiff.c b/bsapplydiff.c index 45cd9f9..35b1cea 100644 --- a/bsapplydiff.c +++ b/bsapplydiff.c @@ -833,6 +833,8 @@ static void bsBrickOwlApplyDiffUpdate( bsContext *context, bsxItem *item, int it ccGrowthPrintf( &postgrowth, "&bulk_qty=%d", ( item->bulk > 0 ? item->bulk : 1 ) ); if( item->flags & BSX_ITEM_XFLAGS_UPDATE_MYCOST ) ccGrowthPrintf( &postgrowth, "&my_cost=%.3f", item->mycost ); + if( item->flags & BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT ) + ccGrowthPrintf( &postgrowth, "&sale_percent=%d", item->sale ); if( item->flags & BSX_ITEM_XFLAGS_UPDATE_USEDGRADE ) { conditionstring = 0; @@ -881,6 +883,8 @@ static void bsBrickOwlApplyDiffUpdate( bsContext *context, bsxItem *item, int it ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "; Set bulk to %d", item->bulk ); if( item->flags & BSX_ITEM_XFLAGS_UPDATE_MYCOST ) ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "; Set mycost to %.3f", item->mycost ); + if( item->flags & BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT ) + ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "; Set sale_percent to %d", item->sale ); if( item->flags & BSX_ITEM_XFLAGS_UPDATE_USEDGRADE ) ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "; Set usedgrade to %c", item->usedgrade ); if( item->flags & BSX_ITEM_XFLAGS_UPDATE_TIERPRICES ) diff --git a/bssync.c b/bssync.c index 4f3a231..11e439f 100644 --- a/bssync.c +++ b/bssync.c @@ -229,6 +229,11 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st updateflags |= BSX_ITEM_XFLAGS_UPDATE_TIERPRICES; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set TierPrices from [[%d,%.3f],[%d,%.3f],[%d,%.3f]] to [[%d,%.3f],[%d,%.3f],[%d,%.3f]]%s\n", item->tq1, item->tp1, item->tq2, item->tp2, item->tq3, item->tp3, stockitem->tq1, stockitem->tp1, stockitem->tq2, stockitem->tp2, stockitem->tq3, stockitem->tp3, itemstringbuffer ); } + if ( ( deltamode == BS_SYNC_DELTA_MODE_BRICKOWL ) && ( stockitem->sale != item->sale ) ) + { + updateflags |= BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT; + ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Sale Percent from %d to %d%s\n", item->sale, stockitem->sale, itemstringbuffer ); + } /* TODO: Remove this once we made sure we are properly importing OwlLotIDs everywhere! */ @@ -257,6 +262,8 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st deltaitem->boid = item->boid; deltaitem->bolotid = item->bolotid; deltaitem->quantity = stockitem->quantity - item->quantity; + if (updateflags & BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT) + deltaitem->sale = stockitem->sale; deltaitem->flags |= BSX_ITEM_XFLAGS_TO_UPDATE | updateflags; /* Increment counters */ if( deltaitem->quantity > 0 ) @@ -273,7 +280,7 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st stats->match_lotcount++; /* Track updatedata updates */ - if( updateflags & ( BSX_ITEM_XFLAGS_UPDATE_PRICE | BSX_ITEM_XFLAGS_UPDATE_COMMENTS | BSX_ITEM_XFLAGS_UPDATE_REMARKS | BSX_ITEM_XFLAGS_UPDATE_BULK | BSX_ITEM_XFLAGS_UPDATE_MYCOST | BSX_ITEM_XFLAGS_UPDATE_USEDGRADE | BSX_ITEM_XFLAGS_UPDATE_TIERPRICES ) ) + if( updateflags & ( BSX_ITEM_XFLAGS_UPDATE_PRICE | BSX_ITEM_XFLAGS_UPDATE_COMMENTS | BSX_ITEM_XFLAGS_UPDATE_REMARKS | BSX_ITEM_XFLAGS_UPDATE_BULK | BSX_ITEM_XFLAGS_UPDATE_MYCOST | BSX_ITEM_XFLAGS_UPDATE_USEDGRADE | BSX_ITEM_XFLAGS_UPDATE_TIERPRICES | BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT ) ) { stats->updatedata_partcount += stockitem->quantity; stats->updatedata_lotcount++; diff --git a/bsx.h b/bsx.h index 2ceb03a..a53700f 100644 --- a/bsx.h +++ b/bsx.h @@ -132,9 +132,10 @@ typedef struct #define BSX_ITEM_XFLAGS_UPDATE_USEDGRADE (0x800000) #define BSX_ITEM_XFLAGS_UPDATE_TIERPRICES (0x1000000) #define BSX_ITEM_XFLAGS_FETCH_PRICE_GUIDE (0x2000000) +#define BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT (0x4000000) /* Mask of all update flags */ -#define BSX_ITEM_XFLAGS_UPDATEMASK (BSX_ITEM_XFLAGS_UPDATE_QUANTITY|BSX_ITEM_XFLAGS_UPDATE_COMMENTS|BSX_ITEM_XFLAGS_UPDATE_REMARKS|BSX_ITEM_XFLAGS_UPDATE_PRICE|BSX_ITEM_XFLAGS_UPDATE_BULK|BSX_ITEM_XFLAGS_UPDATE_STOCKROOM|BSX_ITEM_XFLAGS_UPDATE_MYCOST|BSX_ITEM_XFLAGS_UPDATE_USEDGRADE|BSX_ITEM_XFLAGS_UPDATE_TIERPRICES) +#define BSX_ITEM_XFLAGS_UPDATEMASK (BSX_ITEM_XFLAGS_UPDATE_QUANTITY|BSX_ITEM_XFLAGS_UPDATE_COMMENTS|BSX_ITEM_XFLAGS_UPDATE_REMARKS|BSX_ITEM_XFLAGS_UPDATE_PRICE|BSX_ITEM_XFLAGS_UPDATE_BULK|BSX_ITEM_XFLAGS_UPDATE_STOCKROOM|BSX_ITEM_XFLAGS_UPDATE_MYCOST|BSX_ITEM_XFLAGS_UPDATE_USEDGRADE|BSX_ITEM_XFLAGS_UPDATE_TIERPRICES|BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT) #define BSX_ITEM_STOCKFLAGS_RETAIN (0x1) #define BSX_ITEM_STOCKFLAGS_STOCKROOM (0x2) From 01ffb4b1c4789254242a7561af951d6345e3437d Mon Sep 17 00:00:00 2001 From: chuckbucket Date: Mon, 21 Jul 2025 10:30:18 -0600 Subject: [PATCH 3/4] Changed trimming. Trims white spaced when parsing download from bricklink. Removed trim functions from sync function since they are now redundent. --- bssync.c | 43 ++++--------------------------------------- bsx.c | 8 ++++++-- ccstr.c | 25 ++++++++++++------------- 3 files changed, 22 insertions(+), 54 deletions(-) diff --git a/bssync.c b/bssync.c index 11e439f..d56c118 100644 --- a/bssync.c +++ b/bssync.c @@ -168,11 +168,6 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st /* Find what needs an update */ updateflags = 0; - char *item_comments_trimmed = NULL; - char *stockitem_comments_trimmed = NULL; - char *item_remarks_trimmed = NULL; - char *stockitem_remarks_trimmed = NULL; - if( item->quantity != stockitem->quantity ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_QUANTITY; @@ -188,27 +183,16 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st updateflags |= BSX_ITEM_XFLAGS_UPDATE_PRICE; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Price from %.3f to %.3f%s\n", item->price, stockitem->price, itemstringbuffer ); } - - item_comments_trimmed = ccStrTrimWhitespace( item->comments ); - stockitem_comments_trimmed = ccStrTrimWhitespace( stockitem->comments ); - if( !( ccStrCmpEqualTest( item_comments_trimmed, stockitem_comments_trimmed ) ) ) + if( !( ccStrCmpEqualTest( item->comments, stockitem->comments ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_COMMENTS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Comments from \"%s\" to \"%s\"%s\n", item->comments, stockitem->comments, itemstringbuffer ); } - free( item_comments_trimmed ); - free( stockitem_comments_trimmed ); - - item_remarks_trimmed = ccStrTrimWhitespace( item->remarks ); - stockitem_remarks_trimmed = ccStrTrimWhitespace( stockitem->remarks ); - if( !( ccStrCmpEqualTest( item_remarks_trimmed, stockitem_remarks_trimmed ) ) ) + if( !( ccStrCmpEqualTest( item->remarks, stockitem->remarks ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_REMARKS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Remarks from \"%s\" to \"%s\"%s\n", item->remarks, stockitem->remarks, itemstringbuffer ); } - free( item_remarks_trimmed ); - free( stockitem_remarks_trimmed ); - if( ( item->bulk != stockitem->bulk ) && ( ( item->bulk >= 2 ) || ( stockitem->bulk >= 2 ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_BULK; @@ -473,10 +457,6 @@ int bsMergeInv( bsContext *context, bsxInventory *inv, bsMergeInvStats *stats, i bsxItem *item, *stockitem, *deltaitem; bsxInventory *stockinv; char itemstringbuffer[512]; - char *item_comments_trimmed = NULL; - char *stockitem_comments_trimmed = NULL; - char *item_remarks_trimmed = NULL; - char *stockitem_remarks_trimmed = NULL; DEBUG_SET_TRACKER(); @@ -631,10 +611,6 @@ int bsMergeLoad( bsContext *context, bsxInventory *inv, bsMergeUpdateStats *stat bsxItem *item, *stockitem, *deltaitem; bsxInventory *stockinv; char itemstringbuffer[512]; - char *item_comments_trimmed = NULL; - char *stockitem_comments_trimmed = NULL; - char *item_remarks_trimmed = NULL; - char *stockitem_remarks_trimmed = NULL; DEBUG_SET_TRACKER(); @@ -669,27 +645,16 @@ int bsMergeLoad( bsContext *context, bsxInventory *inv, bsMergeUpdateStats *stat updateflags |= BSX_ITEM_XFLAGS_UPDATE_PRICE; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set price from %.3f to %.3f for item%s\n", stockitem->price, item->price, itemstringbuffer ); } - - item_comments_trimmed = ccStrTrimWhitespace( item->comments ); - stockitem_comments_trimmed = ccStrTrimWhitespace( stockitem->comments ); - if( ( mergeflags & BS_MERGE_FLAGS_COMMENTS ) && !( ccStrCmpEqualTest( item_comments_trimmed, stockitem_comments_trimmed ) ) ) + if( ( mergeflags & BS_MERGE_FLAGS_COMMENTS ) && !( ccStrCmpEqualTest( item->comments, stockitem->comments ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_COMMENTS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set comments from \"%s\" to \"%s\"%s\n", stockitem->comments, item->comments, itemstringbuffer ); } - free( item_comments_trimmed ); - free( stockitem_comments_trimmed ); - - item_remarks_trimmed = ccStrTrimWhitespace( item->remarks ); - stockitem_remarks_trimmed = ccStrTrimWhitespace( stockitem->remarks ); - if( ( mergeflags & BS_MERGE_FLAGS_REMARKS ) && !( ccStrCmpEqualTest( item_remarks_trimmed, stockitem_remarks_trimmed ) ) ) + if( ( mergeflags & BS_MERGE_FLAGS_REMARKS ) && !( ccStrCmpEqualTest( item->remarks, stockitem->remarks ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_REMARKS; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set remarks from \"%s\" to \"%s\"%s\n", stockitem->remarks, item->remarks, itemstringbuffer ); } - free( item_remarks_trimmed ); - free( stockitem_remarks_trimmed ); - if( ( mergeflags & BS_MERGE_FLAGS_BULK ) && ( item->bulk != stockitem->bulk ) && ( ( item->bulk >= 2 ) || ( stockitem->bulk >= 2 ) ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_BULK; diff --git a/bsx.c b/bsx.c index da6938f..1bbd4d2 100644 --- a/bsx.c +++ b/bsx.c @@ -2326,13 +2326,17 @@ void bsxSetItemColorName( bsxItem *item, char *colorname, int len ) void bsxSetItemComments( bsxItem *item, char *comments, int len ) { - bsxSetItemString( item, offsetof(bsxItem,comments), comments, len, BSX_ITEM_FLAGS_ALLOC_COMMENTS ); + char *trimmed_comments = ccStrTrimWhitespace(comments); + bsxSetItemString( item, offsetof(bsxItem,comments), trimmed_comments, -1, BSX_ITEM_FLAGS_ALLOC_COMMENTS ); + free(trimmed_comments); return; } void bsxSetItemRemarks( bsxItem *item, char *remarks, int len ) { - bsxSetItemString( item, offsetof(bsxItem,remarks), remarks, len, BSX_ITEM_FLAGS_ALLOC_REMARKS ); + char *trimmed_remarks = ccStrTrimWhitespace(remarks); + bsxSetItemString( item, offsetof(bsxItem,remarks), trimmed_remarks, -1, BSX_ITEM_FLAGS_ALLOC_REMARKS ); + free(trimmed_remarks); return; } diff --git a/ccstr.c b/ccstr.c index 6fc0f4f..bfec79d 100644 --- a/ccstr.c +++ b/ccstr.c @@ -44,6 +44,7 @@ char *ccStrTrimWhitespace( char *str ) { + char *start = str; char *end; char *new_str; size_t len; @@ -52,26 +53,24 @@ char *ccStrTrimWhitespace( char *str ) return NULL; // Trim leading space - while( isspace( (unsigned char)*str ) ) - str++; + while( isspace( (unsigned char)*start ) ) + start++; - if( *str == 0 ) // All spaces? - return ccStrDup( str ); + if( *start == 0 ) // All spaces? + return ccStrDup( start ); // Trim trailing space - end = str + strlen(str) - 1; - while( end > str && isspace( (unsigned char)*end ) ) + end = start + strlen(start) - 1; + while( end > start && isspace( (unsigned char)*end ) ) end--; - // Write new null terminator character - *(end+1) = 0; - - len = (end - str) + 1; + // Allocate and copy the trimmed string + len = (end - start) + 1; new_str = (char *)malloc( len + 1 ); if( new_str == NULL ) return NULL; // Allocation failed - memcpy( new_str, str, len ); + memcpy( new_str, start, len ); new_str[len] = 0; return new_str; @@ -834,9 +833,9 @@ char *ccStrDup( const char *str ) if( !( str ) ) return 0; len = strlen( str ); - if( !( len ) ) - return 0; newstr = malloc( ( len + 1 ) * sizeof(char) ); + if( !newstr ) + return 0; memcpy( newstr, str, len + 1 ); return newstr; } From c91faffd58e1af14125962019cf77687d1f6f379 Mon Sep 17 00:00:00 2001 From: chuckbucket Date: Mon, 21 Jul 2025 11:48:37 -0600 Subject: [PATCH 4/4] Optional sales rates Added a new setting in the config file. syncsalesrates: 1:yes 0: no (Default) --- bricksync.c | 1 + bricksync.conf.txt | 3 +++ bricksync.h | 1 + bricksyncconf.c | 6 ++++++ bssync.c | 2 +- 5 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bricksync.c b/bricksync.c index e906aac..d8abe5f 100644 --- a/bricksync.c +++ b/bricksync.c @@ -260,6 +260,7 @@ bsContext *bsInit( char *statepath, int *retstateloaded ) context->priceguideflags = BSX_PRICEGUIDE_FLAGS_BRICKSTOCK; context->priceguidecachetime = BS_PRICEGUIDE_CACHETIME_DEFAULT; context->retainemptylotsflag = 0; + context->syncsalerates = 0; context->checkmessageflag = 0; context->curtime = time( 0 ); context->messagetime = 0; diff --git a/bricksync.conf.txt b/bricksync.conf.txt index 7b498c3..9e2f718 100644 --- a/bricksync.conf.txt +++ b/bricksync.conf.txt @@ -47,6 +47,9 @@ retainemptylots = 0; // Set to non-zero to reuse existing and empty BrickOwl lots with matching external_id/LotIDs brickowl.reuseempty = 0; +// Set to non-zero to sync sales rates from BrickLink to BrickOwl +syncsalerates = 0; + // Set to zero if you don't want to check for new versions of BrickSync or any broadcast message checkmessage = 1; diff --git a/bricksync.h b/bricksync.h index 77460e4..c8eda8b 100644 --- a/bricksync.h +++ b/bricksync.h @@ -307,6 +307,7 @@ typedef struct /* User options */ int retainemptylotsflag; + int syncsalerates; int checkmessageflag; #if BS_ENABLE_LIMITS diff --git a/bricksyncconf.c b/bricksyncconf.c index 8ac0cc1..40d19fc 100644 --- a/bricksyncconf.c +++ b/bricksyncconf.c @@ -455,6 +455,12 @@ static int bsConfParse( bsContext *context, bsConfParser *parser ) goto error; context->retainemptylotsflag = (int)readint; } + else if( ccStrMatchSeq( "syncsalerates", tokenstring, token->length ) ) + { + if( !( bsConfReadInteger( context, parser, &readint ) ) ) + goto error; + context->syncsalerates = (int)readint; + } else if( ccStrMatchSeq( "checkmessage", tokenstring, token->length ) ) { if( !( bsConfReadInteger( context, parser, &readint ) ) ) diff --git a/bssync.c b/bssync.c index d56c118..11b14a8 100644 --- a/bssync.c +++ b/bssync.c @@ -213,7 +213,7 @@ void bsSyncAddDeltaItem( bsContext *context, bsxInventory *deltainv, bsxItem *st updateflags |= BSX_ITEM_XFLAGS_UPDATE_TIERPRICES; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set TierPrices from [[%d,%.3f],[%d,%.3f],[%d,%.3f]] to [[%d,%.3f],[%d,%.3f],[%d,%.3f]]%s\n", item->tq1, item->tp1, item->tq2, item->tp2, item->tq3, item->tp3, stockitem->tq1, stockitem->tp1, stockitem->tq2, stockitem->tp2, stockitem->tq3, stockitem->tp3, itemstringbuffer ); } - if ( ( deltamode == BS_SYNC_DELTA_MODE_BRICKOWL ) && ( stockitem->sale != item->sale ) ) + if ( ( deltamode == BS_SYNC_DELTA_MODE_BRICKOWL ) && ( stockitem->sale != item->sale ) && ( context->syncsalerates ) ) { updateflags |= BSX_ITEM_XFLAGS_UPDATE_SALE_PERCENT; ioPrintf( &context->output, IO_MODEBIT_LOGONLY | IO_MODEBIT_NODATE, "LOG: Set Sale Percent from %d to %d%s\n", item->sale, stockitem->sale, itemstringbuffer );