Skip to main content

tuwunel_service/migrations/
migrate_media.rs

1use tuwunel_core::{Result, result::NotFound};
2
3use super::conduit::migrate_conduit_media;
4use crate::{
5	Services,
6	media::migrations::{checkup_sha256_media, migrate_sha256_media},
7};
8
9/// Imports a Conduit database's content-addressed media into tuwunel's
10/// key-addressed store when it is present and not yet imported.
11///
12/// Otherwise runs the key-addressed media migrations.
13pub(super) async fn migrate_media(services: &Services) -> Result {
14	let db = &services.db;
15	let config = &services.server.config;
16
17	let sha256_done = !db["global"]
18		.get(b"feat_sha256_media")
19		.await
20		.is_not_found();
21
22	// The foreign CF persists, so the marker (not its presence) is the latch.
23	if !sha256_done
24		&& db
25			.open_cf("servernamemediaid_metadata")?
26			.is_some()
27	{
28		migrate_conduit_media(services).await?;
29		db["global"].insert(b"feat_sha256_media", []);
30		return Ok(());
31	}
32
33	if !sha256_done {
34		migrate_sha256_media(services).await?;
35	} else if config.media_startup_check {
36		checkup_sha256_media(services).await?;
37	}
38
39	Ok(())
40}