private List<ASObject> getMultipleList(ASObject policy)
        {
            if (policy == null)
                return null;
            List<ASObject> multipleList = null;
            object managers = policy.get("managers");
            if (managers != null && managers is object[])
            {
                multipleList = new List<ASObject>();
                foreach (object o in (object[])managers)
                {
                    if (o is ASObject)
                    {
                        multipleList.Add((ASObject)o);
                    }
                }
            }
            else if (managers != null && managers is List<ASObject>)
            {
                multipleList = new List<ASObject>();
                foreach (ASObject o in (List<ASObject>)managers)
                {
                    multipleList.Add(o);
                }
            }

            return multipleList;
        }
Beispiel #2
0
        void OnMailEvent(MailWorker.Event eventType, ASObject mail, string[] updateFields)
        {
            switch (eventType)
            {
                case MailWorker.Event.Delete:
                    return;
                case MailWorker.Event.Create:
                    {
                        if (mail == null)
                            return;
                        MailWorker.instance.saveMailRecord(mail);

                        string folder = mail.getString("folder");
                        XElement folderXml = sxml.XPathSelectElement("/mailbox/folder[@name='" + folder + "']");
                        string count = folderXml.AttributeValue("count");
                        if (IsBool(mail.get("is_seen")))
                        {
                            if (count == "(1)" || count == "")
                                folderXml.SetAttributeValue("count", "");
                            else
                            {
                                count = count.Replace("(", "").Replace(")", "");
                                folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) - 1) + ")");
                            }
                        }
                        else
                        {
                            if (count == "")
                                folderXml.SetAttributeValue("count", "(1)");
                            else
                            {
                                count = count.Replace("(", "").Replace(")", "");
                                folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) + 1) + ")");
                            }
                        }

                        if (mail["mail_date"] is DateTime && !IsBool(mail.get("is_handled")))
                        {
                            DateTime time = (DateTime)mail["mail_date"];
                            string value = unhandledMailProvider.JudgeTimePhase(time);
                            folderXml = sxml.XPathSelectElement("/folder/folder[@value='" + value + "']");
                            if (folderXml != null)
                            {
                                count = folderXml.AttributeValue("count");
                                if (count == "")
                                    folderXml.SetAttributeValue("count", "(1)");
                                else
                                {
                                    count = count.Replace("(", "").Replace(")", "");
                                    folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) + 1) + ")");
                                }
                            }
                        }
                    }
                    break;
                case MailWorker.Event.Update:
                    {
                        if (mail == null || updateFields == null || updateFields.Length == 0)
                            return;

                        MailWorker.instance.updateMail(mail, updateFields);

                        bool is_seen = false;
                        bool is_handled = false;
                        foreach (string s in updateFields)
                        {
                            if (s == "is_seen")
                                is_seen = true;
                            else if (s == "is_handled")
                                is_handled = true;
                        }

                        if (is_seen)
                        {
                            string folder = mail.getString("folder");
                            XElement folderXml = sxml.XPathSelectElement("/mailbox/folder[@name='" + folder + "']");
                            string count = folderXml.AttributeValue("count");
                            if (IsBool(mail.get("is_seen")))
                            {
                                if (count == "(1)" || count == "")
                                    folderXml.SetAttributeValue("count", "");
                                else
                                {
                                    count = count.Replace("(", "").Replace(")", "");
                                    folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) - 1) + ")");
                                }
                            }
                            else
                            {
                                if (count == "")
                                    folderXml.SetAttributeValue("count", "(1)");
                                else
                                {
                                    count = count.Replace("(", "").Replace(")", "");
                                    folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) + 1) + ")");
                                }
                            }
                        }

                        if (is_handled)
                        {
                            DateTime time = (DateTime)mail["mail_date"];
                            string value = unhandledMailProvider.JudgeTimePhase(time);
                            XElement folderXml = sxml.XPathSelectElement("/folder/folder[@value='" + value + "']");
                            string count = folderXml.AttributeValue("count");
                            if (IsBool(mail.get("is_handled")))
                            {
                                if (count == "(1)" || count == "")
                                    folderXml.SetAttributeValue("count", "");
                                else
                                {
                                    count = count.Replace("(", "").Replace(")", "");
                                    folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) - 1) + ")");
                                }
                            }
                            else
                            {
                                if (count == "")
                                    folderXml.SetAttributeValue("count", "(1)");
                                else
                                {
                                    count = count.Replace("(", "").Replace(")", "");
                                    folderXml.SetAttributeValue("count", "(" + (NumberUtil.toLong(count) + 1) + ")");
                                }
                            }
                        }
                    }
                    break;
                case MailWorker.Event.Reset:
                    this.Reset();
                    break;
                case MailWorker.Event.MoveFolder:
                    {
                        Map<string, long> countMap = unhandledMailProvider.FetchUnhandledMailCount();

                        IEnumerable<XElement> folders = sxml.XPathSelectElements("/folder/folder");
                        foreach (XElement folderXml in folders)
                        {
                            string value = folderXml.AttributeValue("value");
                            if (countMap.ContainsKey(value))
                                folderXml.SetAttributeValue("count", "(" + countMap[value] + ")");
                            else
                                folderXml.SetAttributeValue("count", "");
                        }
                    }
                    break;
                case MailWorker.Event.ClearSearch:
                    {
                        XElement folderXml = tree.SelectedItem as XElement;
                        if (folderXml == null)
                            return;
                        this.Dispatcher.BeginInvoke((Action)delegate
                        {
                            FolderChangedEvent(folderXml);
                        }, System.Windows.Threading.DispatcherPriority.ApplicationIdle);
                    }
                    break;
            }

            if (mail == null)
                return;

            if ("DSBOX" == mail.getString("folder") || "OUTBOX" == mail.getString("folder"))
            {
                XElement dsboxXml = sxml.XPathSelectElement("/mailbox/folder[@name='DSBOX']");
                string dsboxCount = FetchDsBoxMailCount();
                if (dsboxCount != "0,0")
                    dsboxXml.SetAttributeValue("count", "(" + dsboxCount + ")");
                else
                    dsboxXml.SetAttributeValue("count", "");
            }
        }
        private List<ASObject> getMultipleList(ASObject policy)
        {
            List<ASObject> multipleList = null;
            object distributors = policy.get("distributor");
            if (distributors != null && distributors is object[])
            {
                multipleList = new List<ASObject>();
                foreach (object o in (object[])distributors)
                {
                    if (o is ASObject)
                    {
                        multipleList.Add((ASObject)o);
                    }
                }
            }
            else if (distributors != null && distributors is List<ASObject>)
            {
                multipleList = new List<ASObject>();
                foreach (ASObject o in (List<ASObject>)distributors)
                {
                    multipleList.Add(o);
                }
            }

            return multipleList;
        }