diff --git a/ftl/core/card-stats.ftl b/ftl/core/card-stats.ftl index 82a0dbee2..30cc81027 100644 --- a/ftl/core/card-stats.ftl +++ b/ftl/core/card-stats.ftl @@ -23,6 +23,7 @@ card-stats-review-log-type-relearn = Relearn card-stats-review-log-type-filtered = Filtered card-stats-review-log-type-manual = Manual card-stats-no-card = (No card to display.) +card-stats-custom-data = Custom Data ## Window Titles diff --git a/proto/anki/stats.proto b/proto/anki/stats.proto index cf22557b2..a800b33ae 100644 --- a/proto/anki/stats.proto +++ b/proto/anki/stats.proto @@ -48,6 +48,7 @@ message CardStatsResponse { float total_secs = 15; string card_type = 16; string notetype = 17; + string custom_data = 18; } message GraphsRequest { diff --git a/rslib/src/stats/card.rs b/rslib/src/stats/card.rs index 80f8dd81f..c91989ae7 100644 --- a/rslib/src/stats/card.rs +++ b/rslib/src/stats/card.rs @@ -44,6 +44,7 @@ impl Collection { card_type: nt.get_template(card.template_idx)?.name.clone(), notetype: nt.name.clone(), revlog: revlog.iter().rev().map(stats_revlog_entry).collect(), + custom_data: card.custom_data, }) } diff --git a/ts/card-info/CardStats.svelte b/ts/card-info/CardStats.svelte index c846bd1d6..92aa98d22 100644 --- a/ts/card-info/CardStats.svelte +++ b/ts/card-info/CardStats.svelte @@ -83,6 +83,22 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html statsRows.push({ label: tr2.cardStatsCardId(), value: stats.cardId }); statsRows.push({ label: tr2.cardStatsNoteId(), value: stats.noteId }); + if (stats.customData) { + let value: string; + try { + const obj = JSON.parse(stats.customData); + value = Object.entries(obj) + .map(([k, v]) => `${k}=${v}`) + .join(" "); + } catch (exc) { + value = stats.customData; + } + statsRows.push({ + label: tr2.cardStatsCustomData(), + value: value, + }); + } + return statsRows; }