mirror of
https://github.com/NohamR/QobuzDownloaderX.git
synced 2026-05-17 12:27:11 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e44cbc5a3 | ||
|
|
4e14909b22 | ||
|
|
272babb837 | ||
|
|
a4d8289063 | ||
|
|
5d97d944a7 | ||
|
|
8cfdd5ed7e | ||
|
|
4b92ec794d | ||
|
|
97ff2e2a3e | ||
|
|
9e778a9145 | ||
|
|
2446643d99 | ||
|
|
2b0ec2b90d | ||
|
|
7eba9848ba | ||
|
|
7cb2e827cb | ||
|
|
8005e6297b | ||
|
|
497d7f2963 | ||
|
|
a8839434e7 | ||
|
|
799afa706f | ||
|
|
6e8a4fe1dc | ||
|
|
37eaaecc8a | ||
|
|
15a099d6b2 | ||
|
|
8a4ff7c871 |
BIN
-assets/QBDLX1.png
Normal file
BIN
-assets/QBDLX1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
BIN
-assets/QBDLX2.png
Normal file
BIN
-assets/QBDLX2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
342
QobuzDownloaderX/Form1.Designer.cs
generated
342
QobuzDownloaderX/Form1.Designer.cs
generated
@@ -49,7 +49,7 @@
|
|||||||
this.upcTextBox = new System.Windows.Forms.TextBox();
|
this.upcTextBox = new System.Windows.Forms.TextBox();
|
||||||
this.label5 = new System.Windows.Forms.Label();
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
this.albumArtPicBox = new System.Windows.Forms.PictureBox();
|
this.albumArtPicBox = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
this.logoBox = new System.Windows.Forms.PictureBox();
|
||||||
this.label6 = new System.Windows.Forms.Label();
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
this.totalTracksTextbox = new System.Windows.Forms.TextBox();
|
this.totalTracksTextbox = new System.Windows.Forms.TextBox();
|
||||||
this.totalTracksLabel = new System.Windows.Forms.Label();
|
this.totalTracksLabel = new System.Windows.Forms.Label();
|
||||||
@@ -84,8 +84,24 @@
|
|||||||
this.flacMidCheckbox = new System.Windows.Forms.CheckBox();
|
this.flacMidCheckbox = new System.Windows.Forms.CheckBox();
|
||||||
this.flacHighCheckbox = new System.Windows.Forms.CheckBox();
|
this.flacHighCheckbox = new System.Windows.Forms.CheckBox();
|
||||||
this.mp3WarnLabel = new System.Windows.Forms.Label();
|
this.mp3WarnLabel = new System.Windows.Forms.Label();
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.exitLabel = new System.Windows.Forms.Label();
|
||||||
|
this.minimizeLabel = new System.Windows.Forms.Label();
|
||||||
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel3 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel4 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel5 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel6 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel7 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel8 = new System.Windows.Forms.Panel();
|
||||||
|
this.streamableCheckbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.secretTextbox = new System.Windows.Forms.TextBox();
|
||||||
|
this.displaySecretButton = new System.Windows.Forms.Button();
|
||||||
|
this.profilePictureBox = new System.Windows.Forms.PictureBox();
|
||||||
|
this.logoutLabel = new System.Windows.Forms.Label();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.logoBox)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.profilePictureBox)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// testURLBox
|
// testURLBox
|
||||||
@@ -101,17 +117,23 @@
|
|||||||
//
|
//
|
||||||
// selectFolder
|
// selectFolder
|
||||||
//
|
//
|
||||||
|
this.selectFolder.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.selectFolder.FlatAppearance.BorderSize = 0;
|
||||||
|
this.selectFolder.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.selectFolder.ForeColor = System.Drawing.Color.White;
|
||||||
this.selectFolder.Location = new System.Drawing.Point(13, 115);
|
this.selectFolder.Location = new System.Drawing.Point(13, 115);
|
||||||
this.selectFolder.Name = "selectFolder";
|
this.selectFolder.Name = "selectFolder";
|
||||||
this.selectFolder.Size = new System.Drawing.Size(349, 23);
|
this.selectFolder.Size = new System.Drawing.Size(349, 23);
|
||||||
this.selectFolder.TabIndex = 2;
|
this.selectFolder.TabIndex = 2;
|
||||||
this.selectFolder.Text = "Choose Folder";
|
this.selectFolder.Text = "Choose Folder";
|
||||||
this.selectFolder.UseVisualStyleBackColor = true;
|
this.selectFolder.UseVisualStyleBackColor = false;
|
||||||
this.selectFolder.Click += new System.EventHandler(this.selectFolder_Click);
|
this.selectFolder.Click += new System.EventHandler(this.selectFolder_Click);
|
||||||
//
|
//
|
||||||
// output
|
// output
|
||||||
//
|
//
|
||||||
this.output.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
|
this.output.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
|
||||||
|
this.output.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.output.Cursor = System.Windows.Forms.Cursors.IBeam;
|
||||||
this.output.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.output.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.output.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
|
this.output.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128)))));
|
||||||
this.output.Location = new System.Drawing.Point(12, 144);
|
this.output.Location = new System.Drawing.Point(12, 144);
|
||||||
@@ -125,29 +147,41 @@
|
|||||||
//
|
//
|
||||||
// openFolderButton
|
// openFolderButton
|
||||||
//
|
//
|
||||||
|
this.openFolderButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.openFolderButton.FlatAppearance.BorderSize = 0;
|
||||||
|
this.openFolderButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.openFolderButton.ForeColor = System.Drawing.Color.White;
|
||||||
this.openFolderButton.Location = new System.Drawing.Point(368, 115);
|
this.openFolderButton.Location = new System.Drawing.Point(368, 115);
|
||||||
this.openFolderButton.Name = "openFolderButton";
|
this.openFolderButton.Name = "openFolderButton";
|
||||||
this.openFolderButton.Size = new System.Drawing.Size(349, 23);
|
this.openFolderButton.Size = new System.Drawing.Size(349, 23);
|
||||||
this.openFolderButton.TabIndex = 13;
|
this.openFolderButton.TabIndex = 13;
|
||||||
this.openFolderButton.Text = "Open Folder";
|
this.openFolderButton.Text = "Open Folder";
|
||||||
this.openFolderButton.UseVisualStyleBackColor = true;
|
this.openFolderButton.UseVisualStyleBackColor = false;
|
||||||
this.openFolderButton.Click += new System.EventHandler(this.openFolderButton_Click);
|
this.openFolderButton.Click += new System.EventHandler(this.openFolderButton_Click);
|
||||||
//
|
//
|
||||||
// downloadButton
|
// downloadButton
|
||||||
//
|
//
|
||||||
|
this.downloadButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.downloadButton.FlatAppearance.BorderSize = 0;
|
||||||
|
this.downloadButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.downloadButton.ForeColor = System.Drawing.Color.White;
|
||||||
this.downloadButton.Location = new System.Drawing.Point(597, 86);
|
this.downloadButton.Location = new System.Drawing.Point(597, 86);
|
||||||
this.downloadButton.Name = "downloadButton";
|
this.downloadButton.Name = "downloadButton";
|
||||||
this.downloadButton.Size = new System.Drawing.Size(120, 23);
|
this.downloadButton.Size = new System.Drawing.Size(120, 23);
|
||||||
this.downloadButton.TabIndex = 17;
|
this.downloadButton.TabIndex = 17;
|
||||||
this.downloadButton.Text = "Download";
|
this.downloadButton.Text = "Download";
|
||||||
this.downloadButton.UseVisualStyleBackColor = true;
|
this.downloadButton.UseVisualStyleBackColor = false;
|
||||||
this.downloadButton.Click += new System.EventHandler(this.downloadButton_Click);
|
this.downloadButton.Click += new System.EventHandler(this.downloadButton_Click);
|
||||||
//
|
//
|
||||||
// albumUrl
|
// albumUrl
|
||||||
//
|
//
|
||||||
|
this.albumUrl.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.albumUrl.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.albumUrl.ForeColor = System.Drawing.Color.White;
|
||||||
this.albumUrl.Location = new System.Drawing.Point(15, 88);
|
this.albumUrl.Location = new System.Drawing.Point(15, 88);
|
||||||
|
this.albumUrl.Multiline = true;
|
||||||
this.albumUrl.Name = "albumUrl";
|
this.albumUrl.Name = "albumUrl";
|
||||||
this.albumUrl.Size = new System.Drawing.Size(579, 20);
|
this.albumUrl.Size = new System.Drawing.Size(576, 20);
|
||||||
this.albumUrl.TabIndex = 16;
|
this.albumUrl.TabIndex = 16;
|
||||||
this.albumUrl.WordWrap = false;
|
this.albumUrl.WordWrap = false;
|
||||||
this.albumUrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.albumUrl_KeyDown);
|
this.albumUrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.albumUrl_KeyDown);
|
||||||
@@ -165,6 +199,7 @@
|
|||||||
//
|
//
|
||||||
// verNumLabel
|
// verNumLabel
|
||||||
//
|
//
|
||||||
|
this.verNumLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.verNumLabel.Location = new System.Drawing.Point(159, 55);
|
this.verNumLabel.Location = new System.Drawing.Point(159, 55);
|
||||||
this.verNumLabel.Name = "verNumLabel";
|
this.verNumLabel.Name = "verNumLabel";
|
||||||
this.verNumLabel.Size = new System.Drawing.Size(63, 13);
|
this.verNumLabel.Size = new System.Drawing.Size(63, 13);
|
||||||
@@ -175,6 +210,7 @@
|
|||||||
// label1
|
// label1
|
||||||
//
|
//
|
||||||
this.label1.AutoSize = true;
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label1.Location = new System.Drawing.Point(801, 213);
|
this.label1.Location = new System.Drawing.Point(801, 213);
|
||||||
this.label1.Name = "label1";
|
this.label1.Name = "label1";
|
||||||
this.label1.Size = new System.Drawing.Size(51, 13);
|
this.label1.Size = new System.Drawing.Size(51, 13);
|
||||||
@@ -184,6 +220,7 @@
|
|||||||
// label2
|
// label2
|
||||||
//
|
//
|
||||||
this.label2.AutoSize = true;
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label2.Location = new System.Drawing.Point(751, 236);
|
this.label2.Location = new System.Drawing.Point(751, 236);
|
||||||
this.label2.Name = "label2";
|
this.label2.Name = "label2";
|
||||||
this.label2.Size = new System.Drawing.Size(62, 13);
|
this.label2.Size = new System.Drawing.Size(62, 13);
|
||||||
@@ -192,7 +229,11 @@
|
|||||||
//
|
//
|
||||||
// albumArtistTextBox
|
// albumArtistTextBox
|
||||||
//
|
//
|
||||||
|
this.albumArtistTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.albumArtistTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.albumArtistTextBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.albumArtistTextBox.Location = new System.Drawing.Point(754, 252);
|
this.albumArtistTextBox.Location = new System.Drawing.Point(754, 252);
|
||||||
|
this.albumArtistTextBox.Multiline = true;
|
||||||
this.albumArtistTextBox.Name = "albumArtistTextBox";
|
this.albumArtistTextBox.Name = "albumArtistTextBox";
|
||||||
this.albumArtistTextBox.ReadOnly = true;
|
this.albumArtistTextBox.ReadOnly = true;
|
||||||
this.albumArtistTextBox.Size = new System.Drawing.Size(150, 20);
|
this.albumArtistTextBox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -201,7 +242,11 @@
|
|||||||
//
|
//
|
||||||
// albumTextBox
|
// albumTextBox
|
||||||
//
|
//
|
||||||
|
this.albumTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.albumTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.albumTextBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.albumTextBox.Location = new System.Drawing.Point(754, 294);
|
this.albumTextBox.Location = new System.Drawing.Point(754, 294);
|
||||||
|
this.albumTextBox.Multiline = true;
|
||||||
this.albumTextBox.Name = "albumTextBox";
|
this.albumTextBox.Name = "albumTextBox";
|
||||||
this.albumTextBox.ReadOnly = true;
|
this.albumTextBox.ReadOnly = true;
|
||||||
this.albumTextBox.Size = new System.Drawing.Size(150, 20);
|
this.albumTextBox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -211,6 +256,7 @@
|
|||||||
// label3
|
// label3
|
||||||
//
|
//
|
||||||
this.label3.AutoSize = true;
|
this.label3.AutoSize = true;
|
||||||
|
this.label3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label3.Location = new System.Drawing.Point(751, 278);
|
this.label3.Location = new System.Drawing.Point(751, 278);
|
||||||
this.label3.Name = "label3";
|
this.label3.Name = "label3";
|
||||||
this.label3.Size = new System.Drawing.Size(36, 13);
|
this.label3.Size = new System.Drawing.Size(36, 13);
|
||||||
@@ -219,7 +265,11 @@
|
|||||||
//
|
//
|
||||||
// releaseDateTextBox
|
// releaseDateTextBox
|
||||||
//
|
//
|
||||||
|
this.releaseDateTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.releaseDateTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.releaseDateTextBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.releaseDateTextBox.Location = new System.Drawing.Point(754, 463);
|
this.releaseDateTextBox.Location = new System.Drawing.Point(754, 463);
|
||||||
|
this.releaseDateTextBox.Multiline = true;
|
||||||
this.releaseDateTextBox.Name = "releaseDateTextBox";
|
this.releaseDateTextBox.Name = "releaseDateTextBox";
|
||||||
this.releaseDateTextBox.ReadOnly = true;
|
this.releaseDateTextBox.ReadOnly = true;
|
||||||
this.releaseDateTextBox.Size = new System.Drawing.Size(150, 20);
|
this.releaseDateTextBox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -229,6 +279,7 @@
|
|||||||
// label4
|
// label4
|
||||||
//
|
//
|
||||||
this.label4.AutoSize = true;
|
this.label4.AutoSize = true;
|
||||||
|
this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label4.Location = new System.Drawing.Point(751, 447);
|
this.label4.Location = new System.Drawing.Point(751, 447);
|
||||||
this.label4.Name = "label4";
|
this.label4.Name = "label4";
|
||||||
this.label4.Size = new System.Drawing.Size(72, 13);
|
this.label4.Size = new System.Drawing.Size(72, 13);
|
||||||
@@ -237,7 +288,11 @@
|
|||||||
//
|
//
|
||||||
// upcTextBox
|
// upcTextBox
|
||||||
//
|
//
|
||||||
|
this.upcTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.upcTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.upcTextBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.upcTextBox.Location = new System.Drawing.Point(754, 420);
|
this.upcTextBox.Location = new System.Drawing.Point(754, 420);
|
||||||
|
this.upcTextBox.Multiline = true;
|
||||||
this.upcTextBox.Name = "upcTextBox";
|
this.upcTextBox.Name = "upcTextBox";
|
||||||
this.upcTextBox.ReadOnly = true;
|
this.upcTextBox.ReadOnly = true;
|
||||||
this.upcTextBox.Size = new System.Drawing.Size(150, 20);
|
this.upcTextBox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -247,6 +302,7 @@
|
|||||||
// label5
|
// label5
|
||||||
//
|
//
|
||||||
this.label5.AutoSize = true;
|
this.label5.AutoSize = true;
|
||||||
|
this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label5.Location = new System.Drawing.Point(751, 404);
|
this.label5.Location = new System.Drawing.Point(751, 404);
|
||||||
this.label5.Name = "label5";
|
this.label5.Name = "label5";
|
||||||
this.label5.Size = new System.Drawing.Size(29, 13);
|
this.label5.Size = new System.Drawing.Size(29, 13);
|
||||||
@@ -263,19 +319,22 @@
|
|||||||
this.albumArtPicBox.TabIndex = 39;
|
this.albumArtPicBox.TabIndex = 39;
|
||||||
this.albumArtPicBox.TabStop = false;
|
this.albumArtPicBox.TabStop = false;
|
||||||
//
|
//
|
||||||
// pictureBox1
|
// logoBox
|
||||||
//
|
//
|
||||||
this.pictureBox1.Image = global::QobuzDownloaderX.Properties.Resources.qbdlx;
|
this.logoBox.Image = global::QobuzDownloaderX.Properties.Resources.qbdlx_white;
|
||||||
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
|
this.logoBox.Location = new System.Drawing.Point(12, 12);
|
||||||
this.pictureBox1.Name = "pictureBox1";
|
this.logoBox.Name = "logoBox";
|
||||||
this.pictureBox1.Size = new System.Drawing.Size(207, 52);
|
this.logoBox.Size = new System.Drawing.Size(207, 52);
|
||||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
this.logoBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
this.pictureBox1.TabIndex = 36;
|
this.logoBox.TabIndex = 36;
|
||||||
this.pictureBox1.TabStop = false;
|
this.logoBox.TabStop = false;
|
||||||
|
this.logoBox.Click += new System.EventHandler(this.logoBox_Click);
|
||||||
|
this.logoBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
|
||||||
//
|
//
|
||||||
// label6
|
// label6
|
||||||
//
|
//
|
||||||
this.label6.AutoSize = true;
|
this.label6.AutoSize = true;
|
||||||
|
this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.label6.Location = new System.Drawing.Point(12, 70);
|
this.label6.Location = new System.Drawing.Point(12, 70);
|
||||||
this.label6.Name = "label6";
|
this.label6.Name = "label6";
|
||||||
this.label6.Size = new System.Drawing.Size(132, 13);
|
this.label6.Size = new System.Drawing.Size(132, 13);
|
||||||
@@ -284,7 +343,11 @@
|
|||||||
//
|
//
|
||||||
// totalTracksTextbox
|
// totalTracksTextbox
|
||||||
//
|
//
|
||||||
|
this.totalTracksTextbox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.totalTracksTextbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.totalTracksTextbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.totalTracksTextbox.Location = new System.Drawing.Point(754, 378);
|
this.totalTracksTextbox.Location = new System.Drawing.Point(754, 378);
|
||||||
|
this.totalTracksTextbox.Multiline = true;
|
||||||
this.totalTracksTextbox.Name = "totalTracksTextbox";
|
this.totalTracksTextbox.Name = "totalTracksTextbox";
|
||||||
this.totalTracksTextbox.ReadOnly = true;
|
this.totalTracksTextbox.ReadOnly = true;
|
||||||
this.totalTracksTextbox.Size = new System.Drawing.Size(150, 20);
|
this.totalTracksTextbox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -294,6 +357,7 @@
|
|||||||
// totalTracksLabel
|
// totalTracksLabel
|
||||||
//
|
//
|
||||||
this.totalTracksLabel.AutoSize = true;
|
this.totalTracksLabel.AutoSize = true;
|
||||||
|
this.totalTracksLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.totalTracksLabel.Location = new System.Drawing.Point(751, 362);
|
this.totalTracksLabel.Location = new System.Drawing.Point(751, 362);
|
||||||
this.totalTracksLabel.Name = "totalTracksLabel";
|
this.totalTracksLabel.Name = "totalTracksLabel";
|
||||||
this.totalTracksLabel.Size = new System.Drawing.Size(67, 13);
|
this.totalTracksLabel.Size = new System.Drawing.Size(67, 13);
|
||||||
@@ -318,7 +382,11 @@
|
|||||||
//
|
//
|
||||||
// qualityTextbox
|
// qualityTextbox
|
||||||
//
|
//
|
||||||
|
this.qualityTextbox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.qualityTextbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.qualityTextbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.qualityTextbox.Location = new System.Drawing.Point(754, 336);
|
this.qualityTextbox.Location = new System.Drawing.Point(754, 336);
|
||||||
|
this.qualityTextbox.Multiline = true;
|
||||||
this.qualityTextbox.Name = "qualityTextbox";
|
this.qualityTextbox.Name = "qualityTextbox";
|
||||||
this.qualityTextbox.ReadOnly = true;
|
this.qualityTextbox.ReadOnly = true;
|
||||||
this.qualityTextbox.Size = new System.Drawing.Size(150, 20);
|
this.qualityTextbox.Size = new System.Drawing.Size(150, 20);
|
||||||
@@ -328,6 +396,7 @@
|
|||||||
// qualityLabel
|
// qualityLabel
|
||||||
//
|
//
|
||||||
this.qualityLabel.AutoSize = true;
|
this.qualityLabel.AutoSize = true;
|
||||||
|
this.qualityLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.qualityLabel.Location = new System.Drawing.Point(751, 320);
|
this.qualityLabel.Location = new System.Drawing.Point(751, 320);
|
||||||
this.qualityLabel.Name = "qualityLabel";
|
this.qualityLabel.Name = "qualityLabel";
|
||||||
this.qualityLabel.Size = new System.Drawing.Size(71, 13);
|
this.qualityLabel.Size = new System.Drawing.Size(71, 13);
|
||||||
@@ -336,21 +405,26 @@
|
|||||||
//
|
//
|
||||||
// openSearch
|
// openSearch
|
||||||
//
|
//
|
||||||
|
this.openSearch.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.openSearch.FlatAppearance.BorderSize = 0;
|
||||||
|
this.openSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.openSearch.ForeColor = System.Drawing.Color.White;
|
||||||
this.openSearch.Location = new System.Drawing.Point(597, 57);
|
this.openSearch.Location = new System.Drawing.Point(597, 57);
|
||||||
this.openSearch.Name = "openSearch";
|
this.openSearch.Name = "openSearch";
|
||||||
this.openSearch.Size = new System.Drawing.Size(120, 23);
|
this.openSearch.Size = new System.Drawing.Size(120, 23);
|
||||||
this.openSearch.TabIndex = 60;
|
this.openSearch.TabIndex = 60;
|
||||||
this.openSearch.Text = "Open Search";
|
this.openSearch.Text = "Open Search";
|
||||||
this.openSearch.UseVisualStyleBackColor = true;
|
this.openSearch.UseVisualStyleBackColor = false;
|
||||||
this.openSearch.Click += new System.EventHandler(this.openSearch_Click);
|
this.openSearch.Click += new System.EventHandler(this.openSearch_Click);
|
||||||
//
|
//
|
||||||
// tagsLabel
|
// tagsLabel
|
||||||
//
|
//
|
||||||
|
this.tagsLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.tagsLabel.Location = new System.Drawing.Point(12, 501);
|
this.tagsLabel.Location = new System.Drawing.Point(12, 501);
|
||||||
this.tagsLabel.Name = "tagsLabel";
|
this.tagsLabel.Name = "tagsLabel";
|
||||||
this.tagsLabel.Size = new System.Drawing.Size(914, 23);
|
this.tagsLabel.Size = new System.Drawing.Size(914, 23);
|
||||||
this.tagsLabel.TabIndex = 61;
|
this.tagsLabel.TabIndex = 61;
|
||||||
this.tagsLabel.Text = "🠋 Choose which tags to save 🠋";
|
this.tagsLabel.Text = "🠋 Choose which tags to save (click me) 🠋";
|
||||||
this.tagsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
this.tagsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
this.tagsLabel.Click += new System.EventHandler(this.tagsLabel_Click);
|
this.tagsLabel.Click += new System.EventHandler(this.tagsLabel_Click);
|
||||||
//
|
//
|
||||||
@@ -359,6 +433,8 @@
|
|||||||
this.albumArtistCheckbox.AutoSize = true;
|
this.albumArtistCheckbox.AutoSize = true;
|
||||||
this.albumArtistCheckbox.Checked = true;
|
this.albumArtistCheckbox.Checked = true;
|
||||||
this.albumArtistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.albumArtistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.albumArtistCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.albumArtistCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.albumArtistCheckbox.Location = new System.Drawing.Point(325, 563);
|
this.albumArtistCheckbox.Location = new System.Drawing.Point(325, 563);
|
||||||
this.albumArtistCheckbox.Name = "albumArtistCheckbox";
|
this.albumArtistCheckbox.Name = "albumArtistCheckbox";
|
||||||
this.albumArtistCheckbox.Size = new System.Drawing.Size(81, 17);
|
this.albumArtistCheckbox.Size = new System.Drawing.Size(81, 17);
|
||||||
@@ -372,6 +448,8 @@
|
|||||||
this.artistCheckbox.AutoSize = true;
|
this.artistCheckbox.AutoSize = true;
|
||||||
this.artistCheckbox.Checked = true;
|
this.artistCheckbox.Checked = true;
|
||||||
this.artistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.artistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.artistCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.artistCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.artistCheckbox.Location = new System.Drawing.Point(325, 609);
|
this.artistCheckbox.Location = new System.Drawing.Point(325, 609);
|
||||||
this.artistCheckbox.Name = "artistCheckbox";
|
this.artistCheckbox.Name = "artistCheckbox";
|
||||||
this.artistCheckbox.Size = new System.Drawing.Size(80, 17);
|
this.artistCheckbox.Size = new System.Drawing.Size(80, 17);
|
||||||
@@ -385,6 +463,8 @@
|
|||||||
this.trackTitleCheckbox.AutoSize = true;
|
this.trackTitleCheckbox.AutoSize = true;
|
||||||
this.trackTitleCheckbox.Checked = true;
|
this.trackTitleCheckbox.Checked = true;
|
||||||
this.trackTitleCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.trackTitleCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.trackTitleCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.trackTitleCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.trackTitleCheckbox.Location = new System.Drawing.Point(325, 586);
|
this.trackTitleCheckbox.Location = new System.Drawing.Point(325, 586);
|
||||||
this.trackTitleCheckbox.Name = "trackTitleCheckbox";
|
this.trackTitleCheckbox.Name = "trackTitleCheckbox";
|
||||||
this.trackTitleCheckbox.Size = new System.Drawing.Size(77, 17);
|
this.trackTitleCheckbox.Size = new System.Drawing.Size(77, 17);
|
||||||
@@ -398,6 +478,8 @@
|
|||||||
this.trackNumberCheckbox.AutoSize = true;
|
this.trackNumberCheckbox.AutoSize = true;
|
||||||
this.trackNumberCheckbox.Checked = true;
|
this.trackNumberCheckbox.Checked = true;
|
||||||
this.trackNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.trackNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.trackNumberCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.trackNumberCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.trackNumberCheckbox.Location = new System.Drawing.Point(325, 632);
|
this.trackNumberCheckbox.Location = new System.Drawing.Point(325, 632);
|
||||||
this.trackNumberCheckbox.Name = "trackNumberCheckbox";
|
this.trackNumberCheckbox.Name = "trackNumberCheckbox";
|
||||||
this.trackNumberCheckbox.Size = new System.Drawing.Size(94, 17);
|
this.trackNumberCheckbox.Size = new System.Drawing.Size(94, 17);
|
||||||
@@ -411,6 +493,8 @@
|
|||||||
this.trackTotalCheckbox.AutoSize = true;
|
this.trackTotalCheckbox.AutoSize = true;
|
||||||
this.trackTotalCheckbox.Checked = true;
|
this.trackTotalCheckbox.Checked = true;
|
||||||
this.trackTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.trackTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.trackTotalCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.trackTotalCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.trackTotalCheckbox.Location = new System.Drawing.Point(325, 655);
|
this.trackTotalCheckbox.Location = new System.Drawing.Point(325, 655);
|
||||||
this.trackTotalCheckbox.Name = "trackTotalCheckbox";
|
this.trackTotalCheckbox.Name = "trackTotalCheckbox";
|
||||||
this.trackTotalCheckbox.Size = new System.Drawing.Size(86, 17);
|
this.trackTotalCheckbox.Size = new System.Drawing.Size(86, 17);
|
||||||
@@ -424,6 +508,8 @@
|
|||||||
this.discNumberCheckbox.AutoSize = true;
|
this.discNumberCheckbox.AutoSize = true;
|
||||||
this.discNumberCheckbox.Checked = true;
|
this.discNumberCheckbox.Checked = true;
|
||||||
this.discNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.discNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.discNumberCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.discNumberCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.discNumberCheckbox.Location = new System.Drawing.Point(325, 676);
|
this.discNumberCheckbox.Location = new System.Drawing.Point(325, 676);
|
||||||
this.discNumberCheckbox.Name = "discNumberCheckbox";
|
this.discNumberCheckbox.Name = "discNumberCheckbox";
|
||||||
this.discNumberCheckbox.Size = new System.Drawing.Size(87, 17);
|
this.discNumberCheckbox.Size = new System.Drawing.Size(87, 17);
|
||||||
@@ -437,6 +523,8 @@
|
|||||||
this.discTotalCheckbox.AutoSize = true;
|
this.discTotalCheckbox.AutoSize = true;
|
||||||
this.discTotalCheckbox.Checked = true;
|
this.discTotalCheckbox.Checked = true;
|
||||||
this.discTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.discTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.discTotalCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.discTotalCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.discTotalCheckbox.Location = new System.Drawing.Point(325, 699);
|
this.discTotalCheckbox.Location = new System.Drawing.Point(325, 699);
|
||||||
this.discTotalCheckbox.Name = "discTotalCheckbox";
|
this.discTotalCheckbox.Name = "discTotalCheckbox";
|
||||||
this.discTotalCheckbox.Size = new System.Drawing.Size(79, 17);
|
this.discTotalCheckbox.Size = new System.Drawing.Size(79, 17);
|
||||||
@@ -450,6 +538,8 @@
|
|||||||
this.albumCheckbox.AutoSize = true;
|
this.albumCheckbox.AutoSize = true;
|
||||||
this.albumCheckbox.Checked = true;
|
this.albumCheckbox.Checked = true;
|
||||||
this.albumCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.albumCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.albumCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.albumCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.albumCheckbox.Location = new System.Drawing.Point(325, 540);
|
this.albumCheckbox.Location = new System.Drawing.Point(325, 540);
|
||||||
this.albumCheckbox.Name = "albumCheckbox";
|
this.albumCheckbox.Name = "albumCheckbox";
|
||||||
this.albumCheckbox.Size = new System.Drawing.Size(78, 17);
|
this.albumCheckbox.Size = new System.Drawing.Size(78, 17);
|
||||||
@@ -463,6 +553,8 @@
|
|||||||
this.explicitCheckbox.AutoSize = true;
|
this.explicitCheckbox.AutoSize = true;
|
||||||
this.explicitCheckbox.Checked = true;
|
this.explicitCheckbox.Checked = true;
|
||||||
this.explicitCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.explicitCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.explicitCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.explicitCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.explicitCheckbox.Location = new System.Drawing.Point(425, 678);
|
this.explicitCheckbox.Location = new System.Drawing.Point(425, 678);
|
||||||
this.explicitCheckbox.Name = "explicitCheckbox";
|
this.explicitCheckbox.Name = "explicitCheckbox";
|
||||||
this.explicitCheckbox.Size = new System.Drawing.Size(106, 17);
|
this.explicitCheckbox.Size = new System.Drawing.Size(106, 17);
|
||||||
@@ -476,6 +568,8 @@
|
|||||||
this.upcCheckbox.AutoSize = true;
|
this.upcCheckbox.AutoSize = true;
|
||||||
this.upcCheckbox.Checked = true;
|
this.upcCheckbox.Checked = true;
|
||||||
this.upcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.upcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.upcCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.upcCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.upcCheckbox.Location = new System.Drawing.Point(425, 655);
|
this.upcCheckbox.Location = new System.Drawing.Point(425, 655);
|
||||||
this.upcCheckbox.Name = "upcCheckbox";
|
this.upcCheckbox.Name = "upcCheckbox";
|
||||||
this.upcCheckbox.Size = new System.Drawing.Size(52, 17);
|
this.upcCheckbox.Size = new System.Drawing.Size(52, 17);
|
||||||
@@ -489,6 +583,8 @@
|
|||||||
this.isrcCheckbox.AutoSize = true;
|
this.isrcCheckbox.AutoSize = true;
|
||||||
this.isrcCheckbox.Checked = true;
|
this.isrcCheckbox.Checked = true;
|
||||||
this.isrcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.isrcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.isrcCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.isrcCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.isrcCheckbox.Location = new System.Drawing.Point(425, 632);
|
this.isrcCheckbox.Location = new System.Drawing.Point(425, 632);
|
||||||
this.isrcCheckbox.Name = "isrcCheckbox";
|
this.isrcCheckbox.Name = "isrcCheckbox";
|
||||||
this.isrcCheckbox.Size = new System.Drawing.Size(51, 17);
|
this.isrcCheckbox.Size = new System.Drawing.Size(51, 17);
|
||||||
@@ -502,6 +598,8 @@
|
|||||||
this.copyrightCheckbox.AutoSize = true;
|
this.copyrightCheckbox.AutoSize = true;
|
||||||
this.copyrightCheckbox.Checked = true;
|
this.copyrightCheckbox.Checked = true;
|
||||||
this.copyrightCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.copyrightCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.copyrightCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.copyrightCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.copyrightCheckbox.Location = new System.Drawing.Point(425, 609);
|
this.copyrightCheckbox.Location = new System.Drawing.Point(425, 609);
|
||||||
this.copyrightCheckbox.Name = "copyrightCheckbox";
|
this.copyrightCheckbox.Name = "copyrightCheckbox";
|
||||||
this.copyrightCheckbox.Size = new System.Drawing.Size(70, 17);
|
this.copyrightCheckbox.Size = new System.Drawing.Size(70, 17);
|
||||||
@@ -515,6 +613,8 @@
|
|||||||
this.composerCheckbox.AutoSize = true;
|
this.composerCheckbox.AutoSize = true;
|
||||||
this.composerCheckbox.Checked = true;
|
this.composerCheckbox.Checked = true;
|
||||||
this.composerCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.composerCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.composerCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.composerCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.composerCheckbox.Location = new System.Drawing.Point(425, 586);
|
this.composerCheckbox.Location = new System.Drawing.Point(425, 586);
|
||||||
this.composerCheckbox.Name = "composerCheckbox";
|
this.composerCheckbox.Name = "composerCheckbox";
|
||||||
this.composerCheckbox.Size = new System.Drawing.Size(73, 17);
|
this.composerCheckbox.Size = new System.Drawing.Size(73, 17);
|
||||||
@@ -528,6 +628,8 @@
|
|||||||
this.genreCheckbox.AutoSize = true;
|
this.genreCheckbox.AutoSize = true;
|
||||||
this.genreCheckbox.Checked = true;
|
this.genreCheckbox.Checked = true;
|
||||||
this.genreCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.genreCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.genreCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.genreCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.genreCheckbox.Location = new System.Drawing.Point(425, 563);
|
this.genreCheckbox.Location = new System.Drawing.Point(425, 563);
|
||||||
this.genreCheckbox.Name = "genreCheckbox";
|
this.genreCheckbox.Name = "genreCheckbox";
|
||||||
this.genreCheckbox.Size = new System.Drawing.Size(55, 17);
|
this.genreCheckbox.Size = new System.Drawing.Size(55, 17);
|
||||||
@@ -541,6 +643,8 @@
|
|||||||
this.releaseCheckbox.AutoSize = true;
|
this.releaseCheckbox.AutoSize = true;
|
||||||
this.releaseCheckbox.Checked = true;
|
this.releaseCheckbox.Checked = true;
|
||||||
this.releaseCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.releaseCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.releaseCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.releaseCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.releaseCheckbox.Location = new System.Drawing.Point(425, 540);
|
this.releaseCheckbox.Location = new System.Drawing.Point(425, 540);
|
||||||
this.releaseCheckbox.Name = "releaseCheckbox";
|
this.releaseCheckbox.Name = "releaseCheckbox";
|
||||||
this.releaseCheckbox.Size = new System.Drawing.Size(91, 17);
|
this.releaseCheckbox.Size = new System.Drawing.Size(91, 17);
|
||||||
@@ -552,6 +656,8 @@
|
|||||||
// commentCheckbox
|
// commentCheckbox
|
||||||
//
|
//
|
||||||
this.commentCheckbox.AutoSize = true;
|
this.commentCheckbox.AutoSize = true;
|
||||||
|
this.commentCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.commentCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.commentCheckbox.Location = new System.Drawing.Point(533, 699);
|
this.commentCheckbox.Location = new System.Drawing.Point(533, 699);
|
||||||
this.commentCheckbox.Name = "commentCheckbox";
|
this.commentCheckbox.Name = "commentCheckbox";
|
||||||
this.commentCheckbox.Size = new System.Drawing.Size(70, 17);
|
this.commentCheckbox.Size = new System.Drawing.Size(70, 17);
|
||||||
@@ -562,9 +668,13 @@
|
|||||||
//
|
//
|
||||||
// commentTextbox
|
// commentTextbox
|
||||||
//
|
//
|
||||||
|
this.commentTextbox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.commentTextbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.commentTextbox.ForeColor = System.Drawing.Color.White;
|
||||||
this.commentTextbox.Location = new System.Drawing.Point(609, 697);
|
this.commentTextbox.Location = new System.Drawing.Point(609, 697);
|
||||||
|
this.commentTextbox.Multiline = true;
|
||||||
this.commentTextbox.Name = "commentTextbox";
|
this.commentTextbox.Name = "commentTextbox";
|
||||||
this.commentTextbox.Size = new System.Drawing.Size(112, 20);
|
this.commentTextbox.Size = new System.Drawing.Size(112, 17);
|
||||||
this.commentTextbox.TabIndex = 79;
|
this.commentTextbox.TabIndex = 79;
|
||||||
this.commentTextbox.TextChanged += new System.EventHandler(this.commentTextbox_TextChanged);
|
this.commentTextbox.TextChanged += new System.EventHandler(this.commentTextbox_TextChanged);
|
||||||
//
|
//
|
||||||
@@ -573,6 +683,8 @@
|
|||||||
this.imageCheckbox.AutoSize = true;
|
this.imageCheckbox.AutoSize = true;
|
||||||
this.imageCheckbox.Checked = true;
|
this.imageCheckbox.Checked = true;
|
||||||
this.imageCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.imageCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.imageCheckbox.FlatAppearance.BorderSize = 0;
|
||||||
|
this.imageCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.imageCheckbox.Location = new System.Drawing.Point(425, 699);
|
this.imageCheckbox.Location = new System.Drawing.Point(425, 699);
|
||||||
this.imageCheckbox.Name = "imageCheckbox";
|
this.imageCheckbox.Name = "imageCheckbox";
|
||||||
this.imageCheckbox.Size = new System.Drawing.Size(70, 17);
|
this.imageCheckbox.Size = new System.Drawing.Size(70, 17);
|
||||||
@@ -584,6 +696,7 @@
|
|||||||
// mp3Checkbox
|
// mp3Checkbox
|
||||||
//
|
//
|
||||||
this.mp3Checkbox.AutoSize = true;
|
this.mp3Checkbox.AutoSize = true;
|
||||||
|
this.mp3Checkbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.mp3Checkbox.Location = new System.Drawing.Point(243, 61);
|
this.mp3Checkbox.Location = new System.Drawing.Point(243, 61);
|
||||||
this.mp3Checkbox.Name = "mp3Checkbox";
|
this.mp3Checkbox.Name = "mp3Checkbox";
|
||||||
this.mp3Checkbox.Size = new System.Drawing.Size(69, 17);
|
this.mp3Checkbox.Size = new System.Drawing.Size(69, 17);
|
||||||
@@ -595,6 +708,7 @@
|
|||||||
// flacLowCheckbox
|
// flacLowCheckbox
|
||||||
//
|
//
|
||||||
this.flacLowCheckbox.AutoSize = true;
|
this.flacLowCheckbox.AutoSize = true;
|
||||||
|
this.flacLowCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.flacLowCheckbox.Location = new System.Drawing.Point(318, 61);
|
this.flacLowCheckbox.Location = new System.Drawing.Point(318, 61);
|
||||||
this.flacLowCheckbox.Name = "flacLowCheckbox";
|
this.flacLowCheckbox.Name = "flacLowCheckbox";
|
||||||
this.flacLowCheckbox.Size = new System.Drawing.Size(93, 17);
|
this.flacLowCheckbox.Size = new System.Drawing.Size(93, 17);
|
||||||
@@ -606,6 +720,7 @@
|
|||||||
// flacMidCheckbox
|
// flacMidCheckbox
|
||||||
//
|
//
|
||||||
this.flacMidCheckbox.AutoSize = true;
|
this.flacMidCheckbox.AutoSize = true;
|
||||||
|
this.flacMidCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.flacMidCheckbox.Location = new System.Drawing.Point(417, 61);
|
this.flacMidCheckbox.Location = new System.Drawing.Point(417, 61);
|
||||||
this.flacMidCheckbox.Name = "flacMidCheckbox";
|
this.flacMidCheckbox.Name = "flacMidCheckbox";
|
||||||
this.flacMidCheckbox.Size = new System.Drawing.Size(84, 17);
|
this.flacMidCheckbox.Size = new System.Drawing.Size(84, 17);
|
||||||
@@ -619,6 +734,7 @@
|
|||||||
this.flacHighCheckbox.AutoSize = true;
|
this.flacHighCheckbox.AutoSize = true;
|
||||||
this.flacHighCheckbox.Checked = true;
|
this.flacHighCheckbox.Checked = true;
|
||||||
this.flacHighCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.flacHighCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.flacHighCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.flacHighCheckbox.Location = new System.Drawing.Point(507, 61);
|
this.flacHighCheckbox.Location = new System.Drawing.Point(507, 61);
|
||||||
this.flacHighCheckbox.Name = "flacHighCheckbox";
|
this.flacHighCheckbox.Name = "flacHighCheckbox";
|
||||||
this.flacHighCheckbox.Size = new System.Drawing.Size(90, 17);
|
this.flacHighCheckbox.Size = new System.Drawing.Size(90, 17);
|
||||||
@@ -630,17 +746,184 @@
|
|||||||
// mp3WarnLabel
|
// mp3WarnLabel
|
||||||
//
|
//
|
||||||
this.mp3WarnLabel.AutoSize = true;
|
this.mp3WarnLabel.AutoSize = true;
|
||||||
|
this.mp3WarnLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
this.mp3WarnLabel.Location = new System.Drawing.Point(744, 711);
|
this.mp3WarnLabel.Location = new System.Drawing.Point(744, 711);
|
||||||
this.mp3WarnLabel.Name = "mp3WarnLabel";
|
this.mp3WarnLabel.Name = "mp3WarnLabel";
|
||||||
this.mp3WarnLabel.Size = new System.Drawing.Size(182, 13);
|
this.mp3WarnLabel.Size = new System.Drawing.Size(182, 13);
|
||||||
this.mp3WarnLabel.TabIndex = 85;
|
this.mp3WarnLabel.TabIndex = 85;
|
||||||
this.mp3WarnLabel.Text = "* = Not available on MP3 downloads.";
|
this.mp3WarnLabel.Text = "* = Not available on MP3 downloads.";
|
||||||
//
|
//
|
||||||
|
// panel1
|
||||||
|
//
|
||||||
|
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel1.Location = new System.Drawing.Point(15, 107);
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
this.panel1.Size = new System.Drawing.Size(576, 1);
|
||||||
|
this.panel1.TabIndex = 86;
|
||||||
|
//
|
||||||
|
// exitLabel
|
||||||
|
//
|
||||||
|
this.exitLabel.AutoSize = true;
|
||||||
|
this.exitLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.exitLabel.Font = new System.Drawing.Font("Calibri", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.exitLabel.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.exitLabel.Location = new System.Drawing.Point(911, 8);
|
||||||
|
this.exitLabel.Name = "exitLabel";
|
||||||
|
this.exitLabel.Size = new System.Drawing.Size(20, 23);
|
||||||
|
this.exitLabel.TabIndex = 87;
|
||||||
|
this.exitLabel.Text = "X";
|
||||||
|
this.exitLabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||||
|
this.exitLabel.Click += new System.EventHandler(this.exitLabel_Click);
|
||||||
|
this.exitLabel.MouseLeave += new System.EventHandler(this.exitLabel_MouseLeave);
|
||||||
|
this.exitLabel.MouseHover += new System.EventHandler(this.exitLabel_MouseHover);
|
||||||
|
//
|
||||||
|
// minimizeLabel
|
||||||
|
//
|
||||||
|
this.minimizeLabel.AutoSize = true;
|
||||||
|
this.minimizeLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.minimizeLabel.Font = new System.Drawing.Font("Calibri", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.minimizeLabel.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.minimizeLabel.Location = new System.Drawing.Point(886, 4);
|
||||||
|
this.minimizeLabel.Name = "minimizeLabel";
|
||||||
|
this.minimizeLabel.Size = new System.Drawing.Size(19, 23);
|
||||||
|
this.minimizeLabel.TabIndex = 88;
|
||||||
|
this.minimizeLabel.Text = "_";
|
||||||
|
this.minimizeLabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||||
|
this.minimizeLabel.Click += new System.EventHandler(this.minimizeLabel_Click);
|
||||||
|
this.minimizeLabel.MouseLeave += new System.EventHandler(this.minimizeLabel_MouseLeave);
|
||||||
|
this.minimizeLabel.MouseHover += new System.EventHandler(this.minimizeLabel_MouseHover);
|
||||||
|
//
|
||||||
|
// panel2
|
||||||
|
//
|
||||||
|
this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel2.Location = new System.Drawing.Point(754, 271);
|
||||||
|
this.panel2.Name = "panel2";
|
||||||
|
this.panel2.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel2.TabIndex = 87;
|
||||||
|
//
|
||||||
|
// panel3
|
||||||
|
//
|
||||||
|
this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel3.Location = new System.Drawing.Point(754, 313);
|
||||||
|
this.panel3.Name = "panel3";
|
||||||
|
this.panel3.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel3.TabIndex = 88;
|
||||||
|
//
|
||||||
|
// panel4
|
||||||
|
//
|
||||||
|
this.panel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel4.Location = new System.Drawing.Point(754, 355);
|
||||||
|
this.panel4.Name = "panel4";
|
||||||
|
this.panel4.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel4.TabIndex = 89;
|
||||||
|
//
|
||||||
|
// panel5
|
||||||
|
//
|
||||||
|
this.panel5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel5.Location = new System.Drawing.Point(754, 397);
|
||||||
|
this.panel5.Name = "panel5";
|
||||||
|
this.panel5.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel5.TabIndex = 89;
|
||||||
|
//
|
||||||
|
// panel6
|
||||||
|
//
|
||||||
|
this.panel6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel6.Location = new System.Drawing.Point(754, 439);
|
||||||
|
this.panel6.Name = "panel6";
|
||||||
|
this.panel6.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel6.TabIndex = 89;
|
||||||
|
//
|
||||||
|
// panel7
|
||||||
|
//
|
||||||
|
this.panel7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel7.Location = new System.Drawing.Point(754, 482);
|
||||||
|
this.panel7.Name = "panel7";
|
||||||
|
this.panel7.Size = new System.Drawing.Size(150, 1);
|
||||||
|
this.panel7.TabIndex = 89;
|
||||||
|
//
|
||||||
|
// panel8
|
||||||
|
//
|
||||||
|
this.panel8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel8.Location = new System.Drawing.Point(609, 716);
|
||||||
|
this.panel8.Name = "panel8";
|
||||||
|
this.panel8.Size = new System.Drawing.Size(112, 1);
|
||||||
|
this.panel8.TabIndex = 90;
|
||||||
|
//
|
||||||
|
// streamableCheckbox
|
||||||
|
//
|
||||||
|
this.streamableCheckbox.AutoSize = true;
|
||||||
|
this.streamableCheckbox.Checked = true;
|
||||||
|
this.streamableCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.streamableCheckbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.streamableCheckbox.Location = new System.Drawing.Point(243, 12);
|
||||||
|
this.streamableCheckbox.Name = "streamableCheckbox";
|
||||||
|
this.streamableCheckbox.Size = new System.Drawing.Size(113, 17);
|
||||||
|
this.streamableCheckbox.TabIndex = 91;
|
||||||
|
this.streamableCheckbox.Text = "Streamable Check";
|
||||||
|
this.streamableCheckbox.UseVisualStyleBackColor = true;
|
||||||
|
this.streamableCheckbox.Visible = false;
|
||||||
|
//
|
||||||
|
// secretTextbox
|
||||||
|
//
|
||||||
|
this.secretTextbox.Location = new System.Drawing.Point(352, 34);
|
||||||
|
this.secretTextbox.Name = "secretTextbox";
|
||||||
|
this.secretTextbox.Size = new System.Drawing.Size(209, 20);
|
||||||
|
this.secretTextbox.TabIndex = 92;
|
||||||
|
this.secretTextbox.Visible = false;
|
||||||
|
//
|
||||||
|
// displaySecretButton
|
||||||
|
//
|
||||||
|
this.displaySecretButton.Location = new System.Drawing.Point(243, 32);
|
||||||
|
this.displaySecretButton.Name = "displaySecretButton";
|
||||||
|
this.displaySecretButton.Size = new System.Drawing.Size(103, 23);
|
||||||
|
this.displaySecretButton.TabIndex = 93;
|
||||||
|
this.displaySecretButton.Text = "Display appSecret";
|
||||||
|
this.displaySecretButton.UseVisualStyleBackColor = true;
|
||||||
|
this.displaySecretButton.Visible = false;
|
||||||
|
this.displaySecretButton.Click += new System.EventHandler(this.displaySecretButton_Click);
|
||||||
|
//
|
||||||
|
// profilePictureBox
|
||||||
|
//
|
||||||
|
this.profilePictureBox.Location = new System.Drawing.Point(15, 501);
|
||||||
|
this.profilePictureBox.Name = "profilePictureBox";
|
||||||
|
this.profilePictureBox.Size = new System.Drawing.Size(20, 20);
|
||||||
|
this.profilePictureBox.TabIndex = 94;
|
||||||
|
this.profilePictureBox.TabStop = false;
|
||||||
|
//
|
||||||
|
// logoutLabel
|
||||||
|
//
|
||||||
|
this.logoutLabel.AutoSize = true;
|
||||||
|
this.logoutLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.logoutLabel.Location = new System.Drawing.Point(41, 506);
|
||||||
|
this.logoutLabel.Name = "logoutLabel";
|
||||||
|
this.logoutLabel.Size = new System.Drawing.Size(161, 13);
|
||||||
|
this.logoutLabel.TabIndex = 95;
|
||||||
|
this.logoutLabel.Text = "Logged in as %name%, Log out?";
|
||||||
|
this.logoutLabel.Click += new System.EventHandler(this.logoutLabel_Click);
|
||||||
|
this.logoutLabel.MouseLeave += new System.EventHandler(this.logoutLabel_MouseLeave);
|
||||||
|
this.logoutLabel.MouseHover += new System.EventHandler(this.logoutLabel_MouseHover);
|
||||||
|
//
|
||||||
// QobuzDownloaderX
|
// QobuzDownloaderX
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
this.ClientSize = new System.Drawing.Size(938, 533);
|
this.ClientSize = new System.Drawing.Size(938, 533);
|
||||||
|
this.Controls.Add(this.logoutLabel);
|
||||||
|
this.Controls.Add(this.profilePictureBox);
|
||||||
|
this.Controls.Add(this.displaySecretButton);
|
||||||
|
this.Controls.Add(this.secretTextbox);
|
||||||
|
this.Controls.Add(this.streamableCheckbox);
|
||||||
|
this.Controls.Add(this.panel8);
|
||||||
|
this.Controls.Add(this.panel7);
|
||||||
|
this.Controls.Add(this.panel6);
|
||||||
|
this.Controls.Add(this.panel5);
|
||||||
|
this.Controls.Add(this.panel4);
|
||||||
|
this.Controls.Add(this.panel3);
|
||||||
|
this.Controls.Add(this.panel2);
|
||||||
|
this.Controls.Add(this.minimizeLabel);
|
||||||
|
this.Controls.Add(this.exitLabel);
|
||||||
|
this.Controls.Add(this.panel1);
|
||||||
this.Controls.Add(this.mp3WarnLabel);
|
this.Controls.Add(this.mp3WarnLabel);
|
||||||
this.Controls.Add(this.flacHighCheckbox);
|
this.Controls.Add(this.flacHighCheckbox);
|
||||||
this.Controls.Add(this.flacMidCheckbox);
|
this.Controls.Add(this.flacMidCheckbox);
|
||||||
@@ -682,7 +965,7 @@
|
|||||||
this.Controls.Add(this.label1);
|
this.Controls.Add(this.label1);
|
||||||
this.Controls.Add(this.albumArtPicBox);
|
this.Controls.Add(this.albumArtPicBox);
|
||||||
this.Controls.Add(this.verNumLabel);
|
this.Controls.Add(this.verNumLabel);
|
||||||
this.Controls.Add(this.pictureBox1);
|
this.Controls.Add(this.logoBox);
|
||||||
this.Controls.Add(this.imageURLTextbox);
|
this.Controls.Add(this.imageURLTextbox);
|
||||||
this.Controls.Add(this.downloadButton);
|
this.Controls.Add(this.downloadButton);
|
||||||
this.Controls.Add(this.albumUrl);
|
this.Controls.Add(this.albumUrl);
|
||||||
@@ -690,7 +973,7 @@
|
|||||||
this.Controls.Add(this.output);
|
this.Controls.Add(this.output);
|
||||||
this.Controls.Add(this.selectFolder);
|
this.Controls.Add(this.selectFolder);
|
||||||
this.Controls.Add(this.testURLBox);
|
this.Controls.Add(this.testURLBox);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.Name = "QobuzDownloaderX";
|
this.Name = "QobuzDownloaderX";
|
||||||
@@ -698,8 +981,10 @@
|
|||||||
this.Text = "QobuzDownloaderX";
|
this.Text = "QobuzDownloaderX";
|
||||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.QobuzDownloaderX_FormClosed);
|
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.QobuzDownloaderX_FormClosed);
|
||||||
this.Load += new System.EventHandler(this.Form1_Load);
|
this.Load += new System.EventHandler(this.Form1_Load);
|
||||||
|
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.QobuzDownloaderX_MouseMove);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.logoBox)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.profilePictureBox)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
@@ -715,7 +1000,7 @@
|
|||||||
private System.Windows.Forms.Button downloadButton;
|
private System.Windows.Forms.Button downloadButton;
|
||||||
private System.Windows.Forms.TextBox albumUrl;
|
private System.Windows.Forms.TextBox albumUrl;
|
||||||
private System.Windows.Forms.TextBox imageURLTextbox;
|
private System.Windows.Forms.TextBox imageURLTextbox;
|
||||||
private System.Windows.Forms.PictureBox pictureBox1;
|
private System.Windows.Forms.PictureBox logoBox;
|
||||||
private System.Windows.Forms.Label verNumLabel;
|
private System.Windows.Forms.Label verNumLabel;
|
||||||
private System.Windows.Forms.PictureBox albumArtPicBox;
|
private System.Windows.Forms.PictureBox albumArtPicBox;
|
||||||
private System.Windows.Forms.Label label1;
|
private System.Windows.Forms.Label label1;
|
||||||
@@ -761,6 +1046,21 @@
|
|||||||
private System.Windows.Forms.CheckBox flacMidCheckbox;
|
private System.Windows.Forms.CheckBox flacMidCheckbox;
|
||||||
private System.Windows.Forms.CheckBox flacHighCheckbox;
|
private System.Windows.Forms.CheckBox flacHighCheckbox;
|
||||||
private System.Windows.Forms.Label mp3WarnLabel;
|
private System.Windows.Forms.Label mp3WarnLabel;
|
||||||
|
private System.Windows.Forms.Panel panel1;
|
||||||
|
private System.Windows.Forms.Label exitLabel;
|
||||||
|
private System.Windows.Forms.Label minimizeLabel;
|
||||||
|
private System.Windows.Forms.Panel panel2;
|
||||||
|
private System.Windows.Forms.Panel panel3;
|
||||||
|
private System.Windows.Forms.Panel panel4;
|
||||||
|
private System.Windows.Forms.Panel panel5;
|
||||||
|
private System.Windows.Forms.Panel panel6;
|
||||||
|
private System.Windows.Forms.Panel panel7;
|
||||||
|
private System.Windows.Forms.Panel panel8;
|
||||||
|
private System.Windows.Forms.CheckBox streamableCheckbox;
|
||||||
|
private System.Windows.Forms.TextBox secretTextbox;
|
||||||
|
private System.Windows.Forms.Button displaySecretButton;
|
||||||
|
private System.Windows.Forms.PictureBox profilePictureBox;
|
||||||
|
private System.Windows.Forms.Label logoutLabel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,10 +33,19 @@ namespace QobuzDownloaderX
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public const int WM_NCLBUTTONDOWN = 0xA1;
|
||||||
|
public const int HT_CAPTION = 0x2;
|
||||||
|
|
||||||
|
[DllImportAttribute("user32.dll")]
|
||||||
|
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
||||||
|
[DllImportAttribute("user32.dll")]
|
||||||
|
public static extern bool ReleaseCapture();
|
||||||
|
|
||||||
public string eMail { get; set; }
|
public string eMail { get; set; }
|
||||||
public string appid { get; set; }
|
public string appid { get; set; }
|
||||||
public string password { get; set; }
|
public string password { get; set; }
|
||||||
public string userAuth { get; set; }
|
public string userAuth { get; set; }
|
||||||
|
public string profilePic { get; set; }
|
||||||
public string displayName { get; set; }
|
public string displayName { get; set; }
|
||||||
public string accountType { get; set; }
|
public string accountType { get; set; }
|
||||||
public string appSecret { get; set; }
|
public string appSecret { get; set; }
|
||||||
@@ -44,6 +53,7 @@ namespace QobuzDownloaderX
|
|||||||
public string trackIdString { get; set; }
|
public string trackIdString { get; set; }
|
||||||
public string formatIdString { get; set; }
|
public string formatIdString { get; set; }
|
||||||
public string audioFileType { get; set; }
|
public string audioFileType { get; set; }
|
||||||
|
public int devClickEggThingValue { get; set; }
|
||||||
|
|
||||||
searchForm searchF = new searchForm();
|
searchForm searchF = new searchForm();
|
||||||
|
|
||||||
@@ -64,6 +74,11 @@ namespace QobuzDownloaderX
|
|||||||
|
|
||||||
// Set a placeholder image for Cover Art box.
|
// Set a placeholder image for Cover Art box.
|
||||||
albumArtPicBox.ImageLocation = "https://static.qobuz.com/images/covers/01/00/2013072600001_150.jpg";
|
albumArtPicBox.ImageLocation = "https://static.qobuz.com/images/covers/01/00/2013072600001_150.jpg";
|
||||||
|
profilePictureBox.ImageLocation = profilePic;
|
||||||
|
|
||||||
|
// Change account info for logout button
|
||||||
|
string oldText = logoutLabel.Text;
|
||||||
|
logoutLabel.Text = oldText.Replace("%name%", displayName);
|
||||||
|
|
||||||
#region Load Saved Settings
|
#region Load Saved Settings
|
||||||
// Set saved settings to correct places.
|
// Set saved settings to correct places.
|
||||||
@@ -118,11 +133,15 @@ namespace QobuzDownloaderX
|
|||||||
private void debuggingEvents(object sender, EventArgs e)
|
private void debuggingEvents(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
#region Debug Events, For Testing
|
#region Debug Events, For Testing
|
||||||
|
|
||||||
|
devClickEggThingValue = 0;
|
||||||
|
|
||||||
// Show app_secret value.
|
// Show app_secret value.
|
||||||
//output.Invoke(new Action(() => output.AppendText("\r\n\r\napp_secret = " + appSecret)));
|
//output.Invoke(new Action(() => output.AppendText("\r\n\r\napp_secret = " + appSecret)));
|
||||||
|
|
||||||
// Show format_id value.
|
// Show format_id value.
|
||||||
//output.Invoke(new Action(() => output.AppendText("\r\n\r\nformat_id = " + formatIdString)));
|
//output.Invoke(new Action(() => output.AppendText("\r\n\r\nformat_id = " + formatIdString)));
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,27 +216,13 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectFolder_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Thread t = new Thread((ThreadStart)(() => {
|
|
||||||
// Open Folder Browser to select path & Save the selection
|
|
||||||
folderBrowserDialog.ShowDialog();
|
|
||||||
Settings.Default.savedFolder = folderBrowserDialog.SelectedPath;
|
|
||||||
Settings.Default.Save();
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Run your code from a thread that joins the STA Thread
|
|
||||||
t.SetApartmentState(ApartmentState.STA);
|
|
||||||
t.Start();
|
|
||||||
t.Join();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createURL(object sender, EventArgs e)
|
private void createURL(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Create unix timestamp for "request_ts=" and hashing to make request signature.
|
// Create unix timestamp for "request_ts=" and hashing to make request signature.
|
||||||
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
||||||
string time = unixTimestamp.ToString();
|
string time = unixTimestamp.ToString();
|
||||||
|
|
||||||
|
|
||||||
// Generate the string that will be hashed using MD5 (utf-8). Example string - "trackgetFileUrlformat_id27intentstreamtrack_id6891469115724574501b4d2f1aca8d4c8ef4z07984c5aa6712" (example shows a fake app_secret)
|
// Generate the string that will be hashed using MD5 (utf-8). Example string - "trackgetFileUrlformat_id27intentstreamtrack_id6891469115724574501b4d2f1aca8d4c8ef4z07984c5aa6712" (example shows a fake app_secret)
|
||||||
string md5HashMe = "trackgetFileUrlformat_id" + formatIdString + "intentstreamtrack_id" + trackIdString + time + appSecret;
|
string md5HashMe = "trackgetFileUrlformat_id" + formatIdString + "intentstreamtrack_id" + trackIdString + time + appSecret;
|
||||||
|
|
||||||
@@ -277,6 +282,22 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Choosing / Opening folder
|
||||||
|
private void selectFolder_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Thread t = new Thread((ThreadStart)(() => {
|
||||||
|
// Open Folder Browser to select path & Save the selection
|
||||||
|
folderBrowserDialog.ShowDialog();
|
||||||
|
Settings.Default.savedFolder = folderBrowserDialog.SelectedPath;
|
||||||
|
Settings.Default.Save();
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Run your code from a thread that joins the STA Thread
|
||||||
|
t.SetApartmentState(ApartmentState.STA);
|
||||||
|
t.Start();
|
||||||
|
t.Join();
|
||||||
|
}
|
||||||
|
|
||||||
private void openFolderButton_Click(object sender, EventArgs e)
|
private void openFolderButton_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Open selcted folder
|
// Open selcted folder
|
||||||
@@ -296,6 +317,7 @@ namespace QobuzDownloaderX
|
|||||||
Process.Start(@folderBrowserDialog.SelectedPath);
|
Process.Start(@folderBrowserDialog.SelectedPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Getting Type of URL
|
#region Getting Type of URL
|
||||||
private void getLinkTypeBG_DoWork(object sender, DoWorkEventArgs e)
|
private void getLinkTypeBG_DoWork(object sender, DoWorkEventArgs e)
|
||||||
@@ -496,7 +518,7 @@ namespace QobuzDownloaderX
|
|||||||
foreach (Match mtrack in Regex.Matches(trackinput, trackIdspattern, trackoptions))
|
foreach (Match mtrack in Regex.Matches(trackinput, trackIdspattern, trackoptions))
|
||||||
{
|
{
|
||||||
// Set default value for max length.
|
// Set default value for max length.
|
||||||
const int MaxLength = 200;
|
const int MaxLength = 36;
|
||||||
|
|
||||||
//output.Invoke(new Action(() => output.AppendText(string.Format("{0}\r\n", m.Groups["trackId"].Value))));
|
//output.Invoke(new Action(() => output.AppendText(string.Format("{0}\r\n", m.Groups["trackId"].Value))));
|
||||||
trackIdString = string.Format("{0}", mtrack.Groups["trackId"].Value);
|
trackIdString = string.Format("{0}", mtrack.Groups["trackId"].Value);
|
||||||
@@ -546,7 +568,7 @@ namespace QobuzDownloaderX
|
|||||||
albumArtist = decodedAlbumArtist;
|
albumArtist = decodedAlbumArtist;
|
||||||
|
|
||||||
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album artist in text box under cover art.
|
// Display album artist in text box under cover art.
|
||||||
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
||||||
@@ -567,7 +589,7 @@ namespace QobuzDownloaderX
|
|||||||
performerName = decodedPerformerName;
|
performerName = decodedPerformerName;
|
||||||
|
|
||||||
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (performerNamePath.Length > MaxLength)
|
if (performerNamePath.Length > MaxLength)
|
||||||
@@ -600,7 +622,7 @@ namespace QobuzDownloaderX
|
|||||||
albumName = decodedAlbumName;
|
albumName = decodedAlbumName;
|
||||||
|
|
||||||
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album name in text box under cover art.
|
// Display album name in text box under cover art.
|
||||||
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
||||||
@@ -622,7 +644,7 @@ namespace QobuzDownloaderX
|
|||||||
trackName = decodedTrackName;
|
trackName = decodedTrackName;
|
||||||
|
|
||||||
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (trackNamePath.Length > MaxLength)
|
if (trackNamePath.Length > MaxLength)
|
||||||
@@ -640,7 +662,7 @@ namespace QobuzDownloaderX
|
|||||||
versionName = decodedVersionName;
|
versionName = decodedVersionName;
|
||||||
|
|
||||||
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Genre tag
|
// Genre tag
|
||||||
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
||||||
@@ -693,7 +715,7 @@ namespace QobuzDownloaderX
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Filename Number Padding
|
#region Filename Number Padding
|
||||||
// Set default padding length
|
// Set default track number padding length
|
||||||
var paddingLength = 2;
|
var paddingLength = 2;
|
||||||
|
|
||||||
// Prepare track number padding in filename.
|
// Prepare track number padding in filename.
|
||||||
@@ -706,14 +728,40 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
paddingLength = trackTotal.Length;
|
paddingLength = trackTotal.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set default disc number padding length
|
||||||
|
var paddingDiscLength = 2;
|
||||||
|
|
||||||
|
// Prepare disc number padding in filename.
|
||||||
|
string paddingDiscLog = discTotal.Length.ToString();
|
||||||
|
if (paddingDiscLog == "1")
|
||||||
|
{
|
||||||
|
paddingDiscLength = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paddingDiscLength = discTotal.Length;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Create Directories
|
#region Create Directories
|
||||||
|
// Create strings for disc folders
|
||||||
|
string discFolder = null;
|
||||||
|
string discFolderCreate = null;
|
||||||
|
|
||||||
|
// If more than 1 disc, create folders for discs. Otherwise, strings will remain null.
|
||||||
|
if (discTotal != "1")
|
||||||
|
{
|
||||||
|
discFolder = "CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
discFolderCreate = "\\CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
}
|
||||||
|
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]");
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]");
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath);
|
||||||
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + discFolderCreate);
|
||||||
|
|
||||||
string discogPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath;
|
string discogPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + discFolderCreate;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Availability Check (Streamable?)
|
#region Availability Check (Streamable?)
|
||||||
@@ -722,18 +770,25 @@ namespace QobuzDownloaderX
|
|||||||
var streamCheck = streamCheckLog[2].Value;
|
var streamCheck = streamCheckLog[2].Value;
|
||||||
|
|
||||||
if (streamCheck != "true")
|
if (streamCheck != "true")
|
||||||
|
{
|
||||||
|
if (streamableCheckbox.Checked == true)
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("Track " + trackNumber + " \"" + trackName + "\" is not available for streaming. Skipping track...\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track " + trackNumber + " \"" + trackName + "\" is not available for streaming. Skipping track...\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output.Invoke(new Action(() => output.AppendText("\r\nTrack " + trackNumber + " \"" + trackName + "\" is not available for streaming. But stremable check is being ignored for debugging, or messed up releases. Attempting to download...\r\n")));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Check if File Exists
|
#region Check if File Exists
|
||||||
// Check if there is a version name.
|
// Check if there is a version name.
|
||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(discogPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
if (System.IO.File.Exists(discogPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -742,7 +797,7 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(discogPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
if (System.IO.File.Exists(discogPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -781,10 +836,10 @@ namespace QobuzDownloaderX
|
|||||||
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
||||||
|
|
||||||
// Save single track in selected path.
|
// Save single track in selected path.
|
||||||
if (versionName == null | versionName == "")
|
if (versionNamePath == null | versionNamePath == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -792,7 +847,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -828,7 +883,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -951,7 +1006,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -1081,7 +1136,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -1202,7 +1257,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + " [" + albumIdDiscog + "]" + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -1353,7 +1408,7 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
// If there is an issue trying to, or during the download, show error info.
|
// If there is an issue trying to, or during the download, show error info.
|
||||||
string error = downloadError.ToString();
|
string error = downloadError.ToString();
|
||||||
output.Invoke(new Action(() => output.Text = String.Empty));
|
output.Invoke(new Action(() => output.AppendText("\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText(error)));
|
output.Invoke(new Action(() => output.AppendText(error)));
|
||||||
output.Invoke(new Action(() => output.AppendText("\r\n\r\nIf some tracks aren't available for streaming on the album you're trying to download, try to manually download the available tracks individually.")));
|
output.Invoke(new Action(() => output.AppendText("\r\n\r\nIf some tracks aren't available for streaming on the album you're trying to download, try to manually download the available tracks individually.")));
|
||||||
@@ -1500,7 +1555,7 @@ namespace QobuzDownloaderX
|
|||||||
foreach (Match m in Regex.Matches(input, trackIdspattern, options))
|
foreach (Match m in Regex.Matches(input, trackIdspattern, options))
|
||||||
{
|
{
|
||||||
// Set default value for max length.
|
// Set default value for max length.
|
||||||
const int MaxLength = 200;
|
const int MaxLength = 36;
|
||||||
|
|
||||||
// Grab matches for Track IDs
|
// Grab matches for Track IDs
|
||||||
trackIdString = string.Format("{0}", m.Groups["trackId"].Value);
|
trackIdString = string.Format("{0}", m.Groups["trackId"].Value);
|
||||||
@@ -1553,8 +1608,9 @@ namespace QobuzDownloaderX
|
|||||||
string decodedAlbumArtist = DecodeEncodedNonAsciiCharacters(unicodeAlbumArtist);
|
string decodedAlbumArtist = DecodeEncodedNonAsciiCharacters(unicodeAlbumArtist);
|
||||||
albumArtist = decodedAlbumArtist;
|
albumArtist = decodedAlbumArtist;
|
||||||
|
|
||||||
|
// Replace double slashes & path unfriendly characters
|
||||||
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album artist in text box under cover art.
|
// Display album artist in text box under cover art.
|
||||||
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
||||||
@@ -1574,8 +1630,9 @@ namespace QobuzDownloaderX
|
|||||||
string decodedPerformerName = DecodeEncodedNonAsciiCharacters(unicodePerformerName);
|
string decodedPerformerName = DecodeEncodedNonAsciiCharacters(unicodePerformerName);
|
||||||
performerName = decodedPerformerName;
|
performerName = decodedPerformerName;
|
||||||
|
|
||||||
|
// Replace double slashes & path unfriendly characters
|
||||||
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (performerNamePath.Length > MaxLength)
|
if (performerNamePath.Length > MaxLength)
|
||||||
@@ -1596,6 +1653,7 @@ namespace QobuzDownloaderX
|
|||||||
string decodedComposerName = DecodeEncodedNonAsciiCharacters(unicodeComposerName);
|
string decodedComposerName = DecodeEncodedNonAsciiCharacters(unicodeComposerName);
|
||||||
composerName = decodedComposerName;
|
composerName = decodedComposerName;
|
||||||
|
|
||||||
|
// Replace double slashes
|
||||||
composerName = composerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
composerName = composerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
|
|
||||||
// Album Name tag
|
// Album Name tag
|
||||||
@@ -1607,8 +1665,9 @@ namespace QobuzDownloaderX
|
|||||||
string decodedAlbumName = DecodeEncodedNonAsciiCharacters(unicodeAlbumName);
|
string decodedAlbumName = DecodeEncodedNonAsciiCharacters(unicodeAlbumName);
|
||||||
albumName = decodedAlbumName;
|
albumName = decodedAlbumName;
|
||||||
|
|
||||||
|
// Replace double slashes & path unfriendly characters
|
||||||
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album name in text box under cover art.
|
// Display album name in text box under cover art.
|
||||||
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
||||||
@@ -1629,8 +1688,9 @@ namespace QobuzDownloaderX
|
|||||||
string decodedTrackName = DecodeEncodedNonAsciiCharacters(unicodeTrackName);
|
string decodedTrackName = DecodeEncodedNonAsciiCharacters(unicodeTrackName);
|
||||||
trackName = decodedTrackName;
|
trackName = decodedTrackName;
|
||||||
|
|
||||||
|
// Replace double slashes & path unfriendly characters
|
||||||
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (trackNamePath.Length > MaxLength)
|
if (trackNamePath.Length > MaxLength)
|
||||||
@@ -1647,8 +1707,15 @@ namespace QobuzDownloaderX
|
|||||||
string decodedVersionName = DecodeEncodedNonAsciiCharacters(unicodeVersionName);
|
string decodedVersionName = DecodeEncodedNonAsciiCharacters(unicodeVersionName);
|
||||||
versionName = decodedVersionName;
|
versionName = decodedVersionName;
|
||||||
|
|
||||||
|
// Replace double slashes & path unfriendly characters
|
||||||
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
|
//// If name goes over 200 characters, limit it to 200
|
||||||
|
//if (trackNamePath.Length + versionNamePath.Length > MaxLength)
|
||||||
|
//{
|
||||||
|
// versionNamePath = null;
|
||||||
|
//}
|
||||||
|
|
||||||
// Genre tag
|
// Genre tag
|
||||||
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
||||||
@@ -1701,7 +1768,7 @@ namespace QobuzDownloaderX
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Filename Number Padding
|
#region Filename Number Padding
|
||||||
// Set default padding length
|
// Set default track number padding length
|
||||||
var paddingLength = 2;
|
var paddingLength = 2;
|
||||||
|
|
||||||
// Prepare track number padding in filename.
|
// Prepare track number padding in filename.
|
||||||
@@ -1714,14 +1781,42 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
paddingLength = trackTotal.Length;
|
paddingLength = trackTotal.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set default disc number padding length
|
||||||
|
var paddingDiscLength = 2;
|
||||||
|
|
||||||
|
// Prepare disc number padding in filename.
|
||||||
|
string paddingDiscLog = discTotal.Length.ToString();
|
||||||
|
if (paddingDiscLog == "1")
|
||||||
|
{
|
||||||
|
paddingDiscLength = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paddingDiscLength = discTotal.Length;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Create Directories
|
#region Create Directories
|
||||||
|
// Create strings for disc folders
|
||||||
|
string discFolder = null;
|
||||||
|
string discFolderCreate = null;
|
||||||
|
|
||||||
|
// If more than 1 disc, create folders for discs. Otherwise, strings will remain null.
|
||||||
|
if (discTotal != "1")
|
||||||
|
{
|
||||||
|
discFolder = "CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
discFolderCreate = "\\CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create directories
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath);
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath);
|
||||||
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + discFolderCreate);
|
||||||
|
|
||||||
string albumPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath;
|
// Set albumPath to the created directories.
|
||||||
|
string albumPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + discFolderCreate;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Availability Check (Streamable?)
|
#region Availability Check (Streamable?)
|
||||||
@@ -1730,18 +1825,25 @@ namespace QobuzDownloaderX
|
|||||||
var streamCheck = streamCheckLog[2].Value;
|
var streamCheck = streamCheckLog[2].Value;
|
||||||
|
|
||||||
if (streamCheck != "true")
|
if (streamCheck != "true")
|
||||||
|
{
|
||||||
|
if (streamableCheckbox.Checked == true)
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("Track " + trackNumber + " \"" + trackName + "\" is not available for streaming. Skipping track...\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track " + trackNumber + " \"" + trackName + "\" is not available for streaming. Skipping track...\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output.Invoke(new Action(() => output.AppendText("\r\nTrack " + trackNumber + " \"" + trackName + "\" is not available for streaming. But stremable check is being ignored for debugging, or messed up releases. Attempting to download...\r\n")));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Check if File Exists
|
#region Check if File Exists
|
||||||
// Check if there is a version name.
|
// Check if there is a version name.
|
||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(albumPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
if (System.IO.File.Exists(albumPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -1750,7 +1852,7 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(albumPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
if (System.IO.File.Exists(albumPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -1790,10 +1892,10 @@ namespace QobuzDownloaderX
|
|||||||
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
||||||
|
|
||||||
// Save single track in selected path.
|
// Save single track in selected path.
|
||||||
if (versionName == null | versionName == "")
|
if (versionNamePath == null | versionNamePath == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -1801,7 +1903,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -1834,7 +1936,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -1957,7 +2059,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -2087,7 +2189,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -2208,7 +2310,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -2366,7 +2468,7 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
// If there is an issue trying to, or during the download, show error info.
|
// If there is an issue trying to, or during the download, show error info.
|
||||||
string error = downloadError.ToString();
|
string error = downloadError.ToString();
|
||||||
output.Invoke(new Action(() => output.Text = String.Empty));
|
output.Invoke(new Action(() => output.AppendText("\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText(error)));
|
output.Invoke(new Action(() => output.AppendText(error)));
|
||||||
downloadButton.Invoke(new Action(() => downloadButton.Enabled = true));
|
downloadButton.Invoke(new Action(() => downloadButton.Enabled = true));
|
||||||
@@ -2400,7 +2502,7 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
#region If URL has "track"
|
#region If URL has "track"
|
||||||
// Set default value for max length.
|
// Set default value for max length.
|
||||||
const int MaxLength = 200;
|
const int MaxLength = 36;
|
||||||
|
|
||||||
// Set "loc" as the selected path.
|
// Set "loc" as the selected path.
|
||||||
String loc = folderBrowserDialog.SelectedPath;
|
String loc = folderBrowserDialog.SelectedPath;
|
||||||
@@ -2509,7 +2611,7 @@ namespace QobuzDownloaderX
|
|||||||
albumArtist = decodedAlbumArtist;
|
albumArtist = decodedAlbumArtist;
|
||||||
|
|
||||||
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumArtist = albumArtist.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumArtistPath = albumArtist.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album artist in text box under cover art.
|
// Display album artist in text box under cover art.
|
||||||
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
albumArtistTextBox.Invoke(new Action(() => albumArtistTextBox.Text = albumArtist));
|
||||||
@@ -2530,7 +2632,7 @@ namespace QobuzDownloaderX
|
|||||||
performerName = decodedPerformerName;
|
performerName = decodedPerformerName;
|
||||||
|
|
||||||
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
performerName = performerName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var performerNamePath = performerName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (performerNamePath.Length > MaxLength)
|
if (performerNamePath.Length > MaxLength)
|
||||||
@@ -2563,7 +2665,7 @@ namespace QobuzDownloaderX
|
|||||||
albumName = decodedAlbumName;
|
albumName = decodedAlbumName;
|
||||||
|
|
||||||
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
albumName = albumName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var albumNamePath = albumName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Display album name in text box under cover art.
|
// Display album name in text box under cover art.
|
||||||
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
albumTextBox.Invoke(new Action(() => albumTextBox.Text = albumName));
|
||||||
@@ -2585,12 +2687,12 @@ namespace QobuzDownloaderX
|
|||||||
trackName = decodedTrackName;
|
trackName = decodedTrackName;
|
||||||
|
|
||||||
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
trackName = trackName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var trackNamePath = trackName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// If name goes over 200 characters, limit it to 200
|
// If name goes over 200 characters, limit it to 200
|
||||||
if (trackNamePath.Length > MaxLength)
|
if (trackNamePath.Length > MaxLength)
|
||||||
{
|
{
|
||||||
trackNamePath = trackNamePath.Substring(0, MaxLength);
|
trackNamePath = trackNamePath.Substring(0, MaxLength).ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version Name tag
|
// Version Name tag
|
||||||
@@ -2603,7 +2705,7 @@ namespace QobuzDownloaderX
|
|||||||
versionName = decodedVersionName;
|
versionName = decodedVersionName;
|
||||||
|
|
||||||
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
versionName = versionName.Replace(@"\\", @"\").Replace(@"\/", @"/");
|
||||||
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", ";").Replace("<", "[").Replace(">", "]").Replace("|", "-").Replace("?", "_").Replace("*", "-");
|
var versionNamePath = versionName.Replace(@"\", "-").Replace(@"/", "-").Replace("\"", "''").Replace(":", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-").Replace("?", "-").Replace("*", "-");
|
||||||
|
|
||||||
// Genre tag
|
// Genre tag
|
||||||
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
var genreLog = Regex.Match(trackRequest, "\"genre\":{\"id\":(?<notUsed>.*?),\"color\":\"(?<notUsed2>.*?)\",\"name\":\"(?<genreName>.*?)\",\\\"").Groups;
|
||||||
@@ -2653,7 +2755,7 @@ namespace QobuzDownloaderX
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Filename Number Padding
|
#region Filename Number Padding
|
||||||
// Set default padding length
|
// Set default track number padding length
|
||||||
var paddingLength = 2;
|
var paddingLength = 2;
|
||||||
|
|
||||||
// Prepare track number padding in filename.
|
// Prepare track number padding in filename.
|
||||||
@@ -2666,14 +2768,42 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
paddingLength = trackTotal.Length;
|
paddingLength = trackTotal.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set default disc number padding length
|
||||||
|
var paddingDiscLength = 2;
|
||||||
|
|
||||||
|
// Prepare disc number padding in filename.
|
||||||
|
string paddingDiscLog = discTotal.Length.ToString();
|
||||||
|
if (paddingDiscLog == "1")
|
||||||
|
{
|
||||||
|
paddingDiscLength = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
paddingDiscLength = discTotal.Length;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Create Directories
|
#region Create Directories
|
||||||
|
// Create strings for disc folders
|
||||||
|
string discFolder = null;
|
||||||
|
string discFolderCreate = null;
|
||||||
|
|
||||||
|
// If more than 1 disc, create folders for discs. Otherwise, strings will remain null.
|
||||||
|
if (discTotal != "1")
|
||||||
|
{
|
||||||
|
discFolder = "CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
discFolderCreate = "\\CD " + discNumber.PadLeft(paddingDiscLength, '0') + "\\";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create directories
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath);
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath);
|
||||||
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath);
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath);
|
||||||
|
System.IO.Directory.CreateDirectory(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + discFolderCreate);
|
||||||
|
|
||||||
string trackPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath;
|
// Set albumPath to the created directories.
|
||||||
|
string trackPath = loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + discFolderCreate;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Availability Check (Streamable?)
|
#region Availability Check (Streamable?)
|
||||||
@@ -2682,18 +2812,26 @@ namespace QobuzDownloaderX
|
|||||||
var streamCheck = streamCheckLog[2].Value;
|
var streamCheck = streamCheckLog[2].Value;
|
||||||
|
|
||||||
if (streamCheck != "true")
|
if (streamCheck != "true")
|
||||||
|
{
|
||||||
|
if (streamableCheckbox.Checked == true)
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("Track is not available for streaming. Unable to download.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track is not available for streaming. Unable to download.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
|
downloadButton.Invoke(new Action(() => downloadButton.Enabled = true));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
output.Invoke(new Action(() => output.AppendText("Track is not available for streaming. But stremable check is being ignored for debugging, or messed up releases. Attempting to download...\r\n")));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Check if File Exists
|
#region Check if File Exists
|
||||||
// Check if there is a version name.
|
// Check if there is a version name.
|
||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(trackPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
if (System.IO.File.Exists(trackPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -2703,7 +2841,7 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (System.IO.File.Exists(trackPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
if (System.IO.File.Exists(trackPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
output.Invoke(new Action(() => output.AppendText("File for \"" + trackNumber.PadLeft(paddingLength, '0') + " " + trackName + " (" + versionName + ")" + "\" already exists. Skipping.\r\n")));
|
||||||
System.Threading.Thread.Sleep(800);
|
System.Threading.Thread.Sleep(800);
|
||||||
@@ -2744,10 +2882,10 @@ namespace QobuzDownloaderX
|
|||||||
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
using (var stream = await client.GetStreamAsync(testURLBox.Text))
|
||||||
|
|
||||||
// Save single track in selected path.
|
// Save single track in selected path.
|
||||||
if (versionName == null | versionName == "")
|
if (versionNamePath == null | versionNamePath == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -2755,7 +2893,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType))
|
using (var output = System.IO.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType))
|
||||||
{
|
{
|
||||||
await stream.CopyToAsync(output);
|
await stream.CopyToAsync(output);
|
||||||
}
|
}
|
||||||
@@ -2788,7 +2926,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -2911,7 +3049,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)tfile.GetTag(TagLib.TagTypes.Id3v2);
|
||||||
|
|
||||||
@@ -3041,7 +3179,7 @@ namespace QobuzDownloaderX
|
|||||||
if (versionName == null | versionName == "")
|
if (versionName == null | versionName == "")
|
||||||
{
|
{
|
||||||
// If there is NOT a version name.
|
// If there is NOT a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -3162,7 +3300,7 @@ namespace QobuzDownloaderX
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If there is a version name.
|
// If there is a version name.
|
||||||
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath + " (" + versionNamePath + ")" + audioFileType);
|
var tfile = TagLib.File.Create(loc + "\\" + albumArtistPath + "\\" + albumNamePath + "\\" + qualityPath + "\\" + discFolder + trackNumber.PadLeft(paddingLength, '0') + " " + trackNamePath.Trim() + " (" + versionNamePath + ")" + audioFileType);
|
||||||
// For custom / troublesome tags.
|
// For custom / troublesome tags.
|
||||||
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
var custom = (TagLib.Ogg.XiphComment)tfile.GetTag(TagLib.TagTypes.Xiph);
|
||||||
|
|
||||||
@@ -3288,6 +3426,7 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
// If there is an issue trying to, or during the download, show error info.
|
// If there is an issue trying to, or during the download, show error info.
|
||||||
string error = downloadError.ToString();
|
string error = downloadError.ToString();
|
||||||
|
output.Invoke(new Action(() => output.AppendText("\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
output.Invoke(new Action(() => output.AppendText("Track Download ERROR. Information below.\r\n\r\n")));
|
||||||
output.Invoke(new Action(() => output.AppendText(error)));
|
output.Invoke(new Action(() => output.AppendText(error)));
|
||||||
downloadButton.Invoke(new Action(() => downloadButton.Enabled = true));
|
downloadButton.Invoke(new Action(() => downloadButton.Enabled = true));
|
||||||
@@ -3305,17 +3444,17 @@ namespace QobuzDownloaderX
|
|||||||
#region Tagging Options
|
#region Tagging Options
|
||||||
private void tagsLabel_Click(object sender, EventArgs e)
|
private void tagsLabel_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (this.Height == 572)
|
if (this.Height == 533)
|
||||||
{
|
{
|
||||||
//New Height
|
//New Height
|
||||||
this.Height = 772;
|
this.Height = 733;
|
||||||
tagsLabel.Text = "🠉 Choose which tags to save 🠉";
|
tagsLabel.Text = "🠉 Choose which tags to save (click me) 🠉";
|
||||||
}
|
}
|
||||||
else if (this.Height == 772)
|
else if (this.Height == 733)
|
||||||
{
|
{
|
||||||
//New Height
|
//New Height
|
||||||
this.Height = 572;
|
this.Height = 533;
|
||||||
tagsLabel.Text = "🠋 Choose which tags to save 🠋";
|
tagsLabel.Text = "🠋 Choose which tags to save (click me) 🠋";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3531,9 +3670,99 @@ namespace QobuzDownloaderX
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Form moving, closing, minimizing, etc.
|
||||||
|
private void exitLabel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void minimizeLabel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.WindowState = FormWindowState.Minimized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void minimizeLabel_MouseHover(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
minimizeLabel.ForeColor = Color.FromArgb(0, 112, 239);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void minimizeLabel_MouseLeave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
minimizeLabel.ForeColor = Color.White;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exitLabel_MouseHover(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
exitLabel.ForeColor = Color.FromArgb(0, 112, 239);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exitLabel_MouseLeave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
exitLabel.ForeColor = Color.White;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void QobuzDownloaderX_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void QobuzDownloaderX_FormClosed(object sender, FormClosedEventArgs e)
|
private void QobuzDownloaderX_FormClosed(object sender, FormClosedEventArgs e)
|
||||||
{
|
{
|
||||||
Application.Exit();
|
Application.Exit();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private void logoBox_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
devClickEggThingValue = devClickEggThingValue + 1;
|
||||||
|
|
||||||
|
if (devClickEggThingValue >= 3)
|
||||||
|
{
|
||||||
|
streamableCheckbox.Visible = true;
|
||||||
|
displaySecretButton.Visible = true;
|
||||||
|
secretTextbox.Visible = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
streamableCheckbox.Visible = false;
|
||||||
|
displaySecretButton.Visible = false;
|
||||||
|
secretTextbox.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displaySecretButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
secretTextbox.Text = appSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logoutLabel_MouseHover(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
logoutLabel.ForeColor = Color.FromArgb(0, 112, 239);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logoutLabel_MouseLeave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
logoutLabel.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logoutLabel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Could use some work, but this works.
|
||||||
|
Process.Start("QobuzDownloaderX.exe");
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
269
QobuzDownloaderX/LoginForm-v2.Designer.cs
generated
Normal file
269
QobuzDownloaderX/LoginForm-v2.Designer.cs
generated
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
namespace QobuzDownloaderX
|
||||||
|
{
|
||||||
|
partial class LoginFrm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginFrm));
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.verNumLabel2 = new System.Windows.Forms.Label();
|
||||||
|
this.exitLabel = new System.Windows.Forms.Label();
|
||||||
|
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||||
|
this.loginButton = new System.Windows.Forms.Button();
|
||||||
|
this.panel3 = new System.Windows.Forms.Panel();
|
||||||
|
this.panel4 = new System.Windows.Forms.Panel();
|
||||||
|
this.emailTextbox = new System.Windows.Forms.TextBox();
|
||||||
|
this.passwordTextbox = new System.Windows.Forms.TextBox();
|
||||||
|
this.md5Button = new System.Windows.Forms.Button();
|
||||||
|
this.loginText = new System.Windows.Forms.Label();
|
||||||
|
this.getSecretBG = new System.ComponentModel.BackgroundWorker();
|
||||||
|
this.loginBG = new System.ComponentModel.BackgroundWorker();
|
||||||
|
this.visableCheckbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.disableLogin = new System.Windows.Forms.CheckBox();
|
||||||
|
this.panel1.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// panel1
|
||||||
|
//
|
||||||
|
this.panel1.BackgroundImage = global::QobuzDownloaderX.Properties.Resources.login_frame;
|
||||||
|
this.panel1.Controls.Add(this.disableLogin);
|
||||||
|
this.panel1.Controls.Add(this.verNumLabel2);
|
||||||
|
this.panel1.Controls.Add(this.exitLabel);
|
||||||
|
this.panel1.Controls.Add(this.pictureBox1);
|
||||||
|
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
|
this.panel1.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
this.panel1.Size = new System.Drawing.Size(282, 175);
|
||||||
|
this.panel1.TabIndex = 0;
|
||||||
|
this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
|
||||||
|
//
|
||||||
|
// verNumLabel2
|
||||||
|
//
|
||||||
|
this.verNumLabel2.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.verNumLabel2.Font = new System.Drawing.Font("Trebuchet MS", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.verNumLabel2.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.verNumLabel2.Location = new System.Drawing.Point(194, 157);
|
||||||
|
this.verNumLabel2.Name = "verNumLabel2";
|
||||||
|
this.verNumLabel2.Size = new System.Drawing.Size(85, 18);
|
||||||
|
this.verNumLabel2.TabIndex = 32;
|
||||||
|
this.verNumLabel2.Text = "#.#.#.#";
|
||||||
|
this.verNumLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
|
this.verNumLabel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.verNumLabel2_MouseMove);
|
||||||
|
//
|
||||||
|
// exitLabel
|
||||||
|
//
|
||||||
|
this.exitLabel.AutoSize = true;
|
||||||
|
this.exitLabel.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.exitLabel.Font = new System.Drawing.Font("Calibri", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.exitLabel.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.exitLabel.Location = new System.Drawing.Point(262, 0);
|
||||||
|
this.exitLabel.Name = "exitLabel";
|
||||||
|
this.exitLabel.Size = new System.Drawing.Size(20, 23);
|
||||||
|
this.exitLabel.TabIndex = 9;
|
||||||
|
this.exitLabel.Text = "X";
|
||||||
|
this.exitLabel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||||
|
this.exitLabel.Click += new System.EventHandler(this.exitLabel_Click);
|
||||||
|
//
|
||||||
|
// pictureBox1
|
||||||
|
//
|
||||||
|
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.pictureBox1.Image = global::QobuzDownloaderX.Properties.Resources.qbdlx_white;
|
||||||
|
this.pictureBox1.Location = new System.Drawing.Point(12, 52);
|
||||||
|
this.pictureBox1.Name = "pictureBox1";
|
||||||
|
this.pictureBox1.Size = new System.Drawing.Size(258, 64);
|
||||||
|
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.pictureBox1.TabIndex = 29;
|
||||||
|
this.pictureBox1.TabStop = false;
|
||||||
|
this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
|
||||||
|
//
|
||||||
|
// loginButton
|
||||||
|
//
|
||||||
|
this.loginButton.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.loginButton.FlatAppearance.BorderSize = 0;
|
||||||
|
this.loginButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.loginButton.Font = new System.Drawing.Font("Trebuchet MS", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.loginButton.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.loginButton.Location = new System.Drawing.Point(12, 293);
|
||||||
|
this.loginButton.Name = "loginButton";
|
||||||
|
this.loginButton.Size = new System.Drawing.Size(258, 30);
|
||||||
|
this.loginButton.TabIndex = 2;
|
||||||
|
this.loginButton.Text = "LOGIN";
|
||||||
|
this.loginButton.UseVisualStyleBackColor = false;
|
||||||
|
this.loginButton.Click += new System.EventHandler(this.loginButton_Click);
|
||||||
|
//
|
||||||
|
// panel3
|
||||||
|
//
|
||||||
|
this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel3.Location = new System.Drawing.Point(12, 221);
|
||||||
|
this.panel3.Name = "panel3";
|
||||||
|
this.panel3.Size = new System.Drawing.Size(258, 1);
|
||||||
|
this.panel3.TabIndex = 2;
|
||||||
|
this.panel3.Click += new System.EventHandler(this.panel3_Click);
|
||||||
|
//
|
||||||
|
// panel4
|
||||||
|
//
|
||||||
|
this.panel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.panel4.Location = new System.Drawing.Point(12, 277);
|
||||||
|
this.panel4.Name = "panel4";
|
||||||
|
this.panel4.Size = new System.Drawing.Size(258, 1);
|
||||||
|
this.panel4.TabIndex = 2;
|
||||||
|
this.panel4.Click += new System.EventHandler(this.panel4_Click);
|
||||||
|
//
|
||||||
|
// emailTextbox
|
||||||
|
//
|
||||||
|
this.emailTextbox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.emailTextbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.emailTextbox.Font = new System.Drawing.Font("Trebuchet MS", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.emailTextbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.emailTextbox.Location = new System.Drawing.Point(12, 199);
|
||||||
|
this.emailTextbox.Multiline = true;
|
||||||
|
this.emailTextbox.Name = "emailTextbox";
|
||||||
|
this.emailTextbox.Size = new System.Drawing.Size(258, 23);
|
||||||
|
this.emailTextbox.TabIndex = 7;
|
||||||
|
this.emailTextbox.Text = "Email";
|
||||||
|
this.emailTextbox.Click += new System.EventHandler(this.emailTextbox_Click);
|
||||||
|
this.emailTextbox.Leave += new System.EventHandler(this.emailTextbox_Leave);
|
||||||
|
//
|
||||||
|
// passwordTextbox
|
||||||
|
//
|
||||||
|
this.passwordTextbox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.passwordTextbox.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.passwordTextbox.Font = new System.Drawing.Font("Trebuchet MS", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.passwordTextbox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.passwordTextbox.Location = new System.Drawing.Point(12, 255);
|
||||||
|
this.passwordTextbox.Multiline = true;
|
||||||
|
this.passwordTextbox.Name = "passwordTextbox";
|
||||||
|
this.passwordTextbox.Size = new System.Drawing.Size(209, 23);
|
||||||
|
this.passwordTextbox.TabIndex = 8;
|
||||||
|
this.passwordTextbox.Text = "Password";
|
||||||
|
this.passwordTextbox.Click += new System.EventHandler(this.passwordTextbox_Click);
|
||||||
|
this.passwordTextbox.Leave += new System.EventHandler(this.passwordTextbox_Leave);
|
||||||
|
//
|
||||||
|
// md5Button
|
||||||
|
//
|
||||||
|
this.md5Button.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(112)))), ((int)(((byte)(239)))));
|
||||||
|
this.md5Button.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.md5Button.FlatAppearance.BorderSize = 2;
|
||||||
|
this.md5Button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.md5Button.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.md5Button.Location = new System.Drawing.Point(227, 250);
|
||||||
|
this.md5Button.Name = "md5Button";
|
||||||
|
this.md5Button.Size = new System.Drawing.Size(43, 27);
|
||||||
|
this.md5Button.TabIndex = 9;
|
||||||
|
this.md5Button.Text = "MD5";
|
||||||
|
this.md5Button.UseVisualStyleBackColor = false;
|
||||||
|
this.md5Button.Click += new System.EventHandler(this.md5Button_Click);
|
||||||
|
//
|
||||||
|
// loginText
|
||||||
|
//
|
||||||
|
this.loginText.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.loginText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(88)))), ((int)(((byte)(92)))), ((int)(((byte)(102)))));
|
||||||
|
this.loginText.Location = new System.Drawing.Point(12, 333);
|
||||||
|
this.loginText.Name = "loginText";
|
||||||
|
this.loginText.Size = new System.Drawing.Size(258, 23);
|
||||||
|
this.loginText.TabIndex = 30;
|
||||||
|
this.loginText.Text = "Waiting for login...";
|
||||||
|
this.loginText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
//
|
||||||
|
// getSecretBG
|
||||||
|
//
|
||||||
|
this.getSecretBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.getSecretBG_DoWork);
|
||||||
|
//
|
||||||
|
// loginBG
|
||||||
|
//
|
||||||
|
this.loginBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.loginBG_DoWork);
|
||||||
|
//
|
||||||
|
// visableCheckbox
|
||||||
|
//
|
||||||
|
this.visableCheckbox.AutoSize = true;
|
||||||
|
this.visableCheckbox.Location = new System.Drawing.Point(206, 257);
|
||||||
|
this.visableCheckbox.Name = "visableCheckbox";
|
||||||
|
this.visableCheckbox.Size = new System.Drawing.Size(15, 14);
|
||||||
|
this.visableCheckbox.TabIndex = 31;
|
||||||
|
this.visableCheckbox.UseVisualStyleBackColor = true;
|
||||||
|
this.visableCheckbox.CheckedChanged += new System.EventHandler(this.visableCheckbox_CheckedChanged);
|
||||||
|
//
|
||||||
|
// disableLogin
|
||||||
|
//
|
||||||
|
this.disableLogin.AutoSize = true;
|
||||||
|
this.disableLogin.ForeColor = System.Drawing.Color.Transparent;
|
||||||
|
this.disableLogin.Location = new System.Drawing.Point(12, 155);
|
||||||
|
this.disableLogin.Name = "disableLogin";
|
||||||
|
this.disableLogin.Size = new System.Drawing.Size(90, 17);
|
||||||
|
this.disableLogin.TabIndex = 34;
|
||||||
|
this.disableLogin.Text = "Disable Login";
|
||||||
|
this.disableLogin.UseVisualStyleBackColor = true;
|
||||||
|
this.disableLogin.Visible = false;
|
||||||
|
//
|
||||||
|
// LoginFrm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
|
||||||
|
this.ClientSize = new System.Drawing.Size(282, 377);
|
||||||
|
this.Controls.Add(this.visableCheckbox);
|
||||||
|
this.Controls.Add(this.loginText);
|
||||||
|
this.Controls.Add(this.md5Button);
|
||||||
|
this.Controls.Add(this.panel4);
|
||||||
|
this.Controls.Add(this.panel3);
|
||||||
|
this.Controls.Add(this.passwordTextbox);
|
||||||
|
this.Controls.Add(this.emailTextbox);
|
||||||
|
this.Controls.Add(this.loginButton);
|
||||||
|
this.Controls.Add(this.panel1);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.Name = "LoginFrm";
|
||||||
|
this.Text = "QobuzDLX | Login";
|
||||||
|
this.Load += new System.EventHandler(this.LoginFrm_Load);
|
||||||
|
this.panel1.ResumeLayout(false);
|
||||||
|
this.panel1.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Panel panel1;
|
||||||
|
private System.Windows.Forms.PictureBox pictureBox1;
|
||||||
|
private System.Windows.Forms.Button loginButton;
|
||||||
|
private System.Windows.Forms.Panel panel3;
|
||||||
|
private System.Windows.Forms.Panel panel4;
|
||||||
|
private System.Windows.Forms.TextBox emailTextbox;
|
||||||
|
private System.Windows.Forms.TextBox passwordTextbox;
|
||||||
|
private System.Windows.Forms.Label exitLabel;
|
||||||
|
private System.Windows.Forms.Button md5Button;
|
||||||
|
private System.Windows.Forms.Label loginText;
|
||||||
|
private System.ComponentModel.BackgroundWorker getSecretBG;
|
||||||
|
private System.ComponentModel.BackgroundWorker loginBG;
|
||||||
|
private System.Windows.Forms.Label verNumLabel2;
|
||||||
|
private System.Windows.Forms.CheckBox visableCheckbox;
|
||||||
|
private System.Windows.Forms.CheckBox disableLogin;
|
||||||
|
}
|
||||||
|
}
|
||||||
545
QobuzDownloaderX/LoginForm-v2.cs
Normal file
545
QobuzDownloaderX/LoginForm-v2.cs
Normal file
@@ -0,0 +1,545 @@
|
|||||||
|
using QobuzDownloaderX.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.IO;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using TagLib.Flac;
|
||||||
|
using QobuzDownloaderX;
|
||||||
|
|
||||||
|
namespace QobuzDownloaderX
|
||||||
|
{
|
||||||
|
public partial class LoginFrm : Form
|
||||||
|
{
|
||||||
|
public LoginFrm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public const int WM_NCLBUTTONDOWN = 0xA1;
|
||||||
|
public const int HT_CAPTION = 0x2;
|
||||||
|
|
||||||
|
[DllImportAttribute("user32.dll")]
|
||||||
|
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
||||||
|
[DllImportAttribute("user32.dll")]
|
||||||
|
public static extern bool ReleaseCapture();
|
||||||
|
|
||||||
|
private void QobuzDownloaderX_FormClosing(Object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
QobuzDownloaderX qbdlx = new QobuzDownloaderX();
|
||||||
|
|
||||||
|
public string appSecret { get; set; }
|
||||||
|
public string appID { get; set; }
|
||||||
|
|
||||||
|
string errorLog = Path.GetDirectoryName(Application.ExecutablePath) + "\\Latest_Error.log";
|
||||||
|
string dllCheck = Path.GetDirectoryName(Application.ExecutablePath) + "\\taglib-sharp.dll";
|
||||||
|
|
||||||
|
static string GetMd5Hash(MD5 md5Hash, string input)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Convert the input string to a byte array and compute the hash.
|
||||||
|
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
|
||||||
|
|
||||||
|
// Create a new Stringbuilder to collect the bytes and create a string.
|
||||||
|
StringBuilder sBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
// Loop through each byte of the hashed data and format each one as a hexadecimal string.
|
||||||
|
for (int i = 0; i < data.Length; i++)
|
||||||
|
{
|
||||||
|
sBuilder.Append(data[i].ToString("x2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the hexadecimal string.
|
||||||
|
return sBuilder.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify a hash against a string.
|
||||||
|
static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
|
||||||
|
{
|
||||||
|
// Hash the input.
|
||||||
|
string hashOfInput = GetMd5Hash(md5Hash, input);
|
||||||
|
|
||||||
|
// Create a StringComparer an compare the hashes.
|
||||||
|
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
|
||||||
|
|
||||||
|
if (0 == comparer.Compare(hashOfInput, hash))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoginFrm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WebClient versionURLClient = new WebClient();
|
||||||
|
// Run through TLS to allow secure connection.
|
||||||
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
|
||||||
|
string versionHTML = versionURLClient.DownloadString("https://github.com/ImAiiR/QobuzDownloaderX/releases");
|
||||||
|
|
||||||
|
// Grab link to bundle.js
|
||||||
|
var versionLog = Regex.Match(versionHTML, "<span class=\"css-truncate-target\" style=\"max-width: 125px\">(?<latestVersion>.*?)<\\/span>").Groups;
|
||||||
|
var version = versionLog[1].Value;
|
||||||
|
|
||||||
|
string currentVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||||
|
string newVersion = version;
|
||||||
|
|
||||||
|
if (currentVersion.Contains(newVersion))
|
||||||
|
{
|
||||||
|
// Do nothing. All is good.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DialogResult dialogResult = MessageBox.Show("New version of QBDLX is available!\r\n\r\nInstalled version - " + currentVersion + "\r\nLatest version - "+ newVersion + "\r\n\r\nWould you like to update?", "QBDLX | Update Available", MessageBoxButtons.YesNo);
|
||||||
|
if (dialogResult == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
// If "Yes" is clicked, open GitHub page and close QBDLX.
|
||||||
|
Process.Start("https://github.com/ImAiiR/QobuzDownloaderX/releases/latest");
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
else if (dialogResult == DialogResult.No)
|
||||||
|
{
|
||||||
|
// Ignore the update until next open.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
DialogResult dialogResult = MessageBox.Show("Connection to GitHub to check for an update has failed.\r\nWould you like to check for an update manually?\r\n\r\nYour current version is " + Assembly.GetExecutingAssembly().GetName().Version.ToString(), "QBDLX | GitHub Connection Failed", MessageBoxButtons.YesNo);
|
||||||
|
if (dialogResult == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
// If "Yes" is clicked, open GitHub page and close QBDLX.
|
||||||
|
Process.Start("https://github.com/ImAiiR/QobuzDownloaderX/releases/latest");
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
else if (dialogResult == DialogResult.No)
|
||||||
|
{
|
||||||
|
// Ignore the update until next open.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get and display version number.
|
||||||
|
verNumLabel2.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||||
|
|
||||||
|
// Check for taglib-sharp.dll
|
||||||
|
if (!System.IO.File.Exists(dllCheck))
|
||||||
|
{
|
||||||
|
MessageBox.Show("taglib-sharp.dll missing from folder!\r\nPlease Make sure the DLL is in the same folder as QobuzDownloaderX.exe!", "ERROR",
|
||||||
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bring to center of screen.
|
||||||
|
CenterToScreen();
|
||||||
|
|
||||||
|
if (Properties.Settings.Default.UpgradeRequired)
|
||||||
|
{
|
||||||
|
Properties.Settings.Default.Upgrade();
|
||||||
|
Properties.Settings.Default.UpgradeRequired = false;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set saved settings to correct places.
|
||||||
|
emailTextbox.Text = Settings.Default.savedEmail.ToString();
|
||||||
|
passwordTextbox.Text = Settings.Default.savedPassword.ToString();
|
||||||
|
|
||||||
|
if (emailTextbox.Text != "Email")
|
||||||
|
{
|
||||||
|
emailTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (emailTextbox.Text == null | emailTextbox.Text == "")
|
||||||
|
{
|
||||||
|
emailTextbox.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
emailTextbox.Text = "Email";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwordTextbox.Text != "Password")
|
||||||
|
{
|
||||||
|
passwordTextbox.PasswordChar = '*';
|
||||||
|
passwordTextbox.UseSystemPasswordChar = false;
|
||||||
|
passwordTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passwordTextbox.Text == null | passwordTextbox.Text == "")
|
||||||
|
{
|
||||||
|
passwordTextbox.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
passwordTextbox.UseSystemPasswordChar = true;
|
||||||
|
passwordTextbox.Text = "Password";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loginButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
//if (appidTextbox.Text == "app_id" | appidTextbox.Text == null | appidTextbox.Text == "")
|
||||||
|
//{
|
||||||
|
// // If there's no app_id typed in.
|
||||||
|
// loginText.Invoke(new Action(() => loginText.Text = "No app_id, please input app_id first."));
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
if (emailTextbox.Text == "Email" | emailTextbox.Text == null | emailTextbox.Text == "")
|
||||||
|
{
|
||||||
|
// If there's no email typed in.
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "No email, please input email first."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var passMD5CheckLog = Regex.Match(passwordTextbox.Text, "(?<md5Test>^[0-9a-f]{32}$)").Groups;
|
||||||
|
var passMD5Check = passMD5CheckLog[1].Value;
|
||||||
|
|
||||||
|
if (passMD5Check == null | passMD5Check == "")
|
||||||
|
{
|
||||||
|
loginText.Text = "Password not MD5! Hit \"MD5\" before logging in!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save info locally to be used on next launch.
|
||||||
|
Settings.Default.savedEmail = emailTextbox.Text;
|
||||||
|
Settings.Default.savedPassword = passwordTextbox.Text;
|
||||||
|
Settings.Default.Save();
|
||||||
|
|
||||||
|
loginText.Text = "Getting App ID and Secret...";
|
||||||
|
loginButton.Enabled = false;
|
||||||
|
getSecretBG.RunWorkerAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Textbox Focous & Text Change
|
||||||
|
|
||||||
|
#region app_id Textbox (Removed)
|
||||||
|
//private void appIdTextbox_Click(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// if (appidTextbox.Text == "app_id")
|
||||||
|
// {
|
||||||
|
// appidTextbox.Text = null;
|
||||||
|
// appidTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//private void panel2_Click(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// appidTextbox.Focus();
|
||||||
|
|
||||||
|
// if (appidTextbox.Text == "app_id")
|
||||||
|
// {
|
||||||
|
// appidTextbox.Text = null;
|
||||||
|
// appidTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//private void appIdTextbox_Leave(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// if (appidTextbox.Text == null | appidTextbox.Text == "")
|
||||||
|
// {
|
||||||
|
// appidTextbox.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
// appidTextbox.Text = "app_id";
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Email Textbox
|
||||||
|
private void emailTextbox_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (emailTextbox.Text == "Email")
|
||||||
|
{
|
||||||
|
emailTextbox.Text = null;
|
||||||
|
emailTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void panel3_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
emailTextbox.Focus();
|
||||||
|
|
||||||
|
if (emailTextbox.Text == "Email")
|
||||||
|
{
|
||||||
|
emailTextbox.Text = null;
|
||||||
|
emailTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void emailTextbox_Leave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (emailTextbox.Text == null | emailTextbox.Text == "")
|
||||||
|
{
|
||||||
|
emailTextbox.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
emailTextbox.Text = "Email";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Password Textbox
|
||||||
|
private void passwordTextbox_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (passwordTextbox.Text == "Password")
|
||||||
|
{
|
||||||
|
passwordTextbox.Text = null;
|
||||||
|
passwordTextbox.PasswordChar = '*';
|
||||||
|
passwordTextbox.UseSystemPasswordChar = false;
|
||||||
|
passwordTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void panel4_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
passwordTextbox.Focus();
|
||||||
|
|
||||||
|
if (passwordTextbox.Text == "Password")
|
||||||
|
{
|
||||||
|
passwordTextbox.Text = null;
|
||||||
|
passwordTextbox.PasswordChar = '*';
|
||||||
|
passwordTextbox.UseSystemPasswordChar = false;
|
||||||
|
passwordTextbox.ForeColor = Color.FromArgb(186, 186, 186);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void passwordTextbox_Leave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (passwordTextbox.Text == null | passwordTextbox.Text == "")
|
||||||
|
{
|
||||||
|
passwordTextbox.ForeColor = Color.FromArgb(88, 92, 102);
|
||||||
|
passwordTextbox.UseSystemPasswordChar = true;
|
||||||
|
passwordTextbox.Text = "Password";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private void visableCheckbox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (visableCheckbox.Checked == true)
|
||||||
|
{
|
||||||
|
passwordTextbox.UseSystemPasswordChar = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
passwordTextbox.UseSystemPasswordChar = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exitLabel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void panel1_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verNumLabel2_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
ReleaseCapture();
|
||||||
|
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void md5Button_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (passwordTextbox.Text == "Password")
|
||||||
|
{
|
||||||
|
// If there's no password typed in.
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "No password typed, please input password first."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string plainTextPW = passwordTextbox.Text;
|
||||||
|
|
||||||
|
// Generate the MD5 hash using the string created above.
|
||||||
|
using (MD5 md5PassHash = MD5.Create())
|
||||||
|
{
|
||||||
|
string hashedPW = GetMd5Hash(md5PassHash, plainTextPW);
|
||||||
|
|
||||||
|
if (VerifyMd5Hash(md5PassHash, plainTextPW, hashedPW))
|
||||||
|
{
|
||||||
|
// If the MD5 hash is verified, proceed to get the streaming URL.
|
||||||
|
passwordTextbox.Text = hashedPW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the hash can't be verified.
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "Hashing failed. Please retry."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getSecretBG_DoWork(object sender, DoWorkEventArgs e)
|
||||||
|
{
|
||||||
|
getSecretBG.WorkerSupportsCancellation = true;
|
||||||
|
|
||||||
|
WebClient bundleURLClient = new WebClient();
|
||||||
|
string bundleHTML = bundleURLClient.DownloadString("https://play.qobuz.com/login");
|
||||||
|
|
||||||
|
// Grab link to bundle.js
|
||||||
|
var bundleLog = Regex.Match(bundleHTML, "<script src=\"(?<bundleJS>\\/resources\\/\\d+\\.\\d+\\.\\d+-[a-z]\\d{3}\\/bundle\\.js)").Groups;
|
||||||
|
var bundleSuffix = bundleLog[1].Value;
|
||||||
|
var bundleURL = "https://play.qobuz.com" + bundleSuffix;
|
||||||
|
|
||||||
|
WebRequest bundleWR = WebRequest.Create(bundleURL);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WebResponse bundleWS = bundleWR.GetResponse();
|
||||||
|
StreamReader bundleSR = new StreamReader(bundleWS.GetResponseStream());
|
||||||
|
|
||||||
|
string getBundleRequest = bundleSR.ReadToEnd();
|
||||||
|
string text = getBundleRequest;
|
||||||
|
|
||||||
|
// Grab app_id from bundle.js
|
||||||
|
var bundleLog0 = Regex.Match(getBundleRequest, "\\):\\(n.qobuzapi={app_id:\"(?<appID>.*?)\",app_secret:").Groups;
|
||||||
|
appID = bundleLog0[1].Value;
|
||||||
|
|
||||||
|
// Grab "info" and "extras"
|
||||||
|
var bundleLog1 = Regex.Match(getBundleRequest, "{offset:\"(?<notUsed>.*?)\",name:\"Europe\\/Berlin\",info:\"(?<info>.*?)\",extras:\"(?<extras>.*?)\"}").Groups;
|
||||||
|
var bundleInfo = bundleLog1[2].Value;
|
||||||
|
var bundleExtras = bundleLog1[3].Value;
|
||||||
|
|
||||||
|
// Grab "seed"
|
||||||
|
var bundleLog2 = Regex.Match(getBundleRequest, "window.utimezone.paris\\):h.initialSeed\\(\"(?<seed>.*?)\",window.utimezone.berlin\\)").Groups;
|
||||||
|
var bundleSeed = bundleLog2[1].Value;
|
||||||
|
|
||||||
|
// Step 1 of getting the app_secret
|
||||||
|
string B64step1 = bundleSeed + bundleInfo + bundleExtras;
|
||||||
|
B64step1 = B64step1.Remove(B64step1.Length - 44, 44);
|
||||||
|
byte[] step1Bytes = Encoding.UTF8.GetBytes(B64step1);
|
||||||
|
B64step1 = Convert.ToBase64String(step1Bytes);
|
||||||
|
|
||||||
|
// Step 2 of getting the app_secret
|
||||||
|
byte[] step2Data = Convert.FromBase64String(B64step1);
|
||||||
|
string B64step2 = Encoding.UTF8.GetString(step2Data);
|
||||||
|
|
||||||
|
// Step 3 of getting the app_secret
|
||||||
|
byte[] step3Data = Convert.FromBase64String(B64step2);
|
||||||
|
|
||||||
|
// Set app_secret
|
||||||
|
appSecret = Encoding.UTF8.GetString(step3Data);
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "ID and Secret Obtained! Logging in.."));
|
||||||
|
System.Threading.Thread.Sleep(1000);
|
||||||
|
}
|
||||||
|
catch (Exception bundleEx)
|
||||||
|
{
|
||||||
|
// If obtaining bundle.js info fails, show error info.
|
||||||
|
string bundleError = bundleEx.ToString();
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "Couldn't obtain app info. Error Log saved"));
|
||||||
|
System.IO.File.WriteAllText(errorLog, bundleError);
|
||||||
|
bundleWR.Abort();
|
||||||
|
loginButton.Invoke(new Action(() => loginButton.Enabled = true));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bundleWR.Abort();
|
||||||
|
loginBG.RunWorkerAsync();
|
||||||
|
getSecretBG.CancelAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loginBG_DoWork(object sender, DoWorkEventArgs e)
|
||||||
|
{
|
||||||
|
loginBG.WorkerSupportsCancellation = true;
|
||||||
|
|
||||||
|
// Create WebRequest to login using login information from input textboxes.
|
||||||
|
WebRequest wr = WebRequest.Create("https://www.qobuz.com/api.json/0.2/user/login?email=" + emailTextbox.Text + "&password=" + passwordTextbox.Text + "&app_id=" + appID);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Grab info to be displayed and used.
|
||||||
|
WebResponse ws = wr.GetResponse();
|
||||||
|
StreamReader sr = new StreamReader(ws.GetResponseStream());
|
||||||
|
|
||||||
|
string loginRequest = sr.ReadToEnd();
|
||||||
|
string text = loginRequest;
|
||||||
|
|
||||||
|
// Grab display name
|
||||||
|
var displayNameLog = Regex.Match(loginRequest, "\"display_name\":\"(?<displayName>.*?)\",\\\"").Groups;
|
||||||
|
var displayName = displayNameLog[1].Value;
|
||||||
|
qbdlx.displayName = displayName;
|
||||||
|
|
||||||
|
// Grab account type
|
||||||
|
var accountTypeLog = Regex.Match(loginRequest, "short_label\":\"(?<accountType>\\w+)").Groups;
|
||||||
|
var accountType = accountTypeLog[1].Value;
|
||||||
|
qbdlx.accountType = accountType;
|
||||||
|
|
||||||
|
// Grab authentication token
|
||||||
|
var userAuth = Regex.Match(loginRequest, "\"user_auth_token\":\"(?<userAuth>.*?)\\\"}").Groups;
|
||||||
|
var userAuthToken = userAuth[1].Value;
|
||||||
|
|
||||||
|
// Grab profile image
|
||||||
|
var profilePic = Regex.Match(loginRequest, "avatar\\\":\\\"(?<profilePic>.*?)\",").Groups;
|
||||||
|
var profilePicURL = profilePic[1].Value.Replace(@"\", null).Replace("s=50", "s=20");
|
||||||
|
qbdlx.profilePic = profilePicURL;
|
||||||
|
|
||||||
|
// Set user_auth_token
|
||||||
|
qbdlx.userAuth = userAuthToken;
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "Login Successful! Launching QBDLX..."));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// If connection to API fails, show error info.
|
||||||
|
string error = ex.ToString();
|
||||||
|
loginText.Invoke(new Action(() => loginText.Text = "Login Failed. Error Log saved"));
|
||||||
|
System.IO.File.WriteAllText(errorLog, error);
|
||||||
|
wr.Abort();
|
||||||
|
loginButton.Invoke(new Action(() => loginButton.Enabled = true));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wr.Abort();
|
||||||
|
finishLogin(sender, e);
|
||||||
|
loginBG.CancelAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void finishLogin(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
loginButton.Invoke(new Action(() => loginButton.Enabled = true));
|
||||||
|
// If info is legit, go to the main form.
|
||||||
|
qbdlx.appid = appID;
|
||||||
|
qbdlx.eMail = emailTextbox.Text;
|
||||||
|
qbdlx.password = passwordTextbox.Text;
|
||||||
|
qbdlx.appSecret = appSecret;
|
||||||
|
|
||||||
|
if (disableLogin.Checked != true)
|
||||||
|
{
|
||||||
|
this.Invoke(new Action(() => this.Hide()));
|
||||||
|
Application.Run(qbdlx);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1058
QobuzDownloaderX/LoginForm-v2.resx
Normal file
1058
QobuzDownloaderX/LoginForm-v2.resx
Normal file
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,7 @@ namespace QobuzDownloaderX
|
|||||||
{
|
{
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
Application.Run(new LoginForm());
|
Application.Run(new LoginFrm());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.9.8.7")]
|
[assembly: AssemblyVersion("0.9.9.8")]
|
||||||
[assembly: AssemblyFileVersion("0.9.8.7")]
|
[assembly: AssemblyFileVersion("0.9.9.8")]
|
||||||
|
|||||||
20
QobuzDownloaderX/Properties/Resources.Designer.cs
generated
20
QobuzDownloaderX/Properties/Resources.Designer.cs
generated
@@ -60,6 +60,16 @@ namespace QobuzDownloaderX.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap login_frame {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("login_frame", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -79,5 +89,15 @@ namespace QobuzDownloaderX.Properties {
|
|||||||
return ((System.Drawing.Icon)(obj));
|
return ((System.Drawing.Icon)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap qbdlx_white {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("qbdlx_white", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,10 +118,16 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="login_frame" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\login-frame.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="qbdlx" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="qbdlx" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\qbdlx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\qbdlx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="qbdlx_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="qbdlx_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\qbdlx_icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\qbdlx_icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="qbdlx_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\qbdlx-white.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -79,6 +79,12 @@
|
|||||||
<Compile Include="Form1.Designer.cs">
|
<Compile Include="Form1.Designer.cs">
|
||||||
<DependentUpon>Form1.cs</DependentUpon>
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="LoginForm-v2.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LoginForm-v2.Designer.cs">
|
||||||
|
<DependentUpon>LoginForm-v2.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="searchForm.cs">
|
<Compile Include="searchForm.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -97,6 +103,9 @@
|
|||||||
<EmbeddedResource Include="Form1.resx">
|
<EmbeddedResource Include="Form1.resx">
|
||||||
<DependentUpon>Form1.cs</DependentUpon>
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="LoginForm-v2.resx">
|
||||||
|
<DependentUpon>LoginForm-v2.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="searchForm.resx">
|
<EmbeddedResource Include="searchForm.resx">
|
||||||
<DependentUpon>searchForm.cs</DependentUpon>
|
<DependentUpon>searchForm.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -148,6 +157,12 @@
|
|||||||
<Install>false</Install>
|
<Install>false</Install>
|
||||||
</BootstrapperPackage>
|
</BootstrapperPackage>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\login-frame.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\qbdlx-white.png" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
|||||||
BIN
QobuzDownloaderX/Resources/login-frame.png
Normal file
BIN
QobuzDownloaderX/Resources/login-frame.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
BIN
QobuzDownloaderX/Resources/qbdlx-white.png
Normal file
BIN
QobuzDownloaderX/Resources/qbdlx-white.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
39
README.md
39
README.md
@@ -1 +1,38 @@
|
|||||||
# QobuzDownloaderX
|
<p style="align:center;">
|
||||||
|
<a href="https://github.com/ImAiiR/QobuzDownloaderX">
|
||||||
|
<img src="https://github.com/ImAiiR/QobuzDownloaderX/raw/master/QobuzDownloaderX/Resources/qbdlx.png?raw=true" />
|
||||||
|
</a>
|
||||||
|
<a href="https://ko-fi.com/I3I41A5DY">
|
||||||
|
<img src="https://www.ko-fi.com/img/githubbutton_sm.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
Inspired by Qo-DL by <a href="https://github.com/Sorrow446">Sorrow</a> & <a href="https://github.com/DashLt">Dash</a>
|
||||||
|
|
||||||
|
<p style="align:center;">
|
||||||
|
<a href="https://github.com/ImAiiR/QobuzDownloaderX/blob/master/-assets/QBDLX2.png?raw=true">
|
||||||
|
<img src="https://github.com/ImAiiR/QobuzDownloaderX/blob/master/-assets/QBDLX2.png?raw=true" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# About
|
||||||
|
QobuzDownloaderX is a program for downloading music streams from the streaming platform <a href="https://qobuz.com/">Qobuz</a>.
|
||||||
|
|
||||||
|
You can not download anything with a free account.
|
||||||
|
|
||||||
|
# Disclaimer & Legal
|
||||||
|
I will not be responsible for how you use QBDLX (QobuzDownloaderX).
|
||||||
|
|
||||||
|
This program DOES NOT include...
|
||||||
|
- Code to bypass Qobuz's region restrictions.
|
||||||
|
- Qobuz app IDs or secrets.
|
||||||
|
|
||||||
|
QBDLX does not publish any of Qobuz's private secrets or app IDs. It contains regular expressions and other code to dynamically grab them from Qobuz's web player's *publicly available* JavaScript, which is not rehosted, but grabbed client side. Scraping public data is not a violation of the Computer Fraud and Abuse Act (USA) according to the Ninth Court of Appeals, [case # 17-16783](http://cdn.ca9.uscourts.gov/datastore/opinions/2019/09/09/17-16783.pdf) (see page 29).
|
||||||
|
|
||||||
|
QBDLX uses the Qobuz API, but is not endorsed, certified or otherwise approved in any way by Qobuz.
|
||||||
|
|
||||||
|
Qobuz brand and name is the registered trademark of its respective owner.
|
||||||
|
|
||||||
|
QBDLX has no partnership, sponsorship or endorsement with Qobuz.
|
||||||
|
|
||||||
|
By using QBDLX, you agree to the following: http://static.qobuz.com/apps/api/QobuzAPI-TermsofUse.pdf
|
||||||
|
|||||||
Reference in New Issue
Block a user