public string GetMessageRate(int mid) { using (var db = _dbManager.CreateDBContext()) { var rates = db .Rates(r => r.MessageID == mid) .OrderByDescending(r => r.Date) .Select( (r, i) => FormatRateItemWithDate( r.RateType, r.Multiplier, r.Message.ServerForum.InTop, r.UserID, r.User.UserClass, r.User.DisplayName(), r.Date, i % 2 == 0)) .JoinStrings(Environment.NewLine); var res = db .Message( mid, m => string.Format( GetStringTemplate(_templateMessageRatelist), FormatAuthor(m.UserID, m.UserClass, m.UserNick, false), FormatDate(m.Date), FormatSubject( m.ID, m.Subject, m.IsRead, m.IsMarked, m.ArticleId, true), FormatRateSummary( m.ID, m.Rating(), m.SmileCount(), m.AgreeCount(), m.DisagreeCount()), rates)); return(res); } }
public static XmlMessage BuildMessage( IServiceProvider provider, IJanusDatabaseManager dbMgr, int mid, [CanBeNull] Func<string, string> sourceFormatter) { using (var db = dbMgr.CreateDBContext()) { var msg = db .Message( mid, m => new { m.UserID, m.UserClass, UserNick = m.UserNick.ToUserDisplayName(m.UserClass), m.Date, m.IsRead, m.IsMarked, m.ArticleId, m.Name, m.Subject, m.Message, m.User.Origin, Rating = m.Rating(), Smiles = m.SmileCount(), Agrees = m.AgreeCount(), Disagrees = m.DisagreeCount(), PenaltyType = m.Violation != null ? m.Violation.PenaltyType : 0, Reason = m.Violation != null ? m.Violation.Reason : null, ViolationDate = m.Violation != null ? (DateTime?)m.Violation.Create : null }); var body = sourceFormatter != null ? sourceFormatter(msg.Message) : msg.Message; var formatter = provider.GetFormatter(); var dateFormat = Config.Instance.ForumDisplayConfig.DateFormat; var xmlMessage = new XmlMessage { FormattingOptions = { ShowHeader = Config.Instance.ForumDisplayConfig.Envelope.ShowHeader, ShowRateFrame = Config.Instance.ForumDisplayConfig.Envelope.ShowRateFrame }, ID = mid, Author = { ID = msg.UserID, UserClass = (int)msg.UserClass, DisplayName = msg.UserNick }, Date = { Value = msg.Date.ToString(dateFormat), IsOutdate = DateTime.Now.AddDays(-Config.Instance.ForumDisplayConfig.DaysToOutdate) > msg.Date && Config.Instance.ForumDisplayConfig.DaysToOutdate != 0, DayOfWeek = Convert.ToInt32(msg.Date.DayOfWeek) }, IsUnread = !msg.IsRead, IsMarked = msg.IsMarked, ArticleID = msg.ArticleId.GetValueOrDefault(), Name = msg.Name, Subject = msg.Subject, Content = formatter.Format(body, true), Origin = formatter.Format(msg.Origin, true), Rate = {Summary = JanusFormatMessage.FormatRates(msg.Rating, msg.Smiles, msg.Agrees, msg.Disagrees)}, ViolationPenaltyType = (int) msg.PenaltyType, ViolationReason = msg.Reason.IsNullOrEmpty() ? null : msg.ViolationDate.GetValueOrDefault().ToString(dateFormat) + " " + msg.Reason }; if (Config.Instance.ForumDisplayConfig.Envelope.ShowRateFrame) { var rateList = db .Rates(r => r.MessageID == mid) .OrderByDescending(r => r.Date) .Select( r => new { r.RateType, r.Multiplier, r.Message.ServerForum.InTop, r.UserID, r.User.UserClass, DisplayName = r.User.DisplayName() }); foreach (var rate in rateList) { var rateItem = new XmlMessage.MessageRateItem(); var rateString = string.Empty; var intType = (int)rate.RateType; if (intType > 0) rateString = (rate.Multiplier*intType).ToString(); rateItem.Value = rateString; rateItem.ForumInTop = rate.InTop; rateItem.Type = (int)rate.RateType; rateItem.Author.ID = rate.UserID; rateItem.Author.UserClass = (int)rate.UserClass; rateItem.Author.DisplayName = rate.DisplayName; xmlMessage.Rate.List.Add(rateItem); } } return xmlMessage; } }
// TODO: Intensive refactoring required! private void LoadData() //FillForums { using (_dbManager.GetLock().GetWriterLock()) using (var db = _dbManager.CreateDBContext()) { if (BeforeLoadData != null) { BeforeLoadData(this, EventArgs.Empty); } var newLiveBehs = new List <IDisposable>(); var newIdHash = new Dictionary <int, Forum>(); //var forums = _dbManager.GetAccessor<IForumDataAccessor>().GetSubscribedForumList(); var forums = LoadSubscribedForums(db); foreach (var forum in forums) { forum._parent = this; newLiveBehs.Add(forum.ActivateLiveBehavior()); newIdHash[forum.ID] = forum; } var list = LoadServerForums(db); var unsubscribedForums = new List <Forum>(); foreach (var forum in list) { if (newIdHash.ContainsKey(forum.ID)) { continue; } newLiveBehs.Add(forum.ActivateLiveBehavior()); unsubscribedForums.Add(forum); newIdHash.Add(forum.ID, forum); } var oldForums = new List <Forum>(_unsubscribedFolder.Cast <Forum>()); if (ForumList != null) { oldForums.AddRange(ForumList); } ForumList = forums.ToArray(); _unsubscribedFolder.Clear(); foreach (var forum in unsubscribedForums) { _unsubscribedFolder.Add(forum); } _forumsIdHash = newIdHash; if (_forumLiveBehaviors != null) { _forumLiveBehaviors.DisposeAll(); } _forumLiveBehaviors = newLiveBehs; } }
public static XmlMessage BuildMessage( IServiceProvider provider, IJanusDatabaseManager dbMgr, int mid, [CanBeNull] Func <string, string> sourceFormatter) { using (var db = dbMgr.CreateDBContext()) { var msg = db .Message( mid, m => new { m.UserID, m.UserClass, UserNick = m.UserNick.ToUserDisplayName(m.UserClass), m.Date, m.IsRead, m.IsMarked, m.ArticleId, m.Name, m.Subject, m.Message, m.User.Origin, Rating = m.Rating(), Smiles = m.SmileCount(), Agrees = m.AgreeCount(), Disagrees = m.DisagreeCount(), PenaltyType = m.Violation != null ? m.Violation.PenaltyType : 0, Reason = m.Violation != null ? m.Violation.Reason : null, ViolationDate = m.Violation != null ? (DateTime?)m.Violation.Create : null }); var body = sourceFormatter != null?sourceFormatter(msg.Message) : msg.Message; var formatter = provider.GetFormatter(); var dateFormat = Config.Instance.ForumDisplayConfig.DateFormat; var xmlMessage = new XmlMessage { FormattingOptions = { ShowHeader = Config.Instance.ForumDisplayConfig.Envelope.ShowHeader, ShowRateFrame = Config.Instance.ForumDisplayConfig.Envelope.ShowRateFrame }, ID = mid, Author = { ID = msg.UserID, UserClass = (int)msg.UserClass, DisplayName = msg.UserNick }, Date = { Value = msg.Date.ToString(dateFormat), IsOutdate = DateTime.Now.AddDays(-Config.Instance.ForumDisplayConfig.DaysToOutdate) > msg.Date && Config.Instance.ForumDisplayConfig.DaysToOutdate != 0, DayOfWeek = Convert.ToInt32(msg.Date.DayOfWeek) }, IsUnread = !msg.IsRead, IsMarked = msg.IsMarked, ArticleID = msg.ArticleId.GetValueOrDefault(), Name = msg.Name, Subject = msg.Subject, Content = formatter.Format(body, true), Origin = formatter.Format(msg.Origin, true), Rate = { Summary = JanusFormatMessage.FormatRates(msg.Rating, msg.Smiles, msg.Agrees, msg.Disagrees) }, ViolationPenaltyType = (int)msg.PenaltyType, ViolationReason = msg.Reason.IsNullOrEmpty() ? null : msg.ViolationDate.GetValueOrDefault().ToString(dateFormat) + " " + msg.Reason }; if (Config.Instance.ForumDisplayConfig.Envelope.ShowRateFrame) { var rateList = db .Rates(r => r.MessageID == mid) .OrderByDescending(r => r.Date) .Select( r => new { r.RateType, r.Multiplier, r.Message.ServerForum.InTop, r.UserID, r.User.UserClass, DisplayName = r.User.DisplayName() }); foreach (var rate in rateList) { var rateItem = new XmlMessage.MessageRateItem(); var rateString = string.Empty; var intType = (int)rate.RateType; if (intType > 0) { rateString = (rate.Multiplier * intType).ToString(); } rateItem.Value = rateString; rateItem.ForumInTop = rate.InTop; rateItem.Type = (int)rate.RateType; rateItem.Author.ID = rate.UserID; rateItem.Author.UserClass = (int)rate.UserClass; rateItem.Author.DisplayName = rate.DisplayName; xmlMessage.Rate.List.Add(rateItem); } } return(xmlMessage); } }
/// <summary> /// Возвращает в случае возможности линк на внутренний ресурс /// (message, user-info), иначе - оригинальный линк. /// Если <paramref name="protocolInfo"/> /// есть <c>null</c>, то функция возвращает <c>null</c>. /// </summary> /// <param name="protocolInfo">Информация о протоколе /// <see cref="Rsdn.Janus.JanusProtocolInfo"/>.</param> /// <param name="imageUrl">Ссылка на иконку адреса.</param> /// <param name="title">Всплывающая подсказка (тултип).</param> /// <param name="linkType">Тип ссылки <see cref="Rsdn.Janus.LinkType"/>.</param> /// <returns> /// В случае возможности линк на внутренний ресурс /// (message, user-info), иначе - оригинальный линк. /// Если <paramref name="protocolInfo"/> /// есть <c>null</c>, то результатом тоже будет <c>null</c>. /// </returns> private string RefineUrl( JanusProtocolInfo protocolInfo, out string imageUrl, out string title, out LinkType linkType) { title = string.Empty; linkType = LinkType.External; imageUrl = GetImageUri(_provider, @"ForumImages\webref", StyleImageType.ConstSize); if (protocolInfo == null) { return(null); } switch (protocolInfo.ResourceType) { case JanusProtocolResourceType.Message: case JanusProtocolResourceType.MessageAbsent: using (var db = _dbManager.CreateDBContext()) { if (!protocolInfo.IsId) { return(protocolInfo.OriginalUrl); } var msg = db .Message( protocolInfo.Id, m => new { m.IsRead, m.IsMarked, m.ArticleId, m.Subject, m.UserNick, m.Date }); // сообщение не найдено if (msg == null) { title = SR.MessageAbsent; linkType = LinkType.Absent; imageUrl = GetImageUri(_provider, "MsgNotInDb", StyleImageType.ConstSize); return(protocolInfo.OriginalUrl); } // сообщение найдено title = FormatMsgLinkTitle(msg.Subject, msg.Date, msg.UserNick); linkType = LinkType.Local; imageUrl = GetMessageImagePath( _provider, msg.IsRead, msg.IsMarked, msg.ArticleId > 0); } return(protocolInfo.Url); case JanusProtocolResourceType.UserInfo: using (var db = _dbManager.CreateDBContext()) { var user = protocolInfo.IsId ? db.User( protocolInfo.Id, u => new { u.UserClass, DisplayName = u.DisplayName() }) : null; if (user == null) { title = SR.UserInfoMissed; imageUrl = GetImageUri(_provider, "UserNotInDb", StyleImageType.ConstSize); return(protocolInfo.OriginalUrl); } imageUrl = GetUserImagePath(_provider, user.UserClass); title = user.DisplayName; } return(protocolInfo.Url); default: imageUrl = GetResourceImagePath(_provider, protocolInfo.ResourceType); break; } return(protocolInfo.OriginalUrl); }