mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 20:35:36 +00:00
refactor: use new tr_variant API for stats.json (#7098)
* refactor: load stats with new tr_variant API * refactor: save stats with new tr_variant API
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
// or any future license endorsed by Mnemosyne LLC.
|
||||
// License text can be found in the licenses/ folder.
|
||||
|
||||
#include <array>
|
||||
#include <optional>
|
||||
#include <utility>
|
||||
|
||||
@@ -40,26 +39,33 @@ std::optional<tr_variant> load_stats(std::string_view config_dir)
|
||||
|
||||
tr_session_stats tr_stats::load_old_stats(std::string_view config_dir)
|
||||
{
|
||||
auto const stats = load_stats(config_dir);
|
||||
if (!stats)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
auto const* const map = stats->get_if<tr_variant::Map>();
|
||||
if (map == nullptr)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
auto const load = [map](tr_quark const quark, uint64_t& dst)
|
||||
{
|
||||
if (auto const val = map->value_if<int64_t>(quark); val)
|
||||
{
|
||||
dst = *val;
|
||||
}
|
||||
};
|
||||
|
||||
auto ret = tr_session_stats{};
|
||||
|
||||
if (auto stats = load_stats(config_dir); stats)
|
||||
{
|
||||
auto const key_tgts = std::array<std::pair<tr_quark, uint64_t*>, 5>{
|
||||
{ { TR_KEY_downloaded_bytes, &ret.downloadedBytes },
|
||||
{ TR_KEY_files_added, &ret.filesAdded },
|
||||
{ TR_KEY_seconds_active, &ret.secondsActive },
|
||||
{ TR_KEY_session_count, &ret.sessionCount },
|
||||
{ TR_KEY_uploaded_bytes, &ret.uploadedBytes } }
|
||||
};
|
||||
|
||||
for (auto& [key, tgt] : key_tgts)
|
||||
{
|
||||
if (auto val = int64_t{}; tr_variantDictFindInt(&*stats, key, &val))
|
||||
{
|
||||
*tgt = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
load(TR_KEY_downloaded_bytes, ret.downloadedBytes);
|
||||
load(TR_KEY_files_added, ret.filesAdded);
|
||||
load(TR_KEY_seconds_active, ret.secondsActive);
|
||||
load(TR_KEY_session_count, ret.sessionCount);
|
||||
load(TR_KEY_uploaded_bytes, ret.uploadedBytes);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -67,14 +73,13 @@ tr_session_stats tr_stats::load_old_stats(std::string_view config_dir)
|
||||
void tr_stats::save() const
|
||||
{
|
||||
auto const saveme = cumulative();
|
||||
auto top = tr_variant{};
|
||||
tr_variantInitDict(&top, 5);
|
||||
tr_variantDictAddInt(&top, TR_KEY_downloaded_bytes, saveme.downloadedBytes);
|
||||
tr_variantDictAddInt(&top, TR_KEY_files_added, saveme.filesAdded);
|
||||
tr_variantDictAddInt(&top, TR_KEY_seconds_active, saveme.secondsActive);
|
||||
tr_variantDictAddInt(&top, TR_KEY_session_count, saveme.sessionCount);
|
||||
tr_variantDictAddInt(&top, TR_KEY_uploaded_bytes, saveme.uploadedBytes);
|
||||
tr_variant_serde::json().to_file(top, tr_pathbuf{ config_dir_, "/stats.json"sv });
|
||||
auto map = tr_variant::Map{ 5 };
|
||||
map.try_emplace(TR_KEY_downloaded_bytes, saveme.downloadedBytes);
|
||||
map.try_emplace(TR_KEY_files_added, saveme.filesAdded);
|
||||
map.try_emplace(TR_KEY_seconds_active, saveme.secondsActive);
|
||||
map.try_emplace(TR_KEY_session_count, saveme.sessionCount);
|
||||
map.try_emplace(TR_KEY_uploaded_bytes, saveme.uploadedBytes);
|
||||
tr_variant_serde::json().to_file(tr_variant{ std::move(map) }, tr_pathbuf{ config_dir_, "/stats.json"sv });
|
||||
}
|
||||
|
||||
void tr_stats::clear()
|
||||
|
||||
Reference in New Issue
Block a user