private async void BT_CompareFriends_Click(object sender, RoutedEventArgs e)
        {
            var ofd = new System.Windows.Forms.OpenFileDialog()
            {
                Filter = "Kakao Friend Data V2|*.kfd2",
                Title  = "친구 목록 불러오기"
            };

            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                var    reader = new System.IO.StreamReader(ofd.FileName);
                string str    = reader.ReadToEnd();
                reader.Close();
                var                loadedFriends      = JsonConvert.DeserializeObject <List <string[]> >(str);
                StringBuilder      builder            = new StringBuilder("삭제된 친구 목록 : \n");
                int                count              = 0;
                int                countExpire        = 0;
                ProgressShowWindow progressShowWindow = new ProgressShowWindow();
                progressShowWindow.Show();
                progressShowWindow.Topmost = true;
                progressShowWindow.Title   = "삭제된 친구 조회";
                int progressCount = 0;
                foreach (string[] friendData in loadedFriends)
                {
                    try
                    {
                        KakaoRequestClass.notShowError = true;
                        var relationship = await KakaoRequestClass.GetProfileRelationship(friendData[1]);

                        KakaoRequestClass.notShowError = false;
                        if (!(relationship.relationship.Equals("F") || relationship.relationship.Equals("FE")))
                        {
                            KakaoRequestClass.notShowError = true;
                            var profile = await KakaoRequestClass.GetProfileFeed(friendData[1], null, true);

                            KakaoRequestClass.notShowError = false;
                            builder.Append(profile.profile.display_name);
                            builder.Append("(저장 당시 닉네임 : ");
                            builder.Append(friendData[2]);
                            builder.Append(") : ");
                            builder.Append(profile.profile.permalink);
                            builder.Append("\n");
                            count++;
                        }
                    }
                    catch (Exception) { countExpire++; }
                    progressCount++;
                    progressShowWindow.PB_Main.Value = ((double)progressCount / loadedFriends.Count) * 100.0;
                }
                Clipboard.SetDataObject(builder.ToString());
                progressShowWindow.isFinish = true;
                progressShowWindow.Close();
                MessageBox.Show($"삭제된 친구 목록이 클립보드에 복사되었습니다.\n삭제된 친구 수 : {count.ToString()}\n탈퇴한 친구 수 : {countExpire.ToString()}", "안내");
            }
        }
        private async void BT_BackupFriends_Click(object sender, RoutedEventArgs e)
        {
            StringBuilder      builder            = new StringBuilder();
            List <string[]>    ids                = new List <string[]>();
            var                friends            = JsonConvert.DeserializeObject <FriendData.Friends>(await KakaoRequestClass.GetFriendData());
            ProgressShowWindow progressShowWindow = new ProgressShowWindow();

            progressShowWindow.Show();
            progressShowWindow.Topmost = true;
            progressShowWindow.Title   = "친구 목록 백업중";
            int progressCount = 0;

            foreach (var friend in friends.profiles)
            {
                try
                {
                    KakaoRequestClass.notShowError = true;
                    var profile = await KakaoRequestClass.GetProfileFeed(friend.id, null, true);

                    KakaoRequestClass.notShowError = false;
                    builder.Append(profile.profile.display_name);
                    builder.Append(" : ");
                    builder.Append(profile.profile.permalink);
                    builder.Append("\n");
                    ids.Add(new string[] { profile.profile.permalink, profile.profile.id, profile.profile.display_name });
                }
                catch (Exception) { }
                progressCount++;
                progressShowWindow.PB_Main.Value = ((double)progressCount / friends.profiles.Count) * 100.0;
            }
            Clipboard.SetDataObject(builder.ToString());
            progressShowWindow.isFinish = true;
            progressShowWindow.Close();
            var sfd = new System.Windows.Forms.SaveFileDialog()
            {
                FileName = DateTime.Now.ToShortDateString() + ".kfd2",
                Filter   = "Kakao Friend Data V2|*.kfd2",
                Title    = "친구 목록 저장"
            };

            if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                var str    = JsonConvert.SerializeObject(ids);
                var writer = new System.IO.StreamWriter(sfd.FileName);
                writer.Write(str);
                writer.Close();
            }
            MessageBox.Show("클립보드에 친구 정보가 복사됐습니다.");
        }
Ejemplo n.º 3
0
        private async void BT_Execute_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("작업을 실행하시겠습니까?\n이 작업은 되돌릴 수 없습니다!", "경고", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                SP_Progress.Visibility       = Visibility.Visible;
                BT_Execute.IsEnabled         = false;
                BT_Execute.Content           = "실행중..";
                CB_Task.IsEnabled            = false;
                CB_Target.IsEnabled          = false;
                CB_Range.IsEnabled           = false;
                CB_ExcludeFavorite.IsEnabled = false;

                TB_Progress.Text       = "준비중...";
                SP_Progress.Visibility = Visibility.Visible;
                PR_Main.IsActive       = true;

                List <CommentData.PostData> posts = new List <CommentData.PostData>();
                await Dispatcher.Invoke(async() =>
                {
                    if ((CB_Task.SelectedIndex == 1 || CB_Task.SelectedIndex == 2) && CB_Target.SelectedIndex == 5)
                    {
                        var bookmarkMain = await KakaoRequestClass.GetBookmark(MainWindow.UserProfile.id, null);
                        while (!isClosed)
                        {
                            foreach (var bookmark in bookmarkMain.bookmarks)
                            {
                                posts.Add(bookmark.activity);
                            }
                            TB_Progress.Text = $"게시글 조회 ({posts.Count})";
                            bookmarkMain     = await KakaoRequestClass.GetBookmark(MainWindow.UserProfile.id, bookmarkMain.bookmarks.Last().id);
                            if (bookmarkMain.bookmarks.Count == 0)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        var feeds = await KakaoRequestClass.GetProfileFeed(MainWindow.UserProfile.id, null);
                        while (!isClosed)
                        {
                            posts.AddRange(feeds.activities);
                            TB_Progress.Text = $"게시글 조회 ({posts.Count})";
                            feeds            = await KakaoRequestClass.GetProfileFeed(MainWindow.UserProfile.id, feeds.activities[feeds.activities.Count - 1].id);
                            if (feeds.activities.Count == 0)
                            {
                                break;
                            }
                        }
                    }
                    PR_Main.IsActive   = false;
                    PR_Main.Visibility = Visibility.Collapsed;

                    PB_Main.Visibility = Visibility.Visible;
                    if (!isClosed)
                    {
                        FeedLoop(posts);
                    }
                });
            }
        }
Ejemplo n.º 4
0
        private async void BT_Confirm_Click(object sender, RoutedEventArgs e)
        {
            BT_Confirm.IsEnabled = false;
            if (MainWindow.IsLoggedIn && !MainWindow.IsOffline)
            {
                int deleted = 0;
                int counted = 0;
                var feed    = await KakaoRequestClass.GetProfileFeed(MainWindow.UserProfile.id, null);

                if (feed.activities.Count == 0)
                {
                    MessageBox.Show("삭제할 게시글이 존재하지 않습니다.");
                    BT_Confirm.IsEnabled = true;
                    return;
                }
                else
                {
                    if (MessageBox.Show("조건에 맞는 게시글을 전부 삭제하시겠습니까?\n이 작업은 되돌릴 수 없습니다!", "경고", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                    {
                        CB_Category.IsEnabled  = false;
                        CB_Exclude.IsEnabled   = false;
                        CB_Include.IsEnabled   = false;
                        CB_Favorite.IsEnabled  = false;
                        TB_Filter.IsEnabled    = false;
                        SP_Progress.Visibility = Visibility.Visible;
                        TB_Progress.Text       = "삭제 준비중...";
                        try
                        {
                            MainWindow.IsLoggedIn = false;
                            async void Delete()
                            {
                                foreach (var activity in feed.activities)
                                {
                                    bool     willDelete = true;
                                    string[] shareIndex = { null, "A", "F", "P", "M" };
                                    if (CB_Category.SelectedIndex == 5)
                                    {
                                        if (!activity.blinded)
                                        {
                                            willDelete = false;
                                        }
                                    }
                                    else if (CB_Category.SelectedIndex > 0 && !activity.permission.Equals(shareIndex[CB_Category.SelectedIndex]))
                                    {
                                        willDelete = false;
                                    }
                                    if (CB_Include.IsChecked == true && !activity.content.Contains(TB_Filter.Text))
                                    {
                                        willDelete = false;
                                    }
                                    if (CB_Exclude.IsChecked == true && activity.content.Contains(TB_Filter.Text))
                                    {
                                        willDelete = false;
                                    }
                                    if (CB_Favorite.IsChecked == true && activity.pinned)
                                    {
                                        willDelete = false;
                                    }

                                    if (willDelete)
                                    {
                                        await Task.Delay(100);

                                        await KakaoRequestClass.DeletePost(activity.id);

                                        deleted++;
                                    }
                                    counted++;
                                    TB_Progress.Text = $"삭제된 게시글/전체 게시글 : {deleted}/{counted}";
                                    if (!activate)
                                    {
                                        break;
                                    }
                                }
                                if (!activate)
                                {
                                    MessageBox.Show("게시글 삭제가 취소됐습니다.", "안내");
                                    MainWindow.IsLoggedIn = true;
                                    await MainWindow.UpdateProfile();

                                    return;
                                }
                                feed = await KakaoRequestClass.GetProfileFeed(MainWindow.UserProfile.id, feed.activities[feed.activities.Count - 1].id);

                                if (feed != null && (feed.activities?.Count ?? 0) > 0)
                                {
                                    Delete();
                                }
                                else
                                {
                                    MessageBox.Show("삭제가 모두 완료됐습니다.", "안내");
                                    MainWindow.IsLoggedIn = true;
                                    await MainWindow.UpdateProfile();

                                    Close();
                                }
                            }
                            Delete();
                        } catch (Exception e2) { MessageBox.Show("작업 도중 알 수 없는 오류가 발생했습니다.\n" + e2.Message); }
                    }
                }
            }
        }
        public async Task RefreshTimeline(string from, bool isClear)
        {
            if (from == null)
            {
                lastOffset = -1;
            }
            BT_Refresh.IsEnabled = false;
            PR_Loading.IsActive  = true;
            TB_RefreshBT.Text    = "갱신중...";
            IC_Refresh.Kind      = MaterialDesignThemes.Wpf.PackIconKind.ProgressClock;

            List <CommentData.PostData> feeds;

            if (!isProfile)
            {
                TimeLineData.TimeLine feedData = await KakaoRequestClass.GetFeed(from);

                nextRequest = feedData.next_since;
                feeds       = feedData.feeds;
            }
            else
            {
                string from2 = from;
                if (showBookmarked)
                {
                    from2 = null;
                }
                var profile = await KakaoRequestClass.GetProfileFeed(profileID, from2);

                relationship = await KakaoRequestClass.GetProfileRelationship(profileID);

                if (profile.profile.bg_image_url != null)
                {
                    string imgUri = profile.profile.profile_video_url_square_small ?? profile.profile.profile_image_url2;
                    if (Properties.Settings.Default.GIFProfile && profile.profile.profile_video_url_square_small != null)
                    {
                        imgUri = profile.profile.profile_video_url_square_small;
                    }
                    GlobalHelper.AssignImage(IMG_Profile, imgUri);
                    GlobalHelper.AssignImage(IMG_ProfileBG, profile.profile.bg_image_url);
                    IMG_Profile.MouseLeftButtonDown   += GlobalHelper.SaveImageHandler;
                    IMG_ProfileBG.MouseLeftButtonDown += GlobalHelper.SaveImageHandler;

                    TB_Name.Text = profile.profile.display_name;

                    if (profile.profile.status_objects?.Count > 0)
                    {
                        TB_Desc.Text = profile.profile.status_objects?[0]?.message ?? "한줄 소개 없음";
                    }
                    else
                    {
                        TB_Desc.Text = "한줄 소개 없음";
                    }

                    TB_Desc2.Text  = profile.mutual_friend?.message ?? "함께 아는 친구 없음";
                    TB_Desc2.Text += "/ " + profile.profile.activity_count.ToString() + "개의 스토리";
                }
                GD_Favorite.Visibility = Visibility.Collapsed;
                if (relationship.relationship.Equals("F"))
                {
                    IC_Friend.Kind         = MaterialDesignThemes.Wpf.PackIconKind.AccountMinus;
                    IC_Friend.ToolTip      = "친구 삭제";
                    GD_Favorite.Visibility = Visibility.Visible;
                    if (profile.profile.is_favorite)
                    {
                        IC_Favorite.Fill = Brushes.OrangeRed;
                    }
                    else
                    {
                        IC_Favorite.Fill = Brushes.Gray;
                    }
                    MainWindow.SetClickObject(IC_Favorite);
                    ICP_Favorite.MouseEnter += (s, e) =>
                    {
                        Mouse.OverrideCursor = Cursors.Hand;
                        e.Handled            = true;
                    };
                    async void onMouseDown(object s, MouseButtonEventArgs e)
                    {
                        await KakaoRequestClass.FavoriteRequest(profile.profile.id, profile.profile.is_favorite);

                        await RefreshTimeline(null, true);

                        e.Handled = true;
                    }

                    IC_Favorite.MouseLeftButtonDown  += onMouseDown;
                    ICP_Favorite.MouseLeftButtonDown += onMouseDown;
                }
                else if (relationship.relationship.Equals("R"))
                {
                    IC_Friend.Kind    = MaterialDesignThemes.Wpf.PackIconKind.AccountRemove;
                    IC_Friend.ToolTip = "친구 신청 취소";
                }
                else if (relationship.relationship.Equals("C"))
                {
                    IC_Friend.Kind    = MaterialDesignThemes.Wpf.PackIconKind.AccountQuestionMark;
                    IC_Friend.ToolTip = "친구 신청 처리";
                }
                else if (relationship.relationship.Equals("N"))
                {
                    IC_Friend.Kind    = MaterialDesignThemes.Wpf.PackIconKind.AccountPlus;
                    IC_Friend.ToolTip = "친구 추가";
                }
                else
                {
                    IC_Friend.Visibility = Visibility.Collapsed;
                }

                BT_Write.Visibility = Visibility.Collapsed;
                if (profile.activities.Count > 15)
                {
                    nextRequest = profile.activities.Last().id;
                }

                if (MainWindow.UserProfile.id.Equals(profileID) && showBookmarked != true)
                {
                    Title         = "내 프로필";
                    TB_Desc2.Text = profile.profile.activity_count.ToString() + "개의 스토리";
                }
                else
                {
                    Title = profile.profile.display_name + "님의 프로필";
                }
                if (showBookmarked)
                {
                    Title = "관심글 조회";
                    var bookmarks = await KakaoRequestClass.GetBookmark(profileID, from);

                    var feedsNow = new List <CommentData.PostData>();
                    foreach (var bookmark in bookmarks.bookmarks)
                    {
                        if (bookmark.status == 0)
                        {
                            feedsNow.Add(bookmark.activity);
                        }
                    }
                    feeds       = feedsNow;
                    nextRequest = bookmarks.bookmarks.Last().id;
                }
                else
                {
                    feeds = profile.activities;
                }
            }

            if (isProfile && feeds.Count != 18)
            {
                scrollEnd = true;
            }

            if (isClear)
            {
                SP_Content.Children.Clear();
                SV_Content.ScrollToVerticalOffset(0);
            }
            foreach (var feed in feeds)
            {
                if (feed.verb.Equals("post") || feed.verb.Equals("share"))
                {
                    TimeLinePageControl tlp = GenerateTimeLinePageControl(feed);
                    SP_Content.Children.Add(tlp);
                    SP_Content.Children.Add(new Rectangle()
                    {
                        Height = 10,
                        Fill   = Brushes.Transparent
                    });
                }
                else if (feed.verb.Equals("bundled_feed"))
                {
                    try
                    {
                        if (feed.bundled_feed != null && feed.bundled_feed.type.Equals("share"))
                        {
                            CommentData.PostData feedNow = feed.bundled_feed.activities?[0];
                            if (feedNow != null)
                            {
                                feedNow.@object = feed.bundled_feed.original_activity;
                                TimeLinePageControl tlp = GenerateTimeLinePageControl(feedNow);
                                GlobalHelper.SetShareFriendsTB(tlp.TB_Title, feed.bundled_feed.title_decorators);
                                tlp.TB_Title.Visibility    = Visibility.Visible;
                                tlp.TB_TitleSep.Visibility = Visibility.Visible;
                                SP_Content.Children.Add(tlp);
                                SP_Content.Children.Add(new Rectangle()
                                {
                                    Height = 10,
                                    Fill   = Brushes.Transparent
                                });
                            }
                        }
                        else if (feed.bundled_feed != null && feed.bundled_feed.type.Equals("up"))
                        {
                            CommentData.PostData feedNow = feed.bundled_feed.original_activity;
                            if (feedNow != null)
                            {
                                TimeLinePageControl tlp = GenerateTimeLinePageControl(feedNow);
                                GlobalHelper.SetShareFriendsTB(tlp.TB_Title, feed.bundled_feed.title_decorators);
                                tlp.TB_Title.Visibility    = Visibility.Visible;
                                tlp.TB_TitleSep.Visibility = Visibility.Visible;
                                SP_Content.Children.Add(tlp);
                                SP_Content.Children.Add(new Rectangle()
                                {
                                    Height = 10,
                                    Fill   = Brushes.Transparent
                                });
                            }
                        }
                    }
                    catch (Exception) { }
                }
            }
            BT_Refresh.IsEnabled = true;
            TB_RefreshBT.Text    = "새로고침";
            IC_Refresh.Kind      = MaterialDesignThemes.Wpf.PackIconKind.Refresh;

            PR_Loading.IsActive = false;
            return;
        }