Commit graph

89 commits

Author SHA1 Message Date
6dc4c3133f Import cmake unit test to restc-cpp 2020-08-21 21:16:05 +01:00
c1598fedb1 Add lest lib
It's required by tests in restc-cpp which I'm progressively adding
2020-08-21 21:16:05 +01:00
a1aeb3c587 Server is returning some shops selling unknown items, add support for it
Previously the code would just throw an exception and
quit (foreign key constraint violation). Add an empty
row with the missing id so it will work. When the item
list returns that item the next time, the empty row will
be filled.
2020-08-16 22:29:46 +01:00
d66af7779d Try to manage error responses
I can't get the header of the error response because of this
https://github.com/jgaa/restc-cpp/issues/102 so I'm just
hardcoding some timeout and code will keep trying.
2020-08-16 17:46:32 +01:00
a0bb97e8b7 Add new sample response 2020-08-16 17:44:41 +01:00
d5ee1cd11b Add some debug printing 2020-08-16 16:29:43 +01:00
1fcd7bd749 Append the version number to the name reported to the server 2020-08-16 15:42:45 +01:00
cef5060eb2 Add app name and reason to config header 2020-08-16 14:34:19 +01:00
d1716a0c91 Add api_key to the config file 2020-08-16 14:26:43 +01:00
1c911f36b0 Manage connection errors: print and return 1 2020-08-16 13:54:26 +01:00
2d62b44ebc Group parameters in a TimerSettings struct 2020-08-16 13:41:32 +01:00
a3153bcc66 Move TimerBase's g_extra_wait out to the settings file 2020-08-16 13:31:08 +01:00
93cfdd5586 Rename main section in settings to system 2020-08-16 12:58:39 +01:00
f426e3570d Cap max wait to 1 day
This one slipped away in my commit from earlier
2020-08-16 12:58:07 +01:00
b06456e4b0 Restore timeouts from previous run
This is quite a big update, the new feature is that when the
program starts it loads the next update time from the db if
present. If so it resumes the timers from there. Maximum wait
time is currently capped at 24h.

TimerOroApi is not templated on methods anymore, rather on
the new DBOperation enum. This is so that it has that enum
value to pass it to other functions. This could've been a
separate commit, but wth...

Magic enum allows me to iterate over an enum's values at
build time, it's useful for building the query in OriginsDB
for the SELECT in the access table
(see make_select_last_access_str()).
2020-08-16 06:28:58 +01:00
0faa8fb18f Keep the db connection open throughout the lifetime of OriginsDB 2020-08-15 23:32:22 +01:00
f648e3a8a2 Propagate timer exceptions to the main thread 2020-08-15 22:52:20 +01:00
85c240b53d One debug message slipped away 2020-08-15 15:06:31 +01:00
5e7d0a33cc Add some debug printing 2020-08-15 14:58:20 +01:00
34040e5af1 Properly handle SIGINT to quit.
This puts ThreadPool::join() back to being private.
Eventia events now should inherit from Event, which will take
care of setting up the required callbacks so that events will
be notified about the main event loop stopping. Inheriting
from Event is currently not enforced.
2020-08-15 14:55:59 +01:00
1b65162a18 Update last_seen in shop snapshot table 2020-08-15 02:49:03 +01:00
ce892691f3 Use the new bind_all() everywhere 2020-08-15 02:34:51 +01:00
5df60661d3 Improve sqlite helpers a bit 2020-08-15 02:29:43 +01:00
928cabfe34 Making progress with shop snapshots 2020-08-15 01:55:46 +01:00
afb4fd2d4d Replace boost::optional with std::optional 2020-08-15 01:45:35 +01:00
29f11d3f57 Extract strings from functions because they are too verbose and drive me crazy 2020-08-14 22:27:01 +01:00
d4fd25b151 Add shop snapshots table
It contains the snapshot of each shop and a unique hash.
This is not complete yet, running this update twice will
just corrupt the table.
2020-08-14 19:48:14 +01:00
3262ce8d25 Fix wrong hash string sometimes 2020-08-14 19:46:09 +01:00
7e48ee94c2 Organise files into a private subdir.
Move files that are not supposed to be used directly to
get oro functionalities into a private subdirectory.
2020-08-14 18:58:47 +01:00
33fe2bc8cd Add tiger. It depends on duckhandy, so add that too. 2020-08-14 00:46:36 +01:00
d1af39d2a7 Make sure NDEBUG is defined in release, plus variable rename 2020-08-14 00:44:20 +01:00
80ef2afbee Same treatment as items table, don't drop/re-create
This works in a much simpler way than the items table.
Here we just upsert new values, with the unique constraint
on the internal item_id (not the upstream one, which is
never entered into this table).
This should mean that if an item from the items table with
eg: item_id=501,id=9 gets marked as deleted and re-entered as
item_id=501,id=5000, then icon with item_id=9 should remain
in the table (there is no delete ever), and a new one with
item_id=5000 gets added. Originally they both referred to
item 501 and they still do, but because of how the items
table now works, icons should also benefit and historical
data should remain in the face of upstream changes.
2020-08-12 01:33:13 +01:00
326914f92a Add example file that's been there forever 2020-08-12 01:07:45 +01:00
1b5e1f4365 Improve sql for items table
Now if item_id or unique_name change, that counts as a record
being deleted and a new one inserted.
If neither of that changed but any other field did, the old
field gets updated with the new value.
2020-08-12 01:07:34 +01:00
4dd78099f1 Add TimerCreators 2020-08-12 01:04:28 +01:00
182e2148ac Reduce initial timer delays
This is test code anyways
2020-08-12 01:04:16 +01:00
ef39dee43e Fix issue with items table; enable foreign key constraints
Program receives the full items list periodically. I don't think
they will ever remove records from there, but if they do the
program should not corruct the db. So far the simple approach
drop table items/create table items ensured the items list is
always fresh, but it prevented foreign key constraints on shop
items. Also, if an item was removed from items, any entry in
shop would become orphaned or worse point to the wrong item if
they recycled the id. Solution is to not use item_id at all for
the relationship between shop items and items table, instead
have my own internal id that is valid forever. Now records
removed upstream get just marked as deleted (by adding a removal
timestamp). The same item_id can be reused since the unique part
now must be (item_id, removal_date), in other words there is only
one non-deleted item_id, but there can be several deleted ones.

Code stores the full items set into items_staging, marks records
in items but not in items_staging as deleted, then adds any
missing records to items from items_staging, then drops items_staging.
2020-08-12 00:07:22 +01:00
cb500fd67c Add TimerCreators 2020-08-11 02:10:43 +01:00
ebc16986e8 I don't know why this thing changed, blame SoapUI 2020-08-11 01:33:36 +01:00
3866462ff5 Add worker_threads setting 2020-08-11 01:33:11 +01:00
d0a41d916a Return some default db name if not present in the config file 2020-08-11 01:04:53 +01:00
bc0de0cf8b Populate slotted_cards table
It contains the list of cards inserted into the
slots of the items in the shop_items table

I can't enable the foreign key on card_id because
the items table gets razed periodically - need
to find a solution to this
2020-08-10 23:40:05 +01:00
b76a2f22a4 Populate shop_items table 2020-08-10 23:17:17 +01:00
bf055b5b87 Rename property 2020-08-10 23:15:25 +01:00
a930622569 Add more timestamp conversion functions to dateconv.hpp 2020-08-10 22:17:42 +01:00
616ac36a34 Populate the shops table 2020-08-10 21:52:56 +01:00
417030f4fe Parse the YYYY-MM-DDTHH:MM:SSZ dates correctly
Dates in the json reply seem to come in two different formats.
One is the reply timestamp, second one is the actual
content (for example shop opening dates)
2020-08-10 21:52:56 +01:00
9bb2efb2ee Rename TimerGeneric to TimerOroApi
It's not *that* generic, it's really meant
to only work with oro::Api methods
2020-08-10 21:52:56 +01:00
5bf036f056 Replace timers with a templated one
They all do the same thing, the only difference
is the method they call on oro::Api, so
template on that
2020-08-10 21:52:56 +01:00
4b3d88b2f0 Move more crap to the base class 2020-08-10 21:52:56 +01:00