Ejemplo n.º 1
0
        //-------------------------------------------------------------------------------------------
        //---------------------------------각종 공용 함수------------------------------------------
        //-------------------------------------------------------------------------------------------

        private void ShowPanel(eTweetPanel panel)
        {
            dicPanel[selectPanel].HideTreeView();
            dicPanel[panel].ShowTreeView();
            TweetInstence.ClearTweet(selectPanel);
            selectPanel = panel;
            if (panel == eTweetPanel.eMention)
            {
                notiMention.isOn = false;
            }
            else if (panel == eTweetPanel.eDm)
            {
                notiDm.isOn = false;
            }
            //패널 띄웠을 때 로딩된 글이 없을 경우 API콜
            if (selectPanel == eTweetPanel.eDm && dicPanel[selectPanel].treeView.Items.Count < 2)
            {
                DalsaeInstence.LoadTweet(eTweetPanel.eDm);
            }
            else if (selectPanel == eTweetPanel.eFavorite && dicPanel[selectPanel].treeView.Items.Count < 2)
            {
                DalsaeInstence.LoadTweet(eTweetPanel.eFavorite);
            }
            else if (selectPanel == eTweetPanel.eMention && dicPanel[selectPanel].treeView.Items.Count < 2)
            {
                DalsaeInstence.LoadTweet(eTweetPanel.eMention);
            }
            dicPanel[selectPanel].Focus();
        }
Ejemplo n.º 2
0
        public void LoadTweetListMore(eTweetPanel panel, long cursor = -1, string userid = "")
        {
            BasePacket packet = null;
            Action <List <ClientTweet> > callback = null;

            if (panel == eTweetPanel.eHome)
            {
                PacketHomeTimeLine pack = new PacketHomeTimeLine();
                pack.max_id = cursor;
                pack.count  = 200;
                packet      = pack;
                callback    = responseInstence.Home;
            }
            else if (panel == eTweetPanel.eMention)
            {
                PacketMentionTimeLine pack = new PacketMentionTimeLine();
                pack.max_id = cursor;
                packet      = pack;
                callback    = responseInstence.Mention;
            }
            else if (panel == eTweetPanel.eFavorite)
            {
                PacketFavoritesList pack = new PacketFavoritesList();
                pack.max_id = cursor;
                packet      = pack;
                callback    = responseInstence.FavoriteTweet;
            }
            else if (panel == eTweetPanel.eUser)
            {
                PacketUserTimeLine pack = new PacketUserTimeLine();
                pack.max_id      = cursor;
                pack.screen_name = userid;
                packet           = pack;
                callback         = responseInstence.UserTweet;
            }
            else if (panel == eTweetPanel.eUserMedia)
            {
                PacketUserTimeLine pack = new PacketUserTimeLine();
                pack.count       = 200.ToString();
                pack.screen_name = userid;
                packet           = pack;
                callback         = responseInstence.UserTweetMedia;
            }
            if (packet != null && callback != null)
            {
                RequestPacket(packet, callback);
            }
        }
Ejemplo n.º 3
0
        private void AddTweetData(eTweetPanel panel, ClientTweet tweet, bool isMore = false)
        {
            dicHashs[panel].Add(tweet.id);
            SetBackground(panel, tweet);
            if (isMore == false)
            {
                if (panel == eTweetPanel.eHome || panel == eTweetPanel.eDm)
                {
                    if (dicTweetTree[panel].Count > ConMaxTweet)
                    {
                        dicHashs[panel].Remove(dicTweetTree[panel][dicTweetTree[panel].Count - 1].id);
                        dicTweetTree[panel].RemoveAt(dicTweetTree[panel].Count - 1);
                    }
                }
                else
                {
                    if (dicTweetTree[panel].Count > ConMaxTweet)
                    {
                        dicHashs[panel].Remove(dicTweetTree[panel][dicTweetTree[panel].Count - 2].id);
                        dicTweetTree[panel].RemoveAt(dicTweetTree[panel].Count - 2);
                    }
                }
                dicTweetTree[panel].Insert(0, tweet);                //list의 앞에 등록해야 순차적으로 표시됨
            }
            else
            {
                dicTweetTree[panel].Insert(dicTweetTree[panel].Count - 1, tweet);                //더 불러오기 버튼 앞에 추가
            }
            if (panel == eTweetPanel.eMention)
            {
                tweet.uiProperty.isHighlight = true;
            }

            if (panel == eTweetPanel.eMention || panel == eTweetPanel.eDm)            //알림
            {
                DalsaeInstence.OnMentionNoti();
            }
            if (tweet.isQTRetweet)
            {
                Manager.APICallAgent.apiInstence.LoadSingleTweet(tweet, tweet.originalTweet.quoted_status_id_str);
            }
            //Application.Current.Dispatcher.BeginInvoke(OnQt, new object[] { tweet });
            //OnQt?.Invoke(tweet);
            //if (tweet.isQTRetweet)
            //{
            //	ThreadPool.QueueUserWorkItem(new WaitCallback(LoadQTRetweet), new object[] { tweet, panel });
            //}
        }
Ejemplo n.º 4
0
        private void SortTweet(eTweetPanel panel)
        {
            if (panel != eTweetPanel.eHome && panel != eTweetPanel.eMention)
            {
                return;
            }

            lock (lockObject)
            {
                List <ClientTweet> listTweet = dicTweetTree[panel].OrderByDescending(x => x.dateTime).ToList();
                dicTweetTree[panel].Clear();
                for (int i = 0; i < listTweet.Count; i++)
                {
                    dicTweetTree[panel].Add(listTweet[i]);
                }
            }
        }
Ejemplo n.º 5
0
        //스트리밍에서 호출하게 될 트윗 추가
        public void AddTweet(eTweetPanel panel, ClientTweet tweet)
        {
            lock (lockObject)
            {
                tweet.Init();
                //if (DataInstence.CheckIsMe(tweet.user.id))//내트윗일 경우 작업
                //{
                //	DataInstence.UpdateMyScreenName(tweet.user.screen_name);//아이디 변경 체크
                //	DataInstence.UpdateMyProfilePicture(tweet.user.profile_image_url);//인장 변경 체크
                //}

                if (dicHashs[panel].Contains(tweet.id))
                {
                    return;                                                    //중복 트윗
                }
                if (DataInstence.isShowTweet(tweet, panel) == false)
                {
                    return;                                                                 //트윗 미표시
                }
                bool isShowTweet = true;
                if (panel == eTweetPanel.eHome)
                {
                    if (DataInstence.option.MatchHighlight(tweet.originalTweet.text) || tweet.isMention)                    //하이라이트,멘션 멘션에 추가
                    {
                        AddTweetData(eTweetPanel.eMention, tweet);
                    }
                    else if (DataInstence.CheckIsMe(tweet.originalTweet.user.id) && tweet.retweeted) //내 트윗 체크(리트윗용)
                    {
                        isShowTweet = DataInstence.option.isShowRetweet;                             //리트윗을 TL표시할경우 추가
                        if (isShowTweet && DataInstence.option.isNotiRetweet)                        //리트윗 멘션함에 오게 할 경우 추가
                        {
                            AddTweetData(eTweetPanel.eMention, tweet);
                        }
                        //if (DataInstence.CheckIsMe(tweet.user.id) && tweet.retweeted_status != null)//내가 한 리트윗
                        //	Retweet(tweet, true);
                    }
                }
                if (isShowTweet)
                {
                    AddTweetData(panel, tweet);
                }

                //if (DataInstence.CheckIsMe(tweet.user.id) && tweet.retweeted_status != null)//리트윗 갱신
                //	Retweet(tweet, true);
            }
        }
Ejemplo n.º 6
0
 public void ClearTweet(eTweetPanel panel)
 {
     if (panel == eTweetPanel.eUser)
     {
         ClearUserTweet();
     }
     else if (panel == eTweetPanel.eFavorite)
     {
         dicTweetTree[panel].Clear();
         dicHashs[panel].Clear();
         dicTweetTree[panel].Add(new ClientTweet());
     }
     else if (panel == eTweetPanel.eDm)
     {
         treeDM.Clear();
         dicHashs[panel].Clear();
     }
 }
Ejemplo n.º 7
0
        public void AddTweet(eTweetPanel panel, List <ClientTweet> listTweet, bool isMore)
        {
            if (isMore)                                   //더 불러오기는 순서가 일반과 반대
            {
                for (int i = 0; i < listTweet.Count; i++) //API콜은 역순으로 등록
                {
                    listTweet[i].Init();
                    if (dicHashs[panel].Contains(listTweet[i].id))
                    {
                        continue;                                                               //중복 트윗
                    }
                    if (DataInstence.isShowTweet(listTweet[i], panel) == false)
                    {
                        continue;                                                                            //트윗 미표시
                    }
                    AddTweetData(panel, listTweet[i], isMore);
                }
            }
            else
            {
                if (panel == eTweetPanel.eUser)
                {
                    ClearUserTweet();                                         //유저트윗 초기화
                }
                for (int i = listTweet.Count - 1; i >= 0; i--)                //더 불러오기가 아닌 거
                {
                    listTweet[i].Init();
                    if (dicHashs[panel].Contains(listTweet[i].id))
                    {
                        continue;                                                               //중복 트윗
                    }
                    if (DataInstence.isShowTweet(listTweet[i], panel) == false)
                    {
                        continue;                                                                            //트윗 미표시
                    }
                    AddTweetData(panel, listTweet[i], isMore);
                }
            }

            SortTweet(panel);
        }
Ejemplo n.º 8
0
        public int FindTweet(eTweetPanel panel, ClientTweet startTweet, string findText)
        {
            ObservableCollection <ClientTweet> tweetList = dicTweetTree[panel];
            int startIndex = tweetList.IndexOf(startTweet);
            int ret        = -1;

            lock (lockObject)
            {
                for (int i = startIndex + 1; i < tweetList.Count; i++)
                {
                    if (tweetList[i].originalTweet == null)
                    {
                        continue;
                    }
                    if (tweetList[i].nameText.IndexOf(findText, StringComparison.CurrentCultureIgnoreCase) > -1 ||
                        tweetList[i].full_text.IndexOf(findText, StringComparison.CurrentCultureIgnoreCase) > -1)
                    {
                        ret = i;
                        break;
                    }
                }
                if (ret == -1)                //끝까지 못 찾았으니 한 번 더 검색
                {
                    for (int i = 0; i < tweetList.Count; i++)
                    {
                        if (tweetList[i].originalTweet == null)
                        {
                            continue;
                        }
                        if (tweetList[i].nameText.IndexOf(findText, StringComparison.CurrentCultureIgnoreCase) > -1 ||
                            tweetList[i].full_text.IndexOf(findText, StringComparison.CurrentCultureIgnoreCase) > -1)
                        {
                            ret = i;
                            break;
                        }
                    }
                }
            }
            return(ret);
        }
Ejemplo n.º 9
0
        public bool isShowTweet(ClientTweet tweet, eTweetPanel panel)
        {
            bool ret = true;

            if (tweet.originalTweet == null)
            {
                App.SendException("isshowtweet org tweet null", "");
                return(false);
            }
            if (tweet.originalTweet.user == null)
            {
                App.SendException("isshowtweet org tweet user null", "");
                return(false);
            }
            try
            {
                if (isBlockUser(tweet.originalTweet.user.id))
                {
                    ret = false;
                }
                else if (tweet.isQTRetweet && tweet.quoted_status != null)                //인용트윗
                {
                    if (tweet.quoted_status.user != null)
                    {
                        ret = !isBlockUser(tweet.quoted_status.user.id);                        //인용트윗의 유저 정보로 block체크하고 flag 뒤집어서 ret
                    }
                }
                else if (tweet.isQTRetweet && tweet.quoted_status == null)
                {
                    ret = false;
                }
                else
                {
                    ret = !isBlockUser(tweet.entities.user_mentions);
                }

                if (ret == false)                //차단 된 유저일 경우 그냥 위에서 return
                {
                    return(ret);
                }

                if (panel == eTweetPanel.eMention)
                {
                    if (option.isMuteMention)                    //멘션함 뮤트일경우 체크체크
                    {
                        if (option.MatchMuteWord(tweet.originalTweet.text))
                        {
                            ret = false;
                        }
                        else if (option.MatchMuteClient(tweet.originalTweet.source))
                        {
                            ret = false;
                        }
                        else if (option.MatchMuteUser(tweet.originalTweet.user.screen_name))
                        {
                            ret = false;
                        }
                        else if (option.MatchMuteTweet(tweet.originalTweet.id))
                        {
                            ret = false;
                        }
                        else if (option.MatchMuteTweet(tweet.in_reply_to_status_id_str))
                        {
                            ret = false;
                        }
                        else if (option.MatchMuteTweet(tweet.originalTweet.in_reply_to_status_id_str))
                        {
                            ret = false;
                        }
                    }
                }
                else if (panel == eTweetPanel.eDm)
                {
                    ret = true;
                }
                else if (panel == eTweetPanel.eUser)
                {
                    if (option.MatchMuteWord(tweet.originalTweet.text))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteClient(tweet.originalTweet.source))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteUser(tweet.originalTweet.user.screen_name))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteUser(tweet.user.screen_name))
                    {
                        ret = false;
                    }
                }
                else
                {
                    if (option.MatchMuteWord(tweet.originalTweet.text))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteClient(tweet.originalTweet.source))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteUser(tweet.originalTweet.user.screen_name))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteUser(tweet.user.screen_name))
                    {
                        ret = false;
                    }
                    else if (isRetweetOffUser(tweet.user.id) && tweet.retweeted)
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteTweet(tweet.originalTweet.id))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteTweet(tweet.originalTweet.in_reply_to_status_id_str))
                    {
                        ret = false;
                    }
                    else if (option.MatchMuteTweet(tweet.in_reply_to_status_id_str))
                    {
                        ret = false;
                    }
                }
            }
            catch (Exception e)
            {
                ret = false;
                App.SendException("isshow tweet", JsonConvert.SerializeObject(tweet));
            }
            return(ret);
        }
Ejemplo n.º 10
0
 public void ShowPanel_ByDele(eTweetPanel panel)
 {
     ShowPanel(panel);
 }
Ejemplo n.º 11
0
 public void LoadTweetMore(eTweetPanel panel, long cursor = -1, string userid = "")
 {
     apiInstence.LoadTweetListMore(panel, cursor, userid);
 }
Ejemplo n.º 12
0
 public void LoadTweet(eTweetPanel panel, string userid = "")
 {
     apiInstence.LoadTweetList(panel, userid);
 }
Ejemplo n.º 13
0
 private void SetBackground(eTweetPanel panel, ClientTweet tweet)
 {
     tweet.uiProperty.isBackOne = dicBack[panel];
     dicBack[panel]             = !dicBack[panel];
 }