diff options
Diffstat (limited to 'crates/yt/src/version/mod.rs')
-rw-r--r-- | crates/yt/src/version/mod.rs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/crates/yt/src/version/mod.rs b/crates/yt/src/version/mod.rs new file mode 100644 index 0000000..05d85e0 --- /dev/null +++ b/crates/yt/src/version/mod.rs @@ -0,0 +1,63 @@ +// yt - A fully featured command line YouTube client +// +// Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +// SPDX-License-Identifier: GPL-3.0-or-later +// +// This file is part of Yt. +// +// You should have received a copy of the License along with this program. +// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. + +use std::process::Command; + +use anyhow::{Context, Result}; +use sqlx::{SqlitePool, sqlite::SqliteConnectOptions}; + +use crate::{config::Config, storage::migrate::get_version_db}; + +fn get_cmd_version(cmd: &str) -> Result<String> { + let out = String::from_utf8( + Command::new(cmd) + .arg("--version") + .output() + .with_context(|| format!("Failed to run `{cmd} --version`"))? + .stdout, + ) + .context("Failed to interpret output as utf8")?; + + Ok(out.trim().to_owned()) +} + +pub async fn show(config: &Config) -> Result<()> { + let db_version = { + let options = SqliteConnectOptions::new() + .filename(&config.paths.database_path) + .optimize_on_close(true, None) + .create_if_missing(true); + + let pool = SqlitePool::connect_with(options) + .await + .context("Failed to connect to database!")?; + + get_version_db(&pool) + .await + .context("Failed to determine database version")? + }; + + // TODO(@bpeetz): Use `pyo3`'s build in mechanism instead of executing the python CLI <2025-02-21> + let python_version = get_cmd_version("python")?; + let yt_dlp_version = get_cmd_version("yt-dlp")?; + + println!( + "{}: {} + +db version: {db_version} + +python: {python_version} +yt-dlp: {yt_dlp_version}", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_VERSION"), + ); + + Ok(()) +} |