コード例 #1
0
        internal object DeserializeContent(string content, Type type)
        {
            if (string.IsNullOrEmpty(content) || content.Trim().Length == 0)
            {
                return(null);
            }
            if (type == typeof(TwitterError))
            {
                // {"errors":[{"message":"Bad Authentication data","code":215}]}
                content = content.Trim('\n');
                if (content.StartsWith("{\"errors\":["))
                {
                    var errors = JObject.Parse(content)["errors"];
                    if (errors != null)
                    {
                        var result = new TwitterError {
                            RawSource = content
                        };
                        if (errors.Type == JTokenType.Array)
                        {
                            var error = errors.First();
                            result.Message = error["message"].ToString();
                            result.Code    = int.Parse(error["code"].ToString());
                        }
                        else
                        {
                            result.Message = errors.ToString();
                        }
                        return(result);
                    }
                }
                else if (content.Contains("error"))
                {
                    var error = JObject.Parse(content)["error"].ToString();
                    if (error != null)
                    {
                        var result = new TwitterError {
                            RawSource = content
                        };
                        result.Message = error;
                        result.Code    = 99;
                        return((ITwitterModel)result);
                    }
                }
            }

            if (type == typeof(TwitterTrends))
            {
                return(DeserializeTrends(content));
            }

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

            if (type == 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(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(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(result);
                    }
                }
                else
                {
                    var artifact = JObject.Parse(content);
                    if (artifact["target_object"] != null)
                    {
                        return(DeserializeUserStreamEvent(content));
                    }

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

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

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

            if (type == typeof(IEnumerable <TwitterTrends>))
            {
                return(DeserializeTrends(content));
            }

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

            var deserialized = wantsCollection
                                   ? DeserializeCollection(content, type)
                                   : DeserializeSingle(content, type);

            return(deserialized);
        }
コード例 #2
0
ファイル: KbtterWrap.cs プロジェクト: kb10uy/Kbtter2
 void Kbtter_StreamingStatus(TwitterUserStreamStatus obj)
 {
     _stcache.Add(obj.Status);
 }
コード例 #3
0
ファイル: MainWindow.xaml.cs プロジェクト: kb10uy/Kbtter2
 void Kbtter_StreamingStatus(TwitterUserStreamStatus obj)
 {
     AddStatusToTimeline(obj.Status);
 }
コード例 #4
0
ファイル: MainWindow.Logic.cs プロジェクト: kb10uy/Kbtter
        void StatusAction(TwitterUserStreamStatus p)
        {
            MainTimeline.Dispatcher.BeginInvoke(new Action(() =>
            {

                if (p.Status.RetweetedStatus != null)
                {
                    //自分がRTした以外のRT
                    if (p.Status.User == CurrentUser) return;
                    if (p.Status.RetweetedStatus.User == CurrentUser)
                    {
                        //自分のがRTされて飛んだきた
                        MainMention.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            MainMention.Items.Insert(0, CreateRetweetedPanel(p.Status.RetweetedStatus, p.Status.User));
                        }));
                        NotifyRetweeted(p.Status.RetweetedStatus, p.Status.User);
                        foreach (var pl in RetweetPlugins) pl.OnRetweet(Service, p.Status.User, p.Status.RetweetedStatus);
                    }
                    else
                    {
                        //他人の公式RTが飛んできた
                        var rto = p.Status.RetweetedStatus;
                        MainTimeline.Items.Insert(0, CreateRetweetPanel(rto, p.Status));
                    }
                }
                else
                {
                    //普通のRT
                    MainTimeline.Items.Insert(0, CreateTweetPanel(p.Status));
                    if (p.Status.Entities.Mentions.Count != 0)
                    {

                    }
                    if (Regex.Match(p.Status.TextDecoded, "@" + CurrentUser.ScreenName).Success)
                    {
                        MainMention.Items.Insert(0, CreateTweetPanel(p.Status));
                        NotifyReplied(p.Status);
                    }
                }

                foreach (var pt in TweetPlugins)
                {
                    pt.OnTweet(Service, CurrentUser, p.Status);
                }
                if (MainTimeline.Items.Count > TimelineMax)
                {
                    MainTimeline.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        MainTimeline.Items.RemoveAt(TimelineMax);
                    }));
                }
                if (MainMention.Items.Count > MentionMax)
                {
                    MainMention.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        MainMention.Items.RemoveAt(MentionMax);
                    }));
                }

            }));
        }