Example #1
0
        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);
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
 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, "请先添加用户。");
     }
 }
Example #5
0
        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, "请先添加用户。");
            }
        }
Example #6
0
        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);
                }
            }
        }
Example #7
0
 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);
         }
     }
 }
Example #8
0
        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());
            }
        }
Example #9
0
        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);
                        }
                    }
                });
            }
        }
Example #10
0
        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);
                    }
                });
            }
        }