コード例 #1
0
        public UpdateThreadCommand(OperationBbs operationBbs)
        {
            Logger.Instance.DebugFormat("UpdateThreadCommand");
            this.operationBbs = operationBbs;

            // キャンセル可能
            worker.WorkerSupportsCancellation = true;
            worker.DoWork             += (sender, e) => e.Result = UpdateDocumentText();
            worker.RunWorkerCompleted += (sender, e) =>
            {
                Logger.Instance.Debug("UpdateThreadCommandWorker.RunWorkerCompleted");
                if ((e.Error != null) || e.Cancelled)
                {
                    Logger.Instance.Debug("RunWorkerCompleted Cancell");
                    return;
                }

                DocumentText = e.Result as string;

                // 更新があった時だけ通知
                if (DocumentText != beforeDocumentText)
                {
                    try
                    {
                        Logger.Instance.Debug("PropertyChangedEventArgs(DocumentText)");
                        PropertyChanged(this, new PropertyChangedEventArgs("DocumentText"));
                    }
                    catch (Exception exception)
                    {
                        Logger.Instance.ErrorFormat("UpdateThreadCommandError : {0} {1}", exception.Message, exception.StackTrace);
                    }
                }
                beforeDocumentText = DocumentText;
            };
        }
コード例 #2
0
 /// <summary>
 /// 特殊文字列の置換
 /// </summary>
 private string ReplaceData(string documentText, OperationBbs operationBbs)
 {
     return(documentText
            .Replace("<THREADNAME/>", operationBbs.SelectThread.ThreadTitle)
            .Replace("<THREADURL/>", operationBbs.ThreadUrl)
            .Replace("<SKINPATH/>", skinFolderPath)
            .Replace("<GETRESCOUNT/>", 0.ToString())
            .Replace("<NEWRESCOUNT/>", operationBbs.ResList.Count.ToString())
            .Replace("<ALLRESCOUNT/>", operationBbs.ResList.Count.ToString())
            .Replace("<BBSNAME/>", operationBbs.BbsInfo.BbsName)
            .Replace("<BOARDNAME/>", operationBbs.BbsInfo.BbsName)
            .Replace("<BOARDURL/>", operationBbs.BoardUrl));
 }
コード例 #3
0
        public ThradViewerViewModel()
        {
            Logger.Instance.Debug("ThradViewerViewModel()");
            operationBbs        = new OperationBbs();
            updateThreadCommand = new UpdateThreadCommand(operationBbs);
            writeResCommand     = new WriteResCommand(operationBbs);
            updateThreadCommand.PropertyChanged += (sender, e) => RaisePropertyChanged(e.PropertyName);
            writeResCommand.PropertyChanged     += (sender, e) => RaisePropertyChanged(e.PropertyName);

            // コマンドライン引数チェック
            if (Environment.GetCommandLineArgs().Length > 1)
            {
                string url = Environment.GetCommandLineArgs()[1];
                Logger.Instance.DebugFormat("ThradViewerViewModel[url:{0}]", url);
                ChangeUrl(url);
            }
        }
コード例 #4
0
        public WriteResCommand(OperationBbs operationBbs)
        {
            Logger.Instance.Debug("WriteResCommand");
            this.operationBbs = operationBbs;

            worker.DoWork += (sender, e) =>
            {
                Logger.Instance.Debug("WriteResCommandWorker.DoWork");
                e.Result = null;

                try
                {
                    WrireResCommandArg arg = e.Argument as WrireResCommandArg;
                    operationBbs.Write(arg.Name, arg.Mail, arg.Message);
                }
                catch (Exception excetpion)
                {
                    Logger.Instance.ErrorFormat("WriteResCommandWorker.DoWork error : Message{0}\n{1}", excetpion.Message, excetpion.StackTrace);
                    e.Result = excetpion;
                }
            };
            worker.RunWorkerCompleted += (sender, e) =>
            {
                Logger.Instance.Debug("WriteResCommandWorker.RunWorkerCompleted");
                Exception exception = e.Result as Exception;

                if (exception != null)
                {
                    Logger.Instance.DebugFormat("WriteResCommandWorker.RunWorkerCompleted [Message:{0}]", exception.Message);
                    MessageBox.Show(exception.Message);
                }
                else
                {
                    Logger.Instance.DebugFormat("WriteResCommandWorker.RunWorkerCompleted PropertyChanged(Message)");
                    PropertyChanged(this, new PropertyChangedEventArgs("Message"));
                }
            };
        }
コード例 #5
0
        /// <summary>
        /// ドキュメント生成
        /// </summary>
        public string Generate(OperationBbs operationBbs, int oldResNum)
        {
            Logger.Instance.DebugFormat("Generate[oldResNum:{0}]", oldResNum);

            // ヘッダー追加
            string documentText = ReplaceData(HeaderText, operationBbs);

            foreach (var res in operationBbs.ResList)
            {
                string resText = string.Empty;
                int    resNo   = 0;
                int.TryParse(res.ResNo, out resNo);

                if (resNo == oldResNum + 1)
                {
                    resText = ReplaceResData(NewMarkText, res);
                }

                if (resNo <= oldResNum)
                {
                    resText += ReplaceResData(ResText, res);
                }
                else
                {
                    resText += ReplaceResData(NewResText, res);
                }

                documentText += ReplaceData(resText, operationBbs);
                documentText += Environment.NewLine;
            }

            // フッター追加
            documentText += ReplaceData(FooterText, operationBbs);

            return(documentText);
        }
コード例 #6
0
        //-------------------------------------------------------------
        // 概要:スレッド選択処理
        //-------------------------------------------------------------
        private void SelectThread()
        {
            // 未選択チェック
            if (threadListView.SelectedItems.Count == 0)
            {
                return;
            }

            // スレッド選択
            string selectThreadNo = threadListView.SelectedItems[0].Tag.ToString();

            Logger.Instance.InfoFormat("スレッド選択 [スレッド番号:{0}]", selectThreadNo);

            // スレッド変更通知
            viewModel.ChangeThread(selectThreadNo);
            urlTextBox.Text = viewModel.ThreadUrl;
            OperationBbs operationBbs = viewModel.CloneOperationBbs();

            ThreadChange(this, new ThreadSelectEventArgs(operationBbs));

            // 非表示
            Logger.Instance.InfoFormat("スレッド選択画面を非表示");
            Visible = false;
        }
コード例 #7
0
 public ThreadSelectEventArgs(OperationBbs operationBbs)
 {
     this.OperationBbs = operationBbs;
 }
コード例 #8
0
        //-------------------------------------------------------------
        // 概要:コンストラクタ
        // 詳細:イベントの設定
        //-------------------------------------------------------------
        public WriteFieldControl()
        {
            InitializeComponent();

            // 選択スレッドのクリックイベント
            selectThreadLabel.MouseDown += (sender, e) =>
            {
                if (e.Button == MouseButtons.Left)
                {
                    // 選択スレッド画面を開く
                    threadSelectView.TopMost = ParentForm.TopMost;
                    threadSelectView.Open();
                }
                else if (e.Button == MouseButtons.Right)
                {
                    RightClick(sender, e);
                }
            };

            // 新着レス表示処理
            string newRes = "";

            showNewResWorker.WorkerSupportsCancellation = true;             // キャンセル処理を許可
            showNewResWorker.DoWork += (sender, e) =>
            {
                newRes = ReadNewRes();
            };
            showNewResWorker.RunWorkerCompleted += (sender, e) =>
            {
                newResToolTip.SetToolTip(selectThreadLabel, newRes);
            };

            // マウスオーバー時に新着レス表示
            selectThreadLabel.MouseHover += (sender, e) =>
            {
                // 新着レス表示の実行
                if (!showNewResWorker.IsBusy)
                {
                    showNewResWorker.RunWorkerAsync();
                }
            };

            // レス書き込み処理
            writeResWorker.WorkerSupportsCancellation = true;
            writeResWorker.DoWork += (sender, e) =>
            {
                string message = writeFieldTextBox.Text;

                WriteResResult result = new WriteResResult();
                result.WriteResult = true;
                result.Message     = message;

                // レス書き込み
                try
                {
                    Logger.Instance.InfoFormat("レス書き込み [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);

                    operationBbs.Write("", "sage", message);
                    Logger.Instance.InfoFormat("レス書き込み:成功 [掲示板:{0} スレッド:{1}, 本文:{2}]", operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);
                }
                catch (Exception ex)
                {
                    result.WriteResult = false;
                    result.Exception   = ex;
                    Logger.Instance.ErrorFormat("レス書き込み:失敗 [エラー内容{0} 掲示板:{1} スレッド:{2}, 本文:{3}]", ex.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, message);
                }
                finally
                {
                    e.Result = result;
                }
            };
            // 書き込み完了処理
            writeResWorker.RunWorkerCompleted += (sender, e) =>
            {
                WriteResResult result = (WriteResResult)e.Result;

                // 書き込み欄を有効
                writeFieldTextBox.Enabled       = true;
                writeFieldTextBox.WatermarkText = "書き込み内容を入力してください";

                // 書き込み成功
                if (result.WriteResult)
                {
                    ToastMessage.Show("レス書き込みが完了しました。");
                    writeFieldTextBox.Text = "";
                }
                // 書き込み失敗
                else
                {
                    ToastMessage.Show(string.Format("レス書き込みに失敗しました。[{0}]", result.Exception.Message));
                    writeFieldTextBox.Text = result.Message;
                    Logger.Instance.ErrorFormat("{0}\n\n掲示板:{1}\nスレッド:{2}\n本文:{3}", result.Exception.Message, operationBbs.BbsInfo.BbsName, operationBbs.SelectThread.ThreadTitle, result.Message);
                }

                // 書き込み欄をフォーカス
                writeFieldTextBox.Focus();
            };

            // 書き込みボタン押下
            writeButton.Click += (sender, e) =>
            {
                // レス書き込み
                WriteRes();
            };

            // スレッド変更イベント
            threadSelectView.ThreadChange += (sender, e) =>
            {
                // スレッド情報の更新
                ThreadSelectEventArgs args = (ThreadSelectEventArgs)e;
                operationBbs = args.OperationBbs;
                UpdateThreadTitle();
            };
            // スレッドタイトルの更新
            operationBbs.ThreadListChange += (sender, e) => UpdateThreadTitle();

            // 高さ自動調節
            writeFieldTextBox_TextChanged(this, new EventArgs());

            // 選択スレッドのレス数の更新
            Timer timer = new Timer();

            timer.Interval = UpdateThreadResCount;
            timer.Tick    += (sender, e) =>
            {
                operationBbs.UpdateThreadList();
                UpdateThreadTitle();
            };
            timer.Start();

            // サイズ変更時に高さの自動調節
            SizeChanged += (sender, e) =>
            {
                if (Visible)
                {
                    Height = selectThreadLabel.Height + writeFieldTextBox.PreferredSize.Height;
                }
                else
                {
                    Height = 0;
                }
            };
        }