Quellcode durchsuchen

Move committing blockages to separate function

Vecna vor 3 Monaten
Ursprung
Commit
05f01c2117
2 geänderte Dateien mit 24 neuen und 8 gelöschten Zeilen
  1. 22 8
      src/lib.rs
  2. 2 0
      src/main.rs

+ 22 - 8
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::<String>::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<String>>) {
+    // For each bridge:<set of countries>, 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<BridgeDistributor, String>,

+ 2 - 0
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