Пример #1
0
        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);
            }
        }
Пример #2
0
		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;
			}
		}
Пример #3
0
        // 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;
                }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        /// <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);
        }