예제 #1
0
        // スレを選択する
        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;
                }
            }
        }
예제 #2
0
        // 板を開く
        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, "エラー");
            }
        }
예제 #3
0
 void CreateNewThread(Message res, string threadTitle)
 {
 }
예제 #4
0
        /// <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("投稿の送信に失敗しました。");
        }
예제 #5
0
        /// <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;
        }
예제 #6
0
 public void Post(Message res, int threadNumber)
 {
     throw new ApplicationException("この種類の板に対する投稿は未実装です。");
 }
예제 #7
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public void PostNewMessage(Message msg)
 {
     _server.PostNewMessage(this, msg);
 }
예제 #8
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public override void PostNewMessage(Thread b, Message msg)
 {
     return;
 }
예제 #9
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public override void CreateNewThread(Board b, string title, Message msg)
 {
     return;
 }
예제 #10
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public abstract void PostNewMessage(Thread b, Message msg);
예제 #11
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public abstract void CreateNewThread(Board b, string title, Message msg);
예제 #12
0
파일: Bbs.cs 프로젝트: plonk/Jimaku2
 public void CreateNewThread(string title, Message msg)
 {
     _server.CreateNewThread(this, title, msg);
 }
예제 #13
0
 /// <summary>
 /// レスを選択する
 /// </summary>
 public void SelectMessage(string messageNumber)
 {
     foreach (var msg in Thread.MessageList)
     {
         if (msg.Number == messageNumber.ToInt())
         {
             Message = msg;
             return;
         }
     }
 }
예제 #14
0
 // レスを選択されたスレに投下する
 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, "エラー");
     }
 }