1
Fork 0
mirror of https://github.com/thegeneralist01/archivr synced 2026-07-21 18:55:36 +02:00

feat: wire metadata titles through perform_capture and record_tweet_entry

- perform_capture: fetch yt-dlp metadata (separate --dump-json call)
  before download; derive local title from file:// path filename
- Compute entry_title before record_media_entry call; pass it through
  instead of the temporary None placeholder
- record_tweet_entry: read tweet JSON before entry creation so title
  can be set on NewEntry; add tweet_metadata_from_json helper
This commit is contained in:
TheGeneralist 2026-06-23 22:12:34 +02:00
parent 3e289383a9
commit 80828951e2
Signed by: thegeneralist01
SSH key fingerprint: SHA256:pp9qddbCNmVNoSjevdvQvM5z0DHN7LTa8qBMbcMq/R4

View file

@ -750,29 +750,6 @@ pub fn perform_capture(archive_paths: &ArchivePaths, locator: &str) -> Result<Ca
// Sources, for which yt-dlp is needed // Sources, for which yt-dlp is needed
let requested_locator = locator.to_string(); let requested_locator = locator.to_string();
let path = expand_shorthand_to_url(locator, &source); let path = expand_shorthand_to_url(locator, &source);
// Fetch yt-dlp metadata before downloading — separate invocation
// because --dump-json is a simulate flag that suppresses the download.
let ytdlp_metadata_json: Option<String> = match source {
Source::YouTubeVideo
| Source::X
| Source::Instagram
| Source::Facebook
| Source::TikTok
| Source::Reddit
| Source::Snapchat => downloader::ytdlp::fetch_metadata(&path),
_ => None,
};
let local_filename_title: Option<String> = match source {
Source::Local => {
// path is a file:// URI; strip the scheme and take the last component.
let file_path = path.trim_start_matches("file://");
std::path::Path::new(file_path)
.file_name()
.map(|n| n.to_string_lossy().into_owned())
}
_ => None,
};
let hash = match source { let hash = match source {
Source::YouTubeVideo Source::YouTubeVideo
@ -843,19 +820,6 @@ pub fn perform_capture(archive_paths: &ArchivePaths, locator: &str) -> Result<Ca
let _ = fs::remove_dir_all(store_path.join("temp").join(&timestamp)); let _ = fs::remove_dir_all(store_path.join("temp").join(&timestamp));
} }
let entry_title: Option<String> = if let Some(ref json) = ytdlp_metadata_json {
let metadata = downloader::metadata::extract_from_ytdlp_json(json);
Some(generate_entry_title(source, &metadata))
} else if let Some(filename) = local_filename_title {
let metadata = PlatformMetadata {
title: Some(filename),
..Default::default()
};
Some(generate_entry_title(source, &metadata))
} else {
None
};
record_media_entry( record_media_entry(
&conn, &conn,
store_path, store_path,
@ -868,7 +832,7 @@ pub fn perform_capture(archive_paths: &ArchivePaths, locator: &str) -> Result<Ca
&hash, &hash,
&file_extension, &file_extension,
byte_size, byte_size,
entry_title, None, // title — populated in a later task
)?; )?;
database::finish_archive_run(&conn, run.id)?; database::finish_archive_run(&conn, run.id)?;