[Gnucash-changes] Phil Longstaff's patch to prevent duplicate
pricedb entries.
Derek Atkins
warlord at cvs.gnucash.org
Sun Oct 31 19:45:22 EST 2004
Log Message:
-----------
Phil Longstaff's patch to prevent duplicate pricedb entries.
* src/engine/gnc-pricedb.c:
Phil Longstaff's patch to prevent duplicate pricedb entries.
Tags:
----
gnucash-1-8-branch
Modified Files:
--------------
gnucash:
ChangeLog
gnucash/src/engine:
gnc-pricedb.c
Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1461.2.360
retrieving revision 1.1461.2.361
diff -LChangeLog -LChangeLog -u -r1.1461.2.360 -r1.1461.2.361
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,8 @@
+2004-10-31 Derek Atkins <derek at ihtfp.com>
+
+ * src/engine/gnc-pricedb.c:
+ Phil Longstaff's patch to prevent duplicate pricedb entries.
+
2004-10-30 Christian Stimming <stimming at tuhh.de>
* doc/README.HBCI: Updated HBCI readme.
Index: gnc-pricedb.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-pricedb.c,v
retrieving revision 1.48.2.2
retrieving revision 1.48.2.3
diff -Lsrc/engine/gnc-pricedb.c -Lsrc/engine/gnc-pricedb.c -u -r1.48.2.2 -r1.48.2.3
--- src/engine/gnc-pricedb.c
+++ src/engine/gnc-pricedb.c
@@ -522,13 +522,52 @@
gnc_price_get_guid((GNCPrice *) b));
}
+typedef struct {
+ GNCPrice* pPrice;
+ gboolean isDupl;
+} PriceListIsDuplStruct;
+
+static void
+price_list_is_duplicate( gpointer data, gpointer user_data )
+{
+ GNCPrice* pPrice = (GNCPrice*)data;
+ PriceListIsDuplStruct* pStruct = (PriceListIsDuplStruct*)user_data;
+ Timespec time_a, time_b;
+
+ time_a = timespecCanonicalDayTime( gnc_price_get_time( pPrice ) );
+ time_b = timespecCanonicalDayTime( gnc_price_get_time( pStruct->pPrice ) );
+
+ /* If the date, currency, commodity and price match, it's a duplicate */
+ if( !gnc_numeric_equal( gnc_price_get_value( pPrice ), gnc_price_get_value( pStruct->pPrice ) ) ) return;
+ if( gnc_price_get_commodity( pPrice ) != gnc_price_get_commodity( pStruct->pPrice ) ) return;
+ if( gnc_price_get_currency( pPrice ) != gnc_price_get_currency( pStruct->pPrice ) ) return;
+
+ if( timespec_cmp( &time_a, &time_b ) != 0 ) return;
+
+ pStruct->isDupl = TRUE;
+}
+
gboolean
gnc_price_list_insert(GList **prices, GNCPrice *p)
{
GList *result_list;
+ PriceListIsDuplStruct* pStruct;
+ gboolean isDupl;
if(!prices || !p) return FALSE;
gnc_price_ref(p);
+
+ pStruct = g_new0( PriceListIsDuplStruct, 1 );
+ pStruct->pPrice = p;
+ pStruct->isDupl = FALSE;
+ g_list_foreach( *prices, price_list_is_duplicate, pStruct );
+ isDupl = pStruct->isDupl;
+ g_free( pStruct );
+
+ if( isDupl ) {
+ return TRUE;
+ }
+
result_list = g_list_insert_sorted(*prices, p, compare_prices_by_date);
if(!result_list) return FALSE;
*prices = result_list;
More information about the gnucash-changes
mailing list