示例#1
0
文件: ConfTopic.cs 项目: dzakic/Sezam
        public static Sezam.Data.EF.ConfTopic ToEFTopic(this ConfTopic zbbTopic)
        {
            var topic = new Sezam.Data.EF.ConfTopic
            {
                Name    = zbbTopic.Name,
                TopicNo = zbbTopic.TopicNo
            };

            if (zbbTopic.IsDeleted)
            {
                topic.Status |= Sezam.Data.EF.ConfTopic.TopicStatus.Deleted;
            }
            if (zbbTopic.IsReadOnly)
            {
                topic.Status |= Sezam.Data.EF.ConfTopic.TopicStatus.ReadOnly;
            }
            zbbTopic.EFTopic = topic;
            return(topic);
        }
示例#2
0
        public static Sezam.Data.EF.Conference ToEFConf(this ZBB.ConferenceVolume zbbconf, Sezam.Data.EF.Conference conf = null)
        {
            if (conf == null)
            {
                conf = new Sezam.Data.EF.Conference();
            }

            conf.Name     = zbbconf.NameOnly;
            conf.VolumeNo = zbbconf.VolumeNumber;

            // Copy topics
            foreach (var zbbtopic in zbbconf.Topics.Where(t => t.Exists()))
            {
                var topic = zbbtopic.ToEFTopic();
                topic.Conference = conf;
                conf.ConfTopics.Add(topic);
            }

            // Fix reference
            foreach (var zbbtopic in zbbconf.Topics.Where(t => t.Exists()))
            {
                var topic = zbbtopic.EFTopic;
                if (topic == null)
                {
                    // topic deleted, empty
                }

                if (zbbtopic.RedirectTo > 0)
                {
                    if (zbbtopic.RedirectTo <= ZBB.ConferenceVolume.MaxTopics)
                    {
                        topic.RedirectTo = zbbtopic.conf.Topics[zbbtopic.RedirectTo - 1].EFTopic;
                    }
                    else
                    {
                        Debug.WriteLine("Invalid RedirectTo {0}", zbbtopic.RedirectTo);
                    }
                }
            }

            Debug.WriteLine("Reading messages...");
            Sezam.Data.EF.ConfTopic unknownTopic = null;
            foreach (var zbbConfMsg in zbbconf.Messages)
            {
                var msg = zbbConfMsg.ToEFConfMessage();
                if (msg.Topic == null || msg.MsgNo == 0)
                {
                    if (unknownTopic == null)
                    {
                        unknownTopic = new Sezam.Data.EF.ConfTopic
                        {
                            Name    = "unknown",
                            TopicNo = ZBB.ConferenceVolume.MaxTopics + 1,
                            Status  =
                                Sezam.Data.EF.ConfTopic.TopicStatus.Deleted |
                                Sezam.Data.EF.ConfTopic.TopicStatus.Private
                        };
                        conf.ConfTopics.Add(unknownTopic);
                    }
                    msg.Topic = unknownTopic;
                }
                msg.Topic.NextSequence++;
                msg.MsgNo = msg.Topic.NextSequence;
                msg.Topic.Messages.Add(msg);
            }

            conf.FromDate = zbbconf.GetOldestMessage()?.Time;
            conf.ToDate   = zbbconf.GetNewestMessage()?.Time;

            if (zbbconf.Messages.Count == 0)
            {
                conf.Status |= Sezam.Data.EF.ConfStatus.Private;
            }

            if (zbbconf.IsAnonymousAllowed)
            {
                conf.Status |= Sezam.Data.EF.ConfStatus.AnonymousAllowed;
            }

            if (zbbconf.IsClosed)
            {
                conf.Status |= Sezam.Data.EF.ConfStatus.Closed;
            }

            if (zbbconf.IsPrivate)
            {
                conf.Status |= Sezam.Data.EF.ConfStatus.Private;
            }

            if (zbbconf.IsReadOnly)
            {
                conf.Status |= Sezam.Data.EF.ConfStatus.ReadOnly;
            }

            foreach (var t in conf.ConfTopics)
            {
                Console.WriteLine("Topic [{0,2}] {1}:{2} - {3}", t.TopicNo, conf.Name, t.Name, t.Messages.Count);
            }

            zbbconf.EFConference = conf;
            return(conf);
        }