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); }
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); }