OSDN Git Service

SettingTabsのシリアライズにTabClassを直接使用しない
authorKimura Youichi <kim.upsilon@bucyou.net>
Fri, 13 May 2016 01:12:33 +0000 (10:12 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Fri, 13 May 2016 20:02:14 +0000 (05:02 +0900)
OpenTween/Setting/SettingTabs.cs
OpenTween/StatusDictionary.cs
OpenTween/Tween.cs

index 212bd07..f310bbc 100644 (file)
@@ -28,6 +28,7 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Xml.Serialization;
 
 namespace OpenTween
 {
@@ -47,10 +48,58 @@ namespace OpenTween
 
         public SettingTabs()
         {
-            Tabs = new List<TabClass>();
+            Tabs = new List<SettingTabItem>();
         }
 #endregion
 
-        public List<TabClass> Tabs;
+        public List<SettingTabItem> Tabs;
+
+        [XmlType("TabClass")]
+        public class SettingTabItem
+        {
+            /// <summary>タブの表示名</summary>
+            public string TabName { get; set; }
+
+            /// <summary>タブの種類</summary>
+            public MyCommon.TabUsageType TabType { get; set; }
+
+            /// <summary>未読管理を有効にする</summary>
+            public bool UnreadManage { get; set; }
+
+            /// <summary>タブを保護する</summary>
+            [XmlElement(ElementName = "Locked")] // v1.0.5で「タブを固定(Locked)」から「タブを保護(Protected)」に名称変更
+            public bool Protected { get; set; }
+
+            /// <summary>新着通知表示を有効にする</summary>
+            public bool Notify { get; set; }
+
+            /// <summary>通知音</summary>
+            public string SoundFile { get; set; }
+
+            /// <summary>
+            /// 振り分けルール (<see cref="MyCommon.TabUsageType.UserDefined"/> で使用)
+            /// </summary>
+            public PostFilterRule[] FilterArray { get; set; } = new PostFilterRule[0];
+
+            /// <summary>
+            /// 表示するユーザーのスクリーンネーム (<see cref="MyCommon.TabUsageType.UserTimeline"/> で使用)
+            /// </summary>
+            public string User { get; set; }
+
+            /// <summary>
+            /// 検索文字列 (<see cref="MyCommon.TabUsageType.PublicSearch"/> で使用)
+            /// </summary>
+            public string SearchWords { get; set; } = "";
+
+            /// <summary>
+            /// 検索対象の言語 (<see cref="MyCommon.TabUsageType.PublicSearch"/> で使用)
+            /// </summary>
+            public string SearchLang { get; set; } = "";
+
+            /// <summary>
+            /// 表示するリスト (<see cref="MyCommon.TabUsageType.Lists"/> で使用)
+            /// </summary>
+            public ListElement ListInfo { get; set; }
+        }
     }
 }
index 0d0e53e..bdd6f69 100644 (file)
@@ -1483,7 +1483,6 @@ namespace OpenTween
 #endregion
 
 #region "リスト"
-        [NonSerialized]
         private ListElement _listInfo;
         public ListElement ListInfo
         {
@@ -1498,16 +1497,12 @@ namespace OpenTween
         }
 #endregion
 
-        [XmlIgnore]
         public PostClass RelationTargetPost { get; set; }
 
-        [XmlIgnore]
         public long OldestId = long.MaxValue;
 
-        [XmlIgnore]
         public long SinceId { get; set; }
 
-        [XmlIgnore]
         public ConcurrentDictionary<long, PostClass> Posts { get; private set; }
 
         private ConcurrentDictionary<long, PostClass> _innerPosts;
@@ -1621,10 +1616,7 @@ namespace OpenTween
             this.unreadIds = new SortedSet<long>(this.unreadIds, comparer);
         }
 
-        [XmlIgnore]
         public ComparerMode SortMode { get; private set; }
-
-        [XmlIgnore]
         public SortOrder SortOrder { get; private set; }
 
         public void AddPostQueue(long statusId, bool read)
@@ -1767,20 +1759,14 @@ namespace OpenTween
         }
 
         public bool UnreadManage { get; set; }
-
-        // v1.0.5で「タブを固定(Locked)」から「タブを保護(Protected)」に名称変更
-        [XmlElement(ElementName = "Locked")]
         public bool Protected { get; set; }
-
         public bool Notify { get; set; }
-
         public string SoundFile { get; set; }
 
         /// <summary>
         /// 次に表示する未読ツイートのIDを返します。
         /// ただし、未読がない場合または UnreadManage が false の場合は -1 を返します
         /// </summary>
-        [XmlIgnore]
         public long NextUnreadId
         {
             get
@@ -1801,7 +1787,6 @@ namespace OpenTween
         /// 次に表示する未読ツイートのインデックス番号を返します。
         /// ただし、未読がない場合または UnreadManage が false の場合は -1 を返します
         /// </summary>
-        [XmlIgnore]
         public int NextUnreadIndex
         {
             get
@@ -1815,7 +1800,6 @@ namespace OpenTween
         /// 未読ツイートの件数を返します。
         /// ただし、未読がない場合または UnreadManage が false の場合は 0 を返します
         /// </summary>
-        [XmlIgnore]
         public int UnreadCount
         {
             get
@@ -2065,7 +2049,6 @@ namespace OpenTween
             }
         }
 
-        [XmlIgnore]
         public bool FilterModified { get; set; }
 
         public long[] BackupIds
index c742e7a..5837525 100644 (file)
@@ -1282,19 +1282,26 @@ namespace OpenTween
             if (_cfgLocal.ScaleDimension.IsEmpty)
                 _cfgLocal.ScaleDimension = this.CurrentAutoScaleDimensions;
 
-            List<TabClass> tabs = SettingTabs.Load().Tabs;
-            foreach (TabClass tb in tabs)
-            {
-                try
-                {
-                    tb.FilterModified = false;
-                    _statuses.Tabs.Add(tb.TabName, tb);
-                }
-                catch (Exception)
-                {
-                    tb.TabName = _statuses.MakeTabName("MyTab");
-                    _statuses.Tabs.Add(tb.TabName, tb);
-                }
+            var tabsSetting = SettingTabs.Load().Tabs;
+            foreach (var tabSetting in tabsSetting)
+            {
+                var tab = new TabClass(tabSetting.TabName, tabSetting.TabType, tabSetting.ListInfo)
+                {
+                    UnreadManage = tabSetting.UnreadManage,
+                    Protected = tabSetting.Protected,
+                    Notify = tabSetting.Notify,
+                    SoundFile = tabSetting.SoundFile,
+                    FilterArray = tabSetting.FilterArray,
+                    FilterModified = false,
+                    User = tabSetting.User,
+                    SearchWords = tabSetting.SearchWords,
+                    SearchLang = tabSetting.SearchLang,
+                };
+
+                if (this._statuses.ContainsTab(tab.TabName))
+                    tab.TabName = this._statuses.MakeTabName("MyTab");
+
+                this._statuses.AddTab(tab);
             }
             if (_statuses.Tabs.Count == 0)
             {
@@ -7951,15 +7958,35 @@ namespace OpenTween
 
         private void SaveConfigsTabs()
         {
-            SettingTabs tabSetting = new SettingTabs();
-            for (int i = 0; i < ListTab.TabPages.Count; i++)
+            var tabsSetting = new SettingTabs();
+
+            var tabs = this.ListTab.TabPages.Cast<TabPage>()
+                .Select(x => this._statuses.Tabs[x.Text])
+                .Concat(new[] { this._statuses.GetTabByType(MyCommon.TabUsageType.Mute) });
+
+            foreach (var tab in tabs)
             {
-                var tab = _statuses.Tabs[ListTab.TabPages[i].Text];
-                if (tab.TabType != MyCommon.TabUsageType.Related && tab.TabType != MyCommon.TabUsageType.SearchResults)
-                    tabSetting.Tabs.Add(tab);
+                if (tab.TabType == MyCommon.TabUsageType.Related || tab.TabType == MyCommon.TabUsageType.SearchResults)
+                    continue;
+
+                var tabSetting = new SettingTabs.SettingTabItem
+                {
+                    TabName = tab.TabName,
+                    TabType = tab.TabType,
+                    UnreadManage = tab.UnreadManage,
+                    Protected = tab.Protected,
+                    Notify = tab.Notify,
+                    SoundFile = tab.SoundFile,
+                    FilterArray = tab.FilterArray,
+                    User = tab.User,
+                    SearchWords = tab.SearchWords,
+                    SearchLang = tab.SearchLang,
+                    ListInfo = tab.ListInfo,
+                };
+                tabsSetting.Tabs.Add(tabSetting);
             }
-            tabSetting.Tabs.Add(this._statuses.GetTabByType(MyCommon.TabUsageType.Mute));
-            tabSetting.Save();
+
+            tabsSetting.Save();
         }
 
         private async void OpenURLFileMenuItem_Click(object sender, EventArgs e)