private void IdBoxTextChanged(object sender, EventArgs e) { var isValid = true; try { var input = _idBox.Text; if (!string.IsNullOrEmpty(input)) { var janusProtocolInfo = JanusProtocolInfo.Parse(input); if (null != janusProtocolInfo && janusProtocolInfo.IsId) { MessageId = janusProtocolInfo.Id; } else { MessageId = int.Parse(input); } } else { isValid = false; } } catch { isValid = false; } _labelMessageIdIsText.Text = string.Format(SR.EnterTopicMessageIdForm.MessageIdIsTextFormat, MessageId); _labelMessageIdIsText.Visible = isValid; _okButton.Enabled = isValid; }
/// <summary> /// Хвост для ссылок (линк на внешний ресурс) на сообщения и информации /// о пользователе. Для остальных случаев возвращает пустую строку. /// </summary> /// <param name="provider"></param> /// <param name="linkType">Тип ссылки.</param> /// <param name="info">Информация о протоколе.</param> /// <returns>Хвост для ссылок.</returns> private static string GetPostfixImagePath( IServiceProvider provider, LinkType linkType, JanusProtocolInfo info) { if (info != null) { if (linkType == LinkType.Local) { return(GetMsgInDbLinkPostfix(provider, info.Id)); } if (linkType == LinkType.Absent) { return(GetMsgAbsentLinkLoadPostfix(provider, info.Id)); } if (info.ResourceType == JanusProtocolResourceType.UserInfo) { return(GetUserLinkPostfix(provider, info.Id)); } } return(string.Empty); }
protected override string GetImagePrefix() { //return JanusProtocolInfo.FormatURI(JanusProtocolResourceType.Image, // @"ForumImages" + JanusProtocolInfo.ProtocolSeparatorChar); return(JanusProtocolInfo.FormatURI(JanusProtocolResourceType.Formatter, String.Empty)); }
/// <summary> /// Пытается ивлечь информацию о протоколе из внешнего адреса, /// который представим в Rsdn@Home - "message" и "user-info". /// Функция возвращает <c>true</c> - если адрес распознан. /// </summary> /// <param name="url">Внешний адрес.</param> /// <param name="protocolInfo">В случае удачи - информация о протоколе, /// иначе - <c>null</c>.</param> /// <returns><c>true</c> - если адрес распознан.</returns> private static bool TryExternalUrlParse(string url, out JanusProtocolInfo protocolInfo) { #region Сообщение var match = _msgUrlDetectorRx.Match(url); if (!match.Success) { match = _msgUrlDetector2Rx.Match(url); } if (match.Success) { return(Make(JanusProtocolResourceType.Message, match.Groups["mid"].Value, url, out protocolInfo)); } #endregion #region ФАКУ match = _infoUrlDetectorRx.Match(url); if (!match.Success) { match = _infoUrlDetectorRx2.Match(url); } if (match.Success) { return(Make(JanusProtocolResourceType.Faq, match.Groups["name"].Value.Replace('/', '.'), url, out protocolInfo)); } #endregion #region Профиль пользователя match = _profileDetectorRx.Match(url); if (!match.Success) { match = _profileDetector2Rx.Match(url); } if (match.Success) { return(Make(JanusProtocolResourceType.UserInfo, match.Groups["uid"].Value, url, out protocolInfo)); } #endregion // ничего не найдено protocolInfo = null; return(false); }
private int?GetActiveMessageId() { var info = JanusProtocolInfo.Parse(_browserFormService.Url); return(info != null && info.ResourceType == JanusProtocolResourceType.Message && info.IsId ? (int?)info.Id : null); }
private static bool Make( JanusProtocolResourceType resourceType, string parameters, string url, out JanusProtocolInfo protocolInfo) { protocolInfo = new JanusProtocolInfo(resourceType, parameters, url); return(true); }
public static string GetUserProfileUrl(int userId) { return(JanusProtocolInfo.FormatExternalURI( JanusProtocolResourceType.UserInfo, userId.ToString())); //return String.Format("{0}/Users/Profile.aspx?uid={1}", // SiteUrlHelper.RsdnServerUrl, // userID); }
public string GetImageUri(string name, StyleImageType imageType) { var si = GetStyleImage(name, imageType); return (si == null ? null : JanusProtocolInfo.FormatURI(JanusProtocolResourceType.Image, si.GetUri(Thread.CurrentThread.CurrentUICulture) .Replace( Path.DirectorySeparatorChar, JanusProtocolInfo.ProtocolSeparatorChar))); }
private void FormatterEventHandler(object sender, JanusProtocolEventArgs e) { using (var resr = Formatter.ResourceProvider.ReadResource(e.Parameters)) { if (resr.Binary) { e.Response = new Resource(resr.GetContentType(), (byte[])resr.Read()); } else { var prx = JanusProtocolInfo.FormatURI(JanusProtocolResourceType.Formatter, String.Empty); var src = ((String)resr.Read()).Replace("%URL%", prx); e.Response = new Resource(resr.GetContentType(), src); } } }
private static bool TryJanusUrlParse(string url, out JanusProtocolInfo protocolInfo) { var match = _resourceInfoRegex.Match(url); if (match.Success) { var resource = match.Groups["resource"].Value.ToLower(); var parameters = match.Groups["parameters"].Value; JanusProtocolResourceType resourceType; if (_resourceTypes.TryGetValue(resource, out resourceType)) { return(Make(resourceType, parameters, url, out protocolInfo)); } } protocolInfo = null; return(false); }
internal EnterTopicMessageIdForm() { InitializeComponent(); // Попытаться извлечь дефолтный номер сообщения из буфера обмена. var dto = Clipboard.GetDataObject(); if (dto != null) { if (dto.GetDataPresent(DataFormats.Text)) { var data = (string)dto.GetData(DataFormats.Text); var info = JanusProtocolInfo.Parse(data); if (info != null && info.ResourceType == JanusProtocolResourceType.Message && info.IsId) { _idBox.Text = data; } } } }
private string ProcessUrlInternal(string url, string text) { if (url == null) { throw new ArgumentNullException("url"); } if (text == null) { throw new ArgumentNullException("text"); } var info = JanusProtocolInfo.Parse(url); string title; string imageUrl; LinkType linkType; if (info != null && info.ResourceType == JanusProtocolResourceType.Faq) { return(ProcessRsdnLinkInternal(_provider, info.Parameters, text)); } url = RefineUrl(info, out imageUrl, out title, out linkType) ?? url; if (linkType == LinkType.External) { imageUrl = RefineImageForWellKnownUrls(_provider, url) ?? imageUrl; } const string format = "<a class='m' href='{0}{1}' title='{5}'><img border='0' align='absbottom' src='{3}' style='margin-bottom:1px;margin-right: 2px;'></a>" + "<a class='m' href='{0}{1}' title='{5}'>{2}</a>{4}"; return(string.Format(format, ParseUrl(url).Groups["scheme"].Success ? "" : "http://", url.EncodeAgainstXSS(), text, imageUrl, GetPostfixImagePath(_provider, linkType, info), string.IsNullOrEmpty(title) ? url : title)); }
private void MessageBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e) { if (!_blockExternalNavigation) { var protocolInfo = JanusProtocolInfo.Parse(e.Url.ToString()); var linkType = protocolInfo == null ? LinkType.External : protocolInfo.LinkType; var obManager = _serviceManager.GetRequiredService <IOutboxManager>(); var manager = ApplicationManager.Instance; switch (linkType) { case LinkType.Local: Debug.Assert(protocolInfo != null); if (protocolInfo.ResourceType == JanusProtocolResourceType.Message) { manager.ForumNavigator.SelectMessage(protocolInfo.Id); } else { manager.ForumNavigator.SelectMessage(protocolInfo.Parameters); } break; case LinkType.Absent: Debug.Assert(protocolInfo != null); obManager.AddTopicForDownloadWithConfirm(protocolInfo.Id); e.Cancel = true; break; case LinkType.External: _serviceManager.OpenUrlInBrowser(e.Url.OriginalString); e.Cancel = true; break; } } _blockExternalNavigation = false; }
/// <summary> /// Распределяет запросы протокола по обработчикам. /// </summary> /// <param name="uri">Путь запроса.</param> /// <returns>Результат обработки запроса.</returns> public Resource DispatchRequest(string uri) { try { var info = JanusProtocolInfo.Parse(uri); var resource = info != null ? info.ResourceName : uri; if (!_handlers.ContainsKey(resource)) { throw new ArgumentException(string.Format(SR.ResourceNotFound, resource)); } System.Diagnostics.Debug.Assert(info != null); var jpea = new JanusProtocolEventArgs(info.Parameters); _handlers[resource](this, jpea); return(jpea.Response); } catch (Exception e) { return(new Resource(_mimeTypeHtml, HtmlPageBuilder.GetExceptionMessage(uri, e))); } }
private static bool TryJanusUrlParse(string url, out JanusProtocolInfo protocolInfo) { var match = _resourceInfoRegex.Match(url); if (match.Success) { var resource = match.Groups["resource"].Value.ToLower(); var parameters = match.Groups["parameters"].Value; JanusProtocolResourceType resourceType; if (_resourceTypes.TryGetValue(resource, out resourceType)) return Make(resourceType, parameters, url, out protocolInfo); } protocolInfo = null; return false; }
/// <summary> /// Пытается ивлечь информацию о протоколе из внешнего адреса, /// который представим в Rsdn@Home - "message" и "user-info". /// Функция возвращает <c>true</c> - если адрес распознан. /// </summary> /// <param name="url">Внешний адрес.</param> /// <param name="protocolInfo">В случае удачи - информация о протоколе, /// иначе - <c>null</c>.</param> /// <returns><c>true</c> - если адрес распознан.</returns> private static bool TryExternalUrlParse(string url, out JanusProtocolInfo protocolInfo) { #region Сообщение var match = _msgUrlDetectorRx.Match(url); if (!match.Success) match = _msgUrlDetector2Rx.Match(url); if (match.Success) return Make(JanusProtocolResourceType.Message, match.Groups["mid"].Value, url, out protocolInfo); #endregion #region ФАКУ match = _infoUrlDetectorRx.Match(url); if (!match.Success) match = _infoUrlDetectorRx2.Match(url); if (match.Success) return Make(JanusProtocolResourceType.Faq, match.Groups["name"].Value.Replace('/', '.'), url, out protocolInfo); #endregion #region Профиль пользователя match = _profileDetectorRx.Match(url); if (!match.Success) match = _profileDetector2Rx.Match(url); if (match.Success) return Make(JanusProtocolResourceType.UserInfo, match.Groups["uid"].Value, url, out protocolInfo); #endregion // ничего не найдено protocolInfo = null; return false; }
private static bool Make( JanusProtocolResourceType resourceType, string parameters, string url, out JanusProtocolInfo protocolInfo) { protocolInfo = new JanusProtocolInfo(resourceType, parameters, url); return true; }
/// <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); }
/// <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; }
/// <summary> /// Хвост для ссылок (линк на внешний ресурс) на сообщения и информации /// о пользователе. Для остальных случаев возвращает пустую строку. /// </summary> /// <param name="provider"></param> /// <param name="linkType">Тип ссылки.</param> /// <param name="info">Информация о протоколе.</param> /// <returns>Хвост для ссылок.</returns> private static string GetPostfixImagePath( IServiceProvider provider, LinkType linkType, JanusProtocolInfo info) { if (info != null) { if (linkType == LinkType.Local) return GetMsgInDbLinkPostfix(provider, info.Id); if (linkType == LinkType.Absent) return GetMsgAbsentLinkLoadPostfix(provider, info.Id); if (info.ResourceType == JanusProtocolResourceType.UserInfo) return GetUserLinkPostfix(provider, info.Id); } return string.Empty; }
/// <summary> /// Получить внешний формат ссылки для соответствующего ресурса. /// <seealso cref="SiteUrlHelper"/> /// </summary> /// <param name="resourceType">Тип ресурса.</param> /// <param name="parameters">Параметр ссылки.</param> /// <returns>Внешний формат ссылки на ресурс.</returns> public static string FormatExternalURI(JanusProtocolResourceType resourceType, string parameters) { return(JanusProtocolInfo .FormatExternalURI(resourceType, parameters)); }
public string FormatUserInfoURI(string parameters) { return(JanusProtocolInfo.FormatURI( JanusProtocolResourceType.UserInfo, parameters)); }
public string FormatMessageRateURI(string parameters) { return(JanusProtocolInfo.FormatURI( JanusProtocolResourceType.MessageRate, parameters)); }
public static string GetInfoUrl(string name) { return(JanusProtocolInfo .FormatExternalURI(JanusProtocolResourceType.Faq, name)); }
public static string GetMessageUrl(int messageId) { return(JanusProtocolInfo.FormatExternalURI( JanusProtocolResourceType.Message, messageId.ToString())); }