Beispiel #1
0
        private void dgv_SearchArticle_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }

            int currentMouseOverRow = dgv_SearchArticle.HitTest(e.X, e.Y).RowIndex;

            if (currentMouseOverRow >= 0)
            {
                dgv_SearchArticle.ClearSelection();

                dgv_SearchArticle.Rows[currentMouseOverRow].Selected = true;
            }

            if (dgv_SearchArticle.SelectedRows == null || dgv_SearchArticle.SelectedRows.Count == 0)
            {
                return;
            }

            DeleteInformationRow row    = (dgv_SearchArticle.SelectedRows[0] as DeleteInformationRow);
            ArticleInformation   target = row.ArticleInformation;

            string msg = "상태 : " + (target.IsGalleryDeleted ? "삭제됨" : "삭제안됨") + Environment.NewLine
                         + "메시지 : " + (target.DeleteMessage);

            MessageBox.Show(msg, "글 삭제 정보", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Beispiel #2
0
        /// <summary>
        /// 댓글 목록 삭제 함수
        /// </summary>
        /// <param name="both">True : 갤로그도 False : 갤러리만</param>
        private async void RemoveComments(bool both)
        {
            if (dgv_CommentList.Rows.Count <= 0)
            {
                return;
            }

            if (currentTask != CleanerTask.None)
            {
                return;
            }

            if (both)
            {
                SetStatusMessage("쓴 리플 - 갤로그도 삭제중...");
            }
            else
            {
                SetStatusMessage("쓴 리플 - 갤러리만 삭제중...");
            }

            currentTask    = CleanerTask.DeleteGallogComments;
            deleteStartCnt = dgv_CommentList.Rows.Count;
            deleteEndCnt   = 0;

            for (int i = deleteStartCnt - 1; i >= 0; i--)
            {
                DeleteInformationRow row = (dgv_CommentList.Rows[i] as DeleteInformationRow);
                DeleteCommentAsync(row, both);
                await Task.Delay(200);
            }
        }
Beispiel #3
0
        private async void menu_DeleteComment_Clicked(object sender, EventArgs e)
        {
            if (dgv_CommentList.SelectedRows == null || dgv_CommentList.SelectedRows.Count == 0)
            {
                return;
            }

            DeleteInformationRow row    = (dgv_CommentList.SelectedRows[0] as DeleteInformationRow);
            CommentInformation   target = row.CommentInformation;

            if (currentTask != CleanerTask.None)
            {
                return;
            }

            SetStatusMessage("리플을 삭제하는 중입니다...");

            currentTask = CleanerTask.DeleteGallogComments;

            try
            {
                await conn.DeleteComment(target, true);
            }
            catch
            {
                return;
            }

            // 갤로그와 갤러리 둘다 삭제 되었을 경우
            if (target.IsGalleryDeleted && target.IsGallogDeleted)
            {
                if (row.DataGridView != null)
                {
                    row.DataGridView.Rows.Remove(row);
                }
                gb_CommentGroup.Text = "내가 쓴 리플 [" + dgv_CommentList.Rows.Count.ToString() + "]";
                SetStatusMessage("리플을 삭제하였습니다.");
            }
            else
            {
                string rmErrMsg = "";
                if (!target.IsGalleryDeleted)
                {
                    rmErrMsg = "리플을 삭제하는데 실패하였습니다. - 갤러리 삭제 실패";
                }
                else
                {
                    rmErrMsg = "리플을 삭제하는데 실패하였습니다. - 갤로그 삭제 실패";
                }

                SetStatusMessage(rmErrMsg);
            }

            currentTask = CleanerTask.None;
        }
Beispiel #4
0
        private void LoadSearchedList(List <ArticleInformation> searchedList)
        {
            foreach (ArticleInformation info in searchedList)
            {
                DeleteInformationRow nRow = new DeleteInformationRow(info, dgv_SearchArticle, true);
                dgv_SearchArticle.Rows.Add(nRow);
            }

            string loadedCnt = dgv_SearchArticle.Rows.Count.ToString();

            gb_SearchedArticleList.Text = "검색된 글 [" + loadedCnt + "]";
        }
Beispiel #5
0
        private void LoadCommentList(List <CommentInformation> newArticleList)
        {
            foreach (CommentInformation info in newArticleList)
            {
                DeleteInformationRow nRow = new DeleteInformationRow(info, dgv_CommentList);
                dgv_CommentList.Rows.Add(nRow);
            }

            string loadedCnt = dgv_CommentList.Rows.Count.ToString();

            gb_CommentGroup.Text = "내가 쓴 리플 [" + loadedCnt + "]";
        }
Beispiel #6
0
        private void LoadArticleList(List <ArticleInformation> newArticleList)
        {
            foreach (ArticleInformation info in newArticleList)
            {
                DeleteInformationRow nRow = new DeleteInformationRow(info, dgv_ArticleList, false);
                dgv_ArticleList.Rows.Add(nRow);
            }

            string loadedCnt = dgv_ArticleList.Rows.Count.ToString();

            gb_ArticleGroup.Text = "내가 쓴 글 [" + loadedCnt + "]";
        }
Beispiel #7
0
        private async void RemoveSearchedArticles()
        {
            if (dgv_SearchArticle.Rows.Count == 0)
            {
                return;
            }

            if (currentTask != CleanerTask.None)
            {
                return;
            }

            if (!conn.LoginInfo.IsLoggedIn)
            {
                if (string.IsNullOrWhiteSpace(tb_DeletePassword.Text))
                {
                    tb_DeletePassword.Focus();
                    SetStatusMessage("삭제할 비밀번호를 입력해주세요.");
                    return;
                }
            }

            SetStatusMessage("검색된 글 삭제중...");

            currentTask = CleanerTask.DeleteGalleryArticles;

            string      password = tb_DeletePassword.Text.Trim();
            GalleryType gallType = GalleryType.Normal;

            if (rb_NormalGallery.Checked)
            {
                gallType = GalleryType.Normal;
            }
            else if (rb_MinorGallery.Checked)
            {
                gallType = GalleryType.Minor;
            }

            deleteStartCnt = dgv_SearchArticle.Rows.Count;
            deleteEndCnt   = 0;

            for (int i = deleteStartCnt - 1; i >= 0; i--)
            {
                DeleteInformationRow row = (dgv_SearchArticle.Rows[i] as DeleteInformationRow);
                DeleteSearchedArticleAsync(row, gallType, password);
                await Task.Delay(200);
            }
        }
Beispiel #8
0
        private async void DeleteSearchedArticleAsync(DeleteInformationRow row, GalleryType gallType, string password)
        {
            ArticleInformation info = row.ArticleInformation;
            ArticleInformation res  = null;

            try
            {
                if (!conn.LoginInfo.IsLoggedIn)
                {
                    info.GalleryDeleteParameter.Password = password;
                }
                res = await conn.DeleteArticle(info, gallType, false);
            }
            catch { }

            if (!res.IsGalleryDeleted)
            {
                for (int j = 0; j < deleteRetryCnt; j++)
                {
                    // 실패시, Sleep 후 재시도
                    await Task.Delay(deleteRetryTime);

                    res = await conn.DeleteArticle(info, gallType, false);

                    if (res.IsGalleryDeleted)
                    {
                        break;
                    }
                }
            }

            info.IsGalleryDeleted = res.IsGalleryDeleted;
            info.IsGallogDeleted  = res.IsGallogDeleted;
            info.DeleteMessage    = res.DeleteMessage;

            deleteEndCnt++;

            if (!info.IsGalleryDeleted)
            {
                if (deleteStartCnt <= deleteEndCnt)
                {
                    currentTask = CleanerTask.None;

                    SetStatusMessage("검색된 글 삭제 완료");
                }
                return;
            }

            if (row.DataGridView != null)
            {
                row.DataGridView.Rows.Remove(row);
            }
            gb_SearchedArticleList.Text = "검색된 글 [" + dgv_SearchArticle.Rows.Count.ToString() + "]";

            if (deleteStartCnt <= deleteEndCnt)
            {
                currentTask = CleanerTask.None;

                SetStatusMessage("검색된 글 삭제 완료");
            }
        }
Beispiel #9
0
        private async void DeleteCommentAsync(DeleteInformationRow row, bool both)
        {
            CommentInformation info = row.CommentInformation;
            CommentInformation res  = null;

            try
            {
                res = await conn.DeleteComment(info, both);
            }
            catch { }

            if (!res.IsGalleryDeleted || (both && !res.IsGallogDeleted))
            {
                for (int j = 0; j < deleteRetryCnt; j++)
                {
                    // 실패시, Sleep 후 재시도
                    await Task.Delay(deleteRetryTime);

                    res = await conn.DeleteComment(info, both);

                    if (res.IsGalleryDeleted && (!both || res.IsGallogDeleted))
                    {
                        break;
                    }
                }
            }

            info.IsGalleryDeleted = res.IsGalleryDeleted;
            info.IsGallogDeleted  = res.IsGallogDeleted;
            info.DeleteMessage    = res.DeleteMessage;

            deleteEndCnt++;

            if (!info.IsGalleryDeleted || (both && !info.IsGallogDeleted))
            {
                if (deleteStartCnt <= deleteEndCnt)
                {
                    currentTask = CleanerTask.None;

                    if (both)
                    {
                        SetStatusMessage("쓴 리플 - 갤로그도 삭제 완료");
                    }
                    else
                    {
                        SetStatusMessage("쓴 리플 - 갤러리만 삭제 완료");
                    }
                }
                return;
            }

            // 갤로그도 삭제일 경우에만 화면 지움
            if (both)
            {
                if (row.DataGridView != null)
                {
                    row.DataGridView.Rows.Remove(row);
                }
                gb_CommentGroup.Text = "내가 쓴 리플 [" + dgv_CommentList.Rows.Count.ToString() + "]";
            }

            if (deleteStartCnt <= deleteEndCnt)
            {
                currentTask = CleanerTask.None;

                if (both)
                {
                    SetStatusMessage("쓴 리플 - 갤로그도 삭제 완료");
                }
                else
                {
                    SetStatusMessage("쓴 리플 - 갤러리만 삭제 완료");
                }
            }
        }
Beispiel #10
0
        private async void menu_DeleteSearchedArticle_Clicked(object sender, EventArgs e)
        {
            if (dgv_SearchArticle.SelectedRows == null || dgv_SearchArticle.SelectedRows.Count == 0)
            {
                return;
            }

            DeleteInformationRow row    = (dgv_SearchArticle.SelectedRows[0] as DeleteInformationRow);
            ArticleInformation   target = row.ArticleInformation;

            if (currentTask != CleanerTask.None)
            {
                return;
            }

            if (!conn.LoginInfo.IsLoggedIn)
            {
                if (string.IsNullOrWhiteSpace(tb_DeletePassword.Text))
                {
                    tb_DeletePassword.Focus();
                    SetStatusMessage("삭제할 비밀번호를 입력해주세요.");
                    return;
                }
            }

            string      password = tb_DeletePassword.Text.Trim();
            GalleryType gallType = GalleryType.Normal;

            if (rb_NormalGallery.Checked)
            {
                gallType = GalleryType.Normal;
            }
            else if (rb_MinorGallery.Checked)
            {
                gallType = GalleryType.Minor;
            }

            SetStatusMessage("글을 삭제하는 중입니다...");

            currentTask = CleanerTask.DeleteGalleryArticles;

            try
            {
                if (!conn.LoginInfo.IsLoggedIn)
                {
                    target.GalleryDeleteParameter.Password = password;
                }
                await conn.DeleteArticle(target, gallType, false);
            }
            catch
            {
                return;
            }

            // 갤로그와 갤러리 둘다 삭제 되었을 경우
            if (target.IsGalleryDeleted)
            {
                this.Invoke(new Action(() =>
                {
                    if (row.DataGridView != null)
                    {
                        row.DataGridView.Rows.Remove(row);
                    }
                    gb_SearchedArticleList.Text = "검색된 글 [" + dgv_SearchArticle.Rows.Count.ToString() + "]";
                    SetStatusMessage("글을 삭제하였습니다.");
                }));
            }
            else
            {
                string rmErrMsg = "";
                if (!target.IsGalleryDeleted)
                {
                    rmErrMsg = "글을 삭제하는데 실패하였습니다.";
                }

                SetStatusMessage(rmErrMsg);
            }

            currentTask = CleanerTask.None;
        }