Commit Diff


commit - d85ed18bc6ad9e2739516ed24ab4c199372afe7c
commit + 6ecb5bd86d62f727dd1a3dbe473e2a47a76ac368
blob - c8ac3cd8601f38e70158d4179be3b92664d9ca54
blob + a6192d027c537dc5e9101155d88e06da46dcca96
--- Cargo.lock
+++ Cargo.lock
@@ -796,6 +796,7 @@ dependencies = [
  "dotenv",
  "reqwest",
  "rss",
+ "toml",
 ]
 
 [[package]]
@@ -995,6 +996,15 @@ dependencies = [
 ]
 
 [[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
 name = "tower-service"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
blob - 2f8d72c87940a2bef0ba4e74760e846b48b2cfef
blob + 2a39fbf4e2d5888183b069a767d473a8f820ef2f
--- Cargo.toml
+++ Cargo.toml
@@ -14,3 +14,4 @@ anyhow = "1.0"
 reqwest = { version = "0.11", features = ["blocking"] }
 clap = "3"
 chrono = "0.4"
+toml = "0.5.8"
blob - 53178f50ba7c7590f521840d543ed9b8a972d356
blob + f8cb16808bbc45b077cad3d517b5999db06d6a7f
--- src/db.rs
+++ src/db.rs
@@ -16,7 +16,7 @@ pub fn establish_connection() -> anyhow::Result<Sqlite
 }
 
 // inserts a new post or updates an old one with the same guid
-pub fn insert_post(conn: &SqliteConnection, item: &Item) -> anyhow::Result<usize> {
+pub fn insert_item(conn: &SqliteConnection, item: &Item) -> anyhow::Result<usize> {
     let time = item
         .pub_date()
         .map(|date| DateTime::parse_from_rfc2822(date).unwrap().timestamp());
blob - 910e92a48e67397392a69654b75432283ff12699
blob + b58971e2a060714f23f888914f01c231a22e39d7
--- src/main.rs
+++ src/main.rs
@@ -9,14 +9,15 @@ pub mod models;
 pub mod rss;
 pub mod schema;
 
+use self::diesel::prelude::*;
+use schema::posts::dsl::*;
 use std::fs::File;
 use std::io::BufRead;
 use std::io::BufReader;
+use std::io::Read;
+use toml::Value;
 
 fn main() -> anyhow::Result<()> {
-    use self::diesel::prelude::*;
-    use schema::posts::dsl::*;
-
     let app = clap::build_app();
     let matches = app.get_matches();
 
@@ -32,7 +33,7 @@ fn main() -> anyhow::Result<()> {
     for u in urls {
         let new = rss::fetch_new(u)?;
         for i in new.items() {
-            let _ = db::insert_post(&conn, i)?;
+            let _ = db::insert_item(&conn, i)?;
         }
     }
 
@@ -42,13 +43,34 @@ fn main() -> anyhow::Result<()> {
         .order(pub_date.desc())
         .load::<models::Post>(&conn)?;
 
-    dbg!(results);
+    send_posts(results)?;
 
     Ok(())
 }
 
-fn send_posts(posts: &Vec<models::Post>) {
-    // TODO: store smtp values (username, password, smtp server) and create smtp client to send
-    // with
-    for post in posts {}
+fn send_posts(items: Vec<models::Post>) -> anyhow::Result<()> {
+    let config_file = "/tmp/rss-email.toml";
+    let mut string = String::new();
+    File::open(config_file)
+        .unwrap()
+        .read_to_string(&mut string)
+        .unwrap();
+
+    let value = (&string).parse::<Value>().unwrap();
+    let smtp = value.get("smtp").unwrap();
+    let smtp_user = smtp.get("smtp_user").unwrap().as_str().unwrap();
+    let smtp_pw = smtp.get("smtp_password").unwrap().as_str().unwrap();
+    let smtp_port = smtp.get("smtp_port").unwrap().as_integer().unwrap();
+    let smtp_server = smtp.get("smtp_server").unwrap().as_str().unwrap();
+    let to = value.get("to").unwrap().as_str().unwrap();
+    let from = value.get("from").unwrap().as_str().unwrap();
+
+    dbg!(smtp_user, smtp_pw, smtp_port, smtp_server, to, from);
+
+    for mut post in items {
+        // TODO: send via smtp, write sent field to database
+        post.sent = true;
+    }
+
+    Ok(())
 }