about summary refs log tree commit diff stats
path: root/crates/yt/src/version/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/yt/src/version/mod.rs')
-rw-r--r--crates/yt/src/version/mod.rs63
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(())
+}