private void PostButton_Click(object sender, EventArgs e) { if (StatusText.Text.Trim().Length == 0) { if (!ImageSelectionPanel.Enabled) { DoRefresh(); return; } } if (this.ExistCurrentPost && StatusText.Text.Trim() == string.Format("RT @{0}: {1}", _curPost.ScreenName, _curPost.TextFromApi)) { DialogResult rtResult = MessageBox.Show(string.Format(Properties.Resources.PostButton_Click1, Environment.NewLine), "Retweet", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); switch (rtResult) { case DialogResult.Yes: doReTweetOfficial(false); StatusText.Text = ""; return; case DialogResult.Cancel: return; } } _history[_history.Count - 1] = new PostingStatus(StatusText.Text.Trim(), _reply_to_id, _reply_to_name); if (SettingDialog.Nicoms) { StatusText.SelectionStart = StatusText.Text.Length; UrlConvert(MyCommon.UrlConverter.Nicoms); } //if (SettingDialog.UrlConvertAuto) //{ // StatusText.SelectionStart = StatusText.Text.Length; // UrlConvertAutoToolStripMenuItem_Click(null, null); //} //else if (SettingDialog.Nicoms) //{ // StatusText.SelectionStart = StatusText.Text.Length; // UrlConvert(UrlConverter.Nicoms); //} StatusText.SelectionStart = StatusText.Text.Length; GetWorkerArg args = new GetWorkerArg(); args.page = 0; args.endPage = 0; args.type = MyCommon.WORKERTYPE.PostMessage; CheckReplyTo(StatusText.Text); //整形によって増加する文字数を取得 int adjustCount = 0; string tmpStatus = StatusText.Text.Trim(); if (ToolStripMenuItemApiCommandEvasion.Checked) { // APIコマンド回避 if (Regex.IsMatch(tmpStatus, @"^[+\-\[\]\s\\.,*/(){}^~|='&%$#""<>?]*(get|g|fav|follow|f|on|off|stop|quit|leave|l|whois|w|nudge|n|stats|invite|track|untrack|tracks|tracking|\*)([+\-\[\]\s\\.,*/(){}^~|='&%$#""<>?]+|$)", RegexOptions.IgnoreCase) && tmpStatus.EndsWith(" .") == false) adjustCount += 2; } if (ToolStripMenuItemUrlMultibyteSplit.Checked) { // URLと全角文字の切り離し adjustCount += Regex.Matches(tmpStatus, @"https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#^]+").Count; } bool isCutOff = false; bool isRemoveFooter = MyCommon.IsKeyDown(Keys.Shift); if (StatusText.Multiline && !SettingDialog.PostCtrlEnter) { //複数行でEnter投稿の場合、Ctrlも押されていたらフッタ付加しない isRemoveFooter = MyCommon.IsKeyDown(Keys.Control); } if (SettingDialog.PostShiftEnter) { isRemoveFooter = MyCommon.IsKeyDown(Keys.Control); } if (!isRemoveFooter && (StatusText.Text.Contains("RT @") || StatusText.Text.Contains("QT @"))) { isRemoveFooter = true; } if (GetRestStatusCount(false, !isRemoveFooter) - adjustCount < 0) { if (MessageBox.Show(Properties.Resources.PostLengthOverMessage1, Properties.Resources.PostLengthOverMessage2, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK) { isCutOff = true; //if (!SettingDialog.UrlConvertAuto) UrlConvertAutoToolStripMenuItem_Click(null, null); if (GetRestStatusCount(false, !isRemoveFooter) - adjustCount < 0) { isRemoveFooter = true; } } else { return; } } string footer = ""; string header = ""; if (StatusText.Text.StartsWith("D ") || StatusText.Text.StartsWith("d ")) { //DM時は何もつけない footer = ""; } else { //ハッシュタグ if (HashMgr.IsNotAddToAtReply) { if (!string.IsNullOrEmpty(HashMgr.UseHash) && _reply_to_id == 0 && string.IsNullOrEmpty(_reply_to_name)) { if (HashMgr.IsHead) header = HashMgr.UseHash + " "; else footer = " " + HashMgr.UseHash; } } else { if (!string.IsNullOrEmpty(HashMgr.UseHash)) { if (HashMgr.IsHead) header = HashMgr.UseHash + " "; else footer = " " + HashMgr.UseHash; } } if (!isRemoveFooter) { if (SettingDialog.UseRecommendStatus) // 推奨ステータスを使用する footer += SettingDialog.RecommendStatusText; else // テキストボックスに入力されている文字列を使用する footer += " " + SettingDialog.Status.Trim(); } } args.status.status = header + StatusText.Text.Trim() + footer; if (ToolStripMenuItemApiCommandEvasion.Checked) { // APIコマンド回避 if (Regex.IsMatch(args.status.status, @"^[+\-\[\]\s\\.,*/(){}^~|='&%$#""<>?]*(get|g|fav|follow|f|on|off|stop|quit|leave|l|whois|w|nudge|n|stats|invite|track|untrack|tracks|tracking|\*)([+\-\[\]\s\\.,*/(){}^~|='&%$#""<>?]+|$)", RegexOptions.IgnoreCase) && args.status.status.EndsWith(" .") == false) args.status.status += " ."; } if (ToolStripMenuItemUrlMultibyteSplit.Checked) { // URLと全角文字の切り離し Match mc2 = Regex.Match(args.status.status, @"https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#^]+"); if (mc2.Success) args.status.status = Regex.Replace(args.status.status, @"https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#^]+", "$& "); } if (IdeographicSpaceToSpaceToolStripMenuItem.Checked) { // 文中の全角スペースを半角スペース1個にする args.status.status = args.status.status.Replace(" ", " "); } if (isCutOff && args.status.status.Length > 140) { args.status.status = args.status.status.Substring(0, 140); string AtId = @"(@|@)[a-z0-9_/]+$"; string HashTag = @"(^|[^0-9A-Z&\/\?]+)(#|#)([0-9A-Z_]*[A-Z_]+)$"; string Url = @"https?:\/\/[a-z0-9!\*'\(\);:&=\+\$\/%#\[\]\-_\.,~?]+$"; //簡易判定 string pattern = string.Format("({0})|({1})|({2})", AtId, HashTag, Url); Match mc = Regex.Match(args.status.status, pattern, RegexOptions.IgnoreCase); if (mc.Success) { //さらに@ID、ハッシュタグ、URLと推測される文字列をカットする args.status.status = args.status.status.Substring(0, 140 - mc.Value.Length); } if (MessageBox.Show(args.status.status, "Post or Cancel?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) return; } args.status.inReplyToId = _reply_to_id; args.status.inReplyToName = _reply_to_name; if (ImageSelectionPanel.Visible) { //画像投稿 if (ImageSelectedPicture.Image != ImageSelectedPicture.InitialImage && ImageServiceCombo.SelectedIndex > -1 && !string.IsNullOrEmpty(ImagefilePathText.Text)) { if (MessageBox.Show(Properties.Resources.PostPictureConfirm1, Properties.Resources.PostPictureConfirm2, MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Cancel) { TimelinePanel.Visible = true; TimelinePanel.Enabled = true; ImageSelectionPanel.Visible = false; ImageSelectionPanel.Enabled = false; if (_curList != null) _curList.Focus(); return; } args.status.imageService = ImageServiceCombo.Text; args.status.imagePath = ImagefilePathText.Text; ImageSelectedPicture.Image = ImageSelectedPicture.InitialImage; ImagefilePathText.Text = ""; TimelinePanel.Visible = true; TimelinePanel.Enabled = true; ImageSelectionPanel.Visible = false; ImageSelectionPanel.Enabled = false; if (_curList != null) _curList.Focus(); } else { MessageBox.Show(Properties.Resources.PostPictureWarn1, Properties.Resources.PostPictureWarn2); return; } } RunAsync(args); //Google検索(試験実装) if (StatusText.Text.StartsWith("Google:", StringComparison.OrdinalIgnoreCase) && StatusText.Text.Trim().Length > 7) { string tmp = string.Format(Properties.Resources.SearchItem2Url, HttpUtility.UrlEncode(StatusText.Text.Substring(7))); OpenUriAsync(tmp); } _reply_to_id = 0; _reply_to_name = ""; StatusText.Text = ""; _history.Add(new PostingStatus()); _hisIdx = _history.Count - 1; if (!ToolStripFocusLockMenuItem.Checked) ((Control)ListTab.SelectedTab.Tag).Focus(); urlUndoBuffer = null; UrlUndoToolStripMenuItem.Enabled = false; //Undoをできないように設定 }
private string MakeStatusMessage(GetWorkerArg AsyncArg, bool Finish) { string smsg = ""; if (!Finish) { //継続中メッセージ switch (AsyncArg.type) { case MyCommon.WORKERTYPE.Timeline: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText5 + AsyncArg.page.ToString() + Properties.Resources.GetTimelineWorker_RunWorkerCompletedText6; break; case MyCommon.WORKERTYPE.Reply: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText4 + AsyncArg.page.ToString() + Properties.Resources.GetTimelineWorker_RunWorkerCompletedText6; break; case MyCommon.WORKERTYPE.DirectMessegeRcv: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText8 + AsyncArg.page.ToString() + Properties.Resources.GetTimelineWorker_RunWorkerCompletedText6; break; case MyCommon.WORKERTYPE.FavAdd: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText15 + AsyncArg.page.ToString() + "/" + AsyncArg.ids.Count.ToString() + Properties.Resources.GetTimelineWorker_RunWorkerCompletedText16 + (AsyncArg.page - AsyncArg.sIds.Count - 1).ToString(); break; case MyCommon.WORKERTYPE.FavRemove: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText17 + AsyncArg.page.ToString() + "/" + AsyncArg.ids.Count.ToString() + Properties.Resources.GetTimelineWorker_RunWorkerCompletedText18 + (AsyncArg.page - AsyncArg.sIds.Count - 1).ToString(); break; case MyCommon.WORKERTYPE.Favorites: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText19; break; case MyCommon.WORKERTYPE.PublicSearch: smsg = "Search refreshing..."; break; case MyCommon.WORKERTYPE.List: smsg = "List refreshing..."; break; case MyCommon.WORKERTYPE.Related: smsg = "Related refreshing..."; break; case MyCommon.WORKERTYPE.UserTimeline: smsg = "UserTimeline refreshing..."; break; } } else { //完了メッセージ switch (AsyncArg.type) { case MyCommon.WORKERTYPE.Timeline: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText1; break; case MyCommon.WORKERTYPE.Reply: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText9; break; case MyCommon.WORKERTYPE.DirectMessegeRcv: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText11; break; case MyCommon.WORKERTYPE.DirectMessegeSnt: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText13; break; case MyCommon.WORKERTYPE.FavAdd: //進捗メッセージ残す break; case MyCommon.WORKERTYPE.FavRemove: //進捗メッセージ残す break; case MyCommon.WORKERTYPE.Favorites: smsg = Properties.Resources.GetTimelineWorker_RunWorkerCompletedText20; break; case MyCommon.WORKERTYPE.Follower: smsg = Properties.Resources.UpdateFollowersMenuItem1_ClickText3; break; case MyCommon.WORKERTYPE.Configuration: //進捗メッセージ残す break; case MyCommon.WORKERTYPE.PublicSearch: smsg = "Search refreshed"; break; case MyCommon.WORKERTYPE.List: smsg = "List refreshed"; break; case MyCommon.WORKERTYPE.Related: smsg = "Related refreshed"; break; case MyCommon.WORKERTYPE.UserTimeline: smsg = "UserTimeline refreshed"; break; case MyCommon.WORKERTYPE.BlockIds: smsg = Properties.Resources.UpdateBlockUserText3; break; } } return smsg; }
public void OpenUriAsync(string UriString) { GetWorkerArg args = new GetWorkerArg(); args.type = MyCommon.WORKERTYPE.OpenUri; args.url = UriString; RunAsync(args); }
private void GetTimeline(MyCommon.WORKERTYPE WkType, int fromPage, int toPage, string tabName) { if (!this.IsNetworkAvailable()) return; //非同期実行引数設定 GetWorkerArg args = new GetWorkerArg(); args.page = fromPage; args.endPage = toPage; args.type = WkType; args.tName = tabName; if (!lastTime.ContainsKey(WkType)) lastTime.Add(WkType, new DateTime()); double period = DateTime.Now.Subtract(lastTime[WkType]).TotalSeconds; if (period > 1 || period < -1) { lastTime[WkType] = DateTime.Now; RunAsync(args); } //Timeline取得モードの場合はReplyも同時に取得 //if (!SettingDialog.UseAPI && // !_initial && // WkType == MyCommon.WORKERTYPE.Timeline && // SettingDialog.CheckReply) //{ // //TimerReply.Enabled = false; // _mentionCounter = SettingDialog.ReplyPeriodInt; // GetWorkerArg _args = new GetWorkerArg(); // _args.page = fromPage; // _args.endPage = toPage; // _args.type = MyCommon.WORKERTYPE.Reply; // RunAsync(_args); //} }
private void GetTimelineWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (MyCommon._endingFlag || e.Cancelled) return; //キャンセル if (e.Error != null) { _myStatusError = true; _waitTimeline = false; _waitReply = false; _waitDm = false; _waitFav = false; _waitPubSearch = false; _waitUserTimeline = false; _waitLists = false; throw new Exception("BackgroundWorker Exception", e.Error); } GetWorkerResult rslt = (GetWorkerResult)e.Result; if (rslt.type == MyCommon.WORKERTYPE.OpenUri) return; //エラー if (rslt.retMsg.Length > 0) { _myStatusError = true; StatusLabel.Text = rslt.retMsg; } if (rslt.type == MyCommon.WORKERTYPE.ErrorState) return; if (rslt.type == MyCommon.WORKERTYPE.FavRemove) { this.RemovePostFromFavTab(rslt.sIds.ToArray()); } //リストに反映 //bool busy = false; //foreach (BackgroundWorker bw in _bw) //{ // if (bw != null && bw.IsBusy) // { // busy = true; // break; // } //} //if (!busy) RefreshTimeline(); //background処理なければ、リスト反映 if (rslt.type == MyCommon.WORKERTYPE.Timeline || rslt.type == MyCommon.WORKERTYPE.Reply || rslt.type == MyCommon.WORKERTYPE.List || rslt.type == MyCommon.WORKERTYPE.PublicSearch || rslt.type == MyCommon.WORKERTYPE.DirectMessegeRcv || rslt.type == MyCommon.WORKERTYPE.DirectMessegeSnt || rslt.type == MyCommon.WORKERTYPE.Favorites || rslt.type == MyCommon.WORKERTYPE.Follower || rslt.type == MyCommon.WORKERTYPE.FavAdd || rslt.type == MyCommon.WORKERTYPE.FavRemove || rslt.type == MyCommon.WORKERTYPE.Related || rslt.type == MyCommon.WORKERTYPE.UserTimeline || rslt.type == MyCommon.WORKERTYPE.BlockIds || rslt.type == MyCommon.WORKERTYPE.Configuration) { RefreshTimeline(false); //リスト反映 } switch (rslt.type) { case MyCommon.WORKERTYPE.Timeline: _waitTimeline = false; if (!_initial) { // //API使用時の取得調整は別途考える(カウント調整?) } break; case MyCommon.WORKERTYPE.Reply: _waitReply = false; if (rslt.newDM && !_initial) { GetTimeline(MyCommon.WORKERTYPE.DirectMessegeRcv, 1, 0, ""); } break; case MyCommon.WORKERTYPE.Favorites: _waitFav = false; break; case MyCommon.WORKERTYPE.DirectMessegeRcv: _waitDm = false; break; case MyCommon.WORKERTYPE.FavAdd: case MyCommon.WORKERTYPE.FavRemove: if (_curList != null && _curTab != null) { _curList.BeginUpdate(); if (rslt.type == MyCommon.WORKERTYPE.FavRemove && _statuses.Tabs[_curTab.Text].TabType == MyCommon.TabUsageType.Favorites) { //色変えは不要 } else { for (int i = 0; i <= rslt.sIds.Count - 1; i++) { if (_curTab.Text.Equals(rslt.tName)) { int idx = _statuses.Tabs[rslt.tName].IndexOf(rslt.sIds[i]); if (idx > -1) { PostClass post = null; TabClass tb = _statuses.Tabs[rslt.tName]; if (tb != null) { if (tb.TabType == MyCommon.TabUsageType.Lists || tb.TabType == MyCommon.TabUsageType.PublicSearch) { post = tb.Posts[rslt.sIds[i]]; } else { post = _statuses[rslt.sIds[i]]; } ChangeCacheStyleRead(post.IsRead, idx, _curTab); } if (idx == _curItemIndex) DispSelectedPost(true); //選択アイテム再表示 } } } } _curList.EndUpdate(); } break; case MyCommon.WORKERTYPE.PostMessage: if (string.IsNullOrEmpty(rslt.retMsg) || rslt.retMsg.StartsWith("Outputz") || rslt.retMsg.StartsWith("OK:") || rslt.retMsg == "Warn:Status is a duplicate.") { _postTimestamps.Add(DateTime.Now); DateTime oneHour = DateTime.Now.Subtract(new TimeSpan(1, 0, 0)); for (int i = _postTimestamps.Count - 1; i >= 0; i--) { if (_postTimestamps[i].CompareTo(oneHour) < 0) { _postTimestamps.RemoveAt(i); } } if (!HashMgr.IsPermanent && !string.IsNullOrEmpty(HashMgr.UseHash)) { HashMgr.ClearHashtag(); this.HashStripSplitButton.Text = "#[-]"; this.HashToggleMenuItem.Checked = false; this.HashToggleToolStripMenuItem.Checked = false; } SetMainWindowTitle(); rslt.retMsg = ""; } else { DialogResult retry; try { retry = MessageBox.Show(string.Format("{0} ---> [ " + rslt.retMsg + " ]" + Environment.NewLine + "\"" + rslt.status.status + "\"" + Environment.NewLine + "{1}", Properties.Resources.StatusUpdateFailed1, Properties.Resources.StatusUpdateFailed2), "Failed to update status", MessageBoxButtons.RetryCancel, MessageBoxIcon.Question); } catch (Exception) { retry = DialogResult.Abort; } if (retry == DialogResult.Retry) { GetWorkerArg args = new GetWorkerArg(); args.page = 0; args.endPage = 0; args.type = MyCommon.WORKERTYPE.PostMessage; args.status = rslt.status; RunAsync(args); } else { if (ToolStripFocusLockMenuItem.Checked) { //連投モードのときだけEnterイベントが起きないので強制的に背景色を戻す StatusText_Enter(StatusText, new EventArgs()); } } } if (rslt.retMsg.Length == 0 && SettingDialog.PostAndGet) { if (_isActiveUserstream) { RefreshTimeline(true); } else { GetTimeline(MyCommon.WORKERTYPE.Timeline, 1, 0, ""); } } break; case MyCommon.WORKERTYPE.Retweet: if (rslt.retMsg.Length == 0) { _postTimestamps.Add(DateTime.Now); DateTime oneHour = DateTime.Now.Subtract(new TimeSpan(1, 0, 0)); for (int i = _postTimestamps.Count - 1; i >= 0; i--) { if (_postTimestamps[i].CompareTo(oneHour) < 0) { _postTimestamps.RemoveAt(i); } } if (!_isActiveUserstream && SettingDialog.PostAndGet) GetTimeline(MyCommon.WORKERTYPE.Timeline, 1, 0, ""); } break; case MyCommon.WORKERTYPE.Follower: //_waitFollower = false; _itemCache = null; _postCache = null; if (_curList != null) _curList.Refresh(); break; case MyCommon.WORKERTYPE.Configuration: //_waitFollower = false if (SettingDialog.TwitterConfiguration.PhotoSizeLimit != 0) { pictureService["Twitter"].Configuration("MaxUploadFilesize", SettingDialog.TwitterConfiguration.PhotoSizeLimit); } _itemCache = null; _postCache = null; if (_curList != null) _curList.Refresh(); break; case MyCommon.WORKERTYPE.PublicSearch: _waitPubSearch = false; break; case MyCommon.WORKERTYPE.UserTimeline: _waitUserTimeline = false; break; case MyCommon.WORKERTYPE.List: _waitLists = false; break; case MyCommon.WORKERTYPE.Related: TabClass tab = _statuses.GetTabByType(MyCommon.TabUsageType.Related); if (tab != null && tab.RelationTargetPost != null && tab.Contains(tab.RelationTargetPost.StatusId)) { foreach (TabPage tp in ListTab.TabPages) { if (tp.Text == tab.TabName) { ((DetailsListView)tp.Tag).SelectedIndices.Add(tab.IndexOf(tab.RelationTargetPost.StatusId)); ((DetailsListView)tp.Tag).Items[tab.IndexOf(tab.RelationTargetPost.StatusId)].Focused = true; break; } } } break; } }
private void FavoriteChange(bool FavAdd , bool multiFavoriteChangeDialogEnable = true) { //trueでFavAdd,falseでFavRemove if (_statuses.Tabs[_curTab.Text].TabType == MyCommon.TabUsageType.DirectMessage || _curList.SelectedIndices.Count == 0 || !this.ExistCurrentPost) return; //複数fav確認msg if (_curList.SelectedIndices.Count > 250 && FavAdd) { MessageBox.Show(Properties.Resources.FavoriteLimitCountText); _DoFavRetweetFlags = false; return; } else if (multiFavoriteChangeDialogEnable && _curList.SelectedIndices.Count > 1) { if (FavAdd) { string QuestionText = Properties.Resources.FavAddToolStripMenuItem_ClickText1; if (_DoFavRetweetFlags) QuestionText = Properties.Resources.FavoriteRetweetQuestionText3; if (MessageBox.Show(QuestionText, Properties.Resources.FavAddToolStripMenuItem_ClickText2, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) { _DoFavRetweetFlags = false; return; } } else { if (MessageBox.Show(Properties.Resources.FavRemoveToolStripMenuItem_ClickText1, Properties.Resources.FavRemoveToolStripMenuItem_ClickText2, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) { return; } } } GetWorkerArg args = new GetWorkerArg(); args.ids = new List<long>(); args.sIds = new List<long>(); args.tName = _curTab.Text; if (FavAdd) { args.type = MyCommon.WORKERTYPE.FavAdd; } else { args.type = MyCommon.WORKERTYPE.FavRemove; } foreach (int idx in _curList.SelectedIndices) { PostClass post = GetCurTabPost(idx); if (FavAdd) { if (!post.IsFav) args.ids.Add(post.StatusId); } else { if (post.IsFav) args.ids.Add(post.StatusId); } } if (args.ids.Count == 0) { if (FavAdd) StatusLabel.Text = Properties.Resources.FavAddToolStripMenuItem_ClickText4; else StatusLabel.Text = Properties.Resources.FavRemoveToolStripMenuItem_ClickText4; return; } RunAsync(args); }
private void doReTweetOfficial(bool isConfirm) { //公式RT if (this.ExistCurrentPost) { if (_curPost.IsProtect) { MessageBox.Show("Protected."); _DoFavRetweetFlags = false; return; } if (_curList.SelectedIndices.Count > 15) { MessageBox.Show(Properties.Resources.RetweetLimitText); _DoFavRetweetFlags = false; return; } else if (_curList.SelectedIndices.Count > 1) { string QuestionText = Properties.Resources.RetweetQuestion2; if (_DoFavRetweetFlags) QuestionText = Properties.Resources.FavoriteRetweetQuestionText1; switch (MessageBox.Show(QuestionText, "Retweet", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Cancel: case DialogResult.No: _DoFavRetweetFlags = false; return; } } else { if (_curPost.IsDm || _curPost.IsMe) { _DoFavRetweetFlags = false; return; } if (!SettingDialog.RetweetNoConfirm) { string Questiontext = Properties.Resources.RetweetQuestion1; if (_DoFavRetweetFlags) Questiontext = Properties.Resources.FavoritesRetweetQuestionText2; if (isConfirm && MessageBox.Show(Questiontext, "Retweet", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) { _DoFavRetweetFlags = false; return; } } } GetWorkerArg args = new GetWorkerArg(); args.ids = new List<long>(); args.sIds = new List<long>(); args.tName = _curTab.Text; args.type = MyCommon.WORKERTYPE.Retweet; foreach (int idx in _curList.SelectedIndices) { PostClass post = GetCurTabPost(idx); if (!post.IsMe && !post.IsProtect && !post.IsDm) args.ids.Add(post.StatusId); } RunAsync(args); } }
private void RunAsync(GetWorkerArg args) { BackgroundWorker bw = null; if (args.type != MyCommon.WORKERTYPE.Follower) { for (int i = 0; i < _bw.Length; i++) { if (_bw[i] != null && !_bw[i].IsBusy) { bw = _bw[i]; break; } } if (bw == null) { for (int i = 0; i < _bw.Length; i++) { if (_bw[i] == null) { _bw[i] = new BackgroundWorker(); bw = _bw[i]; bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += GetTimelineWorker_DoWork; bw.ProgressChanged += GetTimelineWorker_ProgressChanged; bw.RunWorkerCompleted += GetTimelineWorker_RunWorkerCompleted; break; } } } } else { if (_bwFollower == null) { _bwFollower = new BackgroundWorker(); bw = _bwFollower; bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += GetTimelineWorker_DoWork; bw.ProgressChanged += GetTimelineWorker_ProgressChanged; bw.RunWorkerCompleted += GetTimelineWorker_RunWorkerCompleted; } else { if (_bwFollower.IsBusy == false) bw = _bwFollower; } } if (bw == null) return; bw.RunWorkerAsync(args); }
private void RunAsync(GetWorkerArg args) { BackgroundWorker bw = null; if (args.WorkerType == WorkerType.Follower) { if (_followerFetchWorker == null) { bw = _followerFetchWorker = CreateTimelineWorker(); } else { if (!_followerFetchWorker.IsBusy) { bw = _followerFetchWorker; } } } else { foreach (var t in _bworkers) { if (t != null && !t.IsBusy) { bw = t; break; } } if (bw == null) { for (int i = 0; i < _bworkers.Length; i++) { if (_bworkers[i] == null) { _bworkers[i] = CreateTimelineWorker(); bw = _bworkers[i]; break; } } } } if (bw == null) { return; } bw.RunWorkerAsync(args); }
private string MakeStatusMessage(GetWorkerArg asyncArg, bool isFinish) { string smsg = string.Empty; switch (asyncArg.WorkerType) { case WorkerType.Timeline: smsg = isFinish ? R.GetTimelineWorker_RunWorkerCompletedText1 : string.Format("{0}{1}{2}", R.GetTimelineWorker_RunWorkerCompletedText5, asyncArg.Page, R.GetTimelineWorker_RunWorkerCompletedText6); break; case WorkerType.Reply: smsg = isFinish ? R.GetTimelineWorker_RunWorkerCompletedText9 : string.Format("{0}{1}{2}", R.GetTimelineWorker_RunWorkerCompletedText4, asyncArg.Page, R.GetTimelineWorker_RunWorkerCompletedText6); break; case WorkerType.DirectMessegeRcv: smsg = isFinish ? R.GetTimelineWorker_RunWorkerCompletedText11 : string.Format("{0}{1}{2}", R.GetTimelineWorker_RunWorkerCompletedText8, asyncArg.Page, R.GetTimelineWorker_RunWorkerCompletedText6); break; case WorkerType.FavAdd: // 進捗メッセージ残す smsg = isFinish ? string.Empty : string.Format("{0}{1}/{2}{3}{4}", R.GetTimelineWorker_RunWorkerCompletedText15, asyncArg.Page, asyncArg.Ids.Count, R.GetTimelineWorker_RunWorkerCompletedText16, asyncArg.Page - asyncArg.SIds.Count - 1); break; case WorkerType.FavRemove: // 進捗メッセージ残す smsg = isFinish ? string.Empty : string.Format("{0}{1}/{2}{3}{4}", R.GetTimelineWorker_RunWorkerCompletedText17, asyncArg.Page, asyncArg.Ids.Count, R.GetTimelineWorker_RunWorkerCompletedText18, asyncArg.Page - asyncArg.SIds.Count - 1); break; case WorkerType.Favorites: smsg = isFinish ? R.GetTimelineWorker_RunWorkerCompletedText20 : R.GetTimelineWorker_RunWorkerCompletedText19; break; case WorkerType.PublicSearch: smsg = isFinish ? "Search refreshed" : "Search refreshing..."; break; case WorkerType.List: smsg = isFinish ? "List refreshed" : "List refreshing..."; break; case WorkerType.Related: smsg = isFinish ? "Related refreshed" : "Related refreshing..."; break; case WorkerType.UserTimeline: smsg = isFinish ? "UserTimeline refreshed" : "UserTimeline refreshing..."; break; case WorkerType.Follower: smsg = isFinish ? R.UpdateFollowersMenuItem1_ClickText3 : string.Empty; break; case WorkerType.Configuration: // 進捗メッセージ残す break; case WorkerType.BlockIds: smsg = isFinish ? R.UpdateBlockUserText3 : string.Empty; break; } return smsg; }