MCPcopy Create free account
hub / github.com/clawshell/clawshell / fetch_message_metadata

Method fetch_message_metadata

src/email.rs:393–445  ·  view source on GitHub ↗
(
        &mut self,
        uid: u64,
    )

Source from the content-addressed store, hash-verified

391 }
392
393 fn fetch_message_metadata(
394 &mut self,
395 uid: u64,
396 ) -> Result<Option<EmailMessageMetadata>, EmailServiceError> {
397 let command = if self.gmail_thread_id_capable {
398 format!(
399 "UID FETCH {uid} (UID FLAGS INTERNALDATE X-GM-THRID BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)])"
400 )
401 } else {
402 format!(
403 "UID FETCH {uid} (UID FLAGS INTERNALDATE BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)])"
404 )
405 };
406 let output = self.run_command(&command)?;
407
408 let Some(fetch_line) = output
409 .lines
410 .iter()
411 .find(|line| line.starts_with("* ") && line.contains(" FETCH ("))
412 else {
413 return Ok(None);
414 };
415
416 let parsed_uid = capture_numeric_token(fetch_line, "UID")
417 .and_then(|value| value.parse::<u64>().ok())
418 .unwrap_or(uid);
419 let thread_id = capture_numeric_token(fetch_line, "X-GM-THRID");
420 let flags = capture_parenthesized_token(fetch_line, "FLAGS")
421 .map(|value| parse_flags(&value))
422 .unwrap_or_default();
423 let internal_date = capture_quoted_token(fetch_line, "INTERNALDATE");
424
425 let headers = output
426 .literals
427 .first()
428 .map(|literal| parse_headers(literal))
429 .unwrap_or_default();
430
431 let from = headers.get("from").cloned();
432 let subject = headers.get("subject").cloned();
433 let date = headers.get("date").cloned().or(internal_date);
434
435 Ok(Some(EmailMessageMetadata {
436 id: parsed_uid.to_string(),
437 thread_id,
438 from,
439 subject,
440 date,
441 snippet: None,
442 internal_date_ms: None,
443 label_ids: flags,
444 }))
445 }
446
447 fn fetch_message_content(
448 &mut self,

Callers 1

Calls 6

capture_numeric_tokenFunction · 0.85
parse_flagsFunction · 0.85
capture_quoted_tokenFunction · 0.85
parse_headersFunction · 0.85
run_commandMethod · 0.80

Tested by

no test coverage detected