Пример #1
0
 // ========== 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);
     }
 }
Пример #2
0
        // ========== 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();
        }
Пример #3
0
        // ========== 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.");
        }