OSDN Git Service

TwitterDataModel.Ids, Lists, Users を TwitterPageable<T> のサブクラスに移行
authorKimura Youichi <kim.upsilon@bucyou.net>
Mon, 5 May 2014 15:13:52 +0000 (00:13 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Mon, 5 May 2014 17:20:44 +0000 (02:20 +0900)
OpenTween/Api/TwitterDataModel.cs
OpenTween/Api/TwitterPageable.cs [new file with mode: 0644]
OpenTween/OpenTween.csproj
OpenTween/Twitter.cs

index 862ceaf..170827a 100644 (file)
@@ -175,14 +175,6 @@ namespace OpenTween.Api
         }
 
         [DataContract]
-        public class Ids
-        {
-            [DataMember(Name = "ids")] public long[] Id;
-            [DataMember(Name = "next_cursor")] public long NextCursor;
-            [DataMember(Name = "previous_cursor")] public long PreviousCursor;
-        }
-
-        [DataContract]
         public class RateLimitStatus
         {
             [DataMember(Name = "reset_time_in_seconds")] public int ResetTimeInSeconds;
@@ -202,22 +194,6 @@ namespace OpenTween.Api
         }
 
         [DataContract]
-        public class Lists
-        {
-            [DataMember(Name = "lists")] public TwitterList[] lists;
-            [DataMember(Name = "next_cursor")] public long NextCursor;
-            [DataMember(Name = "previous_cursor")] public long PreviousCursor;
-        }
-
-        [DataContract]
-        public class Users
-        {
-            [DataMember(Name = "users")] public TwitterUser[] users;
-            [DataMember(Name = "next_cursor")] public long NextCursor;
-            [DataMember(Name = "previous_cursor")] public long PreviousCursor;
-        }
-
-        [DataContract]
         public class ErrorResponse
         {
             [DataMember(Name = "errors")] public ErrorItem[] Errors;
diff --git a/OpenTween/Api/TwitterPageable.cs b/OpenTween/Api/TwitterPageable.cs
new file mode 100644 (file)
index 0000000..ae03f6d
--- /dev/null
@@ -0,0 +1,105 @@
+// OpenTween - Client of Twitter
+// Copyright (c) 2014 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
+// All rights reserved.
+//
+// This file is part of OpenTween.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
+// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OpenTween.Api
+{
+    [DataContract]
+    public abstract class TwitterPageable<T>
+    {
+        public abstract T[] Items { get; }
+
+        [DataMember(Name = "next_cursor")]
+        public long NextCursor { get; set; }
+
+        [DataMember(Name = "next_cursor_str")]
+        public string NextCursorStr { get; set; }
+
+        [DataMember(Name = "previous_cursor")]
+        public long PreviousCursor { get; set; }
+
+        [DataMember(Name = "previous_cursor_str")]
+        public string PreviousCursorStr { get; set; }
+    }
+
+    [DataContract]
+    public class TwitterIds : TwitterPageable<long>
+    {
+        [DataMember(Name = "ids")]
+        public long[] Ids { get; set; }
+
+        [IgnoreDataMember]
+        public override long[] Items
+        {
+            get { return this.Ids; }
+        }
+
+        /// <exception cref="SerializationException"/>
+        public static TwitterIds ParseJson(string json)
+        {
+            return MyCommon.CreateDataFromJson<TwitterIds>(json);
+        }
+    }
+
+    [DataContract]
+    public class TwitterUsers : TwitterPageable<TwitterUser>
+    {
+        [DataMember(Name = "users")]
+        public TwitterUser[] Users { get; set; }
+
+        [IgnoreDataMember]
+        public override TwitterUser[] Items
+        {
+            get { return this.Users; }
+        }
+
+        /// <exception cref="SerializationException"/>
+        public static TwitterUsers ParseJson(string json)
+        {
+            return MyCommon.CreateDataFromJson<TwitterUsers>(json);
+        }
+    }
+
+    [DataContract]
+    public class TwitterLists : TwitterPageable<TwitterList>
+    {
+        [DataMember(Name = "lists")]
+        public TwitterList[] Lists { get; set; }
+
+        [IgnoreDataMember]
+        public override TwitterList[] Items
+        {
+            get { return this.Lists; }
+        }
+
+        /// <exception cref="SerializationException"/>
+        public static TwitterLists ParseJson(string json)
+        {
+            return MyCommon.CreateDataFromJson<TwitterLists>(json);
+        }
+    }
+}
index 76ae042..de85593 100644 (file)
@@ -66,6 +66,9 @@
     <Compile Include="Api\TwitterConfiguration.cs" />
     <Compile Include="Api\TwitterEntity.cs" />
     <Compile Include="Api\TwitterList.cs" />
+    <Compile Include="Api\TwitterPageable.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Api\TwitterPlace.cs" />
     <Compile Include="Api\TwitterStatus.cs" />
     <Compile Include="Api\TwitterUser.cs" />
index a91bb38..83f61c6 100644 (file)
@@ -2327,7 +2327,7 @@ namespace OpenTween
             do
             {
                 var ret = this.GetFollowerIdsApi(ref cursor);
-                newFollowerIds.AddRange(ret.Id);
+                newFollowerIds.AddRange(ret.Ids);
                 cursor = ret.NextCursor;
             } while (cursor != 0);
 
@@ -2345,7 +2345,7 @@ namespace OpenTween
             }
         }
 
-        private TwitterDataModel.Ids GetFollowerIdsApi(ref long cursor)
+        private TwitterIds GetFollowerIdsApi(ref long cursor)
         {
             if (Twitter.AccountState != MyCommon.ACCOUNT_STATE.Valid)
                 throw new WebApiException("AccountState invalid");
@@ -2367,9 +2367,9 @@ namespace OpenTween
 
             try
             {
-                var ret = MyCommon.CreateDataFromJson<TwitterDataModel.Ids>(content);
+                var ret = TwitterIds.ParseJson(content);
 
-                if (ret.Id == null)
+                if (ret.Ids == null)
                 {
                     var ex = new WebApiException("Err: ret.id == null (GetFollowerIdsApi)", content);
                     MyCommon.ExceptionOut(ex);
@@ -2644,9 +2644,9 @@ namespace OpenTween
 
             try
             {
-                var users = MyCommon.CreateDataFromJson<TwitterDataModel.Users>(content);
+                var users = TwitterUsers.ParseJson(content);
                 Array.ForEach<TwitterUser>(
-                    users.users,
+                    users.Users,
                     u => lists.Add(new UserInfo(u)));
                 cursor = users.NextCursor;
                 return "";
@@ -3051,7 +3051,7 @@ namespace OpenTween
             do
             {
                 var ret = this.GetBlockIdsApi(cursor);
-                newBlockIds.AddRange(ret.Id);
+                newBlockIds.AddRange(ret.Ids);
                 cursor = ret.NextCursor;
             } while (cursor != 0);
 
@@ -3060,7 +3060,7 @@ namespace OpenTween
             TabInformations.GetInstance().BlockIds = newBlockIds;
         }
 
-        public TwitterDataModel.Ids GetBlockIdsApi(long cursor)
+        public TwitterIds GetBlockIdsApi(long cursor)
         {
             if (Twitter.AccountState != MyCommon.ACCOUNT_STATE.Valid)
                 throw new WebApiException("AccountState invalid");
@@ -3082,7 +3082,7 @@ namespace OpenTween
 
             try
             {
-                return MyCommon.CreateDataFromJson<TwitterDataModel.Ids>(content);
+                return TwitterIds.ParseJson(content);
             }
             catch(SerializationException e)
             {