/// <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 btn_LoadArticles_Click(object sender, EventArgs e) { if (currentTask == CleanerTask.None) { List <ArticleInformation> articleList = new List <ArticleInformation>(); loadingToken = new CancellationTokenSource(); dgv_ArticleList.Rows.Clear(); btn_LoadArticles.Text = "취소"; SetStatusMessage("쓴 글 목록을 불러오는 중입니다..."); currentTask = CleanerTask.LoadGallogArticles; bool cont = true, hasExecption = false; for (int page = 1; cont; page++) { try { var loadResult = await conn.LoadGallogItemAsync <ArticleInformation>(page, loadingToken.Token); articleList.AddRange(loadResult.Item1); cont = loadResult.Item2; if (loadResult.Item1 != null) { LoadArticleList(loadResult.Item1); } } catch (OperationCanceledException) { break; } catch (Exception ex) { hasExecption = true; SetStatusMessage(ex.Message); break; } } currentTask = CleanerTask.None; btn_LoadArticles.Text = "불러오기"; btn_LoadArticles.Enabled = true; if (!hasExecption) { SetStatusMessage("쓴 글 목록을 불러왔습니다 - 총 " + articleList.Count.ToString() + "개"); } loadingToken = null; } else if (currentTask == CleanerTask.LoadGallogArticles) { btn_LoadArticles.Enabled = false; SetStatusMessage("취소하는 중입니다..."); if (loadingToken != null) { loadingToken.Cancel(); } } }
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 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; }
private async void btn_SearchArticle_Click(object sender, EventArgs e) { if (currentTask == CleanerTask.None) { if (string.IsNullOrWhiteSpace(tb_SearchGalleryID.Text)) { tb_SearchGalleryID.Focus(); SetStatusMessage("검색할 갤러리 ID를 입력해주세요."); return; } if (string.IsNullOrWhiteSpace(tb_SearchNickName.Text)) { tb_SearchNickName.Focus(); SetStatusMessage("검색할 닉네임을 입력해주세요."); return; } // 기존 검색목록 삭제 dgv_SearchArticle.Rows.Clear(); string gall_id, nickname; gall_id = tb_SearchGalleryID.Text.Trim(); nickname = tb_SearchNickName.Text.Trim(); GalleryType gallType = GalleryType.Normal; if (rb_NormalGallery.Checked) { gallType = GalleryType.Normal; } else if (rb_MinorGallery.Checked) { gallType = GalleryType.Minor; } btn_SearchArticle.Text = "검색중지"; SetStatusMessage("글 목록을 검색하는 중입니다..."); int delay = 50; int pos = 0; int page = 1; bool cont = false, hasExecption = false; List <ArticleInformation> newSearchedList; Tuple <List <ArticleInformation>, int, int, bool> req = null; currentTask = CleanerTask.SearchGalleryArticles; if (loadingToken == null) { loadingToken = new CancellationTokenSource(); } while (pos != -1) { try { req = await conn.SearchArticleAsync(gall_id, gallType, nickname, pos, page, loadingToken.Token); } catch (OperationCanceledException) { break; } catch (Exception ex) { hasExecption = true; SetStatusMessage(ex.Message); break; } finally { if (req != null) { newSearchedList = req.Item1; pos = req.Item2; page = req.Item3; cont = req.Item4; LoadSearchedList(newSearchedList); newSearchedList.Clear(); newSearchedList = null; } await Task.Delay(delay); } if (!cont || req == null) { break; } } currentTask = CleanerTask.None; btn_SearchArticle.Text = "검색하기"; if (!hasExecption) { SetStatusMessage("검색된 글 목록을 불러왔습니다 - 총 " + dgv_SearchArticle.Rows.Count.ToString() + "개"); } loadingToken = null; } else if (currentTask == CleanerTask.SearchGalleryArticles) { SetStatusMessage("검색을 중단하는 중입니다..."); if (loadingToken != null) { loadingToken.Cancel(); } } }