clipmem 0.6.0

macOS clipboard memory backed by SQLite and searchable from agent runtimes
Documentation
use anyhow::{Context, Result};
use rusqlite::Connection;

use crate::db::sqlite_helpers::collect_rows;

pub(super) fn ensure_source_provenance_column(conn: &Connection) -> Result<()> {
    let mut stmt = conn.prepare("PRAGMA table_info(item_representations)")?;
    let columns = collect_rows(stmt.query_map([], |row| row.get::<_, String>(1))?)?;
    if !columns.iter().any(|column| column == "source_provenance") {
        conn.execute(
            "ALTER TABLE item_representations ADD COLUMN source_provenance TEXT NOT NULL DEFAULT 'captured_original' CHECK (source_provenance IN ('captured_original', 'legacy_transcoded_by_clipmem'))",
            [],
        )
        .context("add source provenance column")?;
    }
    conn.execute(
        "UPDATE item_representations SET source_provenance = 'legacy_transcoded_by_clipmem' WHERE image_compression_status = 'compressed'",
        [],
    )
    .context("classify legacy transcoded image sources")?;
    Ok(())
}