From 22668fe654cabfd3775660105a68d9823ef85eca Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Fri, 7 Feb 2020 13:06:24 -0500 Subject: [PATCH] Save pp in local db --- youmubot-osu/src/discord/announcer.rs | 25 +++++++++++-------------- youmubot-osu/src/discord/db.rs | 12 ++++++------ youmubot-osu/src/discord/mod.rs | 1 + 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/youmubot-osu/src/discord/announcer.rs b/youmubot-osu/src/discord/announcer.rs index 8ab7e8c..c938304 100644 --- a/youmubot-osu/src/discord/announcer.rs +++ b/youmubot-osu/src/discord/announcer.rs @@ -28,25 +28,20 @@ impl Announcer for OsuAnnouncer { let osu = d.get_cloned::(); // For each user... let mut data = OsuSavedUsers::open(&*d.read()).borrow()?.clone(); - for (user_id, osu_user) in data.iter_mut() { - let mut user = None; + 'user_loop: for (user_id, osu_user) in data.iter_mut() { + let mut pp_values = vec![]; // Store the pp values here... for mode in &[Mode::Std, Mode::Taiko, Mode::Mania, Mode::Catch] { let scores = OsuAnnouncer::scan_user(&osu, osu_user, *mode)?; - if scores.is_empty() { + if scores.is_empty() && !osu_user.pp.is_empty() { + // Nothing to update: no new scores and pp is there. + pp_values.push(osu_user.pp[*mode as usize]); continue; } - let user = { - let user = &mut user; - if let None = user { - match osu.user(UserID::ID(osu_user.id), |f| f.mode(*mode)) { - Ok(u) => { - *user = u; - } - Err(_) => continue, - } - }; - user.as_ref().unwrap() + let user = match osu.user(UserID::ID(osu_user.id), |f| f.mode(*mode)) { + Ok(Some(u)) => u, + _ => continue 'user_loop, }; + pp_values.push(user.pp); scores .into_par_iter() .filter_map(|(rank, score)| { @@ -74,6 +69,8 @@ impl Announcer for OsuAnnouncer { }); } osu_user.last_update = chrono::Utc::now(); + osu_user.pp = pp_values; + dbg!(&osu_user); } // Update users *OsuSavedUsers::open(&*d.read()).borrow_mut()? = data; diff --git a/youmubot-osu/src/discord/db.rs b/youmubot-osu/src/discord/db.rs index a24d23b..3952873 100644 --- a/youmubot-osu/src/discord/db.rs +++ b/youmubot-osu/src/discord/db.rs @@ -1,12 +1,10 @@ use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; -use serenity::{ - model::id::{ChannelId, UserId}, -}; -use std::collections::HashMap; -use youmubot_db::{DB}; use crate::models::{Beatmap, Mode}; +use serde::{Deserialize, Serialize}; +use serenity::model::id::{ChannelId, UserId}; +use std::collections::HashMap; +use youmubot_db::DB; /// Save the user IDs. pub type OsuSavedUsers = DB>; @@ -19,4 +17,6 @@ pub type OsuLastBeatmap = DB>; pub struct OsuUser { pub id: u64, pub last_update: DateTime, + #[serde(default)] + pub pp: Vec>, } diff --git a/youmubot-osu/src/discord/mod.rs b/youmubot-osu/src/discord/mod.rs index 9d29fd8..1fd19c6 100644 --- a/youmubot-osu/src/discord/mod.rs +++ b/youmubot-osu/src/discord/mod.rs @@ -145,6 +145,7 @@ pub fn save(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult { OsuUser { id: u.id, last_update: chrono::Utc::now(), + pp: vec![], }, ); msg.reply(