//------------------------------------------------------------------------------------------- //---------------------------------각종 공용 함수------------------------------------------ //------------------------------------------------------------------------------------------- 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(); }
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); } }
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 }); //} }
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]); } } }
//스트리밍에서 호출하게 될 트윗 추가 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); } }
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(); } }
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); }
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); }
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); }
public void ShowPanel_ByDele(eTweetPanel panel) { ShowPanel(panel); }
public void LoadTweetMore(eTweetPanel panel, long cursor = -1, string userid = "") { apiInstence.LoadTweetListMore(panel, cursor, userid); }
public void LoadTweet(eTweetPanel panel, string userid = "") { apiInstence.LoadTweetList(panel, userid); }
private void SetBackground(eTweetPanel panel, ClientTweet tweet) { tweet.uiProperty.isBackOne = dicBack[panel]; dicBack[panel] = !dicBack[panel]; }