📄 topic.cs
字号:
return;
}
this.Html = TransformHtml(strHTML);
DelegateFunc.OnShowTopics(this.Id);
}
finally
{
this.blnInShow = false;
}
}
#endregion Show Topic
#region Post Topic
private bool blnInPost;
private string _PostData;
/// <summary>
/// 回帖
/// </summary>
/// <param name="strPostData"></param>
/// <param name="blnUseSign"></param>
/// <returns></returns>
public void Post(string strPostData, bool blnUseSign)
{
if (this.blnInPost)
{
return;
}
if (blnUseSign && Setting.Signature.Length != 0)
{
strPostData = strPostData + "\r\n \r\n" + Setting.Signature;
}
_PostData = strPostData;
DelegateFunc.OnRefreshInfo("正在发出回复");
if (StartPostEvent != null)
{
StartPostEvent();
}
blnInPost = true;
HttpWebRequest webRequest = WEBFunc.CreateWebRequest("http://topic.csdn.net/" + this.Id);
WEBFunc.Get(webRequest, new RequestCompleteCallback(this.StartPostRequestComplete), new ExceptionCallback(this.PostRequestException), new StartDownloadCallback(StartPost), RequestStatePriority.PostTopic);
}
private bool StartPost()
{
return true;
}
private void StartPostRequestComplete(byte[] dataBuffer)
{
WorkerFunc.AddWorkerTask(new LoadHtmlDelegate(this.StartPostProc),WorkPriority.PostTopic, new object[] { dataBuffer });
}
private void StartPostProc(byte[] dataBuffer)
{
string strHTML = Variant.encoding.GetString(dataBuffer);
string strURL = String.Format("http://forum.csdn.net/PointForum/Forum/ReplyTopic.aspx?forumID={0}&topicID={1}&postDate={2}"
, this.forumID, this.topicID, this.topicdate.IndexOf("%3a") > 0 ? this.topicdate : HttpUtility.UrlEncode(this.topicdate)
);
if (strHTML.IndexOf("请登录或者注册") > 0)
{
Variant.CurrentUser.Name = string.Empty;
PostedEvent(false );
return ;
}
string __VIEWSTATE = System.Web.HttpUtility.UrlEncode(RegexFunc.GetMatch(strHTML, "id=\"__VIEWSTATE\" value=\"(?<VIEWSTATE>.*?)\""));
string __EVENTVALIDATION = System.Web.HttpUtility.UrlEncode(RegexFunc.GetMatch(strHTML, "id=\"__EVENTVALIDATION\" value=\"(?<VIEWSTATE>.*?)\""));
//回复的格式
_PostData = String.Format("__VIEWSTATE={0}&tb_ReplyBody%24_%24Editor={1}&bt_Submit=%E6%8F%90%E4%BA%A4%E5%9B%9E%E5%A4%8D"
, __VIEWSTATE
, HttpUtility.UrlEncode(_PostData, Variant.encoding)
);
HttpWebRequest webRequest = WEBFunc.CreateWebRequest(strURL, strURL, _PostData,null);
WEBFunc.Get(webRequest, new RequestCompleteCallback(this.PostRequestComplete), new ExceptionCallback(this.PostRequestException), null, RequestStatePriority.PostTopic );
}
private void PostRequestComplete(byte[] dataBuffer)
{
WorkerFunc.AddWorkerTask(new LoadHtmlDelegate(this.PostProc),WorkPriority.PostTopic, new object[] { dataBuffer });
}
private void PostRequestException(Exception e)
{
try
{
ShowWarningEvent(e.Message );
}
finally
{
if (PostedEvent != null)
{
PostedEvent(false);
}
this.blnInPost = false;
}
}
private void PostProc(byte[] dataBuffer)
{
bool blnPosted = false;
try
{
string strHTML = Variant.encoding.GetString(dataBuffer);
string strAlert = RegexFunc.GetMatch(strHTML, "<span class=\"error\">(.*)</span>");
if (strAlert.Length != 0)
{
ShowWarningEvent(strAlert);
PostedEvent(blnPosted);
return ;
}
this.HaveReplied = true;
int intSleep;
int.TryParse(RegexFunc.GetMatch(strHTML, @"(\d+)秒钟后"), out intSleep);
if (intSleep <= 0)
{
intSleep = 3;
}
Thread.Sleep(1000 * (intSleep + 1));
this.Room.CheckTopicExist(this);
DelegateFunc.OnShowTopics(this.topicID);
blnPosted = true;
}
finally
{
if (PostedEvent != null)
{
PostedEvent(blnPosted);
}
this.blnInPost = false;
}
}
#endregion Post Topic
/// <summary>
/// 过滤帖子
/// </summary>
/// <returns></returns>
public bool Filter()
{
//总显示本人回复的
if (Setting.ShowRepliedTopic && (this.HaveReplied || (Variant.CurrentUser != null && this.Name.IndexOf(Variant.CurrentUser.Name) > 0)))
{
return true;
}
//显示新贴
if (Setting.ShowNewTopic && Convert.ToInt32(this.Replies) == 0 && Convert.ToInt32(this.Point) > 0)
{
return true;
}
//总是显示大分贴
////if (Setting.ShowMaxPoint && ((Convert.ToInt32(this.Replies) <= 10 && Convert.ToInt32(this.Point) >= 100) || this.Room.Name.IndexOf("已解决")>0 ))
////{
//// return true;
////}
//已解决
if (this.Room.Name.IndexOf("已解决") > 0)
{
return true;
}
//最小分数
if (Setting.MinTopicPoint > 0 && Convert.ToInt32(this.Point) < Setting.MinTopicPoint)
{
return false;
}
//最大回复次数
if (Setting.MaxTopicReplies > 0 && Convert.ToInt32(this.Replies) > Setting.MaxTopicReplies)
{
return false;
}
return true;
}
/// <summary>
/// 判断是否存在
/// </summary>
/// <param name="Topics"></param>
/// <returns></returns>
public Topic Contains(IList<Topic> Topics)
{
foreach (Topic t in Topics)
{
if (this.Id == t.Id)
{
return t;
}
}
return null;
}
/// <summary>
/// 更新帖子的信息
/// </summary>
/// <param name="newTopic"></param>
/// <returns></returns>
public bool UpdateTopic(Topic newTopic)
{
this.ReplyTime = newTopic.ReplyTime;
this.ReplyUser = newTopic.ReplyUser;
this.Replies = newTopic.Replies;
if (this.HaveRead) this.ReadAgain = true;
this.HaveRead = false;
return true;
}
private static string TransformHtml(string strOrgHtml)
{
string strHTML = RegexFunc.Replace(strOrgHtml, "href=\"/", "href=\"http://topic.csdn.net/");
strHTML = RegexFunc.Replace(strHTML, "href='/", "href='http://topic.csdn.net/");
strHTML = RegexFunc.Replace(strHTML, "src=\"/", "src=\"http://topic.csdn.net/");
strHTML = RegexFunc.Replace(strHTML, "src='/", "src='http://topic.csdn.net/");
strHTML = RegexFunc.Replace(strHTML, "onmouseover=\"[^<]*\"", "");
strHTML = RegexFunc.Replace(strHTML, "<div[^<]*id=\"CSDNPHL\">.*?</div[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<div[^<]*id=\"navbar\"[^<]*>.*?</div[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<div[^<]*id=\"pagefunc\"[^<]*>.*?</div[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<div[^<]*class=\"float_left\"[^<]*>.*?</div[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<select[^<]*>.*?</select[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<input[^<]*type=\"button\"[^<]*>", " ");
strHTML = RegexFunc.Replace(strHTML, "<span[^<]*csdnid=\"EndOfReplyList\".*?</body", "</body");
int i = strHTML.IndexOf("<body", StringComparison.CurrentCultureIgnoreCase);
if (i > 0)
{
i = strHTML.IndexOf(">", i);
if (i > 0)
{
int j = strHTML.IndexOf("UserCard.ashx", i, StringComparison.CurrentCultureIgnoreCase);
if (j > 0)
{
j = strHTML.IndexOf(">", j);
if (j > 0)
{
strHTML = strHTML.Substring(0, i + 1) + strHTML.Substring(j + 1);
}
}
}
}
return strHTML;
}
public Topic Clone()
{
Topic t = new Topic(this.Room, this.Id, this.Name, this.User, this.Point, this.Replies, this.ReplyUser, this.ReplyTime, this.forumID, this.topicID, this.topicdate);
t.HaveRead = this.HaveRead;
t.HaveReplied = this.HaveReplied;
t.Html = this.Html;
t.Id = this.Id;
t.Name = this.Name;
t.Point = this.Point;
t.ReadAgain = this.ReadAgain;
t.RecID = this.RecID;
t.Replies = this.Replies;
t.ReplyUser = this.ReplyUser;
t.ReplyTime = this.ReplyTime;
//t.Room = this.Room ;
t.TabPage = this.TabPage;
t.User = this.User;
return t;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -