// スレを選択する public async void SelectThread(string threadId) { Console.WriteLine("SelectThread: {0}", threadId); Thread = null; Message = null; foreach (var thread in Board.ThreadList) { if (thread.Id == threadId.ToInt()) { // thread.Reload(); Thread = thread; return; } } }
// 板を開く public async Task OpenBoardAsync(string boardUri) { try { Board = null; Thread = null; Message = null; var board = BoardGetter.GetBoardLoaded(boardUri); Board = board; } catch (Exception e) { var message = String.Format("板が開けません。{0}", e.Message); NotifyError(message, "エラー"); } }
void CreateNewThread(Message res, string threadTitle) { }
/// <summary> /// メッセージを投稿する。 /// </summary> /// <param name="msg">投稿するメッセージ</param> /// <param name="threadNumber">スレッド番号</param> public void Post(Message msg, int threadNumber) { var formData = new FormData(new Uri("http://jbbs.shitaraba.net/bbs/write.cgi/")); // write.cgiのパラメータ: // DIR=[板ジャンル]&BBS=[板番号]&TIME=[投稿時間]&NAME=[名前] // &MAIL=[メール]&MESSAGE=[本文]&KEY=[スレッド番号]&submit=書き込む formData.Fields["DIR"] = m_Category; formData.Fields["BBS"] = m_BoardNumber; formData.Fields["TIME"] = DateTime.Now.ToUnixTime().ToString(); formData.Fields["NAME"] = msg.Name; formData.Fields["MAIL"] = msg.Mail; formData.Fields["MESSAGE"] = msg.Body; formData.Fields["KEY"] = threadNumber.ToString(); formData.Fields["submit"] = "書き込む"; var response = formData.Submit(); // X-JBBS-Error ヘッダーがあった場合は、エラーが起こった。 if (response.Headers.Contains("X-JBBS-Error")) { string errorCode = "(不明)"; foreach (var header in response.Headers) { if (header.Key == "X-JBBS-Error") errorCode = header.Value.First(); } var message = String.Format("投稿に失敗しました。X-JBBS-Error: {0}", errorCode); throw new ApplicationException(message); } if (!response.IsSuccessStatusCode) throw new ApplicationException("投稿の送信に失敗しました。"); }
/// <summary> /// レスを表示するのに必要な時間を計算してミリ秒単位で返す。 /// </summary> private static int CalculateDisplayTime(Message Message) { Debug.Assert(Message != null); double charsPerSec = 11.6; // 7.25; string text = WebText.UnescapeHtml(Message.Body); double complexity = 0; char prevChar = '\0'; // これはたぶん絶対こない foreach (var c in text) { if (c != prevChar) { if (Char.IsLetter(c)) complexity += 0.5; else complexity += 1; } prevChar = c; } var estimated = (int) (complexity / charsPerSec * 1000); estimated = Math.Max(estimated, Settings.Default.MinimumDisplayTime); estimated = Math.Min(estimated, Settings.Default.MaximumDisplayTime); return estimated; }
public void Post(Message res, int threadNumber) { throw new ApplicationException("この種類の板に対する投稿は未実装です。"); }
public void PostNewMessage(Message msg) { _server.PostNewMessage(this, msg); }
public override void PostNewMessage(Thread b, Message msg) { return; }
public override void CreateNewThread(Board b, string title, Message msg) { return; }
public abstract void PostNewMessage(Thread b, Message msg);
public abstract void CreateNewThread(Board b, string title, Message msg);
public void CreateNewThread(string title, Message msg) { _server.CreateNewThread(this, title, msg); }
/// <summary> /// レスを選択する /// </summary> public void SelectMessage(string messageNumber) { foreach (var msg in Thread.MessageList) { if (msg.Number == messageNumber.ToInt()) { Message = msg; return; } } }
// レスを選択されたスレに投下する public void PostMessage(string name, string mail, string message) { // struct をフィルアップする。このやり方はあんまり良くないな var msg = new Message(-1, // レス番 name, // 投稿者名 mail, // メールアドレス null, // 投稿者ID null, // 日付 message); // メッセージ try { m_Board.Post(msg, Thread.Id); } catch (ApplicationException e) { NotifyError(e.Message, "エラー"); } }