Add files via upload

This commit is contained in:
AiiR 2019-11-01 21:47:20 -04:00 committed by GitHub
parent fc47ebfdb6
commit 65b22ceee8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 9276 additions and 0 deletions

22
QobuzDownloaderX.sln Normal file
View File

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QobuzDownloaderX", "QobuzDownloaderX\QobuzDownloaderX.csproj", "{4CEB979A-035A-4D36-9607-D554BBECABE0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4CEB979A-035A-4D36-9607-D554BBECABE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4CEB979A-035A-4D36-9607-D554BBECABE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4CEB979A-035A-4D36-9607-D554BBECABE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4CEB979A-035A-4D36-9607-D554BBECABE0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

105
QobuzDownloaderX/App.config Normal file
View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="QobuzDownloaderX.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
</startup>
<userSettings>
<QobuzDownloaderX.Properties.Settings>
<setting name="savedFolder" serializeAs="String">
<value />
</setting>
<setting name="savedAppID" serializeAs="String">
<value />
</setting>
<setting name="savedEmail" serializeAs="String">
<value />
</setting>
<setting name="savedPassword" serializeAs="String">
<value />
</setting>
<setting name="savedFormatID" serializeAs="String">
<value />
</setting>
<setting name="UpgradeRequired" serializeAs="String">
<value>True</value>
</setting>
<setting name="albumTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="artistTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="albumArtistTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="trackTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="totalTracksTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="discTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="totalDiscsTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="genreTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="isrcTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="upcTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="copyrightTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="yearTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="explicitTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="imageTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="commentTag" serializeAs="String">
<value>False</value>
</setting>
<setting name="composerTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="trackTitleTag" serializeAs="String">
<value>True</value>
</setting>
<setting name="commentText" serializeAs="String">
<value />
</setting>
<setting name="quality1" serializeAs="String">
<value>False</value>
</setting>
<setting name="quality2" serializeAs="String">
<value>False</value>
</setting>
<setting name="quality3" serializeAs="String">
<value>False</value>
</setting>
<setting name="quality4" serializeAs="String">
<value>True</value>
</setting>
<setting name="qualityFormat" serializeAs="String">
<value>27</value>
</setting>
<setting name="audioType" serializeAs="String">
<value>.flac</value>
</setting>
</QobuzDownloaderX.Properties.Settings>
</userSettings>
</configuration>

766
QobuzDownloaderX/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,766 @@
namespace QobuzDownloaderX
{
partial class QobuzDownloaderX
{
/// <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(QobuzDownloaderX));
this.testURLBox = new System.Windows.Forms.TextBox();
this.selectFolder = new System.Windows.Forms.Button();
this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
this.output = new System.Windows.Forms.TextBox();
this.downloadBG = new System.ComponentModel.BackgroundWorker();
this.openFolderButton = new System.Windows.Forms.Button();
this.downloadButton = new System.Windows.Forms.Button();
this.albumUrl = new System.Windows.Forms.TextBox();
this.imageURLTextbox = new System.Windows.Forms.TextBox();
this.verNumLabel = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.albumArtistTextBox = new System.Windows.Forms.TextBox();
this.albumTextBox = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.releaseDateTextBox = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.upcTextBox = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.albumArtPicBox = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label6 = new System.Windows.Forms.Label();
this.totalTracksTextbox = new System.Windows.Forms.TextBox();
this.totalTracksLabel = new System.Windows.Forms.Label();
this.getLinkTypeBG = new System.ComponentModel.BackgroundWorker();
this.downloadAlbumBG = new System.ComponentModel.BackgroundWorker();
this.downloadTrackBG = new System.ComponentModel.BackgroundWorker();
this.downloadDiscogBG = new System.ComponentModel.BackgroundWorker();
this.qualityTextbox = new System.Windows.Forms.TextBox();
this.qualityLabel = new System.Windows.Forms.Label();
this.openSearch = new System.Windows.Forms.Button();
this.tagsLabel = new System.Windows.Forms.Label();
this.albumArtistCheckbox = new System.Windows.Forms.CheckBox();
this.artistCheckbox = new System.Windows.Forms.CheckBox();
this.trackTitleCheckbox = new System.Windows.Forms.CheckBox();
this.trackNumberCheckbox = new System.Windows.Forms.CheckBox();
this.trackTotalCheckbox = new System.Windows.Forms.CheckBox();
this.discNumberCheckbox = new System.Windows.Forms.CheckBox();
this.discTotalCheckbox = new System.Windows.Forms.CheckBox();
this.albumCheckbox = new System.Windows.Forms.CheckBox();
this.explicitCheckbox = new System.Windows.Forms.CheckBox();
this.upcCheckbox = new System.Windows.Forms.CheckBox();
this.isrcCheckbox = new System.Windows.Forms.CheckBox();
this.copyrightCheckbox = new System.Windows.Forms.CheckBox();
this.composerCheckbox = new System.Windows.Forms.CheckBox();
this.genreCheckbox = new System.Windows.Forms.CheckBox();
this.releaseCheckbox = new System.Windows.Forms.CheckBox();
this.commentCheckbox = new System.Windows.Forms.CheckBox();
this.commentTextbox = new System.Windows.Forms.TextBox();
this.imageCheckbox = new System.Windows.Forms.CheckBox();
this.mp3Checkbox = new System.Windows.Forms.CheckBox();
this.flacLowCheckbox = new System.Windows.Forms.CheckBox();
this.flacMidCheckbox = new System.Windows.Forms.CheckBox();
this.flacHighCheckbox = new System.Windows.Forms.CheckBox();
this.mp3WarnLabel = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// testURLBox
//
this.testURLBox.Location = new System.Drawing.Point(946, 394);
this.testURLBox.Multiline = true;
this.testURLBox.Name = "testURLBox";
this.testURLBox.Size = new System.Drawing.Size(390, 20);
this.testURLBox.TabIndex = 1;
this.testURLBox.Text = "Steamed Qobuz File URL";
this.testURLBox.Visible = false;
this.testURLBox.WordWrap = false;
//
// selectFolder
//
this.selectFolder.Location = new System.Drawing.Point(13, 115);
this.selectFolder.Name = "selectFolder";
this.selectFolder.Size = new System.Drawing.Size(349, 23);
this.selectFolder.TabIndex = 2;
this.selectFolder.Text = "Choose Folder";
this.selectFolder.UseVisualStyleBackColor = true;
this.selectFolder.Click += new System.EventHandler(this.selectFolder_Click);
//
// output
//
this.output.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
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.Location = new System.Drawing.Point(12, 144);
this.output.Multiline = true;
this.output.Name = "output";
this.output.ReadOnly = true;
this.output.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.output.Size = new System.Drawing.Size(705, 339);
this.output.TabIndex = 3;
this.output.Text = "Test String";
//
// openFolderButton
//
this.openFolderButton.Location = new System.Drawing.Point(368, 115);
this.openFolderButton.Name = "openFolderButton";
this.openFolderButton.Size = new System.Drawing.Size(349, 23);
this.openFolderButton.TabIndex = 13;
this.openFolderButton.Text = "Open Folder";
this.openFolderButton.UseVisualStyleBackColor = true;
this.openFolderButton.Click += new System.EventHandler(this.openFolderButton_Click);
//
// downloadButton
//
this.downloadButton.Location = new System.Drawing.Point(597, 86);
this.downloadButton.Name = "downloadButton";
this.downloadButton.Size = new System.Drawing.Size(120, 23);
this.downloadButton.TabIndex = 17;
this.downloadButton.Text = "Download";
this.downloadButton.UseVisualStyleBackColor = true;
this.downloadButton.Click += new System.EventHandler(this.downloadButton_Click);
//
// albumUrl
//
this.albumUrl.Location = new System.Drawing.Point(15, 88);
this.albumUrl.Name = "albumUrl";
this.albumUrl.Size = new System.Drawing.Size(579, 20);
this.albumUrl.TabIndex = 16;
this.albumUrl.WordWrap = false;
this.albumUrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.albumUrl_KeyDown);
//
// imageURLTextbox
//
this.imageURLTextbox.Location = new System.Drawing.Point(946, 420);
this.imageURLTextbox.Multiline = true;
this.imageURLTextbox.Name = "imageURLTextbox";
this.imageURLTextbox.Size = new System.Drawing.Size(390, 20);
this.imageURLTextbox.TabIndex = 31;
this.imageURLTextbox.Text = "Release Cover Art URL";
this.imageURLTextbox.Visible = false;
this.imageURLTextbox.WordWrap = false;
//
// verNumLabel
//
this.verNumLabel.Location = new System.Drawing.Point(159, 55);
this.verNumLabel.Name = "verNumLabel";
this.verNumLabel.Size = new System.Drawing.Size(63, 13);
this.verNumLabel.TabIndex = 38;
this.verNumLabel.Text = "#.#.#.#";
this.verNumLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(801, 213);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(51, 13);
this.label1.TabIndex = 40;
this.label1.Text = "Cover Art";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(751, 236);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(62, 13);
this.label2.TabIndex = 41;
this.label2.Text = "Album Artist";
//
// albumArtistTextBox
//
this.albumArtistTextBox.Location = new System.Drawing.Point(754, 252);
this.albumArtistTextBox.Name = "albumArtistTextBox";
this.albumArtistTextBox.ReadOnly = true;
this.albumArtistTextBox.Size = new System.Drawing.Size(150, 20);
this.albumArtistTextBox.TabIndex = 42;
this.albumArtistTextBox.WordWrap = false;
//
// albumTextBox
//
this.albumTextBox.Location = new System.Drawing.Point(754, 294);
this.albumTextBox.Name = "albumTextBox";
this.albumTextBox.ReadOnly = true;
this.albumTextBox.Size = new System.Drawing.Size(150, 20);
this.albumTextBox.TabIndex = 44;
this.albumTextBox.WordWrap = false;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(751, 278);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(36, 13);
this.label3.TabIndex = 43;
this.label3.Text = "Album";
//
// releaseDateTextBox
//
this.releaseDateTextBox.Location = new System.Drawing.Point(754, 463);
this.releaseDateTextBox.Name = "releaseDateTextBox";
this.releaseDateTextBox.ReadOnly = true;
this.releaseDateTextBox.Size = new System.Drawing.Size(150, 20);
this.releaseDateTextBox.TabIndex = 46;
this.releaseDateTextBox.WordWrap = false;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(751, 447);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(72, 13);
this.label4.TabIndex = 45;
this.label4.Text = "Release Date";
//
// upcTextBox
//
this.upcTextBox.Location = new System.Drawing.Point(754, 420);
this.upcTextBox.Name = "upcTextBox";
this.upcTextBox.ReadOnly = true;
this.upcTextBox.Size = new System.Drawing.Size(150, 20);
this.upcTextBox.TabIndex = 48;
this.upcTextBox.WordWrap = false;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(751, 404);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(29, 13);
this.label5.TabIndex = 47;
this.label5.Text = "UPC";
//
// albumArtPicBox
//
this.albumArtPicBox.Location = new System.Drawing.Point(754, 57);
this.albumArtPicBox.MaximumSize = new System.Drawing.Size(150, 150);
this.albumArtPicBox.MinimumSize = new System.Drawing.Size(150, 150);
this.albumArtPicBox.Name = "albumArtPicBox";
this.albumArtPicBox.Size = new System.Drawing.Size(150, 150);
this.albumArtPicBox.TabIndex = 39;
this.albumArtPicBox.TabStop = false;
//
// pictureBox1
//
this.pictureBox1.Image = global::QobuzDownloaderX.Properties.Resources.qbdlx;
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(207, 52);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 36;
this.pictureBox1.TabStop = false;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(12, 70);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(132, 13);
this.label6.TabIndex = 49;
this.label6.Text = "Qobuz Album / Track Link";
//
// totalTracksTextbox
//
this.totalTracksTextbox.Location = new System.Drawing.Point(754, 378);
this.totalTracksTextbox.Name = "totalTracksTextbox";
this.totalTracksTextbox.ReadOnly = true;
this.totalTracksTextbox.Size = new System.Drawing.Size(150, 20);
this.totalTracksTextbox.TabIndex = 56;
this.totalTracksTextbox.WordWrap = false;
//
// totalTracksLabel
//
this.totalTracksLabel.AutoSize = true;
this.totalTracksLabel.Location = new System.Drawing.Point(751, 362);
this.totalTracksLabel.Name = "totalTracksLabel";
this.totalTracksLabel.Size = new System.Drawing.Size(67, 13);
this.totalTracksLabel.TabIndex = 55;
this.totalTracksLabel.Text = "Total Tracks";
//
// getLinkTypeBG
//
this.getLinkTypeBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.getLinkTypeBG_DoWork);
//
// downloadAlbumBG
//
this.downloadAlbumBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.downloadAlbumBG_DoWork);
//
// downloadTrackBG
//
this.downloadTrackBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.downloadTrackBG_DoWork);
//
// downloadDiscogBG
//
this.downloadDiscogBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.downloadDiscogBG_DoWork);
//
// qualityTextbox
//
this.qualityTextbox.Location = new System.Drawing.Point(754, 336);
this.qualityTextbox.Name = "qualityTextbox";
this.qualityTextbox.ReadOnly = true;
this.qualityTextbox.Size = new System.Drawing.Size(150, 20);
this.qualityTextbox.TabIndex = 59;
this.qualityTextbox.WordWrap = false;
//
// qualityLabel
//
this.qualityLabel.AutoSize = true;
this.qualityLabel.Location = new System.Drawing.Point(751, 320);
this.qualityLabel.Name = "qualityLabel";
this.qualityLabel.Size = new System.Drawing.Size(71, 13);
this.qualityLabel.TabIndex = 58;
this.qualityLabel.Text = "Album Quality";
//
// openSearch
//
this.openSearch.Location = new System.Drawing.Point(597, 57);
this.openSearch.Name = "openSearch";
this.openSearch.Size = new System.Drawing.Size(120, 23);
this.openSearch.TabIndex = 60;
this.openSearch.Text = "Open Search";
this.openSearch.UseVisualStyleBackColor = true;
this.openSearch.Click += new System.EventHandler(this.openSearch_Click);
//
// tagsLabel
//
this.tagsLabel.Location = new System.Drawing.Point(12, 501);
this.tagsLabel.Name = "tagsLabel";
this.tagsLabel.Size = new System.Drawing.Size(914, 23);
this.tagsLabel.TabIndex = 61;
this.tagsLabel.Text = "🠋 Choose which tags to save 🠋";
this.tagsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.tagsLabel.Click += new System.EventHandler(this.tagsLabel_Click);
//
// albumArtistCheckbox
//
this.albumArtistCheckbox.AutoSize = true;
this.albumArtistCheckbox.Checked = true;
this.albumArtistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.albumArtistCheckbox.Location = new System.Drawing.Point(325, 563);
this.albumArtistCheckbox.Name = "albumArtistCheckbox";
this.albumArtistCheckbox.Size = new System.Drawing.Size(81, 17);
this.albumArtistCheckbox.TabIndex = 62;
this.albumArtistCheckbox.Text = "Album Artist";
this.albumArtistCheckbox.UseVisualStyleBackColor = true;
this.albumArtistCheckbox.CheckedChanged += new System.EventHandler(this.albumArtistCheckbox_CheckedChanged);
//
// artistCheckbox
//
this.artistCheckbox.AutoSize = true;
this.artistCheckbox.Checked = true;
this.artistCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.artistCheckbox.Location = new System.Drawing.Point(325, 609);
this.artistCheckbox.Name = "artistCheckbox";
this.artistCheckbox.Size = new System.Drawing.Size(80, 17);
this.artistCheckbox.TabIndex = 63;
this.artistCheckbox.Text = "Track Artist";
this.artistCheckbox.UseVisualStyleBackColor = true;
this.artistCheckbox.CheckedChanged += new System.EventHandler(this.artistCheckbox_CheckedChanged);
//
// trackTitleCheckbox
//
this.trackTitleCheckbox.AutoSize = true;
this.trackTitleCheckbox.Checked = true;
this.trackTitleCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.trackTitleCheckbox.Location = new System.Drawing.Point(325, 586);
this.trackTitleCheckbox.Name = "trackTitleCheckbox";
this.trackTitleCheckbox.Size = new System.Drawing.Size(77, 17);
this.trackTitleCheckbox.TabIndex = 64;
this.trackTitleCheckbox.Text = "Track Title";
this.trackTitleCheckbox.UseVisualStyleBackColor = true;
this.trackTitleCheckbox.CheckedChanged += new System.EventHandler(this.trackTitleCheckbox_CheckedChanged);
//
// trackNumberCheckbox
//
this.trackNumberCheckbox.AutoSize = true;
this.trackNumberCheckbox.Checked = true;
this.trackNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.trackNumberCheckbox.Location = new System.Drawing.Point(325, 632);
this.trackNumberCheckbox.Name = "trackNumberCheckbox";
this.trackNumberCheckbox.Size = new System.Drawing.Size(94, 17);
this.trackNumberCheckbox.TabIndex = 65;
this.trackNumberCheckbox.Text = "Track Number";
this.trackNumberCheckbox.UseVisualStyleBackColor = true;
this.trackNumberCheckbox.CheckedChanged += new System.EventHandler(this.trackNumberCheckbox_CheckedChanged);
//
// trackTotalCheckbox
//
this.trackTotalCheckbox.AutoSize = true;
this.trackTotalCheckbox.Checked = true;
this.trackTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.trackTotalCheckbox.Location = new System.Drawing.Point(325, 655);
this.trackTotalCheckbox.Name = "trackTotalCheckbox";
this.trackTotalCheckbox.Size = new System.Drawing.Size(86, 17);
this.trackTotalCheckbox.TabIndex = 66;
this.trackTotalCheckbox.Text = "Total Tracks";
this.trackTotalCheckbox.UseVisualStyleBackColor = true;
this.trackTotalCheckbox.CheckedChanged += new System.EventHandler(this.trackTotalCheckbox_CheckedChanged);
//
// discNumberCheckbox
//
this.discNumberCheckbox.AutoSize = true;
this.discNumberCheckbox.Checked = true;
this.discNumberCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.discNumberCheckbox.Location = new System.Drawing.Point(325, 676);
this.discNumberCheckbox.Name = "discNumberCheckbox";
this.discNumberCheckbox.Size = new System.Drawing.Size(87, 17);
this.discNumberCheckbox.TabIndex = 67;
this.discNumberCheckbox.Text = "Disc Number";
this.discNumberCheckbox.UseVisualStyleBackColor = true;
this.discNumberCheckbox.CheckedChanged += new System.EventHandler(this.discNumberCheckbox_CheckedChanged);
//
// discTotalCheckbox
//
this.discTotalCheckbox.AutoSize = true;
this.discTotalCheckbox.Checked = true;
this.discTotalCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.discTotalCheckbox.Location = new System.Drawing.Point(325, 699);
this.discTotalCheckbox.Name = "discTotalCheckbox";
this.discTotalCheckbox.Size = new System.Drawing.Size(79, 17);
this.discTotalCheckbox.TabIndex = 68;
this.discTotalCheckbox.Text = "Total Discs";
this.discTotalCheckbox.UseVisualStyleBackColor = true;
this.discTotalCheckbox.CheckedChanged += new System.EventHandler(this.discTotalCheckbox_CheckedChanged);
//
// albumCheckbox
//
this.albumCheckbox.AutoSize = true;
this.albumCheckbox.Checked = true;
this.albumCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.albumCheckbox.Location = new System.Drawing.Point(325, 540);
this.albumCheckbox.Name = "albumCheckbox";
this.albumCheckbox.Size = new System.Drawing.Size(78, 17);
this.albumCheckbox.TabIndex = 69;
this.albumCheckbox.Text = "Album Title";
this.albumCheckbox.UseVisualStyleBackColor = true;
this.albumCheckbox.CheckedChanged += new System.EventHandler(this.albumCheckbox_CheckedChanged);
//
// explicitCheckbox
//
this.explicitCheckbox.AutoSize = true;
this.explicitCheckbox.Checked = true;
this.explicitCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.explicitCheckbox.Location = new System.Drawing.Point(425, 678);
this.explicitCheckbox.Name = "explicitCheckbox";
this.explicitCheckbox.Size = new System.Drawing.Size(106, 17);
this.explicitCheckbox.TabIndex = 76;
this.explicitCheckbox.Text = "Explicit Advisory*";
this.explicitCheckbox.UseVisualStyleBackColor = true;
this.explicitCheckbox.CheckedChanged += new System.EventHandler(this.explicitCheckbox_CheckedChanged);
//
// upcCheckbox
//
this.upcCheckbox.AutoSize = true;
this.upcCheckbox.Checked = true;
this.upcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.upcCheckbox.Location = new System.Drawing.Point(425, 655);
this.upcCheckbox.Name = "upcCheckbox";
this.upcCheckbox.Size = new System.Drawing.Size(52, 17);
this.upcCheckbox.TabIndex = 75;
this.upcCheckbox.Text = "UPC*";
this.upcCheckbox.UseVisualStyleBackColor = true;
this.upcCheckbox.CheckedChanged += new System.EventHandler(this.upcCheckbox_CheckedChanged);
//
// isrcCheckbox
//
this.isrcCheckbox.AutoSize = true;
this.isrcCheckbox.Checked = true;
this.isrcCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.isrcCheckbox.Location = new System.Drawing.Point(425, 632);
this.isrcCheckbox.Name = "isrcCheckbox";
this.isrcCheckbox.Size = new System.Drawing.Size(51, 17);
this.isrcCheckbox.TabIndex = 74;
this.isrcCheckbox.Text = "ISRC";
this.isrcCheckbox.UseVisualStyleBackColor = true;
this.isrcCheckbox.CheckedChanged += new System.EventHandler(this.isrcCheckbox_CheckedChanged);
//
// copyrightCheckbox
//
this.copyrightCheckbox.AutoSize = true;
this.copyrightCheckbox.Checked = true;
this.copyrightCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.copyrightCheckbox.Location = new System.Drawing.Point(425, 609);
this.copyrightCheckbox.Name = "copyrightCheckbox";
this.copyrightCheckbox.Size = new System.Drawing.Size(70, 17);
this.copyrightCheckbox.TabIndex = 73;
this.copyrightCheckbox.Text = "Copyright";
this.copyrightCheckbox.UseVisualStyleBackColor = true;
this.copyrightCheckbox.CheckedChanged += new System.EventHandler(this.copyrightCheckbox_CheckedChanged);
//
// composerCheckbox
//
this.composerCheckbox.AutoSize = true;
this.composerCheckbox.Checked = true;
this.composerCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.composerCheckbox.Location = new System.Drawing.Point(425, 586);
this.composerCheckbox.Name = "composerCheckbox";
this.composerCheckbox.Size = new System.Drawing.Size(73, 17);
this.composerCheckbox.TabIndex = 72;
this.composerCheckbox.Text = "Composer";
this.composerCheckbox.UseVisualStyleBackColor = true;
this.composerCheckbox.CheckedChanged += new System.EventHandler(this.composerCheckbox_CheckedChanged);
//
// genreCheckbox
//
this.genreCheckbox.AutoSize = true;
this.genreCheckbox.Checked = true;
this.genreCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.genreCheckbox.Location = new System.Drawing.Point(425, 563);
this.genreCheckbox.Name = "genreCheckbox";
this.genreCheckbox.Size = new System.Drawing.Size(55, 17);
this.genreCheckbox.TabIndex = 71;
this.genreCheckbox.Text = "Genre";
this.genreCheckbox.UseVisualStyleBackColor = true;
this.genreCheckbox.CheckedChanged += new System.EventHandler(this.genreCheckbox_CheckedChanged);
//
// releaseCheckbox
//
this.releaseCheckbox.AutoSize = true;
this.releaseCheckbox.Checked = true;
this.releaseCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.releaseCheckbox.Location = new System.Drawing.Point(425, 540);
this.releaseCheckbox.Name = "releaseCheckbox";
this.releaseCheckbox.Size = new System.Drawing.Size(91, 17);
this.releaseCheckbox.TabIndex = 70;
this.releaseCheckbox.Text = "Release Date";
this.releaseCheckbox.UseVisualStyleBackColor = true;
this.releaseCheckbox.CheckedChanged += new System.EventHandler(this.releaseCheckbox_CheckedChanged);
//
// commentCheckbox
//
this.commentCheckbox.AutoSize = true;
this.commentCheckbox.Location = new System.Drawing.Point(533, 699);
this.commentCheckbox.Name = "commentCheckbox";
this.commentCheckbox.Size = new System.Drawing.Size(70, 17);
this.commentCheckbox.TabIndex = 78;
this.commentCheckbox.Text = "Comment";
this.commentCheckbox.UseVisualStyleBackColor = true;
this.commentCheckbox.CheckedChanged += new System.EventHandler(this.commentCheckbox_CheckedChanged);
//
// commentTextbox
//
this.commentTextbox.Location = new System.Drawing.Point(609, 697);
this.commentTextbox.Name = "commentTextbox";
this.commentTextbox.Size = new System.Drawing.Size(112, 20);
this.commentTextbox.TabIndex = 79;
this.commentTextbox.TextChanged += new System.EventHandler(this.commentTextbox_TextChanged);
//
// imageCheckbox
//
this.imageCheckbox.AutoSize = true;
this.imageCheckbox.Checked = true;
this.imageCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.imageCheckbox.Location = new System.Drawing.Point(425, 699);
this.imageCheckbox.Name = "imageCheckbox";
this.imageCheckbox.Size = new System.Drawing.Size(70, 17);
this.imageCheckbox.TabIndex = 80;
this.imageCheckbox.Text = "Cover Art";
this.imageCheckbox.UseVisualStyleBackColor = true;
this.imageCheckbox.CheckedChanged += new System.EventHandler(this.imageCheckbox_CheckedChanged);
//
// mp3Checkbox
//
this.mp3Checkbox.AutoSize = true;
this.mp3Checkbox.Location = new System.Drawing.Point(243, 61);
this.mp3Checkbox.Name = "mp3Checkbox";
this.mp3Checkbox.Size = new System.Drawing.Size(69, 17);
this.mp3Checkbox.TabIndex = 81;
this.mp3Checkbox.Text = "MP3 320";
this.mp3Checkbox.UseVisualStyleBackColor = true;
this.mp3Checkbox.CheckedChanged += new System.EventHandler(this.mp3Checkbox_CheckedChanged);
//
// flacLowCheckbox
//
this.flacLowCheckbox.AutoSize = true;
this.flacLowCheckbox.Location = new System.Drawing.Point(318, 61);
this.flacLowCheckbox.Name = "flacLowCheckbox";
this.flacLowCheckbox.Size = new System.Drawing.Size(93, 17);
this.flacLowCheckbox.TabIndex = 82;
this.flacLowCheckbox.Text = "FLAC 16/44.1";
this.flacLowCheckbox.UseVisualStyleBackColor = true;
this.flacLowCheckbox.CheckedChanged += new System.EventHandler(this.flacLowCheckbox_CheckedChanged);
//
// flacMidCheckbox
//
this.flacMidCheckbox.AutoSize = true;
this.flacMidCheckbox.Location = new System.Drawing.Point(417, 61);
this.flacMidCheckbox.Name = "flacMidCheckbox";
this.flacMidCheckbox.Size = new System.Drawing.Size(84, 17);
this.flacMidCheckbox.TabIndex = 83;
this.flacMidCheckbox.Text = "FLAC 24/96";
this.flacMidCheckbox.UseVisualStyleBackColor = true;
this.flacMidCheckbox.CheckedChanged += new System.EventHandler(this.flacMidCheckbox_CheckedChanged);
//
// flacHighCheckbox
//
this.flacHighCheckbox.AutoSize = true;
this.flacHighCheckbox.Checked = true;
this.flacHighCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
this.flacHighCheckbox.Location = new System.Drawing.Point(507, 61);
this.flacHighCheckbox.Name = "flacHighCheckbox";
this.flacHighCheckbox.Size = new System.Drawing.Size(90, 17);
this.flacHighCheckbox.TabIndex = 84;
this.flacHighCheckbox.Text = "FLAC 24/192";
this.flacHighCheckbox.UseVisualStyleBackColor = true;
this.flacHighCheckbox.CheckedChanged += new System.EventHandler(this.flacHighCheckbox_CheckedChanged);
//
// mp3WarnLabel
//
this.mp3WarnLabel.AutoSize = true;
this.mp3WarnLabel.Location = new System.Drawing.Point(744, 711);
this.mp3WarnLabel.Name = "mp3WarnLabel";
this.mp3WarnLabel.Size = new System.Drawing.Size(182, 13);
this.mp3WarnLabel.TabIndex = 85;
this.mp3WarnLabel.Text = "* = Not available on MP3 downloads.";
//
// QobuzDownloaderX
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(938, 533);
this.Controls.Add(this.mp3WarnLabel);
this.Controls.Add(this.flacHighCheckbox);
this.Controls.Add(this.flacMidCheckbox);
this.Controls.Add(this.flacLowCheckbox);
this.Controls.Add(this.mp3Checkbox);
this.Controls.Add(this.imageCheckbox);
this.Controls.Add(this.commentTextbox);
this.Controls.Add(this.commentCheckbox);
this.Controls.Add(this.explicitCheckbox);
this.Controls.Add(this.upcCheckbox);
this.Controls.Add(this.isrcCheckbox);
this.Controls.Add(this.copyrightCheckbox);
this.Controls.Add(this.composerCheckbox);
this.Controls.Add(this.genreCheckbox);
this.Controls.Add(this.releaseCheckbox);
this.Controls.Add(this.albumCheckbox);
this.Controls.Add(this.discTotalCheckbox);
this.Controls.Add(this.discNumberCheckbox);
this.Controls.Add(this.trackTotalCheckbox);
this.Controls.Add(this.trackNumberCheckbox);
this.Controls.Add(this.trackTitleCheckbox);
this.Controls.Add(this.artistCheckbox);
this.Controls.Add(this.albumArtistCheckbox);
this.Controls.Add(this.tagsLabel);
this.Controls.Add(this.openSearch);
this.Controls.Add(this.qualityTextbox);
this.Controls.Add(this.qualityLabel);
this.Controls.Add(this.totalTracksTextbox);
this.Controls.Add(this.totalTracksLabel);
this.Controls.Add(this.label6);
this.Controls.Add(this.upcTextBox);
this.Controls.Add(this.label5);
this.Controls.Add(this.releaseDateTextBox);
this.Controls.Add(this.label4);
this.Controls.Add(this.albumTextBox);
this.Controls.Add(this.label3);
this.Controls.Add(this.albumArtistTextBox);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.albumArtPicBox);
this.Controls.Add(this.verNumLabel);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.imageURLTextbox);
this.Controls.Add(this.downloadButton);
this.Controls.Add(this.albumUrl);
this.Controls.Add(this.openFolderButton);
this.Controls.Add(this.output);
this.Controls.Add(this.selectFolder);
this.Controls.Add(this.testURLBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "QobuzDownloaderX";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "QobuzDownloaderX";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.QobuzDownloaderX_FormClosed);
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.albumArtPicBox)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox testURLBox;
private System.Windows.Forms.Button selectFolder;
private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
private System.Windows.Forms.TextBox output;
private System.ComponentModel.BackgroundWorker downloadBG;
private System.Windows.Forms.Button openFolderButton;
private System.Windows.Forms.Button downloadButton;
private System.Windows.Forms.TextBox albumUrl;
private System.Windows.Forms.TextBox imageURLTextbox;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label verNumLabel;
private System.Windows.Forms.PictureBox albumArtPicBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox albumArtistTextBox;
private System.Windows.Forms.TextBox albumTextBox;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox releaseDateTextBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox upcTextBox;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox totalTracksTextbox;
private System.Windows.Forms.Label totalTracksLabel;
private System.ComponentModel.BackgroundWorker getLinkTypeBG;
private System.ComponentModel.BackgroundWorker downloadAlbumBG;
private System.ComponentModel.BackgroundWorker downloadTrackBG;
private System.ComponentModel.BackgroundWorker downloadDiscogBG;
private System.Windows.Forms.TextBox qualityTextbox;
private System.Windows.Forms.Label qualityLabel;
private System.Windows.Forms.Button openSearch;
private System.Windows.Forms.Label tagsLabel;
private System.Windows.Forms.CheckBox albumArtistCheckbox;
private System.Windows.Forms.CheckBox artistCheckbox;
private System.Windows.Forms.CheckBox trackTitleCheckbox;
private System.Windows.Forms.CheckBox trackNumberCheckbox;
private System.Windows.Forms.CheckBox trackTotalCheckbox;
private System.Windows.Forms.CheckBox discNumberCheckbox;
private System.Windows.Forms.CheckBox discTotalCheckbox;
private System.Windows.Forms.CheckBox albumCheckbox;
private System.Windows.Forms.CheckBox explicitCheckbox;
private System.Windows.Forms.CheckBox upcCheckbox;
private System.Windows.Forms.CheckBox isrcCheckbox;
private System.Windows.Forms.CheckBox copyrightCheckbox;
private System.Windows.Forms.CheckBox composerCheckbox;
private System.Windows.Forms.CheckBox genreCheckbox;
private System.Windows.Forms.CheckBox releaseCheckbox;
private System.Windows.Forms.CheckBox commentCheckbox;
private System.Windows.Forms.TextBox commentTextbox;
private System.Windows.Forms.CheckBox imageCheckbox;
private System.Windows.Forms.CheckBox mp3Checkbox;
private System.Windows.Forms.CheckBox flacLowCheckbox;
private System.Windows.Forms.CheckBox flacMidCheckbox;
private System.Windows.Forms.CheckBox flacHighCheckbox;
private System.Windows.Forms.Label mp3WarnLabel;
}
}

3539
QobuzDownloaderX/Form1.cs Normal file

File diff suppressed because it is too large Load Diff

1070
QobuzDownloaderX/Form1.resx Normal file

File diff suppressed because it is too large Load Diff

207
QobuzDownloaderX/LoginForm.Designer.cs generated Normal file
View File

@ -0,0 +1,207 @@
namespace QobuzDownloaderX
{
partial class LoginForm
{
/// <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(LoginForm));
this.passwordLabel = new System.Windows.Forms.Label();
this.emailLabel = new System.Windows.Forms.Label();
this.appIdLabel = new System.Windows.Forms.Label();
this.emailTextbox = new System.Windows.Forms.TextBox();
this.passwordTextbox = new System.Windows.Forms.TextBox();
this.loginButton = new System.Windows.Forms.Button();
this.appidTextbox = new System.Windows.Forms.TextBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.loginText = new System.Windows.Forms.Label();
this.md5Button = new System.Windows.Forms.Button();
this.loginBG = new System.ComponentModel.BackgroundWorker();
this.getSecretBG = new System.ComponentModel.BackgroundWorker();
this.verNumLabel2 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// passwordLabel
//
this.passwordLabel.AutoSize = true;
this.passwordLabel.Location = new System.Drawing.Point(12, 143);
this.passwordLabel.Name = "passwordLabel";
this.passwordLabel.Size = new System.Drawing.Size(59, 13);
this.passwordLabel.TabIndex = 27;
this.passwordLabel.Text = "Password -";
//
// emailLabel
//
this.emailLabel.AutoSize = true;
this.emailLabel.Location = new System.Drawing.Point(33, 114);
this.emailLabel.Name = "emailLabel";
this.emailLabel.Size = new System.Drawing.Size(38, 13);
this.emailLabel.TabIndex = 26;
this.emailLabel.Text = "Email -";
//
// appIdLabel
//
this.appIdLabel.AutoSize = true;
this.appIdLabel.Location = new System.Drawing.Point(25, 85);
this.appIdLabel.Name = "appIdLabel";
this.appIdLabel.Size = new System.Drawing.Size(46, 13);
this.appIdLabel.TabIndex = 25;
this.appIdLabel.Text = "App ID -";
//
// emailTextbox
//
this.emailTextbox.Location = new System.Drawing.Point(77, 111);
this.emailTextbox.Multiline = true;
this.emailTextbox.Name = "emailTextbox";
this.emailTextbox.Size = new System.Drawing.Size(189, 23);
this.emailTextbox.TabIndex = 24;
this.emailTextbox.Text = "E-mail";
this.emailTextbox.WordWrap = false;
//
// passwordTextbox
//
this.passwordTextbox.Location = new System.Drawing.Point(77, 140);
this.passwordTextbox.Multiline = true;
this.passwordTextbox.Name = "passwordTextbox";
this.passwordTextbox.Size = new System.Drawing.Size(144, 23);
this.passwordTextbox.TabIndex = 23;
this.passwordTextbox.Text = "Password (Hashed)";
this.passwordTextbox.WordWrap = false;
//
// loginButton
//
this.loginButton.Location = new System.Drawing.Point(77, 169);
this.loginButton.Name = "loginButton";
this.loginButton.Size = new System.Drawing.Size(189, 23);
this.loginButton.TabIndex = 22;
this.loginButton.Text = "Login";
this.loginButton.UseVisualStyleBackColor = true;
this.loginButton.Click += new System.EventHandler(this.loginButton_Click);
//
// appidTextbox
//
this.appidTextbox.Location = new System.Drawing.Point(77, 82);
this.appidTextbox.Multiline = true;
this.appidTextbox.Name = "appidTextbox";
this.appidTextbox.Size = new System.Drawing.Size(189, 23);
this.appidTextbox.TabIndex = 21;
this.appidTextbox.Text = "app_id Here";
this.appidTextbox.WordWrap = false;
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.Transparent;
this.pictureBox1.Image = global::QobuzDownloaderX.Properties.Resources.qbdlx;
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(257, 64);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox1.TabIndex = 28;
this.pictureBox1.TabStop = false;
//
// loginText
//
this.loginText.Location = new System.Drawing.Point(12, 203);
this.loginText.Name = "loginText";
this.loginText.Size = new System.Drawing.Size(254, 23);
this.loginText.TabIndex = 29;
this.loginText.Text = "Waiting for login...";
this.loginText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// md5Button
//
this.md5Button.Location = new System.Drawing.Point(227, 140);
this.md5Button.Name = "md5Button";
this.md5Button.Size = new System.Drawing.Size(39, 23);
this.md5Button.TabIndex = 30;
this.md5Button.Text = "MD5";
this.md5Button.UseVisualStyleBackColor = true;
this.md5Button.Click += new System.EventHandler(this.md5Button_Click);
//
// loginBG
//
this.loginBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.loginBG_DoWork);
//
// getSecretBG
//
this.getSecretBG.DoWork += new System.ComponentModel.DoWorkEventHandler(this.getSecretBG_DoWork);
//
// verNumLabel2
//
this.verNumLabel2.BackColor = System.Drawing.Color.Transparent;
this.verNumLabel2.Location = new System.Drawing.Point(181, 61);
this.verNumLabel2.Name = "verNumLabel2";
this.verNumLabel2.Size = new System.Drawing.Size(85, 18);
this.verNumLabel2.TabIndex = 31;
this.verNumLabel2.Text = "#.#.#.#";
this.verNumLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// LoginForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(281, 235);
this.Controls.Add(this.verNumLabel2);
this.Controls.Add(this.md5Button);
this.Controls.Add(this.loginText);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.passwordLabel);
this.Controls.Add(this.emailLabel);
this.Controls.Add(this.appIdLabel);
this.Controls.Add(this.emailTextbox);
this.Controls.Add(this.passwordTextbox);
this.Controls.Add(this.loginButton);
this.Controls.Add(this.appidTextbox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "LoginForm";
this.Text = "QobuzDLX | Login";
this.Load += new System.EventHandler(this.LoginForm_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label passwordLabel;
private System.Windows.Forms.Label emailLabel;
private System.Windows.Forms.Label appIdLabel;
private System.Windows.Forms.TextBox emailTextbox;
private System.Windows.Forms.TextBox passwordTextbox;
private System.Windows.Forms.Button loginButton;
private System.Windows.Forms.TextBox appidTextbox;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label loginText;
private System.Windows.Forms.Button md5Button;
private System.ComponentModel.BackgroundWorker loginBG;
private System.ComponentModel.BackgroundWorker getSecretBG;
private System.Windows.Forms.Label verNumLabel2;
}
}

View File

@ -0,0 +1,277 @@
using QobuzDownloaderX.Properties;
using System;
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 LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private void QobuzDownloaderX_FormClosing(Object sender, FormClosingEventArgs e)
{
Application.Exit();
}
QobuzDownloaderX qbdlx = new QobuzDownloaderX();
public string appSecret { get; set; }
string errorLog = Path.GetDirectoryName(Application.ExecutablePath) + "\\Latest_Error.log";
string dllCheck = Path.GetDirectoryName(Application.ExecutablePath) + "\\taglib-sharp.dll";
private void LoginForm_Load(object sender, EventArgs e)
{
// Get and display version number.
verNumLabel2.Text = Assembly.GetExecutingAssembly().GetName().Version.ToString();
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.
appidTextbox.Text = Settings.Default.savedAppID.ToString();
emailTextbox.Text = Settings.Default.savedEmail.ToString();
passwordTextbox.Text = Settings.Default.savedPassword.ToString();
}
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 md5Button_Click(object sender, EventArgs e)
{
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 loginButton_Click(object sender, EventArgs e)
{
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.savedAppID = appidTextbox.Text;
Settings.Default.savedPassword = passwordTextbox.Text;
Settings.Default.Save();
loginText.Text = "Logging in + obtaining app_secret...";
loginBG.RunWorkerAsync();
}
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=" + appidTextbox.Text);
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;
// Set user_auth_token
qbdlx.userAuth = userAuthToken;
loginText.Invoke(new Action(() => loginText.Text = "Login Successful! Getting app_secret..."));
}
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();
return;
}
wr.Abort();
getSecretBG.RunWorkerAsync();
loginBG.CancelAsync();
}
private void getSecretBG_DoWork(object sender, DoWorkEventArgs e)
{
getSecretBG.WorkerSupportsCancellation = true;
WebClient bundleURLClient = new WebClient();
string bundleHTML = bundleURLClient.DownloadString("https://play.qobuz.com/");
// 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 "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 = "app_secret Obtained! Launching QBDLX..."));
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_secret. Error Log saved"));
System.IO.File.WriteAllText(errorLog, bundleError);
bundleWR.Abort();
return;
}
bundleWR.Abort();
finishLogin(sender, e);
getSecretBG.CancelAsync();
}
private void finishLogin(object sender, EventArgs e)
{
// If info is legit, go to the main form.
qbdlx.appid = appidTextbox.Text;
qbdlx.eMail = emailTextbox.Text;
qbdlx.password = passwordTextbox.Text;
qbdlx.appSecret = appSecret;
this.Invoke(new Action(() => this.Hide()));
Application.Run(qbdlx);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace QobuzDownloaderX
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LoginForm());
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("QobuzDownloaderX")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("AiiR")]
[assembly: AssemblyProduct("QobuzDownloaderX")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4ceb979a-035a-4d36-9607-d554bbecabe0")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.9.8.7")]
[assembly: AssemblyFileVersion("0.9.8.7")]

View File

@ -0,0 +1,83 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace QobuzDownloaderX.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QobuzDownloaderX.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap qbdlx {
get {
object obj = ResourceManager.GetObject("qbdlx", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>
internal static System.Drawing.Icon qbdlx_icon {
get {
object obj = ResourceManager.GetObject("qbdlx_icon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<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>
</data>
<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>
</data>
</root>

View File

@ -0,0 +1,386 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace QobuzDownloaderX.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string savedFolder {
get {
return ((string)(this["savedFolder"]));
}
set {
this["savedFolder"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string savedAppID {
get {
return ((string)(this["savedAppID"]));
}
set {
this["savedAppID"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string savedEmail {
get {
return ((string)(this["savedEmail"]));
}
set {
this["savedEmail"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string savedPassword {
get {
return ((string)(this["savedPassword"]));
}
set {
this["savedPassword"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string savedFormatID {
get {
return ((string)(this["savedFormatID"]));
}
set {
this["savedFormatID"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool UpgradeRequired {
get {
return ((bool)(this["UpgradeRequired"]));
}
set {
this["UpgradeRequired"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool albumTag {
get {
return ((bool)(this["albumTag"]));
}
set {
this["albumTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool artistTag {
get {
return ((bool)(this["artistTag"]));
}
set {
this["artistTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool albumArtistTag {
get {
return ((bool)(this["albumArtistTag"]));
}
set {
this["albumArtistTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool trackTag {
get {
return ((bool)(this["trackTag"]));
}
set {
this["trackTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool totalTracksTag {
get {
return ((bool)(this["totalTracksTag"]));
}
set {
this["totalTracksTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool discTag {
get {
return ((bool)(this["discTag"]));
}
set {
this["discTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool totalDiscsTag {
get {
return ((bool)(this["totalDiscsTag"]));
}
set {
this["totalDiscsTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool genreTag {
get {
return ((bool)(this["genreTag"]));
}
set {
this["genreTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool isrcTag {
get {
return ((bool)(this["isrcTag"]));
}
set {
this["isrcTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool upcTag {
get {
return ((bool)(this["upcTag"]));
}
set {
this["upcTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool copyrightTag {
get {
return ((bool)(this["copyrightTag"]));
}
set {
this["copyrightTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool yearTag {
get {
return ((bool)(this["yearTag"]));
}
set {
this["yearTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool explicitTag {
get {
return ((bool)(this["explicitTag"]));
}
set {
this["explicitTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool imageTag {
get {
return ((bool)(this["imageTag"]));
}
set {
this["imageTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool commentTag {
get {
return ((bool)(this["commentTag"]));
}
set {
this["commentTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool composerTag {
get {
return ((bool)(this["composerTag"]));
}
set {
this["composerTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool trackTitleTag {
get {
return ((bool)(this["trackTitleTag"]));
}
set {
this["trackTitleTag"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string commentText {
get {
return ((string)(this["commentText"]));
}
set {
this["commentText"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool quality1 {
get {
return ((bool)(this["quality1"]));
}
set {
this["quality1"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool quality2 {
get {
return ((bool)(this["quality2"]));
}
set {
this["quality2"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool quality3 {
get {
return ((bool)(this["quality3"]));
}
set {
this["quality3"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool quality4 {
get {
return ((bool)(this["quality4"]));
}
set {
this["quality4"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("27")]
public string qualityFormat {
get {
return ((string)(this["qualityFormat"]));
}
set {
this["qualityFormat"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(".flac")]
public string audioType {
get {
return ((string)(this["audioType"]));
}
set {
this["audioType"] = value;
}
}
}
}

View File

@ -0,0 +1,96 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="QobuzDownloaderX.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="savedFolder" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="savedAppID" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="savedEmail" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="savedPassword" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="savedFormatID" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="UpgradeRequired" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="albumTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="artistTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="albumArtistTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="trackTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="totalTracksTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="discTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="totalDiscsTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="genreTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="isrcTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="upcTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="copyrightTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="yearTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="explicitTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="imageTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="commentTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="composerTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="trackTitleTag" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="commentText" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="quality1" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="quality2" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="quality3" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="quality4" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="qualityFormat" Type="System.String" Scope="User">
<Value Profile="(Default)">27</Value>
</Setting>
<Setting Name="audioType" Type="System.String" Scope="User">
<Value Profile="(Default)">.flac</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@ -0,0 +1,159 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4CEB979A-035A-4D36-9607-D554BBECABE0}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>QobuzDownloaderX</RootNamespace>
<AssemblyName>QobuzDownloaderX</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Resources\qbdlx_icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="policy.2.0.taglib-sharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0, processorArchitecture=MSIL">
<HintPath>..\packages\taglib.2.1.0.0\lib\policy.2.0.taglib-sharp.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="taglib-sharp, Version=2.1.0.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0, processorArchitecture=MSIL">
<HintPath>..\packages\taglib.2.1.0.0\lib\taglib-sharp.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="searchForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="searchForm.Designer.cs">
<DependentUpon>searchForm.cs</DependentUpon>
</Compile>
<Compile Include="LoginForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LoginForm.Designer.cs">
<DependentUpon>LoginForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Settings.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="searchForm.resx">
<DependentUpon>searchForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LoginForm.resx">
<DependentUpon>LoginForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\qbdlx.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\qbdlx_icon.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Untitled-1.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- 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.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,28 @@
namespace QobuzDownloaderX.Properties {
// This class allows you to handle specific events on the settings class:
// The SettingChanging event is raised before a setting's value is changed.
// The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings {
public Settings() {
// // To add event handlers for saving and changing settings, uncomment the lines below:
//
// this.SettingChanging += this.SettingChangingEventHandler;
//
// this.SettingsSaving += this.SettingsSavingEventHandler;
//
}
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// Add code to handle the SettingChangingEvent event here.
}
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
// Add code to handle the SettingsSaving event here.
}
}
}

View File

@ -0,0 +1,14 @@
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\QobuzDownloaderX.exe.config
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\QobuzDownloaderX.exe
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\QobuzDownloaderX.pdb
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.csprojResolveAssemblyReference.cache
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.Properties.Resources.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.csproj.GenerateResource.Cache
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.exe
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.pdb
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.QobuzDownloaderX.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\policy.2.0.taglib-sharp.dll
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\taglib-sharp.dll
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Debug\policy.2.0.taglib-sharp.config
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.LoginForm.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Debug\QobuzDownloaderX.searchForm.resources

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\QobuzDownloaderX.exe.config
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\QobuzDownloaderX.exe
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\QobuzDownloaderX.pdb
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\policy.2.0.taglib-sharp.dll
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\taglib-sharp.dll
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\bin\Release\policy.2.0.taglib-sharp.config
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.QobuzDownloaderX.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.LoginForm.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.Properties.Resources.resources
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.csproj.GenerateResource.Cache
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.exe
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.pdb
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.csprojResolveAssemblyReference.cache
F:\Documents\- Visual Studio Projects\QobuzDownloaderX\QobuzDownloaderX\obj\Release\QobuzDownloaderX.searchForm.resources

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="taglib" version="2.1.0.0" targetFramework="net46" />
</packages>

89
QobuzDownloaderX/searchForm.Designer.cs generated Normal file
View File

@ -0,0 +1,89 @@
namespace QobuzDownloaderX
{
partial class searchForm
{
/// <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(searchForm));
this.searchInput = new System.Windows.Forms.TextBox();
this.searchButton = new System.Windows.Forms.Button();
this.resultTextbox = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// searchInput
//
this.searchInput.Location = new System.Drawing.Point(12, 14);
this.searchInput.Name = "searchInput";
this.searchInput.Size = new System.Drawing.Size(612, 20);
this.searchInput.TabIndex = 0;
this.searchInput.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInput_KeyDown);
//
// searchButton
//
this.searchButton.Location = new System.Drawing.Point(630, 12);
this.searchButton.Name = "searchButton";
this.searchButton.Size = new System.Drawing.Size(98, 23);
this.searchButton.TabIndex = 1;
this.searchButton.Text = "Search";
this.searchButton.UseVisualStyleBackColor = true;
this.searchButton.Click += new System.EventHandler(this.searchButton_Click);
//
// resultTextbox
//
this.resultTextbox.Location = new System.Drawing.Point(12, 40);
this.resultTextbox.Multiline = true;
this.resultTextbox.Name = "resultTextbox";
this.resultTextbox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.resultTextbox.Size = new System.Drawing.Size(716, 513);
this.resultTextbox.TabIndex = 2;
this.resultTextbox.WordWrap = false;
//
// searchForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(740, 565);
this.Controls.Add(this.resultTextbox);
this.Controls.Add(this.searchButton);
this.Controls.Add(this.searchInput);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "searchForm";
this.Text = "QobuzDLX | Search";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.searchForm_FormClosed);
this.Load += new System.EventHandler(this.searchForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox searchInput;
private System.Windows.Forms.Button searchButton;
private System.Windows.Forms.TextBox resultTextbox;
}
}

View File

@ -0,0 +1,99 @@
using QobuzDownloaderX.Properties;
using System;
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.Runtime.InteropServices;
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 System.Globalization;
using System.Threading;
namespace QobuzDownloaderX
{
public partial class searchForm : Form
{
public searchForm()
{
InitializeComponent();
}
public String appid { get; set; }
public String userAuth { get; set; }
static string DecodeEncodedNonAsciiCharacters(string value)
{
return Regex.Replace(
value,
@"\\u(?<Value>[a-zA-Z0-9]{4})",
m => {
return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
});
}
private void searchForm_Load(object sender, EventArgs e)
{
}
private void searchButton_Click(object sender, EventArgs e)
{
#region Do Search
WebRequest searchwr = WebRequest.Create("http://www.qobuz.com/api.json/0.2/album/search?app_id=" + appid + "&query=" + searchInput.Text + "&limit=15&user_auth_token=" + userAuth);
WebResponse searchws = searchwr.GetResponse();
StreamReader searchsr = new StreamReader(searchws.GetResponseStream());
string searchRequest = searchsr.ReadToEnd();
// Remove backslashes from the stream URL to have a proper URL.
string resultpattern = "\"maximum_sampling_rate\":(?<sampleRate>.*?),(?:.*?)\",\"id\":\"(?<albumID>.*?)\",\"maximum_bit_depth\":(?<bitDepth>.*?),(?:.*?)\"title\":\"(?<albumTitle>.*?)\",\"(?:.*?)\"artist\":(?:.*?)\"name\":\"(?<albumArtist>.*?)\"";
string resultinput = searchRequest;
RegexOptions resultoptions = RegexOptions.Multiline;
resultTextbox.Invoke(new Action(() => resultTextbox.Text = String.Empty));
foreach (Match mResult in Regex.Matches(resultinput, resultpattern, resultoptions))
{
resultTextbox.Invoke(new Action(() => resultTextbox.AppendText(string.Format("{0} - {1} [{2}bit/{3}kHz]\r\nhttps://play.qobuz.com/album/{4}\r\n\r\n", mResult.Groups["albumArtist"].Value, mResult.Groups["albumTitle"].Value, mResult.Groups["bitDepth"].Value, mResult.Groups["sampleRate"].Value, mResult.Groups["albumID"].Value))));
// For converting unicode characters to ASCII
string unicodeResult = resultTextbox.Text;
string decodedResult = DecodeEncodedNonAsciiCharacters(unicodeResult);
var fixedText = decodedResult.Replace(@"\/", "/");
resultTextbox.Invoke(new Action(() => resultTextbox.Text = fixedText));
}
#endregion
}
private void searchForm_FormClosed(object sender, FormClosedEventArgs e)
{
}
private void searchInput_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
searchButton_Click(sender, e);
e.Handled = true;
e.SuppressKeyPress = true;
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="taglib-sharp" publicKeyToken="db62eba44689b5b0" />
<bindingRedirect oldVersion="2.0.0.0-2.1.0.0" newVersion="2.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

Binary file not shown.

Binary file not shown.