Commit Graph

831 Commits

Author SHA1 Message Date
Maarten Bosmans
0d86be6d2a [test] Properly destroy resources on end of tests
This fixes memory leaks that are only present in testing code.
Not very useful on itself, but it does make it easier to fix memory
leaks and other AddressSanitizer problems in actual gnucash code later.
2023-04-02 21:12:50 +02:00
Maarten Bosmans
ed3fe00880 [test] Use test fixture to initialize and destroy resources 2023-04-02 21:12:50 +02:00
John Ralls
0d598d51ed Fix Finance::Quote use on Win32.
By dealing with Win32 \r\n newlines on return from finance-quote-wrapper.
2023-03-30 16:45:01 -07:00
John Ralls
a587dfff2c Bug 798802 - Online Price quote - Stocks not working GNU 5.0 Windows
Change the property-tree path delimiter for constructing paths from
'.' that's commonly used in stock symbols, to '|' that isn't.
2023-03-29 20:01:10 -07:00
John Ralls
89f41a305c Merge new potfile reflecting string changes. 2023-03-24 14:28:24 -07:00
John Ralls
576fc9b52c Fix quotes on Windows.
Boost process wchar_t conversion chokes if it's fed an empty string.
This would happen when the user had no alphavantage key. Separate
the process invocation to not present the empty value to boost process.
2023-03-19 10:32:26 -07:00
John Ralls
90e1e2d1c3 Merge Bob Fewell's 'bug798558' into master. 2023-03-19 10:11:42 -07:00
John Ralls
0c3e85404d Avoid crash from trying to free an unallocated char*. 2023-03-19 10:09:01 -07:00
Christopher Lam
97f0653238 [gnc-quotes] g_free a char* from gnc_prefs_get_string
ultimately gets char* from g_settings_get_string and must be freed
2023-03-20 00:40:41 +08:00
Robert Fewell
a576dd87a4 Bug798558 - Irregular line spacing in Account Tree View
When securities are in the list, the rows look twice as high as though
there is a linefeed at the end. This is partly due to commit for bug
797501 which worked at the time but a change in pango 50.4 to do with
wrapping has highlighted this bug.

To fix this only wrap currencies with ltr bidi isolate characters in
gnc_print_amount_with_bidi_ltr_isolate
2023-03-19 13:53:41 +00:00
Geert Janssens
1f0a69a804 Properly parse plus signs while importing numbers
Silly copy/paste error.
2023-03-15 08:58:07 +01:00
Geert Janssens
13ec4bb594 xaccParseAmount... - some code cleanups
- declare at first use
- compact tests
- reduce use of {}
2023-03-13 19:58:10 +01:00
Geert Janssens
8010d9646c Restore proper indentation
It got mixed up while refactoring the various xaccParseAmountXYZ functions
2023-03-13 19:58:10 +01:00
Richard Cohen
329a2f7d42 Guard against some possible null pointer dereferences
Found by gcc 12 when compiling with "-O2 -Wnull-dereference"
2023-03-08 11:00:56 +00:00
Richard Cohen
7b47c07f8e Don't use extern "C" around #includes
Some I missed the first time. Some are new.
2023-03-03 18:55:42 +00:00
Christopher Lam
89e2bef427 Merge branch 'maint' 2023-02-26 13:51:33 +08:00
Christopher Lam
abcce5000c Bug 798754 - Build fails with gcc 13 and glib > 2.76, bis 2023-02-25 13:12:35 +08:00
Geert Janssens
26482f397b Bug 797033 - The CSV Importer should not obey with the "automatic digital point" setting
Expose variations of xaccParseAmount and
xaccParseAmountExtended that will ignore the
automatic decimal point user preference.
This preference is really only useful for manual number
entering in the register.

The xaccParseAmountImport variant replaces xaccParseAmountPosSign
which was used exclusively by the csv importers.
Like xaccParseAmountPosSign, this replacement has the flag
to ignore or parse the positive number indicator.
2023-02-24 23:02:15 +01:00
Richard Cohen
bddb4468fa Import GLIB2 as a target, and use it to simplify the CMakeLists 2023-02-21 12:59:42 +00:00
Geert Janssens
8a23304283 GncGSettings - use bool as return type for static function 2023-02-17 18:10:35 +01:00
Geert Janssens
64329414e9 GncGSettings - cosmetic: NULL->nullptr 2023-02-17 14:08:20 +01:00
Geert Janssens
32ae47980c GncGSettings - some minor cleanups
- remove unused macros
- avoid manual counters
2023-02-17 14:02:34 +01:00
Geert Janssens
03aff5642a GncGSettings - rework signal handler manipulation
Use ref-counting to manage GSettings object lifecycle
Use g_signal_handler_handlers_[un]block_matched to
block or unblock handlers rather than tracking them in
our own hash table.
2023-02-17 14:02:34 +01:00
Geert Janssens
4761aa414c GncGSettings - reduce code duplication
Most getters and setters are identical with the exception of
the actual function to call into GSettings. Extract
boilerplate in two template functions and make all
getters/setters wrappers of these two functions.
2023-02-17 11:48:41 +01:00
Geert Janssens
edab41f23a GncGSettings - basic c++ cleanups
- declare at first use
- gboolean->bool (TRUE/true, FALSE/false)
2023-02-17 11:48:41 +01:00
Robert Fewell
a1d17518a8 Add a function to dump the schema entries when in debug
mode.
2023-02-17 10:15:23 +00:00
Robert Fewell
2306ef8ca6 On a new install, the gnc_gsettings_version_upgrade
would not run

When doing a new install, set the GNC_PREF_VERSION to the current
version.
2023-02-17 10:14:42 +00:00
Robert Fewell
57f874bd3f Change the behaviour of the gseettings migration
function

In the pref_transformations.xml file, when the release version is
greater than the current GnuCash version, do not process those changes.
2023-02-17 10:14:09 +00:00
Robert Fewell
ac0532bf5c Change the alignment of a function in gnc_gsettings.cpp 2023-02-16 14:23:52 +00:00
Robert Fewell
308c609904 Fix comment typo in gnc-gsettings.cpp 2023-02-16 14:23:51 +00:00
Geert Janssens
286e1afa41 Bug 798749 - Fails to read gsettings on startup
Only cache GSettings objects we need to keep
track of callback functions.
This means a bit more overhead per GSettings
interaction, but as typical interactions are
only a few objects at once at best, this
overhead is unnoticeable.
2023-02-16 22:40:36 +01:00
Richard Cohen
9c6ad222a9 [-Wunused-function] - remove 2023-02-16 09:20:59 +00:00
Richard Cohen
8a20bcadb0 [-Wunused-variable] - remove unused translatable string 2023-02-16 09:20:59 +00:00
Richard Cohen
0dd406de10 [-Wunused-lambda-capture] (clang) - remove 2023-02-16 09:20:59 +00:00
Richard Cohen
78ec20515b Remove some unused variables - and the initialization
- checked that any side effects were irrelevant
2023-02-06 14:20:28 +00:00
Richard Cohen
ea2d3be217 Remove some unused variables with obviously no side effects 2023-02-06 14:19:22 +00:00
Christopher Lam
85c2491664 Merge branch 'maint' 2023-02-05 12:09:38 +08:00
John Ralls
7bb14b9caa Merge Richard Cohen's 'use-reference-for-loop' into master 2023-02-02 14:32:14 -08:00
Richard Cohen
d8f45f2443 Use const references for for-loops to avoid unnecessary copies
Found by clazy - clazy-range-loop-reference
2023-01-31 14:44:57 +00:00
John Ralls
ce3447e6ea Bug 798740 - Build fails with gcc 13
Protect against passing an lseek failure rv to read().
2023-01-30 16:48:16 -08:00
Christopher Lam
119356752f Merge branch 'maint' 2023-01-30 09:56:13 +08:00
luzpaz
67ab9e90d2 Fix some typos 2023-01-26 13:48:58 +01:00
John Ralls
f6919e60a7 Merge Richard Cohen's 'cleanup' into master. 2023-01-24 12:05:47 -08:00
John Ralls
046e4a156e Silence Clang deprecation warnings about sprintf. 2023-01-23 12:54:25 -08:00
Richard Cohen
1cec0cb3f3 Use internal extern "C" { ... } for C++
- removes warnings compiling swig engine
...
[ 10%] Generating swig-engine.cpp
.../libgnucash/engine/engine-helpers.h:31: Warning 313: Unrecognized extern type "C++".
.../libgnucash/engine/gnc-date.h:83: Warning 313: Unrecognized extern type "C++".
.../libgnucash/engine/qofquery.h:90: Warning 302: Identifier 'QofQuery' redefined (ignored),
.../libgnucash/engine/gnc-option.hpp:55: Warning 302: previous definition of 'QofQuery'.
.../libgnucash/engine/gnc-commodity.h:56: Warning 313: Unrecognized extern type "C++".
.../libgnucash/engine/gncBusiness.h:40: Warning 313: Unrecognized extern type "C++".
.../libgnucash/engine/gncEntry.h:37: Warning 313: Unrecognized extern type "C++".
2023-01-23 18:40:01 +00:00
Richard Cohen
19bbde7000 Fix some typos 2023-01-23 15:01:46 +00:00
richardcohen
8044f79f75
Silence the boost (<1.76) warning message
from .../gnucash-4.8/libgnucash/app-utils/gnc-quotes.cpp:33:
/usr/include/boost/bind.hpp:36:1: note: ‘#pragma message:

    The practice of declaring the Bind placeholders (_1, _2, ...) in the
    global namespace is deprecated.
    Please use <boost/bind/bind.hpp> + using namespace boost::placeholders,
    or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.’
    
The issue was fixed in boost 1.76, but, e.g ubuntu 22.04 has boost 1.74
2023-01-22 17:50:34 +00:00
John Ralls
fed4daf4e7 [c++ quotes] Make sure to include all of the required Boost libraries.
Also Boost-iostreams needs winsock but doesn't tell Cmake, so explicitly
add it to the link list.
2023-01-08 16:11:58 -08:00
John Ralls
31d79e3004 Merge Bob Fewell's 'bug798673' into master. 2022-12-30 16:00:12 -08:00
John Ralls
b8c0673526 Merge branch 'maint' 2022-12-19 12:11:32 -08:00
Robert Fewell
7536fcaf2f Change the balance limit icon if both limits are zero
When higher and lower limits are zero, when used for a a suspense
account, change the icon to 'dialog-warning'. This type of use is to
indicate that a non zero balance exists.
2022-12-17 11:44:45 +00:00
Robert Fewell
a15c6f81b3 Allow the balances of sub accounts to be used in limits 2022-12-16 15:16:53 +00:00
Robert Fewell
60ab654d2b Add account balance test functions to gnc-ui-balance 2022-12-16 15:16:16 +00:00
John Ralls
b4bab92da2 Bug 798664 - Result of 'gnucash --nofile' is marked dirty
Don't create a new book in the new-user dialog unless the user says to.
Don't automatically create a new book when retrieving default commodities
because the retrieve might be requested in a context like the Preferences
dialog when there is no book.

Some report tests relied on requesting the default commodity creating
the book, so in those tests ensure that the book is created first.
2022-12-12 11:30:59 -08:00
John Ralls
fae5de80d3 Undo unintended change in Bug 798679 commit. 2022-12-11 19:54:35 -08:00
John Ralls
fd2761bd68 Bug 798679 - Fullwidth characters cannot be pasted as-is in register fields
Control character check doesn't need normalization, the control character
codepoints aren't graphic and so can't be composed nor have compatible
equivalents.
2022-12-11 13:00:40 -08:00
Geert Janssens
98251d59a6 Bug 798672 - Preferences are not saved nor loaded, ERROR <GLib-GIO> g_settings_new_full: assertion 'schema != NULL' failed
Apparently it was a failure on our side to properly look up
requested gsettings schema.
2022-11-29 12:27:21 +01:00
Christopher Lam
fc94b41c81 Merge branch 'maint' 2022-10-29 21:53:57 +08:00
John Ralls
cf088f2a70 Merge John Ralls's 'Bug798614' into maint. 2022-10-28 15:27:28 -07:00
John Ralls
14a0ea4ed3 [price-quotes] Sort and format source list. 2022-10-17 11:13:55 -07:00
John Ralls
1a906b00aa [price-quotes] Enable gnucash-cli to retrieve preferences on macOS.
By embedding a minimal Info.plist with a bundle ID into the executable.
This necessitated a change to binreloc because the unix-style install
depended on there being a bundle ID only when the program was run from
an application bundle.
2022-10-17 10:06:21 -07:00
John Ralls
2767587874 [price-quotes] Fix setting alphavantage API key. 2022-10-14 15:47:07 -07:00
John Ralls
7f2a09a69f [price-quotes] Handle short error strings from finance-quote-wrapper.
This keeps the translation work in GnuCash and improves the error
signalling in gnc-quotes.
2022-10-14 10:26:51 -07:00
John Ralls
50c72b4f88 [price-quotes] Remove m_ready and usable() from GncQuoteSource.
GncQuoteSource ctor throws if something is wrong so usable is always true.
2022-10-13 14:28:17 -07:00
John Ralls
7d93774dd2 [price-quotes] Throw instead of returning if there aren't any commodities to quote.
So that the user gets sees an error instead of silent failure.
2022-10-13 13:51:37 -07:00
John Ralls
81d4ea9550 [price-quotes] Remove F::Q version format check.
We don't care what the version string looks like as long as there is one.
2022-10-13 12:58:09 -07:00
John Ralls
c78fe37ff7 [price-quotes] General typo fixes and code cleanup. 2022-10-13 12:52:36 -07:00
John Ralls
70c9d4c9e3 [price-quotes] Fix version retrieval.
Plus there's no need for a "not found" version string because GncQuotes
construction will throw if Finance::Quote isn't correctly installed. No
object, nothing to call version() on.
2022-10-13 12:20:59 -07:00
John Ralls
97e730b8d8 [price-quotes] Reformat test quote response strings to one line per quote. 2022-10-13 11:24:49 -07:00
Mike Alexander
2d3e80ea08 Compatibility with XCode's "new build system"
With XCode 14 or newer CMake tries to use the "new build system" which has a
requirement that if two targets depend on the same generated file one of them
must depend on the other.  This commit adds reduntant dependencies to satisfy
this requirement.
2022-10-09 01:10:06 -04:00
John Ralls
e817091de1 [price-quotes] Warn only once if the AlphaVantage Key isn't set.
And check the environment if it's not in preferences.
2022-10-02 11:50:26 -07:00
John Ralls
d97ea77762 [price quotes] Add report member function to display quote information to stdout.
Instead of creating price instances in the database.
2022-10-02 11:50:26 -07:00
John Ralls
6ffb0bb633 [price-quotes] Report quote fetch failures to the user. 2022-10-02 11:50:26 -07:00
John Ralls
4c47e91180 [price-quotes] Implement error codes for currency and quote failures. 2022-10-02 11:50:26 -07:00
John Ralls
6db7800ca5 [price-quotes] Doxygen docs. 2022-10-02 11:50:26 -07:00
John Ralls
29ce925646 [price-quotes] Test the other fetch overloads and quote values. 2022-10-02 11:50:26 -07:00
John Ralls
b5bc6463a3 [price-quotes] Rework date-time handling.
A check of the F::Q modules found that the only ones that return a quote
time return a bogus one and do so only to mollify GnuCash.

Since there's no good way to determine the TZ of the exchange originating
the quote there's no good way to decide if the quote is current or from
a previous market session, so we just punt and use a time of 16:00 for
all quotes.
2022-10-02 11:50:26 -07:00
John Ralls
19064093d2 [price-quotes] Remove m_comm_vec and m_fq_answer.
Passing the intermediate values comm_vec and quote_str on the stack instead.
2022-10-02 11:50:26 -07:00
John Ralls
734fb6ce2a [price-quotes] Switch error handling to exceptions.
Allows for cleaner code with less state, less coupling of the GncQuotes
class, and better transfer of error messages to client code.

Also translates some error messages for presentation to users.
2022-10-02 11:50:26 -07:00
John Ralls
d307295076 [price-quotes] Paramaterize GncMockQuoteSource construction.
So we can have different results passed back for different tests.
2022-10-02 11:50:26 -07:00
John Ralls
2b87066687 [price-quotes] Extract some static functions.
To get  GncQuoteImpl::parse_one_quote to a reasonable size.
2022-10-02 11:50:26 -07:00
John Ralls
a82c72cfb9 [price-quotes] Remove level of indirection when parsing quote data. 2022-10-02 11:50:26 -07:00
John Ralls
37dfab7f31 [price-quotes] Convert long quote parsing lambda to a regular function.
To begin separating price parsing from inserting in the price db.
2022-10-02 11:50:26 -07:00
John Ralls
dd8316714b [price-quotes] Extract function GncQuotesImpl::comm_vec_to_json_string. 2022-10-02 11:50:26 -07:00
John Ralls
e3ab384504 [price-quotes] Log messages instead of writing them to std::streams. 2022-10-02 11:50:26 -07:00
John Ralls
b8642e55d9 [price-quotes] Implement mock quote source.
Note that because the non-default constructor exists only on GncQuotesImpl
we must use that directly and violate the pimpl.
2022-10-02 11:50:26 -07:00
John Ralls
4dd3922871 [price-quotes] Make wiggle test conditional on F::Q being installed. 2022-10-02 11:50:26 -07:00
John Ralls
784aca5a4c [price-quotes] Extract class GncQuoteSource.
Provide a specialization GncFQQuoteSource and move the F::Q command
construction and query functions to GncFQQuoteSource.

This allows for dependency injection to provide testing that doesn't
need F::Q to be installed.
2022-10-02 11:50:26 -07:00
John Ralls
e9577b7996 [price-quotes] Basic wiggle test. 2022-10-02 11:50:26 -07:00
Geert Janssens
277f299ad6 GncQuotes - cleanups
- make more use of auto
- mark user visible strings as translatable
- return early on input errors
- fix date conversion fallback to actually fall back to today
2022-10-02 11:50:26 -07:00
Geert Janssens
585de5d134 GncQuotes - break actual interaction with Finance::Quote out into a separate function query_fq
That allows for later reuse and easier testing.
2022-10-02 11:50:26 -07:00
Geert Janssens
70ab8a8a46 GncQuotes - drop parameterized constructor
The book parameter is only needed while fetching quotes.
In case the user passes one or more commodities to process
the book can be readily derived from the commodity/commodities.
In the other case (fetch all quotes) the user now is
required to pass a book to the call.
2022-10-02 11:50:26 -07:00
Geert Janssens
4c2863966b GncQuotes - rename fetch_all to be an overload of fetch
And add a third overload to fetch only a single quote
2022-10-02 11:50:26 -07:00
Geert Janssens
bf357315fd finance-quote-wrapper - implement check and fetch in one file via command line switches
This obsoletes gnc-fq-check as the same function can now be
performed with 'finance-quote-wrapper -v'
2022-10-02 11:50:26 -07:00
Geert Janssens
fbf9aecd25 Use GncQuotes in transfer dialog 2022-10-02 11:50:26 -07:00
Geert Janssens
a00bce168c GncQuotes - cache default currency 2022-10-02 11:50:26 -07:00
Geert Janssens
fcbe6cf10c Add code to parse json data returned by our F::Q wrapper
This code will convert the json data into GncPrice objects and add them
to the pricedb, effectively doing what price-quotes.scm does.

A few notable remarks:
- still requires plenty of cleaning up. This is the first proof of concept
- like the original scm based code, this parser completely ignores  timezone
  information. As it wasn't used before and nobody complained, it may not
  be that important. Or it can be implemented later.
- price-quotes.scm would first check if a price already existed in the pricedb
  and try to update that one instead of adding one (only if the old price's
  type is inferior). However that is redundant as gnc_pricedb_add_price does
  the same check. So I have omitted this extra check from GncQuotes.
- currency quotes can be inverted. I have slightly changed the way to handle
  this. The perl wrapper code will simply set an "inverted" flag in that case,
  but will otherwise not swap currency and commodity as it used to be the case.
  On parsing, the inversion flag will cause the GncNumeric that's parsed from
  the price to be inverted. As it's still a GncNumeric that shouldn't result
  in any loss of precision, while keeping prices in the db always in the default
  currency.
2022-10-02 11:50:26 -07:00
Geert Janssens
6ecc1ef73f GncQuotes - switch to Pimpl idiom
That allows the private implementation to pass a number of variables
based on various boost libraries. It's better to not have them in
the public interface to keep compilation times down.
2022-10-02 11:50:25 -07:00
Geert Janssens
65ae46426b GncQuotes - add parameterized construction
For all but the basic check a book is required. Might
as well be able to pass it directly and store a reference
to it. That will simplify member function declarations.
2022-10-02 11:50:25 -07:00
Geert Janssens
3685e5de73 Factor out the async call to perl
This will allow us to reuse it for several F::Q commands, like
check, fetch,...
2022-10-02 11:50:25 -07:00