From 47fa3babdec7095eeadb343d60a27b4269ab4bf7 Mon Sep 17 00:00:00 2001 From: qi rui yang <1844812067@qq.com> Date: Sat, 19 Nov 2016 15:14:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=AD=E7=82=B9=E7=BB=AD?= =?UTF-8?q?=E4=BC=A0(=E6=B5=8B=E8=AF=95)=20=E4=BF=AE=E5=A4=8D=E8=8B=A5?= =?UTF-8?q?=E5=B9=B2bug=20=E8=AF=A6=E7=BB=86=E6=9B=B4=E6=96=B0=E8=AF=B7?= =?UTF-8?q?=E7=9C=8B=E6=9B=B4=E6=96=B0=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BaiduPanDownload/BaiduPanDownload.csproj | 45 +-- BaiduPanDownload/Forms/AddDownload.cs | 19 +- .../Forms/DownloadInfo.Designer.cs | 129 ------- BaiduPanDownload/Forms/DownloadInfo.cs | 81 ---- BaiduPanDownload/Forms/DownloadInfo.resx | 126 ------- BaiduPanDownload/Forms/Main.Designer.cs | 356 ++++++------------ BaiduPanDownload/Forms/Main.cs | 138 ++----- BaiduPanDownload/Forms/Main.resx | 200 +++++----- BaiduPanDownload/Forms/Video.Designer.cs | 67 ---- BaiduPanDownload/Forms/Video.cs | 29 -- BaiduPanDownload/Forms/Video.resx | 131 ------- .../HttpTool/Download/DownloadInfo.cs | 97 +++++ .../HttpTool/Download/DownloadThread.cs | 113 ++++++ .../HttpTool/Download/HttpDownload.cs | 199 ++++++++++ BaiduPanDownload/HttpTool/DownloadThread.cs | 179 --------- BaiduPanDownload/HttpTool/HttpDownload.cs | 256 ------------- BaiduPanDownload/HttpTool/HttpTask.cs | 45 --- BaiduPanDownload/HttpTool/HttpUpload.cs | 280 -------------- BaiduPanDownload/HttpTool/SuperDownload.cs | 217 ----------- BaiduPanDownload/Managers/TaskManager.cs | 171 +++++---- BaiduPanDownload/Program.cs | 11 +- BaiduPanDownload/Util/FileTool/Config.cs | 37 +- Test/Download/DownloadInfo.cs | 2 +- Test/Download/DownloadThread.cs | 31 +- Test/Download/HttpDownload.cs | 50 ++- Test/Program.cs | 10 +- 26 files changed, 898 insertions(+), 2121 deletions(-) delete mode 100644 BaiduPanDownload/Forms/DownloadInfo.Designer.cs delete mode 100644 BaiduPanDownload/Forms/DownloadInfo.cs delete mode 100644 BaiduPanDownload/Forms/DownloadInfo.resx delete mode 100644 BaiduPanDownload/Forms/Video.Designer.cs delete mode 100644 BaiduPanDownload/Forms/Video.cs delete mode 100644 BaiduPanDownload/Forms/Video.resx create mode 100644 BaiduPanDownload/HttpTool/Download/DownloadInfo.cs create mode 100644 BaiduPanDownload/HttpTool/Download/DownloadThread.cs create mode 100644 BaiduPanDownload/HttpTool/Download/HttpDownload.cs delete mode 100644 BaiduPanDownload/HttpTool/DownloadThread.cs delete mode 100644 BaiduPanDownload/HttpTool/HttpDownload.cs delete mode 100644 BaiduPanDownload/HttpTool/HttpTask.cs delete mode 100644 BaiduPanDownload/HttpTool/HttpUpload.cs delete mode 100644 BaiduPanDownload/HttpTool/SuperDownload.cs diff --git a/BaiduPanDownload/BaiduPanDownload.csproj b/BaiduPanDownload/BaiduPanDownload.csproj index 087cfe5..20be70d 100644 --- a/BaiduPanDownload/BaiduPanDownload.csproj +++ b/BaiduPanDownload/BaiduPanDownload.csproj @@ -104,12 +104,6 @@ AddDownload.cs - - Form - - - DownloadInfo.cs - Form @@ -134,15 +128,9 @@ NewDir.cs - - Form - - - Video.cs - - - - + + + @@ -150,8 +138,6 @@ - - @@ -159,9 +145,6 @@ AddDownload.cs - - DownloadInfo.cs - InPutCode.cs @@ -174,9 +157,6 @@ NewDir.cs - - Video.cs - ResXFileCodeGenerator Resources.Designer.cs @@ -221,25 +201,6 @@ true - - - {6BF52A50-394A-11D3-B153-00C04F79FAA6} - 1 - 0 - 0 - aximp - False - - - {6BF52A50-394A-11D3-B153-00C04F79FAA6} - 1 - 0 - 0 - tlbimp - False - True - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 151, 17 - - - 17, 17 - - \ No newline at end of file diff --git a/BaiduPanDownload/Forms/Main.Designer.cs b/BaiduPanDownload/Forms/Main.Designer.cs index 650e95e..103d812 100644 --- a/BaiduPanDownload/Forms/Main.Designer.cs +++ b/BaiduPanDownload/Forms/Main.Designer.cs @@ -63,34 +63,25 @@ private void InitializeComponent() this.Schedule = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.State = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.DownLoadListMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.状态操作ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.暂停ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.开始ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.继续ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.终止ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.打开目录ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tabPage3 = new System.Windows.Forms.TabPage(); this.label2 = new System.Windows.Forms.Label(); this.tabPage4 = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.Save_Button = new System.Windows.Forms.Button(); - this.label10 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.SuperDLSize_Textbox = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.NetSpeed_TextBox = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.button4 = new System.Windows.Forms.Button(); - this.DownloadPath_TextBox = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.ComboBox = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); this.UpdateDownLoadList_Timer = new System.Windows.Forms.Timer(this.components); this.Test_Button = new System.Windows.Forms.Button(); - this.label11 = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.DownloadPath_TextBox = new System.Windows.Forms.TextBox(); + this.button4 = new System.Windows.Forms.Button(); + this.NetSpeed_TextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.Save_Button = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); this.InfoMenu.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); @@ -99,7 +90,6 @@ private void InitializeComponent() this.tabPage3.SuspendLayout(); this.tabPage4.SuspendLayout(); this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); this.SuspendLayout(); // // button1 @@ -413,42 +403,34 @@ private void InitializeComponent() // DownLoadListMenu // this.DownLoadListMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.状态操作ToolStripMenuItem, + this.暂停ToolStripMenuItem, + this.继续ToolStripMenuItem, + this.终止ToolStripMenuItem, this.打开目录ToolStripMenuItem}); this.DownLoadListMenu.Name = "DownLoadListMenu"; - this.DownLoadListMenu.Size = new System.Drawing.Size(125, 48); + this.DownLoadListMenu.Size = new System.Drawing.Size(125, 92); this.DownLoadListMenu.Opening += new System.ComponentModel.CancelEventHandler(this.DownLoadListMenu_Opening); // - // 状态操作ToolStripMenuItem - // - this.状态操作ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.暂停ToolStripMenuItem, - this.开始ToolStripMenuItem, - this.终止ToolStripMenuItem}); - this.状态操作ToolStripMenuItem.Name = "状态操作ToolStripMenuItem"; - this.状态操作ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); - this.状态操作ToolStripMenuItem.Text = "状态操作"; - // // 暂停ToolStripMenuItem // this.暂停ToolStripMenuItem.Name = "暂停ToolStripMenuItem"; - this.暂停ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.暂停ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); this.暂停ToolStripMenuItem.Text = "暂停"; this.暂停ToolStripMenuItem.Click += new System.EventHandler(this.暂停ToolStripMenuItem_Click); // - // 开始ToolStripMenuItem + // 继续ToolStripMenuItem // - this.开始ToolStripMenuItem.Name = "开始ToolStripMenuItem"; - this.开始ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); - this.开始ToolStripMenuItem.Text = "继续"; - this.开始ToolStripMenuItem.Click += new System.EventHandler(this.开始ToolStripMenuItem_Click); + this.继续ToolStripMenuItem.Name = "继续ToolStripMenuItem"; + this.继续ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.继续ToolStripMenuItem.Text = "继续"; + this.继续ToolStripMenuItem.Click += new System.EventHandler(this.继续ToolStripMenuItem_Click); // // 终止ToolStripMenuItem // this.终止ToolStripMenuItem.Name = "终止ToolStripMenuItem"; - this.终止ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.终止ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); this.终止ToolStripMenuItem.Text = "终止"; - this.终止ToolStripMenuItem.Click += new System.EventHandler(this.终止ToolStripMenuItem_Click); + this.终止ToolStripMenuItem.Click += new System.EventHandler(this.终止ToolStripMenuItem_Click_1); // // 打开目录ToolStripMenuItem // @@ -490,98 +472,73 @@ private void InitializeComponent() this.tabPage4.Text = "设置"; this.tabPage4.UseVisualStyleBackColor = true; // - // groupBox1 - // - this.groupBox1.Controls.Add(this.Save_Button); - this.groupBox1.Controls.Add(this.groupBox2); - this.groupBox1.Controls.Add(this.button4); - this.groupBox1.Controls.Add(this.DownloadPath_TextBox); - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.ComboBox); - this.groupBox1.Location = new System.Drawing.Point(6, 6); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(402, 449); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "下载设置"; + // label12 // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label10); - this.groupBox2.Controls.Add(this.label9); - this.groupBox2.Controls.Add(this.SuperDLSize_Textbox); - this.groupBox2.Controls.Add(this.label8); - this.groupBox2.Controls.Add(this.label7); - this.groupBox2.Controls.Add(this.NetSpeed_TextBox); - this.groupBox2.Controls.Add(this.label6); - this.groupBox2.Location = new System.Drawing.Point(8, 120); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(381, 292); - this.groupBox2.TabIndex = 6; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "加速下载设置"; + this.label12.AutoSize = true; + this.label12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label12.Location = new System.Drawing.Point(410, 65); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(272, 238); + this.label12.TabIndex = 2; + this.label12.Text = resources.GetString("label12.Text"); // - // Save_Button + // label11 // - this.Save_Button.Location = new System.Drawing.Point(144, 417); - this.Save_Button.Name = "Save_Button"; - this.Save_Button.Size = new System.Drawing.Size(102, 27); - this.Save_Button.TabIndex = 7; - this.Save_Button.Text = "保存"; - this.Save_Button.UseVisualStyleBackColor = true; - this.Save_Button.Click += new System.EventHandler(this.Save_Button_Click); + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label11.Location = new System.Drawing.Point(518, 20); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(42, 22); + this.label11.TabIndex = 1; + this.label11.Text = "说明"; // - // label10 + // UpdateDownLoadList_Timer // - this.label10.AutoSize = true; - this.label10.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.label10.Location = new System.Drawing.Point(6, 113); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(374, 17); - this.label10.TabIndex = 6; - this.label10.Text = "说明:如果小文件使用加速下载可能会出现意料之外的错误,请酌情设置"; + this.UpdateDownLoadList_Timer.Enabled = true; + this.UpdateDownLoadList_Timer.Interval = 1000; + this.UpdateDownLoadList_Timer.Tick += new System.EventHandler(this.UpdateDownLoadList_Timer_Tick); // - // label9 + // Test_Button // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(248, 90); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(89, 12); - this.label9.TabIndex = 5; - this.label9.Text = "MB使用加速下载"; + this.Test_Button.Location = new System.Drawing.Point(305, 523); + this.Test_Button.Name = "Test_Button"; + this.Test_Button.Size = new System.Drawing.Size(75, 23); + this.Test_Button.TabIndex = 12; + this.Test_Button.Text = "Test"; + this.Test_Button.UseVisualStyleBackColor = true; + this.Test_Button.Visible = false; + this.Test_Button.Click += new System.EventHandler(this.Test_Button_Click); // - // SuperDLSize_Textbox + // label5 // - this.SuperDLSize_Textbox.Location = new System.Drawing.Point(174, 86); - this.SuperDLSize_Textbox.Name = "SuperDLSize_Textbox"; - this.SuperDLSize_Textbox.Size = new System.Drawing.Size(65, 21); - this.SuperDLSize_Textbox.TabIndex = 4; - this.SuperDLSize_Textbox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SuperDLSize_Textbox_KeyPress); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 24); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(77, 12); + this.label5.TabIndex = 3; + this.label5.Text = "默认下载路径"; // - // label8 + // DownloadPath_TextBox // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(91, 90); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(77, 12); - this.label8.TabIndex = 3; - this.label8.Text = "文件大小超过"; + this.DownloadPath_TextBox.Location = new System.Drawing.Point(89, 20); + this.DownloadPath_TextBox.Name = "DownloadPath_TextBox"; + this.DownloadPath_TextBox.ReadOnly = true; + this.DownloadPath_TextBox.Size = new System.Drawing.Size(259, 21); + this.DownloadPath_TextBox.TabIndex = 4; // - // label7 + // button4 // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.label7.Location = new System.Drawing.Point(3, 59); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(377, 17); - this.label7.TabIndex = 2; - this.label7.Text = "说明:根据物理带宽进行下载加速,请如实填写,填写过高会加大出错风险"; + this.button4.Location = new System.Drawing.Point(354, 20); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(35, 23); + this.button4.TabIndex = 5; + this.button4.Text = "..."; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); // // NetSpeed_TextBox // - this.NetSpeed_TextBox.Location = new System.Drawing.Point(173, 28); + this.NetSpeed_TextBox.Location = new System.Drawing.Point(181, 56); this.NetSpeed_TextBox.MaxLength = 3; this.NetSpeed_TextBox.Name = "NetSpeed_TextBox"; this.NetSpeed_TextBox.Size = new System.Drawing.Size(65, 21); @@ -591,121 +548,47 @@ private void InitializeComponent() // label6 // this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(91, 34); + this.label6.Location = new System.Drawing.Point(101, 62); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(71, 12); this.label6.TabIndex = 0; this.label6.Text = "物理带宽(M)"; // - // button4 - // - this.button4.Location = new System.Drawing.Point(354, 66); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(35, 23); - this.button4.TabIndex = 5; - this.button4.Text = "..."; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // DownloadPath_TextBox - // - this.DownloadPath_TextBox.Location = new System.Drawing.Point(89, 67); - this.DownloadPath_TextBox.Name = "DownloadPath_TextBox"; - this.DownloadPath_TextBox.ReadOnly = true; - this.DownloadPath_TextBox.Size = new System.Drawing.Size(259, 21); - this.DownloadPath_TextBox.TabIndex = 4; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(6, 71); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(77, 12); - this.label5.TabIndex = 3; - this.label5.Text = "默认下载路径"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(120, 22); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(269, 12); - this.label4.TabIndex = 2; - this.label4.Text = "说明:下载线程越大理论速度越快,但也越容易出错"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(6, 22); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(53, 12); - this.label3.TabIndex = 1; - this.label3.Text = "下载线程"; - // - // ComboBox - // - this.ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ComboBox.FormattingEnabled = true; - this.ComboBox.Items.AddRange(new object[] { - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "13", - "14", - "15", - "16"}); - this.ComboBox.Location = new System.Drawing.Point(65, 18); - this.ComboBox.Name = "ComboBox"; - this.ComboBox.Size = new System.Drawing.Size(49, 20); - this.ComboBox.TabIndex = 0; - // - // UpdateDownLoadList_Timer - // - this.UpdateDownLoadList_Timer.Enabled = true; - this.UpdateDownLoadList_Timer.Interval = 1000; - this.UpdateDownLoadList_Timer.Tick += new System.EventHandler(this.UpdateDownLoadList_Timer_Tick); - // - // Test_Button + // Save_Button // - this.Test_Button.Location = new System.Drawing.Point(305, 523); - this.Test_Button.Name = "Test_Button"; - this.Test_Button.Size = new System.Drawing.Size(75, 23); - this.Test_Button.TabIndex = 12; - this.Test_Button.Text = "Test"; - this.Test_Button.UseVisualStyleBackColor = true; - this.Test_Button.Visible = false; - this.Test_Button.Click += new System.EventHandler(this.Test_Button_Click); + this.Save_Button.Location = new System.Drawing.Point(144, 417); + this.Save_Button.Name = "Save_Button"; + this.Save_Button.Size = new System.Drawing.Size(102, 27); + this.Save_Button.TabIndex = 7; + this.Save_Button.Text = "保存"; + this.Save_Button.UseVisualStyleBackColor = true; + this.Save_Button.Click += new System.EventHandler(this.Save_Button_Click); // - // label11 + // label7 // - this.label11.AutoSize = true; - this.label11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.label11.Location = new System.Drawing.Point(518, 20); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(42, 22); - this.label11.TabIndex = 1; - this.label11.Text = "说明"; + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(12, 89); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(377, 17); + this.label7.TabIndex = 2; + this.label7.Text = "说明:根据物理带宽进行下载加速,请如实填写,填写过高会加大出错风险"; // - // label12 + // groupBox1 // - this.label12.AutoSize = true; - this.label12.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.label12.Location = new System.Drawing.Point(410, 65); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(266, 187); - this.label12.TabIndex = 2; - this.label12.Text = "百度更新后进行了限速,目前绝大多数破解客户端\r\n已经失效,这个坐骑还能用多久不清楚,但是在还能\r\n用的情况下我就会坚持更新.\r\n目前更新了[高速下载],但是目前版" + - "本还不够稳定,\r\n可能会出现下到最后没速度的情况,如果出现\r\n\r\n请 双击任务->选择没速度的子任务->重新下载\r\n\r\n我将会尽快在下个版本在根本上解决这个问题" + - "\r\n最后如果觉得程序不错的话记得在Github上star\r\n一下哦"; + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.Save_Button); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.NetSpeed_TextBox); + this.groupBox1.Controls.Add(this.button4); + this.groupBox1.Controls.Add(this.DownloadPath_TextBox); + this.groupBox1.Controls.Add(this.label5); + this.groupBox1.Location = new System.Drawing.Point(6, 6); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(402, 449); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "下载设置"; // // Main // @@ -740,8 +623,6 @@ private void InitializeComponent() this.tabPage4.PerformLayout(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -773,16 +654,12 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader State; private System.Windows.Forms.ColumnHeader xName; private System.Windows.Forms.ContextMenuStrip DownLoadListMenu; - private System.Windows.Forms.ToolStripMenuItem 状态操作ToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem 暂停ToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem 开始ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 打开目录ToolStripMenuItem; private System.Windows.Forms.Label label1; private System.Windows.Forms.ToolStripMenuItem 下载ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 复制下载地址ToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem 添加到下载列表ToolStripMenuItem; private System.Windows.Forms.Timer UpdateDownLoadList_Timer; - private System.Windows.Forms.ToolStripMenuItem 终止ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 文件操作ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 文件信息ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 粘贴ToolStripMenuItem; @@ -792,23 +669,18 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader xID; private System.Windows.Forms.Label label2; private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ToolStripMenuItem 暂停ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 继续ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 终止ToolStripMenuItem; private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.ComboBox ComboBox; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox DownloadPath_TextBox; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label label7; - private System.Windows.Forms.TextBox NetSpeed_TextBox; + private System.Windows.Forms.Button Save_Button; private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox NetSpeed_TextBox; private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button Save_Button; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox SuperDLSize_Textbox; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox DownloadPath_TextBox; + private System.Windows.Forms.Label label5; } } \ No newline at end of file diff --git a/BaiduPanDownload/Forms/Main.cs b/BaiduPanDownload/Forms/Main.cs index ec9664b..8ea88d4 100644 --- a/BaiduPanDownload/Forms/Main.cs +++ b/BaiduPanDownload/Forms/Main.cs @@ -1,5 +1,6 @@ using BaiduPanDownload.Data; using BaiduPanDownload.HttpTool; +using BaiduPanDownload.HttpTool.Download; using BaiduPanDownload.Managers; using BaiduPanDownload.Util; using Newtonsoft.Json; @@ -28,7 +29,6 @@ public partial class Main : Form ArrayList DownloadList = new ArrayList(); Dictionary Fileinfo = new Dictionary(); - Dictionary DownloadTaskInfo = new Dictionary(); public Main() { @@ -127,14 +127,6 @@ private void FilelistView_MouseDoubleClick(object sender, MouseEventArgs e) new Thread(this.updateFileList).Start(HomePath + Path); return; } - if (info.getSuffix() == "mp4" || info.getSuffix()=="mkv") - { - new Video - { - info=info - }.Show(); - return; - } new AddDownload(this, info).ShowDialog(); } } @@ -224,6 +216,7 @@ private void Main_Load(object sender, EventArgs e) { Directory.CreateDirectory(Program.config.TempPath); } + LoadConfig(); if (Program.config.Access_Token == "null" || Program.config.Access_Token == string.Empty) { return; @@ -233,26 +226,18 @@ private void Main_Load(object sender, EventArgs e) DownloadListView.View = View.Details; new Thread(updateFileList).Start(HomePath + Path); new Thread(Upgraded).Start(); - LoadConfig(); } void LoadConfig() { - if (Program.config.ThreadNum > 16) - { - Program.config.ThreadNum = 8; - Program.config.save(); - MessageBox.Show("下载线程设置不正确,已重置!"); - } - if (Program.config.NetSpeed > 100) + if (Program.config.NetSpeed > 120) { Program.config.NetSpeed = 30; Program.config.save(); MessageBox.Show("暂时不兼容这么快的网速"); } - ComboBox.Text = Program.config.ThreadNum.ToString(); DownloadPath_TextBox.Text = Program.config.DownloadPath; NetSpeed_TextBox.Text = Program.config.NetSpeed.ToString(); - SuperDLSize_Textbox.Text = Program.config.SuperDownloadSize.ToString(); + TaskManager.GetTastManager.ReloadTask(); } /// /// 检查更新 @@ -262,10 +247,9 @@ void Upgraded() try { JObject job = JObject.Parse(WebTool.GetHtml("http://www.mrs4s.top/api/update.json")); - //版本6 - if ((int)job["Build"] > 6) + //版本7 + if ((int)job["Build"] > 7) { - DialogResult dr = MessageBox.Show((string)job["Message"] + "\r\n\r\n是否更新?", "发现更新", MessageBoxButtons.OKCancel); if (dr == DialogResult.OK) { @@ -283,19 +267,9 @@ void Upgraded() catch { } } - public void AddDownloadFile(DiskFileInfo info,string DownloadPath,string FileName,bool SuperDownload) + public void AddDownloadFile(DiskFileInfo info,string DownloadPath,string FileName) { - if (DownloadTaskInfo.ContainsKey(FileName)) - { - MessageBox.Show("警告:任务已存在"); - } - if (SuperDownload) - { - TaskManager.GetTastManager.CreateSuperDownload(info, DownloadPath, FileName, Program.config.NetSpeed/10); - }else - { - TaskManager.GetTastManager.CreateDownloadTask($"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path="+ Uri.EscapeDataString($"{info.path}"), DownloadPath, FileName,Program.config.ThreadNum); - } + TaskManager.GetTastManager.CreateDownloadTask($"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString(info.path),DownloadPath+"\\"+FileName); } int getDownloadTaskNum() @@ -395,23 +369,23 @@ private void CopyFilesAddress() private void UpdateDownLoadList_Timer_Tick(object sender, EventArgs e) { DownloadListView.BeginUpdate(); - foreach(HttpTask Task in TaskManager.GetTastManager.GetTasks()) + foreach (HttpDownload Task in TaskManager.GetTastManager.GetTaskList()) { - if (DownloadListView.Items.Count==Task.ID) + if (DownloadListView.Items.Count == Task.ID) { ListViewItem item = new ListViewItem(); item.Text = Task.ID.ToString(); - item.SubItems.Add(Task.FileName); - item.SubItems.Add(Task.FilePath); - item.SubItems.Add((getSizeMB((long)Task.GetSpeed()) < 1 ? (Task.GetSpeed() / 1024) + "K/s" : getSizeMB((long)Task.GetSpeed()) + "M/s")); - item.SubItems.Add(Task.GetPercentage()+"%"); - item.SubItems.Add(Task.State.ToString()); + item.SubItems.Add(Task.DownloadPath.Split('\\')[Task.DownloadPath.Split('\\').Length-1]); + item.SubItems.Add(Task.DownloadPath); + item.SubItems.Add((getSizeMB((long)Task.Speed) < 1 ? (Task.Speed / 1024) + "K/s" : getSizeMB((long)Task.Speed) + "M/s")); + item.SubItems.Add(Task.Percentage + "%"); + item.SubItems.Add(Task.Downloading?"下载中":"停止中"); DownloadListView.Items.Add(item); continue; } - DownloadListView.Items[Task.ID].SubItems[3].Text= (getSizeMB((long)Task.GetSpeed()) < 1 ? (Task.GetSpeed() / 1024) + "K/s" : getSizeMB((long)Task.GetSpeed()) + "M/s"); - DownloadListView.Items[Task.ID].SubItems[4].Text = Task.GetPercentage() + "%"; - DownloadListView.Items[Task.ID].SubItems[5].Text = Task.State.ToString(); + DownloadListView.Items[Task.ID].SubItems[3].Text = (getSizeMB((long)Task.Speed) < 1 ? (Task.Speed / 1024) + "K/s" : getSizeMB((long)Task.Speed) + "M/s"); + DownloadListView.Items[Task.ID].SubItems[4].Text = Task.Percentage + "%"; + DownloadListView.Items[Task.ID].SubItems[5].Text = Task.Downloading ? "下载中" : "停止中"; } DownloadListView.EndUpdate(); return; @@ -420,13 +394,9 @@ private void UpdateDownLoadList_Timer_Tick(object sender, EventArgs e) private void 暂停ToolStripMenuItem_Click(object sender, EventArgs e) { - TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).PasteTask(); + TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).StopAndSave(); } - private void 开始ToolStripMenuItem_Click(object sender, EventArgs e) - { - TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).ContinueTask(); - } void OpenFolderAndSelectFile(string fileFullName) { @@ -437,47 +407,29 @@ void OpenFolderAndSelectFile(string fileFullName) private void 打开目录ToolStripMenuItem_Click(object sender, EventArgs e) { - //要改 - if (!TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).State.ToString().Contains("完成") && TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).GetType()!=1) - { - MessageBox.Show("任务未完成!"); - return; - } - var FilePath = TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).FilePath + "\\" + TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).FileName; + + var FilePath = TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).DownloadPath; if (!File.Exists(FilePath)) { MessageBox.Show("文件不存在,似乎已经被删除了"); return; } OpenFolderAndSelectFile(FilePath); + } private void 终止ToolStripMenuItem_Click(object sender, EventArgs e) { - TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).StopTask(); + //TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).StopTask(); } private void Main_FormClosing(object sender, FormClosingEventArgs e) { - if (TaskManager.GetTastManager.GetDownloadingTaskNum() > 0) - { - DialogResult dr = MessageBox.Show("你还有任务未完成,退出程序意味着放弃所有下载(其实是我懒没写断点续传),是否继续?", "提示", MessageBoxButtons.OKCancel); - if (dr == DialogResult.OK) - { - MessageBox.Show("即将开始清理下载产生的临时数据,请等待"); - foreach(HttpTask Task in TaskManager.GetTastManager.GetTasks()) - { - Task.StopTask(); - } - }else - { - e.Cancel = true; - } - } + TaskManager.GetTastManager.StopAndSave(); } private void Test_Button_Click(object sender, EventArgs e) { - new Video().Show(); + } private void FilelistView_DragEnter(object sender, DragEventArgs e) @@ -492,11 +444,7 @@ private void FilelistView_DragEnter(object sender, DragEventArgs e) private void FilelistView_DragDrop(object sender, DragEventArgs e) { - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); - foreach(string file in files) - { - TaskManager.GetTastManager.CreateUploadTask(file.Split('\\')[file.Split('\\').Length-1], file, HomePath + Path).Start(); - } + MessageBox.Show("当前版本暂时不支持上传"); } private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) @@ -542,17 +490,6 @@ private void DownLoadListMenu_Opening(object sender, CancelEventArgs e) private void 分享文件ToolStripMenuItem1_Click(object sender, EventArgs e) { - if (!TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).State.ToString().Contains("完成") && TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).GetType() != 1) - { - MessageBox.Show("任务未完成!"); - return; - } - var FilePath = TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).FilePath + "\\" + TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).FileName; - if (!File.Exists(FilePath)) - { - MessageBox.Show("文件不存在,似乎已经被删除了"); - return; - } } @@ -594,31 +531,22 @@ private void DownloadListView_MouseDoubleClick(object sender, MouseEventArgs e) return; } var Task=TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)); - if(Task is SuperDownload) - { - new DownloadInfo() - { - info = Task as SuperDownload - }.Show(); - } } private void Save_Button_Click(object sender, EventArgs e) { - if(ComboBox.Text==string.Empty || DownloadPath_TextBox.Text==string.Empty || NetSpeed_TextBox.Text==string.Empty || SuperDLSize_Textbox.Text == string.Empty) + if(DownloadPath_TextBox.Text==string.Empty || NetSpeed_TextBox.Text==string.Empty) { MessageBox.Show("保存失败: 参数错误"); return; } - if (int.Parse(NetSpeed_TextBox.Text) > 100) + if (int.Parse(NetSpeed_TextBox.Text) > 120) { MessageBox.Show("暂时不兼容这么快的网速"); return; } - Program.config.ThreadNum=int.Parse(ComboBox.Text); Program.config.DownloadPath = DownloadPath_TextBox.Text; Program.config.NetSpeed=int.Parse(NetSpeed_TextBox.Text); - Program.config.SuperDownloadSize=int.Parse(SuperDLSize_Textbox.Text); Program.config.save(); MessageBox.Show("保存完成"); } @@ -648,5 +576,15 @@ private void button4_Click(object sender, EventArgs e) DownloadPath_TextBox.Text = folderBrowserDialog.SelectedPath; } } + + private void 终止ToolStripMenuItem_Click_1(object sender, EventArgs e) + { + MessageBox.Show("当前版本无停止功能,请等待下个版本"); + } + + private void 继续ToolStripMenuItem_Click(object sender, EventArgs e) + { + TaskManager.GetTastManager.GetTaskByID(int.Parse(DownloadListView.SelectedItems[0].Text)).Start(); + } } } diff --git a/BaiduPanDownload/Forms/Main.resx b/BaiduPanDownload/Forms/Main.resx index 0db11b1..a899e88 100644 --- a/BaiduPanDownload/Forms/Main.resx +++ b/BaiduPanDownload/Forms/Main.resx @@ -127,106 +127,122 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy - FQAAAk1TRnQBSQFMAgEBBAIAAQEBAAEBAVABAAFQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUABAQIAAaADAAEBAQABCAYAAcgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 + FQAAAk1TRnQBSQFMAgEBBAEAARgBAQEYAQEBUAEAAVABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAEBAgABoAMAAQEBAAEIBgAByBgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc + AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA + AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz + AwABZgMAAZkDAAHMAgABMwMAAjMCAAEzAWYCAAEzAZkCAAEzAcwCAAEzAf8CAAFmAwABZgEzAgACZgIA + AWYBmQIAAWYBzAIAAWYB/wIAAZkDAAGZATMCAAGZAWYCAAKZAgABmQHMAgABmQH/AgABzAMAAcwBMwIA + AcwBZgIAAcwBmQIAAswCAAHMAf8CAAH/AWYCAAH/AZkCAAH/AcwBAAEzAf8CAAH/AQABMwEAATMBAAFm + AQABMwEAAZkBAAEzAQABzAEAATMBAAH/AQAB/wEzAgADMwEAAjMBZgEAAjMBmQEAAjMBzAEAAjMB/wEA + ATMBZgIAATMBZgEzAQABMwJmAQABMwFmAZkBAAEzAWYBzAEAATMBZgH/AQABMwGZAgABMwGZATMBAAEz + AZkBZgEAATMCmQEAATMBmQHMAQABMwGZAf8BAAEzAcwCAAEzAcwBMwEAATMBzAFmAQABMwHMAZkBAAEz + AswBAAEzAcwB/wEAATMB/wEzAQABMwH/AWYBAAEzAf8BmQEAATMB/wHMAQABMwL/AQABZgMAAWYBAAEz + AQABZgEAAWYBAAFmAQABmQEAAWYBAAHMAQABZgEAAf8BAAFmATMCAAFmAjMBAAFmATMBZgEAAWYBMwGZ + AQABZgEzAcwBAAFmATMB/wEAAmYCAAJmATMBAANmAQACZgGZAQACZgHMAQABZgGZAgABZgGZATMBAAFm + AZkBZgEAAWYCmQEAAWYBmQHMAQABZgGZAf8BAAFmAcwCAAFmAcwBMwEAAWYBzAGZAQABZgLMAQABZgHM + Af8BAAFmAf8CAAFmAf8BMwEAAWYB/wGZAQABZgH/AcwBAAHMAQAB/wEAAf8BAAHMAQACmQIAAZkBMwGZ + AQABmQEAAZkBAAGZAQABzAEAAZkDAAGZAjMBAAGZAQABZgEAAZkBMwHMAQABmQEAAf8BAAGZAWYCAAGZ + AWYBMwEAAZkBMwFmAQABmQFmAZkBAAGZAWYBzAEAAZkBMwH/AQACmQEzAQACmQFmAQADmQEAApkBzAEA + ApkB/wEAAZkBzAIAAZkBzAEzAQABZgHMAWYBAAGZAcwBmQEAAZkCzAEAAZkBzAH/AQABmQH/AgABmQH/ + ATMBAAGZAcwBZgEAAZkB/wGZAQABmQH/AcwBAAGZAv8BAAHMAwABmQEAATMBAAHMAQABZgEAAcwBAAGZ + AQABzAEAAcwBAAGZATMCAAHMAjMBAAHMATMBZgEAAcwBMwGZAQABzAEzAcwBAAHMATMB/wEAAcwBZgIA + AcwBZgEzAQABmQJmAQABzAFmAZkBAAHMAWYBzAEAAZkBZgH/AQABzAGZAgABzAGZATMBAAHMAZkBZgEA + AcwCmQEAAcwBmQHMAQABzAGZAf8BAALMAgACzAEzAQACzAFmAQACzAGZAQADzAEAAswB/wEAAcwB/wIA + AcwB/wEzAQABmQH/AWYBAAHMAf8BmQEAAcwB/wHMAQABzAL/AQABzAEAATMBAAH/AQABZgEAAf8BAAGZ + AQABzAEzAgAB/wIzAQAB/wEzAWYBAAH/ATMBmQEAAf8BMwHMAQAB/wEzAf8BAAH/AWYCAAH/AWYBMwEA + AcwCZgEAAf8BZgGZAQAB/wFmAcwBAAHMAWYB/wEAAf8BmQIAAf8BmQEzAQAB/wGZAWYBAAH/ApkBAAH/ + AZkBzAEAAf8BmQH/AQAB/wHMAgAB/wHMATMBAAH/AcwBZgEAAf8BzAGZAQAB/wLMAQAB/wHMAf8BAAL/ + ATMBAAHMAf8BZgEAAv8BmQEAAv8BzAEAAmYB/wEAAWYB/wFmAQABZgL/AQAB/wJmAQAB/wFmAf8BAAL/ + AWYBAAEhAQABpQEAA18BAAN3AQADhgEAA5YBAAPLAQADsgEAA9cBAAPdAQAD4wEAA+oBAAPxAQAD+AEA + AfAB+wH/AQABpAKgAQADgAMAAf8CAAH/AwAC/wEAAf8DAAH/AQAB/wEAAv8CAAP//wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A - /wD/AP8AZQABmQGaTBoBmgGZULMB8E7xAfAfeBFSH3gBG1CaAbNOuQGzAfBO/wHwH1YBUg8xAVIfVgF4 - UJoBs065AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGzTrkBswHwTv8B8B9WAVIPMQFSH1YBV1CaAbNOuQGz - AfBO/wHwH1YBUg8xAVIfVgFXUJoBsxu5B7sCugG7AboFuQK7AbkBuge7GLkBswHwTv8B8B9WAVIPMQFS - H1YBV1CaAbMauQG6B/QBGQG6AvQBugO5AQkB9AEZAbkBGQf0AboXuQGzAfBO/wHwH1YBUg8xAVIfVgFX - UJoBsxq5AboB/wEZBroBuQEJAf8BGQK5AbsC/wG6AbkBGQH/BroYuQGzAfBO/wHwH1YBUg8xAVIfVgFX - UJoBsxq5AboB/wEJCLkB8wH/ARkBugH0Af8BCQK5ARkB/x65AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGz - GrkBugH/AQkJuQH0A/8BGQO5ARkB/x65AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGzGrkBugH/AfMFGQS5 - AboC/wH0BLkBGQH/BRkBCRi5AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGzGrkBugL/BRkBugO5AQkC/wH0 - AboDuQEZAf8FGQEJGLkBswHwTv8B8B9WAVIPMQFSH1YBV1CaAbMauQG6Af8BCQi5AboB9AH/ARkB/wEZ - AboCuQEZAf8euQGzAfBO/wHwH1YBUg8xAVIfVgFXUJoBsxq5AboB/wEZBroBuQG6AfMB/wEJAbkBCQH/ - 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 + AXMPMQFzILlQmgHwPf8B8Aj/AfIB8QHzBv8B8D3/AfAI/wHyAfEB8wb/H7kBcw8xAXMguVCaAfA9/wHw + B/8B8gHxAfMH/wHwPf8B8Ab/AfQC8gH0B/8fuQFzDzEBcyC5T5oBegHwPf8B8AX/AfQC8gH0CP8B8D3/ + AfAF/wH0AvIB9Aj/H7kBcw8xAXMguR2aAXoxeQGaAfA9/wHwBP8B9ALyAfQJ/wHwPf8B8AT/AfQC8gH0 + Cf8fuQFzDzEBcyC5HJoBegGaMRoBGwHwPf8B8AP/AfQC8gH0Cv8B8D3/AfAD/wH0AvIB9Ar/H7kBcw8x + AXMguRuaAXoBmgEbMv8B8D3/AfAC/wH0AvIM/wHwPf8B8AL/AfMC8gz/H7kBcw8xAXMguRqaAnoBGjP/ + AfA9/wHwAf8B8wHxAfIN/wHwPf8B8AH/AfMB8QHyDf8fuQFzDzEBcyC5GpoBegGaAfYz/wHwPf8B8gHz + AfEB8g7/AfA9/wHyAfMB8QHyDv8fuQFzDzEBcx+5AboBehiaAXoBmgH2NP9A8AHyD/9A8AHyD/8e2wG6 + ARwPUgEcAboe2wEZAUIBTQE+BwABPgMAASgDAAFAAQECAAGgAwABAQEAAQEGAAEZFgAD//8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AGgAL 223, 17 + + 百度更新后进行了限速,目前绝大多数破解客户端 +已经失效,这个坐骑还能用多久不清楚,但是在还能 +用的情况下我就会坚持更新. +目前更新了[高速下载],但是目前版本还不够稳定, +可能会出现下到最后没速度的情况,如果出现 + +请 双击任务->选择没速度的子任务->重新下载 + +我将会尽快在下个版本在根本上解决这个问题 +最后如果觉得程序不错的话记得在Github上star +一下哦 + +警告:1.7以后的版本请尽可能下载到固态硬盘里面 +机械硬盘速度不行 很有可能跟不上下载 + 392, 17 diff --git a/BaiduPanDownload/Forms/Video.Designer.cs b/BaiduPanDownload/Forms/Video.Designer.cs deleted file mode 100644 index 80fefa0..0000000 --- a/BaiduPanDownload/Forms/Video.Designer.cs +++ /dev/null @@ -1,67 +0,0 @@ -namespace BaiduPanDownload.Forms -{ - partial class Video - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Video)); - this.axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer(); - ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).BeginInit(); - this.SuspendLayout(); - // - // axWindowsMediaPlayer1 - // - this.axWindowsMediaPlayer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.axWindowsMediaPlayer1.Enabled = true; - this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 2); - this.axWindowsMediaPlayer1.Name = "axWindowsMediaPlayer1"; - this.axWindowsMediaPlayer1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWindowsMediaPlayer1.OcxState"))); - this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(897, 572); - this.axWindowsMediaPlayer1.TabIndex = 0; - // - // Video - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(899, 574); - this.Controls.Add(this.axWindowsMediaPlayer1); - this.Name = "Video"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Video"; - this.Load += new System.EventHandler(this.Video_Load); - ((System.ComponentModel.ISupportInitialize)(this.axWindowsMediaPlayer1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1; - } -} \ No newline at end of file diff --git a/BaiduPanDownload/Forms/Video.cs b/BaiduPanDownload/Forms/Video.cs deleted file mode 100644 index dac6174..0000000 --- a/BaiduPanDownload/Forms/Video.cs +++ /dev/null @@ -1,29 +0,0 @@ -using BaiduPanDownload.Data; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace BaiduPanDownload.Forms -{ - public partial class Video : Form - { - - public DiskFileInfo info { get; set; } - public Video() - { - InitializeComponent(); - } - - private void Video_Load(object sender, EventArgs e) - { - axWindowsMediaPlayer1.URL = $"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path={info.path}"; - axWindowsMediaPlayer1.Ctlcontrols.play(); - Text = $"正在播放: {info.getName()} (双击全屏)"; - } - } -} diff --git a/BaiduPanDownload/Forms/Video.resx b/BaiduPanDownload/Forms/Video.resx deleted file mode 100644 index e2a6c54..0000000 --- a/BaiduPanDownload/Forms/Video.resx +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAuQAAAAIB - AAAAAQAAAAAAAAAAAAAAAKQAAAAAAwAACAACAAAAAAAFAAAAAAAAAPA/AwAAAAAABQAAAAAAAAAAAAgA - AgAAAAAAAwABAAAACwD//wMAAAAAAAsA//8IAAIAAAAAAAMAMgAAAAsAAAAIAAoAAABmAHUAbABsAAAA - CwAAAAsAAAALAP//CwD//wsAAAAIAAIAAAAAAAgAAgAAAAAACAACAAAAAAAIAAIAAAAAAAsAAAC1XAAA - HjsAAAs= - - - \ No newline at end of file diff --git a/BaiduPanDownload/HttpTool/Download/DownloadInfo.cs b/BaiduPanDownload/HttpTool/Download/DownloadInfo.cs new file mode 100644 index 0000000..d02dbaa --- /dev/null +++ b/BaiduPanDownload/HttpTool/Download/DownloadInfo.cs @@ -0,0 +1,97 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace BaiduPanDownload.HttpTool.Download +{ + public class DownloadInfo + { + #region 参数 + /// + /// 总长度 + /// + public long ContentLength { get; set; } + /// + /// 下载完成长度 + /// + public long CompletedLength { get; set; } + /// + /// 是否完成 + /// + public bool Completed { get; set; } + /// + /// 下载链接 + /// + public string DownloadUrl { get; set; } + /// + /// 块大小 + /// + public long BlockLength { get; set; } + /// + /// 下载分块 + /// + public ArrayList DownloadBlockList { get;} = new ArrayList(); + #endregion + + /// + /// 初始化分块信息 + /// + public void init(string Path) + { + long temp = 0L; + while (temp + BlockLength < ContentLength) + { + DownloadBlockList.Add(new DownloadBlock + { + From = temp, + To = temp + BlockLength - 1, + Completed = false, + }); + temp += BlockLength; + } + DownloadBlockList.Add(new DownloadBlock + { + From = temp, + To = ContentLength, + Completed = false, + }); + Save(Path); + } + /// + /// 保存 + /// + /// + public void Save(string Path) + { + File.WriteAllText(Path, JObject.Parse(JsonConvert.SerializeObject(this)).ToString()); + } + } + public class DownloadBlock + { + /// + /// 下载开始处 + /// + public long From { get; set; } + /// + /// 下载结束处 + /// + public long To { get; set; } + /// + /// 已下载大小 + /// + public long CompletedLength { get; set; } = 0L; + /// + /// 是否完成 + /// + public bool Completed { get; set; } + + } +} + diff --git a/BaiduPanDownload/HttpTool/Download/DownloadThread.cs b/BaiduPanDownload/HttpTool/Download/DownloadThread.cs new file mode 100644 index 0000000..e276b4b --- /dev/null +++ b/BaiduPanDownload/HttpTool/Download/DownloadThread.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace BaiduPanDownload.HttpTool.Download +{ + class DownloadThread + { + #region + public int ID { get; set; } + /// + /// 下载链接 + /// + public string DownloadUrl { get; set; } + /// + /// 下载路径 + /// + public string Path { get; set; } + /// + /// 下载块信息 + /// + public DownloadBlock Block { get; set; } + /// + /// 下载信息 + /// + public DownloadInfo Info { get; set; } + #endregion + + #region 事件 + public delegate void onThreadCompletedEvent(); + public event onThreadCompletedEvent ThreadCompletedEvent; + #endregion + + public DownloadThread() + { + WorkThread=new Thread(Start); + WorkThread.Start(); + } + + Thread WorkThread; + HttpWebRequest Request; + + public void Start() + { + try + { + Thread.Sleep(1000); + if (Block.Completed) + { + ThreadCompletedEvent?.Invoke(); + return; + } + Request = WebRequest.Create(DownloadUrl) as HttpWebRequest; + Request.AddRange(Block.From,Block.To); + HttpWebResponse Response = Request.GetResponse() as HttpWebResponse; + if (!File.Exists(Path)) + { + Console.WriteLine("出现错误: 本地数据文件不存在"); + return; + } + using (Stream ResponseStream = Response.GetResponseStream()) + { + using (FileStream Stream=new FileStream(Path,FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) + { + Stream.Seek(Block.From, SeekOrigin.Begin); + byte[] Array = new byte[1024]; + int i = ResponseStream.Read(Array, 0, Array.Length); + while (i > 0) + { + Stream.Write(Array, 0, i); + Block.From += i; + Block.CompletedLength += i; + Info.CompletedLength += i; + Info.DownloadBlockList[ID] = Block; + i = ResponseStream.Read(Array, 0, Array.Length); + } + Block.Completed = true; + ThreadCompletedEvent?.Invoke(); + } + } + } + catch(Exception ex) + { + if(ex is ThreadAbortException) + { + return; + } + if(ex.Message.Contains("终止") || ex.Message.Contains("取消")) + { + return; + } + Console.WriteLine("出现错误: "+ex.ToString()); + } + } + /// + /// 停止 + /// + public void Stop() + { + if (Block.Completed) + { + return; + } + WorkThread.Abort(); + Request?.Abort(); + } + } +} diff --git a/BaiduPanDownload/HttpTool/Download/HttpDownload.cs b/BaiduPanDownload/HttpTool/Download/HttpDownload.cs new file mode 100644 index 0000000..76fc4fd --- /dev/null +++ b/BaiduPanDownload/HttpTool/Download/HttpDownload.cs @@ -0,0 +1,199 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace BaiduPanDownload.HttpTool.Download +{ + class HttpDownload + { + #region 参数 + /// + /// 任务ID + /// + public int ID { get; set; } + /// + /// 下载链接 + /// + public string Url { get; set; } + /// + /// 下载路径 + /// + public string DownloadPath { get; set; } + /// + /// 线程数 + /// + public int ThreadNum { get; set; } + /// + /// 下载速度 + /// + public long Speed { get; private set; } = 0L; + /// + /// 下载进度 + /// + public float Percentage { get; private set; } = 0F; + /// + /// 是否下载中 + /// + public bool Downloading { get; private set; } + /// + /// 是否完成 + /// + public bool Completed { get; private set; } + /// + /// 是否终止 + /// + public bool Stoped { get; private set; } + #endregion + + DownloadThread[] Threads; + DownloadInfo Info; + /// + /// 开始下载 + /// + public void Start() + { + try + { + Downloading = true; + Stoped = false; + HttpWebRequest Request = WebRequest.Create(Url) as HttpWebRequest; + HttpWebResponse Response = Request.GetResponse() as HttpWebResponse; + if (!File.Exists(DownloadPath + ".dcj")) + { + DownloadInfo info = new DownloadInfo + { + ContentLength=Response.ContentLength, + BlockLength=Response.ContentLength/ThreadNum, + DownloadUrl = Url + }; + info.init(DownloadPath + ".dcj"); + } + Info= JsonConvert.DeserializeObject(File.ReadAllText(DownloadPath + ".dcj")); + if (Info.Completed) + { + Downloading = false; + Completed = true; + Percentage = 100F; + return; + } + if (!File.Exists(DownloadPath)) + { + FileStream Stream = new FileStream(DownloadPath, FileMode.CreateNew); + Stream.SetLength(Response.ContentLength); + Stream.Close(); + } + Console.WriteLine(Info.DownloadBlockList.Count); + Threads = new DownloadThread[Info.DownloadBlockList.Count]; + + for(int i = 0; i < Info.DownloadBlockList.Count; i++) + { + DownloadBlock Block= JsonConvert.DeserializeObject(Info.DownloadBlockList[i].ToString()); + Threads[i]=new DownloadThread + { + ID = i, + DownloadUrl = Url, + Path = DownloadPath, + Block = Block, + Info = Info + }; + Threads[i].ThreadCompletedEvent += HttpDownload_ThreadCompletedEvent; + } + new Thread(a).Start(); + } + catch(Exception ex) + { + Downloading = false; + Stoped = true; + Console.WriteLine("出现错误: "+ex.ToString()); + } + } + + public void CreateDataFile() + { + try + { + HttpWebRequest Request = WebRequest.Create(Url) as HttpWebRequest; + HttpWebResponse Response = Request.GetResponse() as HttpWebResponse; + if (!File.Exists(DownloadPath + ".dcj")) + { + DownloadInfo info = new DownloadInfo + { + ContentLength = Response.ContentLength, + BlockLength = Response.ContentLength / ThreadNum, + DownloadUrl = Url + }; + info.init(DownloadPath + ".dcj"); + } + Info = JsonConvert.DeserializeObject(File.ReadAllText(DownloadPath + ".dcj")); + } + catch(Exception ex) + { + MessageBox.Show("创建数据文件时出现错误: "+ex.Message); + File.Delete(DownloadPath + ".dcj"); + } + } + + + int CompletedThread = 0; + private void HttpDownload_ThreadCompletedEvent() + { + lock (this) + { + CompletedThread++; + if (CompletedThread >= Threads.Length) + { + Downloading = false; + Completed = true; + Speed = 0L; + Percentage = 100F; + Info.Completed = true; + Info.Save(DownloadPath + ".dcj"); + } + } + } + + public void a() + { + long temp = 0L; + while (Downloading) + { + Thread.Sleep(1000); + if (temp == 0) + { + temp = Info.CompletedLength; + } + else + { + Speed = Info.CompletedLength - temp; + Percentage = (((float)Info.CompletedLength / (float)Info.ContentLength) * 100); + temp = Info.CompletedLength; + //Console.WriteLine("速度: " + Speed / 1024 / 1024+"MB/S\r\n进度: "+((float)Info.CompletedLength/(float)Info.ContentLength)*100); + } + } + } + /// + /// 保存并结束 + /// + public void StopAndSave() + { + if (Threads != null) + { + foreach(var Thread in Threads) + { + Thread.Stop(); + } + Stoped = true; + Downloading = false; + Info.Save(DownloadPath + ".dcj"); + } + } + } +} diff --git a/BaiduPanDownload/HttpTool/DownloadThread.cs b/BaiduPanDownload/HttpTool/DownloadThread.cs deleted file mode 100644 index 2d69b6a..0000000 --- a/BaiduPanDownload/HttpTool/DownloadThread.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace BaiduPanDownload.HttpTool -{ - /// - /// 下载线程,1.7重置版 - /// - class DownloadThread - { - #region 参数 - /// - /// 下载链接 - /// - public string Url { get; set; } - /// - /// 下载路径 - /// - public string DownloadPath { get; set; } - /// - /// 开始下载位置 - /// - public long From { get; set; } - /// - /// 结束下载位置 - /// - public long To { get; set; } - /// - /// 已下载字节数 - /// - public long DownloadedLength { get; private set; } = 0L; - /// - /// 是否下载完成 - /// - public bool Completed { get; private set; } - /// - /// 是否下载失败 - /// - public bool Failed { get; protected set; } - /// - /// 下载速度 - /// - public long Speed { get; private set; } = 0L; - #endregion - - #region 事件 - public delegate void DelegateMethod(DownloadThread thread); - /// - /// 下载完成事件 - /// - public event DelegateMethod DownloadCompletedEvent; - /// - /// 下载失败事件,被STOP的任务并不会触发 - /// - public event DelegateMethod DownloadFailedEvent; - #endregion - - - Thread WorkThread; - int ErrorNum = 0; - HttpWebRequest Request; - - public DownloadThread() - { - WorkThread = new Thread(DownloadFile); - WorkThread.Start(); - Task SpeedStatisticsTask = new Task(() => - { - long Backup = 0L; - while (!Completed && !Failed) - { - Thread.Sleep(1000); - if (Backup == 0) - { - Backup = DownloadedLength; - continue; - } - Speed = (DownloadedLength - Backup); - Backup = DownloadedLength; - } - Speed = 0L; - }); - SpeedStatisticsTask.Start(); - } - - void DownloadFile() - { - try - { - Thread.Sleep(500); - Request = WebRequest.Create(Url) as HttpWebRequest; - Request.Timeout = 5000; - Request.AddRange(From, To); - HttpWebResponse Response = Request.GetResponse() as HttpWebResponse; - using (Stream ResponseStream = Response.GetResponseStream()) - { - using (Stream Stream = new FileStream(DownloadPath, FileMode.Create)) - { - - byte[] Array = new byte[512]; - int i = ResponseStream.Read(Array, 0, Array.Length); - while (i > 0) - { - DownloadedLength += i; - Stream.Write(Array, 0, i); - i = ResponseStream.Read(Array, 0, Array.Length); - } - - } - } - Completed = true; - DownloadCompletedEvent?.Invoke(this); - } - catch (ThreadAbortException) { return; } - catch (Exception ex) - { - if (ex.Message.Contains("终止") || ex.Message.Contains("内部")) - { - return; - } - if (ErrorNum >= 5) - { - Failed = true; - DownloadFailedEvent?.Invoke(this); - return; - } - MessageBox.Show(ex.ToString()); - ErrorNum++; - DownloadedLength = 0L; - WorkThread = new Thread(DownloadFile); - WorkThread.Start(); - } - } - /// - /// 终止下载 - /// - public void Stop() - { - WorkThread.Abort(); - Request?.Abort(); - Thread.Sleep(200); - try - { - File.Delete(DownloadPath); - } - catch { } - } - /// - /// 重新下载 - /// - public void ReStart() - { - Stop(); - DownloadedLength = 0L; - WorkThread = new Thread(DownloadFile); - WorkThread.Start(); - } - /// - /// 便利方法,获取下载进度 - /// - /// - public float GetPercentage() - { - if (Completed) - { - return 100F; - } - return ((float)DownloadedLength/(float)(To - From)) * 100; - } - } -} - diff --git a/BaiduPanDownload/HttpTool/HttpDownload.cs b/BaiduPanDownload/HttpTool/HttpDownload.cs deleted file mode 100644 index 8431d66..0000000 --- a/BaiduPanDownload/HttpTool/HttpDownload.cs +++ /dev/null @@ -1,256 +0,0 @@ -using BaiduPanDownload.HttpTool; -using BaiduPanDownload.Util; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -//吃枣药丸 -//再不重写就完了 -namespace BaiduPanDownload.HttpTool -{ - public class HttpDownload : HttpTask - { - public string DownLoadUrl { get; set; } - - public int ThreadNum { get; set; } = 1; - - public bool Stop { get; set; } - - public long From { get; set; } = 0L; - public long To { get; set; } = 0L; - - long contentLength = 0L; - long downloadLength = 0L; - - public delegate void onTaskCompleted(); - public event onTaskCompleted TaskCompletedEvent; - - DownloadThread[] threads; - - int Complete = 0; - - public override void Start() - { - if(!(DownLoadUrl!=null && FilePath!=null && FileName!=null && ThreadNum != 0)) - { - return; - } - Running = true; - try - { - State = TaskState.下载中; - HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(DownLoadUrl); - HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); - contentLength = httpWebResponse.ContentLength; - threads = new DownloadThread[ThreadNum]; - if (From == To) - { - From = 0; - To = contentLength; - }else - { - contentLength = To - From; - } - long q = contentLength / ThreadNum; - for(int i=0; i= threads.Length; - } - - public override long GetSpeed() - { - try - { - if (State == TaskState.下载完成 || threads == null) - { - return 0L; - } - long speed = 0L; - foreach (DownloadThread task in threads) - { - speed += task.Speed; - } - return speed; - } - catch - { - return 0L; - } - - } - - public void addDownloadLength(long length) - { - lock (this) - { - downloadLength += length; - } - } - - public override float GetPercentage() - { - try - { - if (State == TaskState.下载完成) - { - return 100F; - } - if (threads == null) - { - return 0F; - } - float Percentage = 0F; - foreach (DownloadThread task in threads) - { - Percentage += task.GetPercentage() / ThreadNum; - } - return Percentage; - } - catch - { - return 0F; - } - - } - - - - public override int GetType() - { - return 0; - } - - public override void StopTask() - { - StopDownload(); - - } - - public override void PasteTask() - { - PasteDownload(); - } - - } - - -} diff --git a/BaiduPanDownload/HttpTool/HttpTask.cs b/BaiduPanDownload/HttpTool/HttpTask.cs deleted file mode 100644 index ed14601..0000000 --- a/BaiduPanDownload/HttpTool/HttpTask.cs +++ /dev/null @@ -1,45 +0,0 @@ -using BaiduPanDownload.Util; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BaiduPanDownload.HttpTool -{ - public abstract class HttpTask - { - public int ID { get; set; } - - public string FileName { get; set; } - - public string FilePath { get; set; } - - public TaskState State { get; protected set; } = TaskState.等待中; - - public bool Running { get; protected set; } = false; - - public bool Paste { get; protected set; } = false; - - public bool TaskComplete { get; protected set; } = false; - - public abstract long GetSpeed(); - - public abstract void ContinueTask(); - - public abstract float GetPercentage(); - - public abstract new int GetType(); - - public abstract void Start(); - - public abstract void StopTask(); - - public abstract void PasteTask(); - - protected void SetComplete() - { - Running = false; - TaskComplete = true; - } - } -} diff --git a/BaiduPanDownload/HttpTool/HttpUpload.cs b/BaiduPanDownload/HttpTool/HttpUpload.cs deleted file mode 100644 index 8fc25c6..0000000 --- a/BaiduPanDownload/HttpTool/HttpUpload.cs +++ /dev/null @@ -1,280 +0,0 @@ -using BaiduPanDownload.Data; -using BaiduPanDownload.Util; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Net; -using System.Text; -using System.Threading; -using System.Windows.Forms; - -namespace BaiduPanDownload.HttpTool -{ - class HttpUpload :HttpTask - { - public string UploadPath { get; set; } = "/apps/wp2pcs"; - - ArrayList TaskList = new ArrayList(); - WebClient Client = new WebClient(); - long Speed = 0L; - int UploadingTaskID=0; - - public HttpUpload() - { - Client.UploadFileCompleted += WebClient_UploadFileCompleted; - Client.UploadProgressChanged += WebClient_UploadProgressChanged; - } - - public override void Start() - { - if(FileName==null || FilePath == null ||!File.Exists(FilePath)) - { - return; - } - Running = true; - UploadPath += $"/{FileName}"; - State =TaskState.正在尝试秒传; - if(RapidUpload(FilePath, FileName, UploadPath)) - { - State = TaskState.上传完成; - SetComplete(); - return; - } - State =TaskState.上传中; - //如果小于20M - if (new FileInfo(FilePath).Length <= (20 * 1024 * 1024)) - { - TaskList.Add(new UploadTask - { - Size= new FileInfo(FilePath).Length, - ID = 0, - From = 0, - To = new FileInfo(FilePath).Length, - FilePath=FilePath - }); - }else - { - int num = 0; - foreach (string file in FileOperation.SplitFile(FilePath, $"{Program.config.TempPath}\\{FileName}", 20 * 1024 * 1024)) - { - TaskList.Add(new UploadTask - { - Size = new FileInfo(FilePath).Length, - ID = num, - From = 0, - To = new FileInfo(FilePath).Length, - FilePath = file - }); - num++; - } - } - Upload(UploadingTaskID); - ThreadPool.QueueUserWorkItem(new WaitCallback(SpeedStatistics),string.Empty); - } - - void Upload(int TaskID) - { - UploadTask Task = (UploadTask)TaskList[TaskID]; - if (TaskList.Count == 1) - { - //一次性上传 - Client.UploadFileAsync(new Uri($"https://pcs.baidu.com/rest/2.0/pcs/file?method=upload&path={UploadPath}&access_token={Program.config.Access_Token}"), FilePath); - }else - { - //分片上传 - Client.UploadFileAsync(new Uri($"https://pcs.baidu.com/rest/2.0/pcs/file?method=upload&access_token={Program.config.Access_Token}&type=tmpfile"), Task.FilePath); - } - } - - long TaskBytesSent = 0L; - private void WebClient_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e) - { - TaskBytesSent = e.BytesSent; - } - - long BytesSent ; - void SpeedStatistics(object obj) - { - long back = 0L; - while (true) - { - if (back == 0) - { - back = TaskBytesSent; - }else - { - Speed = TaskBytesSent - back; - if (Speed > 0) - { - BytesSent += Speed; - } - back =TaskBytesSent; - } - Thread.Sleep(1000); - } - } - void WebClient_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e) - { - JObject jobj; - try - { - jobj = JObject.Parse(Encoding.UTF8.GetString(e.Result)); - } - catch - { - return; - } - if (TaskList.Count > 1) - { - ((UploadTask)TaskList[UploadingTaskID]).MD5 = (string)jobj["md5"]; - File.Delete(((UploadTask)TaskList[UploadingTaskID]).FilePath); - } - if (UploadingTaskID+1 >= TaskList.Count) - { - if (TaskList.Count > 1) - { - string[] md5List = new string[TaskList.Count]; - for(int i = 0; i < TaskList.Count; i++) - { - md5List[i] = ((UploadTask)TaskList[i]).MD5; - } - IDictionary parameters = new Dictionary(); - parameters.Add("param", JsonConvert.SerializeObject(new SuperFile { block_list = md5List })); - WebTool.CreatePostHttpResponse($"https://pcs.baidu.com/rest/2.0/file?method=createsuperfile&path={UploadPath}&access_token={Program.config.Access_Token}", parameters, null, null, Encoding.UTF8, null); - } - State = TaskState.上传完成; - SetComplete(); - } - else - { - UploadingTaskID++; - Upload(UploadingTaskID); - } - } - - /// - /// 尝试秒传文件,文件大小必须大于256K - /// - /// 文件路径 - /// 文件名称 - /// 上传路径 - /// 是否成功 - public static bool RapidUpload(string FilePath,string FileName,string UploadPath) - { - FileInfo info= new FileInfo(FilePath); - if (info.Length < (256 * 1024)) - { - return false; - } - if (!SliceFile(FilePath,FileName)) - { - return false; - } - var MD5 = HashTool.HashFile(FilePath); - var SliceMD5 = HashTool.HashFile($"{Program.config.TempPath}\\{FileName},Tmp"); - var CRC32 = HashTool.GetFileCRC32(FilePath); - return RapidUpload(MD5,SliceMD5,CRC32,info.Length,UploadPath); - } - - /// - /// 尝试秒传文件 - /// - /// 文件MD5 - /// 文件前256K的MD5 - /// 文件CRC32 - /// 文件长度 - /// 上传路径 - /// 是否成功 - public static bool RapidUpload(string MD5,string SliceMD5,string CRC32,long Length,string UploadPath) - { - if (WebTool.GetHtml($"https://pcs.baidu.com/rest/2.0/pcs/file?method=rapidupload&access_token={Program.config.Access_Token}&content-length={Length}&content-md5={MD5}&slice-md5={SliceMD5}&path={UploadPath}").Contains("ERROR")) - { - return false; - } - return true; - } - - - - static bool SliceFile(string FilePath,string FileName) - { - try - { - byte[] bytes = new byte[256*1024]; - using (FileStream targetFileStream = new FileStream($"{Program.config.TempPath}\\{FileName},Tmp", FileMode.Create)) - { - using (FileStream fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.Read)) - { - fileStream.Read(bytes, 0, bytes.Length); - targetFileStream.Write(bytes, 0, 256 * 1024); - return true; - } - } - } - catch(Exception ex) - { - MessageBox.Show("试图对文件分割时出现错误: "+ex.ToString()); - } - return false; - } - - public override long GetSpeed() - { - return Speed; - } - - public override int GetType() - { - return 1; - } - - public override void StopTask() - { - UploadingTaskID = TaskList.Count - 1; - Client.CancelAsync(); - Client.Dispose(); - foreach (UploadTask task in TaskList) - { - if (File.Exists(task.FilePath)) - { - try - { - File.Delete(task.FilePath); - } - catch { } - - } - } - SetComplete(); - State =TaskState.已停止; - } - - public override void PasteTask() - { - MessageBox.Show("由于作者过于zz,上传任务并不能暂停。。"); - } - - public override float GetPercentage() - { - return ((float)BytesSent / (float)new FileInfo(FilePath).Length * 100f); - } - - public override void ContinueTask() - { - MessageBox.Show("由于作者过于zz,上传任务并不能暂停。。"); - } - } - class UploadTask - { - public int ID { get; set; } - public long Size { get; set; } - public long From { get; set; } - public long To { get; set; } - public string MD5 { get; set; } - public string FilePath { get; set; } - string TempFile { get; set; } = string.Empty; - } -} diff --git a/BaiduPanDownload/HttpTool/SuperDownload.cs b/BaiduPanDownload/HttpTool/SuperDownload.cs deleted file mode 100644 index 19e83ee..0000000 --- a/BaiduPanDownload/HttpTool/SuperDownload.cs +++ /dev/null @@ -1,217 +0,0 @@ -using BaiduPanDownload.Data; -using BaiduPanDownload.Util; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; -using System.Windows.Forms; - -namespace BaiduPanDownload.HttpTool -{ - public class SuperDownload : HttpTask - { - public int SubTaskNum { get; set; } = 2; - public DiskFileInfo Info { get; set; } - - public long ContentLength { get; set; } = 0L; - Dictionary SubTasks = new Dictionary(); - - public override void Start() - { - if (!(FilePath != null && FileName != null && SubTaskNum != 0)) - { - return; - } - State = TaskState.加速下载中; - try - { - HttpWebRequest httpWebRequest = WebRequest.Create($"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path="+ Uri.EscapeDataString($"{Info.path}")) as HttpWebRequest; - HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; - ContentLength= httpWebResponse.ContentLength; - long q = ContentLength / SubTaskNum; - for (int i = 0; i < SubTaskNum; i++) - { - if (i == (SubTaskNum - 1)) - { - var LastSubTask = new HttpDownload - { - ID = i, - DownLoadUrl = $"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString($"{Info.path}"), - FilePath=FilePath, - FileName= FileName + ".tmp" + i.ToString(), - ThreadNum =12, - From= q * i, - To=ContentLength - }; - LastSubTask.Start(); - LastSubTask.TaskCompletedEvent += TaskCompletedEvent; - SubTasks.Add(i,LastSubTask); - break; - } - var SubTask = new HttpDownload - { - ID = i, - DownLoadUrl = $"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token={Program.config.Access_Token}&path=" + Uri.EscapeDataString($"{Info.path}"), - FilePath = FilePath, - FileName = FileName+".tmp"+i.ToString(), - ThreadNum = 12, - From=q * i, - To=(q*(i+1))-1 - }; - SubTask.Start(); - SubTask.TaskCompletedEvent += TaskCompletedEvent; - SubTasks.Add(i, SubTask); - } - } - catch(Exception ex) - { - if (ex is WebException) - { - //404 ERROR - if (ex.Message.Contains("404")) - { - MessageBox.Show("下载失败! 文件名有非法字符,请使用云管家重命名后再下载"); - return; - } - //403 ERROR - if (ex.Message.Contains("403")) - { - MessageBox.Show("下载失败! 百度抽风了,你可以换个账号或者等几天再下载\r\nPS:一般来说等一天就好"); - return; - } - } - MessageBox.Show("下载时遇到未知错误: " + ex.Message + "\r\n请联系作者"); - } - } - - private void TaskCompletedEvent() - { - bool flag = true; - string[] FileList = new string[SubTasks.Count]; - foreach(var SubTask in SubTasks) - { - FileList[SubTask.Key] = SubTask.Value.FilePath + "\\" + SubTask.Value.FileName; - if (SubTask.Value.State != TaskState.下载完成) - { - flag = false; - } - } - if (flag) - { - State = TaskState.合并文件中; - FileOperation.CombineFiles(FileList, FilePath + "\\" + FileName); - State = TaskState.下载完成; - } - } - - /// - /// 重试下载 - /// 任务ID - /// - public void ReDownload(int ID) - { - if (SubTasks.ContainsKey(ID)) - { - if (SubTasks[ID].State != TaskState.下载完成) - { - HttpDownload download = new HttpDownload - { - ID=ID, - DownLoadUrl=SubTasks[ID].DownLoadUrl, - FileName=SubTasks[ID].FileName, - FilePath=SubTasks[ID].FilePath, - ThreadNum=10, - From=SubTasks[ID].From, - To=SubTasks[ID].To - }; - SubTasks[ID].StopDownload(); - download.Start(); - download.TaskCompletedEvent += TaskCompletedEvent; - SubTasks[ID] = download; - } - } - } - - /// - /// 根据获取子任务 - /// - /// 任务ID - /// - public HttpDownload GetTaskByID(int ID) - { - if (!SubTasks.ContainsKey(ID)) - { - return null; - } - return SubTasks[ID]; - } - - public override void ContinueTask() - { - State = TaskState.加速下载中; - foreach (var SubTask in SubTasks) - { - SubTask.Value.ContinueTask(); - } - } - - public override float GetPercentage() - { - try - { - float Percentage = 0F; - foreach (var SubTask in SubTasks) - { - Percentage += (SubTask.Value.GetPercentage() / SubTaskNum); - } - return Percentage; - } - catch - { - return 0L; - } - } - - public override long GetSpeed() - { - try - { - long Speed = 0L; - foreach (var SubTask in SubTasks) - { - Speed += SubTask.Value.GetSpeed(); - } - return Speed; - } - catch - { - return 0L; - } - - } - - public override int GetType() - { - return 0; - } - - public override void PasteTask() - { - State = TaskState.暂停中; - foreach (var SubTask in SubTasks) - { - SubTask.Value.PasteDownload(); - } - } - - public override void StopTask() - { - State = TaskState.已停止; - foreach (var SubTask in SubTasks) - { - SubTask.Value.StopDownload(); - } - } - } -} diff --git a/BaiduPanDownload/Managers/TaskManager.cs b/BaiduPanDownload/Managers/TaskManager.cs index acbb160..8e07eaf 100644 --- a/BaiduPanDownload/Managers/TaskManager.cs +++ b/BaiduPanDownload/Managers/TaskManager.cs @@ -1,8 +1,13 @@ using BaiduPanDownload.Data; using BaiduPanDownload.HttpTool; +using BaiduPanDownload.HttpTool.Download; using BaiduPanDownload.Util; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using System; +using System.Collections; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Timers; @@ -13,137 +18,139 @@ class TaskManager { public static TaskManager GetTastManager { get; } = new TaskManager(); - Dictionary Tasks = new Dictionary(); - + Timer TaskManagerTimer = new Timer(1000) + { + AutoReset = true, + Enabled = true + }; public TaskManager() { - Timer TaskManagerTimer = new Timer(1000) - { - AutoReset = true, - Enabled = true - }; TaskManagerTimer.Elapsed += TaskManagerTimer_Elapsed; TaskManagerTimer.Start(); } + Dictionary TaskList = new Dictionary(); + + #region 事件 + public delegate void onTaskReloadEvent(); + /// + /// 重载任务列表事件 + /// + public event onTaskReloadEvent ReloadEvnet; + #endregion + + private void TaskManagerTimer_Elapsed(object sender, ElapsedEventArgs e) { - if (GetDownloadingTaskNum() < Program.config.TaskNum) + if (GetDwonloadingTaskNum() < Program.config.TaskNum) { - foreach(var task in Tasks) + var WaitTask = TaskList.Where(v=> (!v.Value.Completed && !v.Value.Downloading && !v.Value.Stoped)); + foreach(var task in WaitTask) { - if (task.Value.State==TaskState.等待中) - { - task.Value.Start(); - break; - } + task.Value.Start(); + return; } } } - - /// - /// 获取正在执行的任务数量 + /// 创建一个下载任务 /// - /// - public int GetDownloadingTaskNum() + /// + /// + /// + public void CreateDownloadTask(string DownloadUrl,string DownloadPath) { - int ret=0; - foreach(var task in Tasks) + if (File.Exists(DownloadPath)) { - if (task.Value.State==TaskState.下载中 || task.Value.State==TaskState.加速下载中) - { - ret++; - } + return; } - return ret; + var Task=new HttpDownload + { + ID=TaskList.Count, + Url=DownloadUrl, + DownloadPath=DownloadPath, + ThreadNum=Program.config.NetSpeed + }; + Task.CreateDataFile(); + Program.config.SetDownloadInfo(DownloadPath+".dcj",false); + TaskList.Add(TaskList.Count,Task); } - /// - /// 创建下载任务 + /// 结束所有任务并保存 /// - /// 下载链接 - /// 下载路径 - /// 保存文件名 - /// 下载线程数 - /// - public HttpDownload CreateDownloadTask(string DownLoadUrl,string DownLoadPath,string FileName,int ThreadNum) + public void StopAndSave() { - int id = Tasks.Count; - HttpTask task = new HttpDownload + TaskManagerTimer.Stop(); + var DownloadingTask = TaskList.Where(v => v.Value.Downloading); + foreach (var task in DownloadingTask) { - ID=id, - DownLoadUrl=DownLoadUrl, - FilePath=DownLoadPath, - FileName=FileName, - ThreadNum=ThreadNum, - }; - Tasks.Add(id, task); - return (HttpDownload)task; + task.Value.StopAndSave(); + } } - public SuperDownload CreateSuperDownload(DiskFileInfo info,string DownloadPath,string FileName,int SubTaskNum) + /// + /// 获取下载中的任务数 + /// + /// + public int GetDwonloadingTaskNum() { - int id = Tasks.Count; - HttpTask task = new SuperDownload - { - ID=id, - Info=info, - FilePath=DownloadPath, - FileName=FileName, - SubTaskNum=SubTaskNum - }; - Tasks.Add(id, task); - return task as SuperDownload; + return TaskList.Where(v => v.Value.Downloading).Count(); } - /// - /// 创建上载任务 + /// 重载所有存放在配置文件中的任务 /// - /// 保存文件名 - /// 上载文件路径 - /// 保存目录 - /// - public HttpUpload CreateUploadTask(string FileName,string FilePath,string UploadPath) + public void ReloadTask() { - int id = Tasks.Count; - HttpTask task = new HttpUpload + TaskList.Clear(); + ReloadEvnet?.Invoke(); + int id = 0; + foreach (var T in Program.config.DownloadList) { - ID = id, - FileName=FileName, - FilePath=FilePath, - UploadPath=UploadPath - }; - Tasks.Add(id, task); - return (HttpUpload)task; + DownloadItem Item = T is JObject ? JsonConvert.DeserializeObject(T.ToString()) : T as DownloadItem; + if (!File.Exists(Item.FilePath)) + { + continue; + } + var Info = JsonConvert.DeserializeObject(File.ReadAllText(Item.FilePath)); + TaskList.Add(id, new HttpDownload + { + ID = id, + Url = Info.DownloadUrl, + DownloadPath = Item.FilePath.Replace(".dcj", string.Empty) + }); + id++; + } } - /// /// 获取任务列表 /// /// - public HttpTask[] GetTasks() + public ArrayList GetTaskList() { - HttpTask[] ret = new HttpTask[Tasks.Count]; - foreach(var task in Tasks) + ArrayList Temp = new ArrayList(); + foreach(var Task in TaskList) { - ret[task.Key] = task.Value; + Temp.Add(Task.Value); } - return ret; + return Temp; } /// - /// 通过ID来获取任务 + /// 通过ID获取任务 /// - /// 任务ID + /// /// - public HttpTask GetTaskByID(int id) + public HttpDownload GetTaskByID(int id) { - return Tasks[id]; + if (!TaskList.ContainsKey(id)) + { + return null; + } + return TaskList[id]; } } } diff --git a/BaiduPanDownload/Program.cs b/BaiduPanDownload/Program.cs index d27fb43..4f622f0 100644 --- a/BaiduPanDownload/Program.cs +++ b/BaiduPanDownload/Program.cs @@ -31,7 +31,16 @@ static void Main() }.save(); MessageBox.Show("欢迎使用本工具,,因为你懂的原因。。请低调使用!"); } - config = JsonConvert.DeserializeObject(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Config.json")); + try + { + config = JsonConvert.DeserializeObject(File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "Config.json")); + } + catch + { + MessageBox.Show("配置文件读取时出现意料之外的错误! 请删除程序目录下的Config.json重试!"); + return; + } + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main()); diff --git a/BaiduPanDownload/Util/FileTool/Config.cs b/BaiduPanDownload/Util/FileTool/Config.cs index 055cb21..b57e1d9 100644 --- a/BaiduPanDownload/Util/FileTool/Config.cs +++ b/BaiduPanDownload/Util/FileTool/Config.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; +using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; @@ -9,20 +10,48 @@ namespace BaiduPanDownload.Util { - class Config + public class Config { public string Access_Token { get; set; } public string DownloadPath { get; set; } public string TempPath { get; } = AppDomain.CurrentDomain.BaseDirectory + "Temp"; - public int ThreadNum { get; set; } = 8; public int TaskNum { get; set; } = 3; public int NetSpeed { get; set; } = 30; - public int SuperDownloadSize { get; set; } = 100; - public JObject DownloadList { get; set; } = new JObject(); + public ArrayList DownloadList { get; set; } = new ArrayList(); + + public void SetDownloadInfo(string FilePath,bool Completed) + { + for (int i = 0; i < DownloadList.Count; i++) + { + DownloadItem Item = DownloadList[i] is JObject ? JsonConvert.DeserializeObject(DownloadList[i].ToString()) : DownloadList[i] as DownloadItem; + if (Item.FilePath == FilePath) + { + Item.Completed = Completed; + DownloadList[i] = Item; + save(); + return; + } + } + DownloadList.Add(new DownloadItem + { + FilePath=FilePath, + Completed=Completed + }); + save(); + } + + + public void save() { File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "Config.json", JObject.Parse(JsonConvert.SerializeObject(this)).ToString()); } } + + public class DownloadItem + { + public string FilePath { get; set; } + public bool Completed { get; set; } + } } diff --git a/Test/Download/DownloadInfo.cs b/Test/Download/DownloadInfo.cs index 01c3334..9f7d218 100644 --- a/Test/Download/DownloadInfo.cs +++ b/Test/Download/DownloadInfo.cs @@ -76,7 +76,7 @@ public class DownloadBlock /// /// 已下载大小 /// - public long CompletedLength { get; set; } + public long CompletedLength { get; set; } = 0L; /// /// 是否完成 /// diff --git a/Test/Download/DownloadThread.cs b/Test/Download/DownloadThread.cs index 9699394..45a3106 100644 --- a/Test/Download/DownloadThread.cs +++ b/Test/Download/DownloadThread.cs @@ -31,16 +31,23 @@ class DownloadThread public DownloadThread() { - new Thread(Start).Start(); + WorkThread=new Thread(Start); + WorkThread.Start(); } + Thread WorkThread; + HttpWebRequest Request; public void Start() { try { + if (Block.Completed) + { + return; + } Thread.Sleep(1000); - HttpWebRequest Request = WebRequest.Create(DownloadUrl) as HttpWebRequest; + Request = WebRequest.Create(DownloadUrl) as HttpWebRequest; Request.AddRange(Block.From,Block.To); HttpWebResponse Response = Request.GetResponse() as HttpWebResponse; if (!File.Exists(Path)) @@ -58,16 +65,36 @@ public void Start() while (i > 0) { Stream.Write(Array, 0, i); + Block.From += i; + Block.CompletedLength += i; + Info.CompletedLength += i; Info.DownloadBlockList[ID] = Block; i = ResponseStream.Read(Array, 0, Array.Length); } + Block.Completed = true; } } } catch(Exception ex) { + if(ex is ThreadAbortException) + { + return; + } + if(ex.Message.Contains("终止") || ex.Message.Contains("取消")) + { + return; + } Console.WriteLine("出现错误: "+ex.ToString()); } } + /// + /// 停止 + /// + public void Stop() + { + WorkThread.Abort(); + Request?.Abort(); + } } } diff --git a/Test/Download/HttpDownload.cs b/Test/Download/HttpDownload.cs index cd978d4..ecf8386 100644 --- a/Test/Download/HttpDownload.cs +++ b/Test/Download/HttpDownload.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Net; using System.Text; +using System.Threading; using System.Threading.Tasks; namespace Test.Download @@ -25,6 +26,9 @@ class HttpDownload /// public int ThreadNum { get; set; } + + DownloadThread[] Threads; + DownloadInfo Info; public void Start() { try @@ -36,11 +40,11 @@ public void Start() DownloadInfo info = new DownloadInfo { ContentLength=Response.ContentLength, - BlockLength=Response.ContentLength/ThreadNum + BlockLength=Response.ContentLength/ThreadNum, }; info.init(DownloadPath + ".dcj"); } - DownloadInfo Info= JsonConvert.DeserializeObject(File.ReadAllText(DownloadPath + ".dcj")); + Info= JsonConvert.DeserializeObject(File.ReadAllText(DownloadPath + ".dcj")); if (!File.Exists(DownloadPath)) { FileStream Stream = new FileStream(DownloadPath, FileMode.CreateNew); @@ -48,10 +52,11 @@ public void Start() Stream.Close(); } Console.WriteLine(Info.DownloadBlockList.Count); + Threads = new DownloadThread[Info.DownloadBlockList.Count]; for(int i = 0; i < Info.DownloadBlockList.Count; i++) { DownloadBlock Block= JsonConvert.DeserializeObject(Info.DownloadBlockList[i].ToString()); - new DownloadThread + Threads[i]=new DownloadThread { ID = i, DownloadUrl = Url, @@ -59,13 +64,50 @@ public void Start() Block = Block, Info = Info }; - } + new Thread(a).Start(); } catch(Exception ex) { Console.WriteLine("出现错误: "+ex.ToString()); } } + public void a() + { + long temp = 0L; + while (true) + { + Thread.Sleep(1000); + if (temp == 0) + { + temp = Info.CompletedLength; + } + else + { + long Speed = Info.CompletedLength - temp; + temp = Info.CompletedLength; + Console.WriteLine("速度: " + Speed / 1024 / 1024+"MB/S\r\n进度: "+((float)Info.CompletedLength/(float)Info.ContentLength)*100); + if (Speed == 0) + { + Info.Save(DownloadPath + ".dcj"); + return; + } + } + } + } + /// + /// 保存并结束 + /// + public void StopAndSave() + { + if (Threads != null) + { + foreach(var Thread in Threads) + { + Thread.Stop(); + } + Info.Save(DownloadPath + ".dcj"); + } + } } } diff --git a/Test/Program.cs b/Test/Program.cs index ffdff6d..8ed413e 100644 --- a/Test/Program.cs +++ b/Test/Program.cs @@ -11,8 +11,8 @@ namespace Test { class Program { - static readonly string Url = @"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token=xx&path=%2Fapps%2Fwp2pcs%2F%E5%8A%A8%E7%94%BB%2F%5B%E3%82%A2%E3%83%8B%E3%83%A1%20BD%5D%20%E5%A4%A9%E4%BD%93%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%20%E7%AC%AC01%E8%A9%B1%E3%80%8C%E5%86%86%E7%9B%A4%E3%81%AE%E8%A1%97%E3%80%8D(1920%C3%971080%20HEVC%2010bit%20FLAC%20FLAC%20softSub(chi%20eng)%20chap).mkv"; - static readonly string Path = @"C:\Users\18448\Desktop\Test\Test.mkv"; + static readonly string Url = @"https://www.baidupcs.com/rest/2.0/pcs/stream?method=download&access_token=23.26d5ebed36b39ecb83ccc369532d5db4.2592000.1481987849.2872528644-1641135&path=%2Fapps%2Fwp2pcs%2FR0409%20%E6%B8%B8%E6%88%8F%E6%9C%AC%E4%BD%93.rar"; + static readonly string Path = @"C:\Users\18448\Desktop\Test\Test.rar"; static void Main(string[] args) { @@ -20,12 +20,14 @@ static void Main(string[] args) Console.WriteLine("测试下载程序"); Console.WriteLine("下载文件为: "+ Url); Console.WriteLine("下载目录为: "+ Path); - new HttpDownload + var t=new HttpDownload { Url=Url, DownloadPath=Path, ThreadNum=120 - }.Start(); + }; + t.Start(); + Thread.Sleep(9999999); } }