From b209915a36b03b698cc3993ae657e3a08589e17c Mon Sep 17 00:00:00 2001 From: Vikram Rajkumar Date: Fri, 24 Mar 2017 16:50:03 -0500 Subject: [PATCH] Return latest price in get_ticker even if older than 24 hours --- libraries/app/database_api.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libraries/app/database_api.cpp b/libraries/app/database_api.cpp index fe46a00f..cfdcea3c 100644 --- a/libraries/app/database_api.cpp +++ b/libraries/app/database_api.cpp @@ -193,7 +193,7 @@ class database_api_impl : public std::enable_shared_from_this void broadcast_updates( const vector& updates ); void broadcast_market_updates( const market_queue_type& queue); void handle_object_changed(bool force_notify, bool full_object, const vector& ids, const flat_set& impacted_accounts, std::function find_object); - + /** called every time a block is applied to report the objects that were changed */ void on_objects_new(const vector& ids, const flat_set& impacted_accounts); void on_objects_changed(const vector& ids, const flat_set& impacted_accounts); @@ -666,22 +666,22 @@ std::map database_api_impl::get_full_accounts( const [&acnt] (const call_order_object& call) { acnt.call_orders.emplace_back(call); }); - + // get assets issued by user auto asset_range = _db.get_index_type().indices().get().equal_range(account->id); std::for_each(asset_range.first, asset_range.second, [&acnt] (const asset_object& asset) { acnt.assets.emplace_back(asset.id); }); - + // get withdraws permissions auto withdraw_range = _db.get_index_type().indices().get().equal_range(account->id); std::for_each(withdraw_range.first, withdraw_range.second, [&acnt] (const withdraw_permission_object& withdraw) { acnt.withdraws.emplace_back(withdraw); }); - - + + results[account_name_or_id] = acnt; } return results; @@ -1105,7 +1105,7 @@ market_ticker database_api_impl::get_ticker( const string& base, const string& q vector trades = get_trade_history( base, quote, now, yesterday, batch_size ); if( !trades.empty() ) { - result.latest = trades[0].price; + result.latest = trades[0].price; while( !trades.empty() ) { @@ -1119,12 +1119,18 @@ market_ticker database_api_impl::get_ticker( const string& base, const string& q } const auto last_trade_yesterday = get_trade_history( base, quote, yesterday, fc::time_point_sec(), 1 ); - if( !last_trade_yesterday.empty()) + if( !last_trade_yesterday.empty() ) { const auto price_yesterday = last_trade_yesterday[0].price; result.percent_change = ( (result.latest / price_yesterday) - 1 ) * 100; } } + else + { + const auto last_trade = get_trade_history( base, quote, now, fc::time_point_sec(), 1 ); + if( !last_trade.empty() ) + result.latest = last_trade[0].price; + } const auto orders = get_order_book( base, quote, 1 ); if( !orders.asks.empty() ) result.lowest_ask = orders.asks[0].price; @@ -1856,7 +1862,7 @@ void database_api_impl::handle_object_changed(bool force_notify, bool full_objec if( _subscribe_callback ) { vector updates; - + for(auto id : ids) { if( force_notify || is_subscribed_to_item(id) || is_impacted_account(impacted_accounts) )