From ad893a4fb44244132d710d7f94fc99a7d83f1b87 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Fri, 6 Jun 2025 23:55:23 +0200 Subject: grit: Add method for generating message translation id reimplemented from a description of the grit id calculation --- server/common/src/grit.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'server/common/src/grit.rs') diff --git a/server/common/src/grit.rs b/server/common/src/grit.rs index dbf4f89..a510724 100644 --- a/server/common/src/grit.rs +++ b/server/common/src/grit.rs @@ -1156,3 +1156,36 @@ pub async fn parse_grit_with_parts(path: impl AsRef) -> anyhow::Result String { + let mut ret = String::new(); + for c in &message.content { + match c { + TextPlaceholder::Text(value) => ret += value.as_str(), + TextPlaceholder::Placeholder { + name, + content: _, + example: _, + } => ret += name.as_str(), + } + } + ret +} + +fn fingerprint(value: &str) -> i64 { + u64::from_be_bytes(md5::compute(value).0[0..8].try_into().unwrap()).cast_signed() +} + +pub fn get_message_id(message: &Message) -> i64 { + let mut message_id = fingerprint(get_presentable_content(message).as_str()); + if let Some(meaning) = &message.meaning { + let meaning_id = fingerprint(meaning.as_str()); + if message_id < 0 { + message_id = (message_id << 1) + meaning_id + 1 + } else { + message_id = (message_id << 1) + meaning_id + } + } + // Avoid returning negative ids + message_id & 0x7fffffffffffffff +} -- cgit v1.2.3-70-g09d2