commit - 7c30f9b4f8d2c8b8d8957aa7fcae4d176b343999
commit + 5dff7b9dbddb1c169d94afab1b6be7750d4a8d51
blob - e51b0580ebdb438787ae9c3c43c394c317fae02a
blob + 90ed941fb643996268fc37fdb2a957f20aa4bc92
--- src/db.rs
+++ src/db.rs
+use std::str::FromStr;
+
use snafu::prelude::*;
use sqlx::pool::PoolConnection;
-use sqlx::Sqlite;
+use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
+use sqlx::{ConnectOptions, Sqlite};
use crate::models::Post;
-use crate::{Error, GeneralDatabaseSnafu};
+use crate::{Error, GeneralDatabaseSnafu, MigrationSnafu};
+pub async fn init_db(db_path: &str) -> Result<sqlx::Pool<Sqlite>, Error> {
+ let mut options = SqliteConnectOptions::from_str(db_path).context(GeneralDatabaseSnafu)?;
+ options.log_statements(log::LevelFilter::Trace);
+
+ log::debug!("Establishing connection to database at {:?}", db_path);
+ let pool = SqlitePoolOptions::new()
+ .max_connections(5)
+ .connect_with(options)
+ .await
+ .context(GeneralDatabaseSnafu)?;
+
+ sqlx::migrate!("./migrations")
+ .run(&pool)
+ .await
+ .context(MigrationSnafu)?;
+
+ Ok(pool)
+}
+
/// Insert a new post or update an old one with the same GUID.
///
/// # Errors
blob - 98a61c615d01506bbdbe3ae8811ea46fd6d7f12f
blob + 4d2cb027064564aeef0b4eb645e702809adb82c2
--- src/main.rs
+++ src/main.rs
use crate::{
config::AppConfig,
+ db::{init_db, insert_item},
mail::{get_mailer, Mail},
};
use lettre::{AsyncSmtpTransport, Tokio1Executor};
sync::Arc,
};
-use sqlx::{sqlite::SqlitePoolOptions, Sqlite};
+use sqlx::Sqlite;
use tokio::task::JoinSet;
#[derive(Debug, Snafu)]
.filter(|l| !l.starts_with('#'))
.collect();
- let db_path = &config.database_path;
- debug!("Establishing connection to database at {:?}", db_path);
- let pool = SqlitePoolOptions::new()
- .max_connections(5)
- .connect(db_path.as_str())
- .await
- .context(GeneralDatabaseSnafu)?;
+ let pool = init_db(&config.database_path).await?;
- sqlx::migrate!("./migrations")
- .run(&pool)
- .await
- .context(MigrationSnafu)?;
-
if config.no_fetch {
info!("Not fetching any feeds as \"--no-fetch\" has been passed");
} else {
for i in posts {
let conn = pool.acquire().await.context(GeneralDatabaseSnafu)?;
- db::insert_item(conn, &i).await?;
+ insert_item(conn, &i).await?;
}
}