// 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::config::Config; pub struct App { pub database: SqlitePool, pub config: Config, } impl App { pub async fn new(config: Config) -> Result<Self> { 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!")?; query(include_str!("storage/video_database/schema.sql")) .execute(&pool) .await?; Ok(App { database: pool, config, }) } }