private bool Save() { var pt = PTFactory.GetPT(User.Site.Id, User) as AbstractPT; try { if (AppService.UpdateOrInsertUser(User) <= 0) { FormUtils.ShowErrMessage("很抱歉,由于未知原因保存失败。"); return(false); } else { if (!rtbInput.Text.IsNullOrEmptyOrWhiteSpace()) { YUUtils.WriteCookiesToDisk(pt.GetCookieFilePath(), rtbInput.Text); } return(true); } } catch (System.Data.SQLite.SQLiteException ex) { string errMsg = ex.GetInnerExceptionMessage(); FormUtils.ShowErrMessage(string.Format("保存失败,失败原因:{0}", errMsg)); Logger.Error(string.Format("用户[{0}]保存失败。", User.UserName), ex); return(false); } }
private void cmbSite_SelectedIndexChanged(object sender, EventArgs e) { var user = Global.Users.Where(x => (int)x.Site.Id == (int)cmbSite.SelectedValue).FirstOrDefault(); if (user != null) { User = ObjectUtils.CreateCopy <PTUser>(user); ReBindControl(); } else { var site = Global.Sites.Where(x => (int)x.Id == (int)cmbSite.SelectedValue).FirstOrDefault(); if (site != null) { User.Site = ObjectUtils.CreateCopy <PTSite>(site); } } var pt = PTFactory.GetPT(User.Site.Id, User) as AbstractPT; if (File.Exists(pt.GetCookieFilePath())) { rtbInput.Text = File.ReadAllText(pt.GetCookieFilePath()); } else { rtbInput.Text = string.Empty; } }
private void DownLoadFiles(bool isOepn = false) { if (dgvTorrent.SelectedRows != null && dgvTorrent.SelectedRows.Count > 0) { var searchTorrents = dgvTorrent.Tag as List <PTTorrent>; DataGridViewCellCollection cells = dgvTorrent.SelectedRows[0].Cells; string torrentId = cells["Id"].Value.TryPareValue <string>(); YUEnums.PTEnum siteId = (YUEnums.PTEnum)EnumUtils.GetKeyByValue <YUEnums.PTEnum>(cells["SiteId"].Value.TryPareValue <string>()); if (searchTorrents != null && searchTorrents.Count > 0) { var torrent = searchTorrents.Where(x => x.Id == torrentId && x.SiteId == siteId).FirstOrDefault(); if (torrent != null) { Task t = Task.Run(() => { IPT pt = PTFactory.GetPT(siteId, Global.Users.Where(x => x.Site.Id == siteId).FirstOrDefault()); string fileName = pt.GetTorrentDownFileName(torrent); string filePath = string.Empty; this.Invoke(new Action(() => { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = fileName; sfd.Filter = "TORRENT 文件|*.torrent;"; if (sfd.ShowDialog() == DialogResult.OK) { filePath = sfd.FileName; var downTask = Task.Run(() => { HttpUtils.DownLoadFiles(torrent.DownUrl, filePath, 1024, (pt as AbstractPT).Cookie, isOepn); }); TaskCallBack(downTask, "下载种子过程中出现错误,错误原因:"); } })); }); TaskCallBack(t, "下载种子过程中出现错误,错误原因:"); } } else { LogMessage(PTSite.Sites.Where(x => x.Id == siteId).FirstOrDefault(), string.Format("下载失败,失败原因:获取种子信息失败。"), true); } } }
private void Sign() { if (Global.Users != null && Global.Users.Count > 0) { LogMessage(null, "正在启动签到。"); foreach (var user in Global.Users) { IPT pt = PTFactory.GetPT(user.Site.Id, user); string msg = pt.Sign(); LogMessage(user.Site, msg); } LogMessage(null, "全部签到完毕。"); } else { LogMessage(null, "请先添加用户。"); } }
private void Login() { if (Global.Users != null && Global.Users.Count > 0) { LogMessage(null, "正在启动登录。"); List <KeyValuePair <string, SQLiteParameter[]> > sqlList = new List <KeyValuePair <string, SQLiteParameter[]> >(); foreach (var user in Global.Users) { bool isNeedUpdate = user.Id <= 0; AbstractPT pt = PTFactory.GetPT(user.Site.Id, user) as AbstractPT; pt.VerificationCode += Pt_VerificationCode; pt.TwoStepVerification += Pt_TwoStepVerification; string msg = pt.Login(); if (isNeedUpdate && pt.User != null && pt.User.Id > 0) { user.Id = pt.User.Id; string sql = "UPDATE USER SET USERID = @USERID WHERE PTSITEID = @PTSITEID AND USERNAME = @USERNAME "; SQLiteParameter[] parms = new SQLiteParameter[] { new SQLiteParameter("@USERID", DbType.Int32), new SQLiteParameter("@PTSITEID", DbType.Int32), new SQLiteParameter("@USERNAME", DbType.String), }; parms[0].Value = pt.User.Id; parms[1].Value = pt.User.Site.Id; parms[2].Value = pt.User.UserName; sqlList.Add(new KeyValuePair <string, SQLiteParameter[]>(sql, parms)); } LogMessage(user.Site, msg); } if (sqlList.Count > 0) { DBUtils.ExecuteNonQueryBatch(sqlList); } LogMessage(null, "全部登录完毕。"); } else { LogMessage(null, "请先添加用户。"); } }
private void BtnDel_Click(object sender, EventArgs e) { PTUser user = ((sender as Control).Tag as PTUser); if (user == null) { throw new Exception("获取用户数据失败。"); } else { if (AppService.DeleteUser(user.Site.Id) > 0) { var pt = PTFactory.GetPT(user.Site.Id, user) as AbstractPT; pt.DelLocalCookie(); OnUserChangeEventArgs el = new OnUserChangeEventArgs(); el.User = user; OnUserChanged(el); } } }
private void OnUserChanged(OnUserChangeEventArgs e) { if (e.User != null) { try { var pt = PTFactory.GetPT(e.User.Site.Id, e.User); (pt as AbstractPT).DelLocalCookie(); } catch (Exception ex) { Logger.Error(string.Format("{0} 用户名:{1} 删除Cookie出错。", e.User.Site.Id, e.User.UserName), ex); } Global.InitUser(); InitUser(); if (UserChanged != null) { UserChanged.Invoke(this, e); } } }
public UserFrm(PTUser user) { if (user == null) { User = new PTUser(); } else { User = ObjectUtils.CreateCopy <PTUser>(user); } InitializeComponent(); YUEnums.PTEnum selectSiteId = User.Site != null ? User.Site.Id : 0; //绑定数据源,必须是属性,不能为字段 BindingSource bs = new BindingSource(); bs.DataSource = ObjectUtils.CreateCopy <Dictionary <YUEnums.PTEnum, string> >(Global.Sites.ToDictionary(x => x.Id, x => x.Name)); cmbSite.ValueMember = "Key"; cmbSite.DisplayMember = "Value"; cmbSite.DataSource = bs; if (selectSiteId != 0) { cmbSite.SelectedValue = selectSiteId; } ReBindControl(); var pt = PTFactory.GetPT(User.Site.Id, User) as AbstractPT; if (File.Exists(pt.GetCookieFilePath())) { rtbInput.Text = File.ReadAllText(pt.GetCookieFilePath()); } }
private void SyncPersonInfo(bool isBack = false) { this.Invoke(new Action(() => { tabMain.SelectTab("tabPersonInfo"); })); if (Global.Users != null || Global.Users.Count > 0) { bool isFill = false; StringBuilder sb = new StringBuilder(); var cts = new CancellationTokenSource(); Task task = new Task(() => { List <PTInfo> infos = new List <PTInfo>(); Parallel.ForEach(Global.Users, (user, state, i) => { IPT pt = PTFactory.GetPT(user.Site.Id, Global.Users.Where(x => x.Site.Id == user.Site.Id).FirstOrDefault()); //IPT pt = PTFactory.GetPT(YUEnums.PTEnum.MTEAM, Global.Users.Where(x => x.Site.Id == YUEnums.PTEnum.MTEAM).FirstOrDefault()); //假设4核Cpu,5个任务,因为是并行的原因,如果前4个在并行执行的过程任意一个发生了异常,那么此时前4个中其他3个还会继续执行到结束,但最后一个是不会执行的,所以这里需要做异常捕获处理。 try { infos.Add(pt.GetPersonInfo()); lock (syncInfoObject) { FillPersonInfo(infos, ref isFill); } } catch (Exception ex) { lock (syncInfoObject) sb.AppendLine(ex.GetInnerExceptionMessage()); } }); }, cts.Token); if (!isBack) { progressPanel.BeginLoading(); } task.Start(); cts.CancelAfter(20000); task.ContinueWith(result => { if (!isBack) { this.Invoke(new Action(() => { progressPanel.StopLoading(); })); } bool isOpen = !isBack && !isFill; if (cts.Token.IsCancellationRequested) { LogMessage(null, "同步过程出现错误,错误原因:超时。", isOpen); } else { string errMsg = sb.ToString(); if (!errMsg.IsNullOrEmptyOrWhiteSpace()) { LogMessage(null, errMsg, isOpen); } } }); } }
private void SearchTorrent(List <PTSite> searchSites, string searchKey) { if (searchSites != null && searchSites.Count > 0) { bool isFill = false; List <PTTorrent> searchTorrents = new List <PTTorrent>(); StringBuilder sb = new StringBuilder(); var cts = new CancellationTokenSource(); YUEnums.PromotionType promotionType = (YUEnums.PromotionType)cmbPromotion.SelectedValue; YUEnums.AliveType aliveType = (YUEnums.AliveType)cmbAlive.SelectedValue; YUEnums.FavType favType = (YUEnums.FavType)cmbFav.SelectedValue; Task task = new Task(() => { Parallel.ForEach(searchSites.Distinct(), (site, state, i) => { //即便日后支持站点多用户,这里也只会取第一个用户。 AbstractPT pt = PTFactory.GetPT(site.Id, Global.Users.Where(x => x.Site.Id == site.Id).FirstOrDefault()) as AbstractPT; //假设4核Cpu,5个任务,因为是并行的原因,如果前4个在并行执行的过程任意一个发生了异常,那么此时前4个中其他3个还会继续执行到结束,但最后一个是不会执行的,所以这里需要做异常捕获处理。 try { List <PTTorrent> torrents = pt.SearchTorrent(searchKey, promotionType, aliveType, favType); lock (syncSearchObject) { if (torrents != null && torrents.Count > 0) { searchTorrents.AddRange(torrents); } } } catch (Exception ex) { lock (syncSearchObject) sb.AppendLine(ex.GetInnerExceptionMessage()); } }); }, cts.Token); progressPanel.BeginLoading(20000); task.Start(); cts.Token.Register(new Action(() => { if (!isFill) { FillTorrent(searchTorrents, ref isFill); bool isOpen = searchTorrents.Count <= 0; if (cts.Token.IsCancellationRequested) { LogMessage(null, "搜索过程出现错误,错误原因:超时。", isOpen); } } })); cts.CancelAfter(20000); task.ContinueWith(result => { if (!cts.Token.IsCancellationRequested && !isFill) { FillTorrent(searchTorrents, ref isFill); } string errMsg = sb.ToString(); if (!errMsg.IsNullOrEmptyOrWhiteSpace()) { bool isOpen = searchTorrents.Count <= 0; LogMessage(null, errMsg.TrimEnd(), isOpen); } }); } }