From 931376d216b0fa84796e1c4faeadcda648f602c0 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Wed, 25 May 2016 10:12:13 +0900 Subject: [PATCH] =?utf8?q?TweenMain=E3=81=8B=E3=82=89=E7=9B=B4=E6=8E=A5?= =?utf8?q?=E6=8C=AF=E3=82=8A=E5=88=86=E3=81=91=E3=83=AB=E3=83=BC=E3=83=AB?= =?utf8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86?= =?utf8?q?=E3=82=92AddFilterRuleBy*=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89?= =?utf8?q?=E3=81=AB=E6=8A=BD=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween/Tween.cs | 147 ++++++++++++++++++++--------------------------------- 1 file changed, 55 insertions(+), 92 deletions(-) diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index c4c91337..232d3657 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -8672,12 +8672,46 @@ namespace OpenTween private void IDRuleMenuItem_Click(object sender, EventArgs e) { - string tabName; - //未選択なら処理終了 if (_curList.SelectedIndices.Count == 0) return; + var tab = this._statuses.Tabs[this._curTab.Text]; + var screenNameArray = this._curList.SelectedIndices.Cast() + .Select(x => tab[x]) + .Select(x => x.RetweetedId != null ? x.RetweetedBy : x.ScreenName) + .ToArray(); + + this.AddFilterRuleByScreenName(screenNameArray); + + if (screenNameArray.Length != 0) + { + List atids = new List(); + foreach (var screenName in screenNameArray) + { + atids.Add("@" + screenName); + } + int cnt = AtIdSupl.ItemCount; + AtIdSupl.AddRangeItem(atids.ToArray()); + if (AtIdSupl.ItemCount != cnt) ModifySettingAtId = true; + } + } + + private void SourceRuleMenuItem_Click(object sender, EventArgs e) + { + if (this._curList.SelectedIndices.Count == 0) + return; + + var tab = this._statuses.Tabs[this._curTab.Text]; + var sourceArray = this._curList.SelectedIndices.Cast() + .Select(x => tab[x].Source).ToArray(); + + this.AddFilterRuleBySource(sourceArray); + } + + public void AddFilterRuleByScreenName(params string[] screenNameArray) + { //タブ選択(or追加) + string tabName; if (!SelectTab(out tabName)) return; var tab = (FilterTabModel)this._statuses.Tabs[tabName]; @@ -8695,57 +8729,30 @@ namespace OpenTween mk = false; } - List ids = new List(); - foreach (int idx in _curList.SelectedIndices) + foreach (var screenName in screenNameArray) { - PostClass post = _statuses.Tabs[_curTab.Text][idx]; - if (!ids.Contains(post.ScreenName)) + tab.AddFilter(new PostFilterRule { - PostFilterRule fc = new PostFilterRule(); - ids.Add(post.ScreenName); - if (post.RetweetedId == null) - { - fc.FilterName = post.ScreenName; - } - else - { - fc.FilterName = post.RetweetedBy; - } - fc.UseNameField = true; - fc.MoveMatches = mv; - fc.MarkMatches = mk; - fc.UseRegex = false; - fc.FilterByUrl = false; - tab.AddFilter(fc); - } - } - if (ids.Count != 0) - { - List atids = new List(); - foreach (string id in ids) - { - atids.Add("@" + id); - } - int cnt = AtIdSupl.ItemCount; - AtIdSupl.AddRangeItem(atids.ToArray()); - if (AtIdSupl.ItemCount != cnt) ModifySettingAtId = true; + FilterName = screenName, + UseNameField = true, + MoveMatches = mv, + MarkMatches = mk, + UseRegex = false, + FilterByUrl = false, + }); } this.ApplyPostFilters(); SaveConfigsTabs(); } - private void SourceRuleMenuItem_Click(object sender, EventArgs e) + public void AddFilterRuleBySource(params string[] sourceArray) { - if (this._curList.SelectedIndices.Count == 0) - return; - // タブ選択ダイアログを表示(or追加) string tabName; if (!this.SelectTab(out tabName)) return; - var currentTab = this._statuses.Tabs[this._curTab.Text]; var filterTab = (FilterTabModel)this._statuses.Tabs[tabName]; bool mv; @@ -8763,25 +8770,16 @@ namespace OpenTween } // 振り分けルールに追加するSource - var sources = new HashSet(); - - foreach (var idx in this._curList.SelectedIndices.Cast()) + foreach (var source in sourceArray) { - var post = currentTab[idx]; - var filterSource = post.Source; - - if (sources.Add(filterSource)) + filterTab.AddFilter(new PostFilterRule { - var filter = new PostFilterRule - { - FilterSource = filterSource, - MoveMatches = mv, - MarkMatches = mk, - UseRegex = false, - FilterByUrl = false, - }; - filterTab.AddFilter(filter); - } + FilterSource = source, + MoveMatches = mv, + MarkMatches = mk, + UseRegex = false, + FilterByUrl = false, + }); } this.ApplyPostFilters(); @@ -11564,42 +11562,7 @@ namespace OpenTween { string name = GetUserId(); if (name != null) - { - string tabName; - - //未選択なら処理終了 - if (_curList.SelectedIndices.Count == 0) return; - - //タブ選択(or追加) - if (!SelectTab(out tabName)) return; - - var tab = (FilterTabModel)this._statuses.Tabs[tabName]; - - bool mv; - bool mk; - if (tab.TabType != MyCommon.TabUsageType.Mute) - { - this.MoveOrCopy(out mv, out mk); - } - else - { - // ミュートタブでは常に MoveMatches を true にする - mv = true; - mk = false; - } - - PostFilterRule fc = new PostFilterRule(); - fc.FilterName = name; - fc.UseNameField = true; - fc.MoveMatches = mv; - fc.MarkMatches = mk; - fc.UseRegex = false; - fc.FilterByUrl = false; - tab.AddFilter(fc); - - this.ApplyPostFilters(); - SaveConfigsTabs(); - } + this.AddFilterRuleByScreenName(name); } private async void ListManageUserContextToolStripMenuItem_Click(object sender, EventArgs e) -- 2.11.0