コード例 #1
0
        internal T DeserializeContent <T>(string content)
        {
            if (typeof(T) == typeof(TwitterTrends))
            {
                return(DeserializeTrends <T>(content));
            }

            if (typeof(T) == typeof(TwitterLocalTrends))
            {
                var instance = JArray.Parse(content);
                var inner    = instance.First.ToString();
                return(DeserializeSingle <T>(inner));
            }

            if (typeof(T) == typeof(TwitterStreamArtifact))
            {
                content = content.Trim('\n');
                if (content.StartsWith("{\"friends\":["))
                {
                    var friends = (JArray)JObject.Parse(content)["friends"];
                    if (friends != null)
                    {
                        var result = new TwitterUserStreamFriends {
                            RawSource = content
                        };
                        var ids = friends.Select(token => token.Value <long>()).ToList();
                        result.Ids = ids;
                        return((T)(ITwitterModel)result);
                    }
                }
                // {"delete":{"status":{"user_id_str":"14363427","id_str":"45331017418014721","id":45331017418014721,"user_id":14363427}}}
                else if (content.StartsWith("{\"delete\":{\"status\":"))
                {
                    var deleted = JObject.Parse(content)["delete"]["status"];
                    if (deleted != null)
                    {
                        var result = new TwitterUserStreamDeleteStatus
                        {
                            RawSource = content,
                            StatusId  = deleted["id"].Value <long>(),
                            UserId    = deleted["user_id"].Value <int>()
                        };
                        return((T)(ITwitterModel)result);
                    }
                }
                else if (content.StartsWith("{\"delete\":{\"direct_message\":"))
                {
                    var deleted = JObject.Parse(content)["delete"]["direct_message"];
                    if (deleted != null)
                    {
                        var result = new TwitterUserStreamDeleteDirectMessage
                        {
                            RawSource       = content,
                            DirectMessageId = deleted["id"].Value <long>(),
                            UserId          = deleted["user_id"].Value <int>()
                        };
                        return((T)(ITwitterModel)result);
                    }
                }
                else
                {
                    var artifact = JObject.Parse(content);
                    if (artifact["target_object"] != null)
                    {
                        return(DeserializeUserStreamEvent <T>(content));
                    }

                    if (artifact["user"] != null)
                    {
                        var tweet  = DeserializeSingle <TwitterStatus>(content);
                        var @event = new TwitterUserStreamStatus {
                            Status = tweet, RawSource = content
                        };
                        return((T)(ITwitterModel)@event);
                    }

                    if (artifact["direct_message"] != null)
                    {
                        var json   = artifact["direct_message"].ToString();
                        var dm     = DeserializeSingle <TwitterDirectMessage>(json);
                        var @event = new TwitterUserStreamDirectMessage {
                            DirectMessage = dm, RawSource = json
                        };
                        return((T)(ITwitterModel)@event);
                    }

                    var unknown = new TwitterStreamArtifact {
                        RawSource = content
                    };
                    return((T)(ITwitterModel)unknown);
                }
            }

            if (typeof(T) == typeof(IEnumerable <ITwitterModel>))
            {
                return(DeserializeTrends <T>(content));
            }

            var wantsCollection = typeof(IEnumerable).IsAssignableFrom(typeof(T));

            var deserialized = wantsCollection
                                   ? DeserializeCollection <T>(content)
                                   : DeserializeSingle <T>(content);

            return(deserialized);
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: kb10uy/Kbtter2
 void Kbtter_StreamingStatus(TwitterUserStreamStatus obj)
 {
     AddStatusToTimeline(obj.Status);
 }
コード例 #3
0
ファイル: KbtterWrap.cs プロジェクト: kb10uy/Kbtter2
 void Kbtter_StreamingStatus(TwitterUserStreamStatus obj)
 {
     _stcache.Add(obj.Status);
 }