}
[Fact]
+ public void IsMuted_MuteTabRulesTest()
+ {
+ this.tabinfo.MuteUserIds = new HashSet<long> { };
+
+ this.tabinfo.AddTab("Mute", MyCommon.TabUsageType.Mute, null);
+ var muteTab = this.tabinfo.Tabs["Mute"];
+ muteTab.AddFilter(new PostFilterRule
+ {
+ FilterName = "foo",
+ MoveMatches = true,
+ });
+
+ var post = new PostClass
+ {
+ UserId = 12345L,
+ ScreenName = "foo",
+ Text = "hogehoge",
+ };
+ Assert.True(this.tabinfo.IsMuted(post));
+ }
+
+ [Fact]
+ public void IsMuted_MuteTabRules_NotInHomeTimelineTest()
+ {
+ this.tabinfo.MuteUserIds = new HashSet<long> { };
+
+ this.tabinfo.AddTab("Mute", MyCommon.TabUsageType.Mute, null);
+ var muteTab = this.tabinfo.Tabs["Mute"];
+ muteTab.AddFilter(new PostFilterRule
+ {
+ FilterName = "foo",
+ MoveMatches = true,
+ });
+
+ // ミュートタブによるミュートは Recent 以外のタブも対象とする
+ var post = new PostClass
+ {
+ UserId = 12345L,
+ ScreenName = "foo",
+ Text = "hogehoge",
+ RelTabName = "Search",
+ };
+ Assert.True(this.tabinfo.IsMuted(post));
+ }
+
+ [Fact]
public void SetReadAllTab_MarkAsReadTest()
{
this.tabinfo.AddTab("search1", MyCommon.TabUsageType.PublicSearch, null);
public const string REPLY = "Reply";
public const string DM = "Direct";
public const string FAV = "Favorites";
+ public static readonly string MUTE = Properties.Resources.MuteTabName;
//private string dummy;
Lists = 256,
Related = 512,
UserTimeline = 1024,
+ Mute = 2048,
//RTMyTweet
//RTByOthers
//RTByMe
}
/// <summary>
+ /// (ミュート) に類似しているローカライズされた文字列を検索します。
+ /// </summary>
+ internal static string MuteTabName {
+ get {
+ return ResourceManager.GetString("MuteTabName", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// を含むリストの管理 に類似しているローカライズされた文字列を検索します。
/// </summary>
internal static string MyLists1 {
<data name="ChangeIconToolStripMenuItem_Confirm" xml:space="preserve">
<value>Do you really want to change icon?</value>
</data>
+ <data name="MuteTabName" xml:space="preserve">
+ <value>(Mute)</value>
+ </data>
</root>
\ No newline at end of file
<data name="PlayableOverlayImage" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PlayableOverlayImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
+ <data name="MuteTabName" xml:space="preserve">
+ <value>(ミュート)</value>
+ </data>
</root>
\ No newline at end of file
更新履歴
==== Ver 1.2.6-beta1(2015/xx/xx)
+ * NEW: ミュート機能を追加しました
+ - 設定したミュート条件はRecentだけでなく検索やリストなど全てのタブに適用されます
* NEW: ツイートに含まれる絵文字を画像として表示できるようになりました (thx @takke!)
* FIX: Mobypicture のサムネイルが表示されなくなっていた不具合を修正
* FIX: 画像ファイルをD&Dした際のチェック処理が不十分になっていた不具合を修正
{
lock (LockObj)
{
+ if (this.IsMuted(Item))
+ return;
+
if (string.IsNullOrEmpty(Item.RelTabName))
{
if (!Item.IsDm)
if (BlockIds.Contains(Item.UserId))
return;
- if (this.IsMuted(Item))
- return;
-
_statuses.Add(Item.StatusId, Item);
}
if (Item.RetweetedId != null)
public bool IsMuted(PostClass post)
{
+ var muteTab = this.GetTabByType(MyCommon.TabUsageType.Mute);
+ if (muteTab != null && muteTab.AddFiltered(post) == MyCommon.HITRESULT.Move)
+ return true;
+
+ // これ以降は Twitter 標準のミュート機能に準じた判定
+
// Recent以外のツイートと、リプライはミュート対象外
// 参照: https://support.twitter.com/articles/20171399-muting-users-on-twitter
if (!string.IsNullOrEmpty(post.RelTabName) || post.IsReply)
MyCommon.TabUsageType.Home |
MyCommon.TabUsageType.Mentions |
MyCommon.TabUsageType.DirectMessage |
- MyCommon.TabUsageType.Favorites;
+ MyCommon.TabUsageType.Favorites |
+ MyCommon.TabUsageType.Mute;
const MyCommon.TabUsageType DistributableTabTypeMask =
MyCommon.TabUsageType.Mentions |
- MyCommon.TabUsageType.UserDefined;
+ MyCommon.TabUsageType.UserDefined |
+ MyCommon.TabUsageType.Mute;
const MyCommon.TabUsageType InnerStorageTabTypeMask =
MyCommon.TabUsageType.DirectMessage |
tab.TabType = MyCommon.TabUsageType.Favorites;
}
}
+ if (_statuses.GetTabByType(MyCommon.TabUsageType.Mute) == null)
+ {
+ TabClass tab;
+ if (!_statuses.Tabs.TryGetValue(MyCommon.DEFAULTTAB.MUTE, out tab))
+ {
+ _statuses.AddTab(MyCommon.DEFAULTTAB.MUTE, MyCommon.TabUsageType.Mute, null);
+ }
+ else
+ {
+ tab.TabType = MyCommon.TabUsageType.Mute;
+ }
+ }
+
foreach (var tab in _statuses.Tabs.Values)
{
+ // ミュートタブは表示しない
+ if (tab.TabType == MyCommon.TabUsageType.Mute)
+ continue;
+
if (tab.TabType == MyCommon.TabUsageType.Undefined)
{
tab.TabType = MyCommon.TabUsageType.UserDefined;
{
if (_statuses.Tabs[ListTab.TabPages[i].Text].TabType != MyCommon.TabUsageType.Related) tabSetting.Tabs.Add(_statuses.Tabs[ListTab.TabPages[i].Text]);
}
+ tabSetting.Tabs.Add(this._statuses.GetTabByType(MyCommon.TabUsageType.Mute));
tabSetting.Save();
}