diff options
Diffstat (limited to '')
-rw-r--r-- | src/app.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..14b85a3 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,39 @@ +// yt - A fully featured command line YouTube client +// +// Copyright (C) 2024 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 anyhow::{Context, Result}; +use sqlx::{query, sqlite::SqliteConnectOptions, SqlitePool}; + +use crate::constants; + +pub struct App { + pub database: SqlitePool, +} + +impl App { + pub async fn new() -> Result<Self> { + let db_name = constants::database()?; + + let options = SqliteConnectOptions::new() + .filename(db_name) + .optimize_on_close(true, None) + .create_if_missing(true); + + let pool = SqlitePool::connect_with(options) + .await + .context("Failed to connect to database!")?; + + query(include_str!("storage/video_database/schema.sql")) + .execute(&pool) + .await?; + + Ok(App { database: pool }) + } +} |