feat(market): per-pair candle cache — instant switch-back, no re-fetch
The per-exchange chart used a single buffer keyed by the loaded pair, so bouncing between venues (Ourbit <-> NonKYC) re-fetched every switch (loading spinner each time). Add a per-pair cache: each venue's fetched candles (OHLC + derived close series) are kept keyed by "<identifier>:<BASE>/<QUOTE>". Switching back to a recently-viewed pair loads from the cache instantly — no fetch, no spinner — while entries older than 30 min re-fetch to stay fresh. Bounded to 16 entries (irrelevant for DRGX's 2 venues, but safe if it lists more). Cache is main-thread-only (populated by the worker's completion MainCb), so no races. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -687,6 +687,14 @@ private:
|
||||
std::string exchange_chart_key_; // "<identifier>:<BASE>/<QUOTE>" of the loaded series ("" = none)
|
||||
bool exchange_chart_fetch_in_flight_ = false;
|
||||
std::chrono::steady_clock::time_point exchange_chart_last_fetch_{};
|
||||
// Per-pair candle cache: switching back to a recently-viewed venue loads instantly (no re-fetch)
|
||||
// instead of overwriting the single active buffer. Keyed like exchange_chart_key_.
|
||||
struct ExchangeChartCache {
|
||||
std::vector<std::pair<std::time_t, double>> closeIntraday, closeDaily;
|
||||
std::vector<data::Candle> ohlcIntraday, ohlcDaily;
|
||||
std::chrono::steady_clock::time_point fetchedAt{};
|
||||
};
|
||||
std::unordered_map<std::string, ExchangeChartCache> exchange_chart_cache_;
|
||||
util::AsyncTaskManager async_tasks_;
|
||||
bool pending_antivirus_dialog_ = false; // Show Windows Defender help dialog
|
||||
|
||||
|
||||
Reference in New Issue
Block a user