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/
- ARkCuQEZAf8Guhi5AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGzGrkBugH/AfQF8wEJAbkBGQH/ARkBugK5
- ARkB/wEJAbkBGQH/BvMYuQGzAfBO/wHwH1YBUg8xAVIfVgFXUJoBsxu5B9wBugG5AbsB3AG6A7kBugHc
- AboBuQG6B9wYuQGzAfBO/wHwH1YBUg8xAVIfVgFXUJoBs065AbMB8E7/AfAfVgFSDzEBUh9WAVdQmgGz
- TrkBswHwTv8B8B9WAVIPMQFSH1YBV1CaAbNOuQGzAfBO/wHwH1YBUg8xAVIfVgFXUJoBs065AbMB8E7/
- AfAfVgFSDzEBUh9WAVdQmgHwTv8C8E7/AfAfVgFSDzEBUh9WAVdQmgHwTv8C8E7/AfAfVgFSDzEBUh9W
- AVdQmgHwTv8C8Bb/AfMB8gHxHPAB8QHyAfQW/wHwH1YBUg8xAVIfVgFXUJoB8E7/AvAU/wHyAfAh8gLx
- AfQU/wHwH1YBUg8xAVIfVgFXUJoB8E7/AvAS/wH0AfEl8gHxAfMT/wHwH1YBUg8xAVIfVgFXUJoB8E7/
- AvAR/wH0AfEn8gHxAfQS/wHwHlcBVgFSDzEBUgFWH1dQmgHwTv8C8BH/KvIB8RL/AfAfUQFSDzEBUiBR
- UJoB8E7/AvAQ/wH0AfEp8gHxAfQR/wHwH0YBTA8xAUwgRlCaAfBO/wLwEP8s8gHzEf8B8B5MAUYBTA8x
- AUwBRh9MUJoB8E7/AvAQ/wHxK/IB8RH/AfAbTARGAUwPMQFMBEYcTFCaAfBO/wLwEP8B8CvyAfER/wHw
- GkwBRgGTARoCGxAaAxsBGgGTAUYbTFCaAfAT/wHwJvEB8BP/AvAQ/wHxK/IB8BH/AfAaTAFGAZoBGxX2
- ARsBmgFGG0xQmgHwE/8B8CbyAfAT/wLwEP8s8gHxEf8B8BpMAUYBmhf2AZoBRhtMUJoB8BP/AfAm8gHw
- E/8C8BD/AfQB8SryAfMR/wHwGkwBRgGaF/YBmgFGG0xQmgHwE/8B8BjyA/ME8gPzBPIB8BP/AvAR/wHx
- KfIB8BL/AfAaTAFGAZoD9gEaAZkNeQGZARoD9gGaAUYbTFCaAfAT/wHwF/IB8wL/AfQB8QLyAfMC/wH0
- AfED8gHwE/8C8BH/AfQB8SfyAfEB8xL/AfAaTAFGAZoD9gF5AVINMQFSAXkD9gGaAUYbTFCaAfAT/wHw
- FvIB8QHzA/8B8AHyAfEB8wP/AfAD8gHwE/8C8BL/AfMn8gHzE/8B8BpMAUYBmgP2AXQPMQF0A/YBmgFG
- G0xQmgHwE/8B8BbyAfEB8wP/AfEB8gHxAfMD/wHxA/IB8BP/AvAT/wHzJfIB8xT/AfAaTAFGAZoD9gF0
- DzEBeQP2AZoBRhtMUJoB8BP/AfAY8gPxBPID8QTyAfAT/wLwFP8B9AHzIPIC8wH0Ff8B8BpMAUYBmgP2
- AXQPMQF5A/YBmgFGG0xQmgHwE/8B8CbyAfAT/wLwFv8C9AHzAfEZ8gHxAvQY/wHwGkwBRgGaA/YBdA8x
- AXkD9gGaAUYbTFCaAfAT/wHwJvIB8BP/AvAZ/wHxGvIa/wHwGkwBRgGaA/8BeQ8xAXkD/wGaAUYbTFCa
- AfAT/yjyE/8C8Bn/AfMZ8gHzGv8B8BpMAUYBGgP2AXkPMQF5A/YBmgFGG0xQmgHwTv8C8Bn/AfQB8Rfy
- AfEB9Br/AfAaTAFGARoD9gF5DzEBeQP2AZoBRhtMUJoB8Bb/AfQK8wH0C/8B9ArzAfQV/wLwGv8B8Rfy
- AfEb/wHwGkwBRgEaA/YBeQ8xAXkD9gEaAUYbTFCaAfAW/wHxCfIB8QHzC/8B8wHxCfIB8RX/AvAa/wH0
- AfEV8gHxAfQb/wHwGkwBRgEaA/8BeQFSDTEBUgGZA/8BGgFGG0xQmgHwFv8B8AnyAfEB9Av/AfQB8Qny
- AfAV/wLwG/8X8hz/AfAaTAFGARoD/wEaD3kBGgP/ARoBRhtMUJoB8Bb/AfEJ8gHxAfQL/wH0AfEJ8gHx
- Ff8C8Bz/AfET8gHxHf8B8BpMAUYBGhf/ARoBRhtMUJoB8Bb/AfEJ8gHxAfML/wHzAfEJ8gHxFf8C8Bz/
- AfQB8RHyAfEe/wHwGkwBRgEaF/8BGgFGG0xQmgHwFv8L8gHxC/8B8QvyFf8C8B3/AfQR8h//AfAaTAFG
- ARoX/wEaAUYbTFCaAfAW/wHzAfEL8gn/C/IB8QHzFf8C8B//AfMN8gHzIP8B8BpMAUYBkwH0Ff8B9AGT
- AUYbTFCaAfAW/wH0AfEM8gH0Bf8B9AzyAfEB9BX/AvAg/wH0AvMD8gHxA/IC8wH0If8B8CBMD1IhTFCa
- AfAX/wHxDPIB8QHyA/MB8gHxDPIB8Rb/AvAj/wf0JP8B8B5MAUYBTA8xAUwBRh9MUJoB8Bf/AfQB8R3y
- AfEB9Bb/AvBO/wHwIEwPMSFMUJoB8Bj/H/IX/wLwTv8B8B+RAVIPMQFSIJFQmgHwGP8B9B3yAfQX/wLw
- Tv8B8B+5AXMPMQFzILlQmgHwGf8B9AHxGfIB8QH0GP8C8E7/AfAfuQFzDzEBcyC5UJoB8Br/AfMB8Rfy
- AfEB8xn/AvBN/wH0AfAfuQFzDzEBcyC5UJoB8Bv/AfQB8RXyAfEB9Bb/BPQC8En/BfQB8B+5AXMPMQFz
- ILlQmgHwHP8B9AHyAfER8gHxAfIB9BT/BfQC8wLwR/8E9APzAfAfuQFzDzEBcyC5UJoB8B7/AfMB8AHx
- DfIB8QHwAfMU/wL0B/MC8EX/AfQG8wLyAfAfuQFzDzEBcyC5UJoB8CD/AfMB8gHxCfIB8QHyAfMU/wH0
- BfMF8gLwQ/8B9ATzBvIB8B+5AXMPMQFzILlQmgHwI/8B9AHzBfIB8wH0Ff8B9AHzCPID8QLwQf8B8wjy
- BPEB8B+5AXMPMQFzILkBek6aAXoB8D//AfQB8w3xAvA//wHzAfIL8QPwH7kBcw8xAXMguQF6T3kB8D3/
- AfQB8wnxBfAB8QLwPf8B9AHyAvEB8ATxB/AB8QHwH7kBcw8xAXMguQGaAXlN9gF5AfA9/wHxEPMC8D3/
- AfEP9AHzAfAfuQFzDzEBcyC5AZoBeU3/AXkB8D3/AfAO/wH0AvIB8D3/AfAO/wHzAfEB8h+5AXMPMQFz
- ILkBmgF5Tf8BeQHwPf8B8A3/AfQC8gH/AfA9/wHwDf8B8wHxAfIB/x+5AXMPMQFzILkBmgF5Tf8BeQHw
- Pf8B8Az/AfMB8QHyAv8B8D3/AfAM/wHzAfEB8gL/H7kBcw8xAXMguQGaAXkBGksbARoBeQHwPf8B8Av/
- AfMB8QHyA/8B8D3/AfAL/wHzAfEB8wP/H7kBcw8xAXMguQGaTnoBmgHwPf8B8Ar/AfMB8QHyBP8B8D3/
- AfAK/wHzAfEB8wT/H7kBcw8xAXMguVCaAfA9/wHwCf8B8wHxAfMF/wHwPf8B8An/AfIB8QHzBf8fuQFz
- DzEBcyC5UJoB8D3/AfAI/wHyAfEB8wb/AfA9/wHwCP8B8gHxAfMG/x+5AXMPMQFzILlQmgHwPf8B8Af/
- AfIB8QHzB/8B8D3/AfAG/wH0AvIB9Af/H7kBcw8xAXMguU+aAXoB8D3/AfAF/wH0AvIB9Aj/AfA9/wHw
- Bf8B9ALyAfQI/x+5AXMPMQFzILkdmgF6MXkBmgHwPf8B8AT/AfQC8gH0Cf8B8D3/AfAE/wH0AvIB9An/
- H7kBcw8xAXMguRyaAXoBmjEaARsB8D3/AfAD/wH0AvIB9Ar/AfA9/wHwA/8B9ALyAfQK/x+5AXMPMQFz
- ILkbmgF6AZoBGzL/AfA9/wHwAv8B9ALyDP8B8D3/AfAC/wHzAvIM/x+5AXMPMQFzILkamgJ6ARoz/wHw
- Pf8B8AH/AfMB8QHyDf8B8D3/AfAB/wHzAfEB8g3/H7kBcw8xAXMguRqaAXoBmgH2M/8B8D3/AfIB8wHx
- AfIO/wHwPf8B8gHzAfEB8g7/H7kBcw8xAXMfuQG6AXoYmgF6AZoB9jT/QPAB8g//QPAB8g//HtsBugEc
- D1IBHAG6HtsBGQFCAU0BPgcAAT4DAAEoAwABQAEBAgABoAMAAQEBAAEBBgABGRYAA///AP8A/wD/AP8A
- /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ABoACw==
+ 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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);
}
}