mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-05-25 09:40:49 +00:00
Patches to get deadlocking in osu updates fixed
This commit is contained in:
parent
1b02993e98
commit
220dbc21ea
7 changed files with 60 additions and 41 deletions
|
@ -29,10 +29,8 @@ pub struct Announcer {
|
|||
}
|
||||
|
||||
impl Announcer {
|
||||
pub fn new(client: Osu) -> Self {
|
||||
Self {
|
||||
client: Arc::new(client),
|
||||
}
|
||||
pub fn new(client: Arc<Osu>) -> Self {
|
||||
Self { client }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,10 +43,12 @@ impl youmubot_prelude::Announcer for Announcer {
|
|||
channels: MemberToChannels,
|
||||
) -> Result<()> {
|
||||
// For each user...
|
||||
let data = d.read().await;
|
||||
let data = data.get::<OsuSavedUsers>().unwrap();
|
||||
let users = {
|
||||
let data = d.read().await;
|
||||
let data = data.get::<OsuSavedUsers>().unwrap();
|
||||
data.all().await?
|
||||
};
|
||||
let now = chrono::Utc::now();
|
||||
let users = data.all().await?;
|
||||
users
|
||||
.into_iter()
|
||||
.map(|mut osu_user| {
|
||||
|
@ -58,7 +58,7 @@ impl youmubot_prelude::Announcer for Announcer {
|
|||
c: c.clone(),
|
||||
data: d.clone(),
|
||||
};
|
||||
let s = &self;
|
||||
let s = &*self;
|
||||
async move {
|
||||
let channels = channels.channels_of(ctx.c.clone(), user_id).await;
|
||||
if channels.is_empty() {
|
||||
|
@ -76,7 +76,16 @@ impl youmubot_prelude::Announcer for Announcer {
|
|||
Ok(v) => {
|
||||
osu_user.last_update = now;
|
||||
osu_user.pp = v.try_into().unwrap();
|
||||
data.save(osu_user).await.pls_ok();
|
||||
let id = osu_user.id;
|
||||
ctx.data
|
||||
.read()
|
||||
.await
|
||||
.get::<OsuSavedUsers>()
|
||||
.unwrap()
|
||||
.save(osu_user)
|
||||
.await
|
||||
.pls_ok();
|
||||
println!("updating {} done", id);
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("osu: Cannot update {}: {}", osu_user.id, e);
|
||||
|
|
|
@ -71,25 +71,24 @@ pub fn setup(
|
|||
|
||||
// API client
|
||||
let http_client = data.get::<HTTPClient>().unwrap().clone();
|
||||
let make_client = || {
|
||||
OsuHttpClient::new(
|
||||
std::env::var("OSU_API_KEY").expect("Please set OSU_API_KEY as osu! api key."),
|
||||
)
|
||||
};
|
||||
let osu_client = Arc::new(make_client());
|
||||
let osu_client = Arc::new(OsuHttpClient::new(
|
||||
std::env::var("OSU_API_KEY").expect("Please set OSU_API_KEY as osu! api key."),
|
||||
http_client.clone(),
|
||||
));
|
||||
data.insert::<OsuClient>(osu_client.clone());
|
||||
data.insert::<oppai_cache::BeatmapCache>(oppai_cache::BeatmapCache::new(
|
||||
http_client,
|
||||
sql_client.clone(),
|
||||
));
|
||||
data.insert::<beatmap_cache::BeatmapMetaCache>(beatmap_cache::BeatmapMetaCache::new(
|
||||
osu_client, sql_client,
|
||||
osu_client.clone(),
|
||||
sql_client,
|
||||
));
|
||||
|
||||
// Announcer
|
||||
announcers.add(
|
||||
announcer::ANNOUNCER_KEY,
|
||||
announcer::Announcer::new(make_client()),
|
||||
announcer::Announcer::new(osu_client),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -33,9 +33,9 @@ fn vec_try_into<U, T: std::convert::TryFrom<U>>(v: Vec<U>) -> Result<Vec<T>, T::
|
|||
|
||||
impl Client {
|
||||
/// Create a new client from the given API key.
|
||||
pub fn new(key: String) -> Client {
|
||||
pub fn new(key: String, client: HTTPClient) -> Client {
|
||||
let client = Ratelimit::new(
|
||||
HTTPClient::new(),
|
||||
client,
|
||||
REQUESTS_PER_MINUTE,
|
||||
std::time::Duration::from_secs(60),
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue