diff --git a/src/lib.rs b/src/lib.rs index 34ec89e..a03e5d7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -794,7 +794,7 @@ pub fn guess_blockages( // Guess for each bridge for fingerprint in bridges { let today = get_date(); - let mut bridge_info: BridgeInfo = + let bridge_info: BridgeInfo = bincode::deserialize(&db.get(fingerprint).unwrap().unwrap()).unwrap(); let mut new_blockages = HashSet::::new(); let fpr_str = array_bytes::bytes2hex("", fingerprint); @@ -817,19 +817,13 @@ pub fn guess_blockages( max_historical_days, ); for country in blocked_in { - let bridge_country_info = bridge_info.info_by_country.get_mut(&country).unwrap(); + let bridge_country_info = bridge_info.info_by_country.get(&country).unwrap(); if !bridge_country_info.blocked { new_blockages.insert(country.to_string()); - // Mark bridge as blocked when db gets updated - bridge_country_info.blocked = true; } } } blockages.insert(fingerprint, new_blockages); - - // Commit changes to database - db.insert(fingerprint, bincode::serialize(&bridge_info).unwrap()) - .unwrap(); } // Remove all bridges to re-evaluate from DB @@ -843,6 +837,26 @@ pub fn guess_blockages( blockages } +/// Commit blocked bridges to database +pub fn commit_blockages(db: &Db, blockages: &HashMap<[u8; 20], HashSet>) { + // For each bridge:, mark the bridge as blocked in each country + for (fingerprint, countries) in blockages { + if let Some(v) = db.get(&fingerprint).unwrap() { + let mut bridge_info: BridgeInfo = bincode::deserialize(&v).unwrap(); + + for country in countries { + if let Some(bridge_country_info) = bridge_info.info_by_country.get_mut(country) { + bridge_country_info.blocked = true; + } + } + + // Commit changes to database + db.insert(fingerprint, bincode::serialize(&bridge_info).unwrap()) + .unwrap(); + } + } +} + /// Report blocked bridges to bridge distributor pub async fn report_blockages( distributors: &BTreeMap, diff --git a/src/main.rs b/src/main.rs index 937c4d6..c517ef5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -109,6 +109,8 @@ async fn update_daily_info( min_historical_days, max_historical_days, ); + // TODO: Verify the new blockages + commit_blockages(db, &new_blockages); report_blockages(distributors, new_blockages.clone()).await; // Generate tomorrow's key if we don't already have it