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); }
/// <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); } }
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; }
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 + "]"; }
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 + "]"; }
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 + "]"; }
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); } }
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("검색된 글 삭제 완료"); } }
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("쓴 리플 - 갤러리만 삭제 완료"); } } }
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; }