/// <summary> /// Called from another thread /// Populate the list hosts control with the new returned hosts /// </summary> /// <param name="fetchedRecords"></param> private void updateHostsList(JsonResponse fetchedRecords) { if (fetchedRecords == null) return; //bail if the fetch failed listViewRecords.Items.Clear(); string[] selectedHosts = Program.settingsManager.getSetting("SelectedHosts").ToString().Split(';'); for (int i = 0; i < Convert.ToInt32(fetchedRecords.response.recs.count); i++) { ListViewItem row = new ListViewItem(); row.SubItems.Add(fetchedRecords.response.recs.objs[i].type); row.SubItems.Add(fetchedRecords.response.recs.objs[i].display_name); row.SubItems.Add(fetchedRecords.response.recs.objs[i].display_content); //Only check this if it's an A record. MX records may have the same name as the primary A record, but should never be updated with an IP. if ((Array.IndexOf(selectedHosts, fetchedRecords.response.recs.objs[i].display_name) >= 0) == true && fetchedRecords.response.recs.objs[i].type == "A") { row.Checked = true; } listViewRecords.Items.Add(row); } //Grey out anything that isn't an A record. for(int j = 0; j < listViewRecords.Items.Count; j++) { if (listViewRecords.Items[j].SubItems[1].Text != "A") { listViewRecords.Items[j].ForeColor = System.Drawing.Color.LightGray; } } }//end updateHostsList()
/// <summary> /// Logic to update records /// </summary> public void updateRecords(JsonResponse fetchedRecords) { if (fetchedRecords == null) //Dont attempt updates if the fetch failed return; int up_to_date = 0, skipped = 0, failed = 0, updated = 0, ignored = 0; string[] selectedHosts = Program.settingsManager.getSetting("SelectedHosts").ToString().Split(';'); for (int i = 0; i < fetchedRecords.response.recs.count; i++) { //Skip over MX and CNAME records //TODO: Dont skip them :) if (fetchedRecords.response.recs.objs[i].type != "A") { skipped++; continue; } //Ignore anything that is not checked if ((Array.IndexOf(selectedHosts, fetchedRecords.response.recs.objs[i].display_name) >= 0) != true) { ignored++; continue; } //Skip over anything that doesnt need an update if (fetchedRecords.response.recs.objs[i].content == Program.settingsManager.getSetting("ExternalAddress").ToString()) { up_to_date++; continue; } string strResponse = this.updateCloudflareRecords(fetchedRecords.response.recs.objs[i]); JavaScriptSerializer serializer = new JavaScriptSerializer(); JsonResponse resp = serializer.Deserialize<JsonResponse>(strResponse); if (resp.result != "success") { failed++; Logger.log(Properties.Resources.Logger_Failed + " " + fetchedRecords.response.recs.objs[i].name + " " + resp.msg, Logger.Level.Error); } else { updated++; } } Logger.log("Update at " + DateTime.Now + " - " + updated.ToString(Program.cultureInfo) + " updated, " + up_to_date.ToString(Program.cultureInfo) + " up to date, " + skipped.ToString(Program.cultureInfo) + " skipped, " + ignored.ToString(Program.cultureInfo) + " ignored, " + failed.ToString(Program.cultureInfo) + " failed", Logger.Level.Info); }//end updateRecords()
/// <summary> /// Logic to update records /// </summary> public void updateRecords(ICollection <DomainDnsJsonResponse> fetchedRecords) { if (fetchedRecords == null) //Dont attempt updates if the fetch failed { return; } int up_to_date = 0, skipped = 0, failed = 0, updated = 0, ignored = 0; string[] selectedHosts = Program.settingsManager.getSetting("SelectedHosts").ToString().Split(';'); foreach (var fetchedRecord in fetchedRecords) { var record = fetchedRecord.Response.response; for (int i = 0; i < record.recs.count; i++) { //Skip over MX and CNAME records //TODO: Dont skip them :) if (record.recs.objs[i].type != "A") { skipped++; continue; } //Ignore anything that is not checked if ((Array.IndexOf(selectedHosts, record.recs.objs[i].display_name) >= 0) != true) { ignored++; continue; } //Skip over anything that doesnt need an update if (record.recs.objs[i].content == Program.settingsManager.getSetting("ExternalAddress").ToString()) { up_to_date++; continue; } string strResponse = this.updateCloudflareRecords(record.recs.objs[i]); JavaScriptSerializer serializer = new JavaScriptSerializer(); JsonResponse resp = serializer.Deserialize <JsonResponse>(strResponse); if (resp.result != "success") { failed++; Logger.log( Properties.Resources.Logger_Failed + " " + record.recs.objs[i].name + " " + resp.msg, Logger.Level.Error); } else { updated++; } } } Logger.log("Update at " + DateTime.Now + " - " + updated.ToString(Program.cultureInfo) + " updated, " + up_to_date.ToString(Program.cultureInfo) + " up to date, " + skipped.ToString(Program.cultureInfo) + " skipped, " + ignored.ToString(Program.cultureInfo) + " ignored, " + failed.ToString(Program.cultureInfo) + " failed", Logger.Level.Info); }//end updateRecords()