// ========== Constructor ========== public CarrierPOSTWindow(CarrierGroup carrierGroup) : base(Gtk.WindowType.Toplevel) { this.Build(); try { this.CarrierGroup = carrierGroup; this.LoadCarriers(); } catch (Exception e) { Program.LogError(this.CarrierGroup.Name, "A problem occured when trying to load carriers."); Program.LogException(e); } }
// ========== Configure ========== protected void OnConfigureButtonReleased(object sender, EventArgs e) { String carrierName = this.CarrierCombobox.ActiveText; Carrier carrier = Carrier.GetCarrier(carrierName); if (carrier != null) { carrier.OpenSettingsWindow(); } else { CarrierGroup carrierGroup = Carrier.GetCarrierGroup(carrierName); carrierGroup.OpenSettingsWindow(); } this.Destroy(); }
// ========== Load Rules ========== /** Loads all rules from either remote or local JSON data. This should be invoked in a seperate thread to keep the application responsive. This will also load Zones. **/ public static void LoadRules() { Alert.LoadAlerts(); Label.LoadLabels(); Zone.LoadZones(); Program.Log("Rules", "Loading rules..."); Rules = new List <Rule> (); // Get JSON: string jsonData = ""; string rulesPath = Program.configGlobal.localRulesPath + Program.configGlobal.localRulesFilename; string rulesURL = Program.configGlobal.remoteRulesPath; bool rulesLoaded = false; if (rulesURL != "") { WebClient web = new WebClient(); try { Stream stream = web.OpenRead(rulesURL); using (StreamReader reader = new StreamReader(stream)) { jsonData = reader.ReadToEnd(); } rulesLoaded = true; } catch (Exception e) { Program.LogWarning("Rules", "Unable to connect to " + rulesURL); Program.LogException(e); Program.LogAlert("Rules", "Searching for local rules instead..."); } } else { Program.Log("Rules", "No remote rules url, reading from local file..."); } if (!rulesLoaded) { if (File.Exists(rulesPath)) { jsonData = File.ReadAllText(rulesPath); rulesLoaded = true; } else { Program.LogWarning("Rules", "Warning: No remote rules url set and no local rules file found at " + rulesPath + "."); Program.LogError("Rules", "No rules loaded."); return; } } // Read From JSON: JavaScriptSerializer serializer = new JavaScriptSerializer(); try { RuleJSON[] ruleJSONs = serializer.Deserialize <RuleJSON[]> (jsonData); foreach (RuleJSON ruleJSON in ruleJSONs) { Rule rule = new Rule(); rule.name = ruleJSON.name; string[] carrierData = ruleJSON.carrier.Split(':'); if (carrierData.Length == 1) { rule.carrier = Carrier.GetCarrier(ruleJSON.carrier); } else if (carrierData.Length > 0) { CarrierGroup carrierGroup = Carrier.GetCarrierGroup(carrierData[0]); rule.carrier = carrierGroup.GetCarrier(carrierData[1]); } rule.service = ruleJSON.service; rule.enhancement = ruleJSON.enhancement; rule.format = ruleJSON.format; rule.edit = ruleJSON.edit; rule.priority = ruleJSON.priority; if (ruleJSON.zones != null) { List <Zone> zones = new List <Zone>(); foreach (string zoneName in ruleJSON.zones) { Zone zone = Zone.GetZone(zoneName); if (zone != null) { zones.Add(zone); } } rule.zones = zones.ToArray(); } rule.channel = ruleJSON.channel; rule.carrierType = ruleJSON.carrierType; rule.orderCostMin = ruleJSON.orderCostMin; rule.shippingCostMin = ruleJSON.shippingCostMin; rule.bothCostsRequired = ruleJSON.bothCostsRequired; rule.weightMin = ruleJSON.weightMin; rule.itemCountMax = ruleJSON.itemCountMax; rule.packStation = ruleJSON.packStation; rule.tags = ruleJSON.tags; if (ruleJSON.labels != null) { var labels = new List <Label>(); foreach (string labelName in ruleJSON.labels) { Label label = Label.GetLabel(labelName); if (label != null) { labels.Add(label); } } rule.labels = labels.ToArray(); } if (ruleJSON.alerts != null) { var alerts = new List <Alert> (); foreach (string alertName in ruleJSON.alerts) { Alert alert = Alert.GetAlert(alertName); if (alert != null) { alerts.Add(alert); } } rule.alerts = alerts.ToArray(); } Rules.Add(rule); } } catch (Exception e) { Program.LogError("Rules", "Invalid rules JSON format:"); Program.LogException(e); Program.LogError("Rules", "No rules loaded."); return; } // Sort: Rules.Sort( delegate(Rule x, Rule y) { return(y.priority.CompareTo(x.priority)); } ); Program.LogSuccess("Rules", Rules.Count + " rule(s) loaded."); }