58 inline static std::string_view logger_name =
"ores.qt.image_cache";
60 [[nodiscard]]
static auto& lg() {
62 static auto instance = make_logger(logger_name);
97 QIcon getIcon(
const std::string& image_id);
105 bool hasIcon(
const std::string& image_id)
const;
133 void loadImageList();
141 return available_images_;
155 void loadAllAvailableImages();
164 void setCurrencyImage(
const std::string& iso_code,
const std::string& image_id,
165 const std::string& assigned_by);
174 void setCountryImage(
const std::string& alpha2_code,
const std::string& image_id,
175 const std::string& assigned_by);
182 std::string getNoFlagImageId()
const;
189 QIcon getNoFlagIcon()
const;
197 QIcon getCurrencyFlagIcon(
const std::string& iso_code);
205 QIcon getCountryFlagIcon(
const std::string& alpha2_code);
213 QIcon getBusinessCentreFlagIcon(
const std::string& bc_code);
256 void countryImageSet(
const QString& alpha2_code,
bool success,
const QString& message);
259 void onCurrencyImageIdsLoaded();
260 void onCountryImageIdsLoaded();
261 void onBusinessCentreMappingLoaded();
262 void onImagesLoaded();
263 void onImageListLoaded();
264 void onSingleImageLoaded();
265 void onCurrencyImageSet();
266 void onCountryImageSet();
267 void onAllAvailableImagesLoaded();
268 void onIncrementalChangesLoaded();
277 static QIcon svgToIcon(
const std::string& svg_data);
284 void loadImageById(
const std::string& image_id);
289 void loadCurrencyImageIds();
294 void loadCountryImageIds();
299 void loadImagesByIds(
const std::vector<std::string>& image_ids);
304 void loadBusinessCentreMapping();
311 void loadIncrementalChanges();
313 struct ImageIdsResult {
315 std::vector<std::string> image_ids;
317 std::unordered_map<std::string, std::string> code_to_image_id;
320 struct BusinessCentreMappingResult {
322 std::unordered_map<std::string, std::string> bc_to_country;
325 struct ImagesResult {
327 std::vector<assets::domain::image> images;
328 int failed_batches{0};
338 static ImagesResult fetchImagesInBatches(
339 ClientManager* clientManager,
340 const std::vector<std::string>& image_ids);
342 struct ImageListResult {
344 std::vector<assets::messaging::image_info> images;
347 struct SingleImageResult {
349 std::string image_id;
353 struct SetCurrencyImageResult {
355 std::string iso_code;
359 struct SetCountryImageResult {
361 std::string alpha2_code;
365 ClientManager* clientManager_;
368 std::unordered_map<std::string, std::string> image_svg_cache_;
371 std::unordered_map<std::string, QIcon> image_icons_;
374 bool is_loading_images_{
false};
375 bool is_loading_all_available_{
false};
376 bool load_all_in_progress_{
false};
379 std::vector<std::string> pending_image_ids_;
381 QFutureWatcher<ImageIdsResult>* currency_ids_watcher_;
382 QFutureWatcher<ImageIdsResult>* country_ids_watcher_;
383 QFutureWatcher<ImageIdsResult>* incremental_changes_watcher_;
384 QFutureWatcher<ImagesResult>* images_watcher_;
385 QFutureWatcher<ImageListResult>* image_list_watcher_;
386 QFutureWatcher<SingleImageResult>* single_image_watcher_;
387 QFutureWatcher<SetCurrencyImageResult>* set_currency_image_watcher_;
388 QFutureWatcher<SetCountryImageResult>* set_country_image_watcher_;
389 QFutureWatcher<ImagesResult>* all_available_watcher_;
392 std::vector<assets::messaging::image_info> available_images_;
395 std::unordered_set<std::string> pending_image_requests_;
398 std::optional<std::chrono::system_clock::time_point> last_load_time_;
401 std::unordered_map<std::string, std::string> currency_iso_to_image_id_;
402 std::unordered_map<std::string, std::string> country_alpha2_to_image_id_;
403 std::unordered_map<std::string, std::string> bc_code_to_country_alpha2_;
405 QFutureWatcher<BusinessCentreMappingResult>* bc_mapping_watcher_;