Browse Source

Initial last.fm functionality, basic authentication and user key fetching. API_KEY and API_SECRET must be filled out at build time

pull/52/head
Samuel Attard 7 years ago
parent
commit
df784be9fd
  1. 14
      Google Play Music/App.config
  2. 30
      Google Play Music/Google Play Music.csproj
  3. 121
      Google Play Music/LastFM.Intergration.cs
  4. 5
      Google Play Music/Program.cs
  5. 24
      Google Play Music/Properties/Settings.Designer.cs
  6. 6
      Google Play Music/Properties/Settings.settings
  7. 119
      Google Play Music/SettingsDialog.Designer.cs
  8. 74
      Google Play Music/SettingsDialog.cs
  9. 3
      Google Play Music/packages.config

14
Google Play Music/App.config

@ -34,17 +34,27 @@
<setting name="HoverControls" serializeAs="String">
<value>True</value>
</setting>
<setting name="LastFMUsername" serializeAs="String">
<value>Username</value>
</setting>
<setting name="LastFMPassword" serializeAs="String">
<value>1234567</value>
</setting>
</Google_Play_Music.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0" />
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.8.0" newVersion="2.6.8.0" />
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.29.0" newVersion="2.2.29.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

30
Google Play Music/Google Play Music.csproj

@ -138,18 +138,34 @@
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.8\lib\net40\System.IO.dll</HintPath>
<Reference Include="System.IO, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.IO.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Runtime, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.8\lib\net40\System.Runtime.dll</HintPath>
<Reference Include="System.Net.Http, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net40\System.Net.Http.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net40\System.Net.Http.Extensions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.Primitives, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net40\System.Net.Http.Primitives.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Net.Http.WebRequest, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Runtime.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Threading.Tasks, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.8\lib\net40\System.Threading.Tasks.dll</HintPath>
<Reference Include="System.Threading.Tasks, Version=2.6.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Threading.Tasks.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Extensions" />
@ -159,7 +175,6 @@
<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" />
</ItemGroup>
@ -189,6 +204,7 @@
<Compile Include="CoreMusicApp.Designer.cs">
<DependentUpon>CoreMusicApp.cs</DependentUpon>
</Compile>
<Compile Include="LastFM.Intergration.cs" />
<Compile Include="ResourceHandlerFactory.cs" />
<Compile Include="MenuHandler.cs" />
<Compile Include="globalKeyboardHook.cs" />

121
Google Play Music/LastFM.Intergration.cs

@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using LastFMAPI;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Text;
namespace Google_Play_Music
{
class LastFM
{
private string username;
private string password;
public static string user_key = null;
private const string API_KEY = "";
private const string API_SECRET = "";
public LastFM()
{
this.username = Properties.Settings.Default.LastFMUsername;
this.password = Properties.Settings.Default.LastFMPassword;
}
public LastFM(string username, string password)
{
this.username = username;
this.password = password;
}
public async Task init()
{
await attemptLogIn();
}
public async Task attemptLogIn()
{
if (username == "Username" || password == "1234567")
{
return;
}
Dictionary<String, String> attrs = new Dictionary<string, string>();
attrs["password"] = password;
attrs["username"] = username;
string api_sig = signMethod("auth.getMobileSession", attrs);
string requestURL = "https://ws.audioscrobbler.com/2.0/?method=auth.getMobileSession&username=" + username +
"&password=" + password +
"&api_key=" + API_KEY + "&api_sig=" + api_sig +
"&format=json";
string auth_response = await fetchURL(requestURL);
if (auth_response == "")
{
user_key = null;
return;
}
AuthenticationResponse auth = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<AuthenticationResponse>(auth_response);
user_key = auth.session.key;
return;
}
private async Task<string> fetchURL(string URL)
{
using (var client = new HttpClient())
{
Dictionary<string, string> values = new Dictionary<string, string>();
FormUrlEncodedContent content = new FormUrlEncodedContent(values);
try
{
HttpResponseMessage response = await client.PostAsync(URL, content);
if (response.StatusCode != HttpStatusCode.OK)
{
return "";
}
string responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
catch (Exception e)
{
return "";
}
}
}
private string signMethod(string method, Dictionary<string, string> attributes)
{
string stringToSign = "api_key" + API_KEY + "method" + method;
List<string> keys = new List<string>(attributes.Keys);
keys.Sort();
foreach (string key in keys)
{
stringToSign += key + attributes[key];
}
stringToSign += API_SECRET;
return BitConverter.ToString(((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(new UTF8Encoding().GetBytes(stringToSign))).Replace("-", string.Empty).ToLower();
}
}
}
namespace LastFMAPI
{
public class AuthenticationResponse
{
public AuthenticationSession session { get; set; }
}
public class AuthenticationSession
{
public int subscriber { get; set; }
public string name { get; set; }
public string key { get; set; }
}
}

5
Google Play Music/Program.cs

@ -1,6 +1,7 @@
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Google_Play_Music
@ -17,6 +18,10 @@ namespace Google_Play_Music
{
if (mutex.WaitOne(TimeSpan.Zero, true))
{
// Init the last.fm authentication with the user set username and password
Task lastFMInit = new LastFM().init();
lastFMInit.Wait();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new CoreMusicApp());

24
Google Play Music/Properties/Settings.Designer.cs

@ -118,5 +118,29 @@ namespace Google_Play_Music.Properties {
this["HoverControls"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Username")]
public string LastFMUsername {
get {
return ((string)(this["LastFMUsername"]));
}
set {
this["LastFMUsername"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1234567")]
public string LastFMPassword {
get {
return ((string)(this["LastFMPassword"]));
}
set {
this["LastFMPassword"] = value;
}
}
}
}

6
Google Play Music/Properties/Settings.settings

@ -26,5 +26,11 @@
<Setting Name="HoverControls" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="LastFMUsername" Type="System.String" Scope="User">
<Value Profile="(Default)">Username</Value>
</Setting>
<Setting Name="LastFMPassword" Type="System.String" Scope="User">
<Value Profile="(Default)">1234567</Value>
</Setting>
</Settings>
</SettingsFile>

119
Google Play Music/SettingsDialog.Designer.cs

@ -32,22 +32,26 @@
this.materialLabel1 = new MaterialSkin.Controls.MaterialLabel();
this.materialCheckBox1 = new MaterialSkin.Controls.MaterialCheckBox();
this.materialLabel2 = new MaterialSkin.Controls.MaterialLabel();
this.colorWheel1 = new Google_Play_Music.ColorWheel();
this.materialRaisedButton1 = new MaterialSkin.Controls.MaterialRaisedButton();
this.materialCheckBox2 = new MaterialSkin.Controls.MaterialCheckBox();
this.materialCheckBox3 = new MaterialSkin.Controls.MaterialCheckBox();
this.materialLabel3 = new MaterialSkin.Controls.MaterialLabel();
this.lastFMUsername = new MaterialSkin.Controls.MaterialSingleLineTextField();
this.lastFMPassword = new MaterialSkin.Controls.MaterialSingleLineTextField();
this.colorWheel1 = new Google_Play_Music.ColorWheel();
this.lastFMAuthIndicator = new MaterialSkin.Controls.MaterialLabel();
this.SuspendLayout();
//
// materialLabel1
//
this.materialLabel1.AutoSize = true;
this.materialLabel1.Depth = 0;
this.materialLabel1.Font = new System.Drawing.Font("Roboto", 11F);
this.materialLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.materialLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.materialLabel1.Location = new System.Drawing.Point(411, 72);
this.materialLabel1.MouseState = MaterialSkin.MouseState.HOVER;
this.materialLabel1.Name = "materialLabel1";
this.materialLabel1.Size = new System.Drawing.Size(176, 19);
this.materialLabel1.Size = new System.Drawing.Size(171, 18);
this.materialLabel1.TabIndex = 1;
this.materialLabel1.Text = "Custom Theme Highlight";
//
@ -55,7 +59,7 @@
//
this.materialCheckBox1.AutoSize = true;
this.materialCheckBox1.Depth = 0;
this.materialCheckBox1.Font = new System.Drawing.Font("Roboto", 10F);
this.materialCheckBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
this.materialCheckBox1.Location = new System.Drawing.Point(13, 97);
this.materialCheckBox1.Margin = new System.Windows.Forms.Padding(0);
this.materialCheckBox1.MouseLocation = new System.Drawing.Point(-1, -1);
@ -71,31 +75,19 @@
//
this.materialLabel2.AutoSize = true;
this.materialLabel2.Depth = 0;
this.materialLabel2.Font = new System.Drawing.Font("Roboto", 11F);
this.materialLabel2.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.materialLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.materialLabel2.Location = new System.Drawing.Point(12, 71);
this.materialLabel2.MouseState = MaterialSkin.MouseState.HOVER;
this.materialLabel2.Name = "materialLabel2";
this.materialLabel2.Size = new System.Drawing.Size(119, 19);
this.materialLabel2.Size = new System.Drawing.Size(117, 18);
this.materialLabel2.TabIndex = 3;
this.materialLabel2.Text = "General Settings";
//
// colorWheel1
//
this.colorWheel1.Hue = ((byte)(0));
this.colorWheel1.Lightness = ((byte)(0));
this.colorWheel1.Location = new System.Drawing.Point(405, 97);
this.colorWheel1.Name = "colorWheel1";
this.colorWheel1.Saturation = ((byte)(0));
this.colorWheel1.SecondaryHues = null;
this.colorWheel1.Size = new System.Drawing.Size(183, 191);
this.colorWheel1.TabIndex = 0;
this.colorWheel1.Text = "colorWheel1";
//
// materialRaisedButton1
//
this.materialRaisedButton1.Depth = 0;
this.materialRaisedButton1.Location = new System.Drawing.Point(15, 250);
this.materialRaisedButton1.Location = new System.Drawing.Point(13, 350);
this.materialRaisedButton1.MouseState = MaterialSkin.MouseState.HOVER;
this.materialRaisedButton1.Name = "materialRaisedButton1";
this.materialRaisedButton1.Primary = true;
@ -108,7 +100,7 @@
//
this.materialCheckBox2.AutoSize = true;
this.materialCheckBox2.Depth = 0;
this.materialCheckBox2.Font = new System.Drawing.Font("Roboto", 10F);
this.materialCheckBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
this.materialCheckBox2.Location = new System.Drawing.Point(13, 137);
this.materialCheckBox2.Margin = new System.Windows.Forms.Padding(0);
this.materialCheckBox2.MouseLocation = new System.Drawing.Point(-1, -1);
@ -124,7 +116,7 @@
//
this.materialCheckBox3.AutoSize = true;
this.materialCheckBox3.Depth = 0;
this.materialCheckBox3.Font = new System.Drawing.Font("Roboto", 10F);
this.materialCheckBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
this.materialCheckBox3.Location = new System.Drawing.Point(13, 177);
this.materialCheckBox3.Margin = new System.Windows.Forms.Padding(0);
this.materialCheckBox3.MouseLocation = new System.Drawing.Point(-1, -1);
@ -136,11 +128,90 @@
this.materialCheckBox3.Text = "Controls Always Visible in Mini Player";
this.materialCheckBox3.UseVisualStyleBackColor = true;
//
// materialLabel3
//
this.materialLabel3.AutoSize = true;
this.materialLabel3.Depth = 0;
this.materialLabel3.Font = new System.Drawing.Font("Microsoft Sans Serif", 11F);
this.materialLabel3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
this.materialLabel3.Location = new System.Drawing.Point(12, 248);
this.materialLabel3.MouseState = MaterialSkin.MouseState.HOVER;
this.materialLabel3.Name = "materialLabel3";
this.materialLabel3.Size = new System.Drawing.Size(115, 18);
this.materialLabel3.TabIndex = 7;
this.materialLabel3.Text = "Last.fm Account";
//
// lastFMUsername
//
this.lastFMUsername.Depth = 0;
this.lastFMUsername.Hint = "";
this.lastFMUsername.Location = new System.Drawing.Point(12, 270);
this.lastFMUsername.MaxLength = 32767;
this.lastFMUsername.MouseState = MaterialSkin.MouseState.HOVER;
this.lastFMUsername.Name = "lastFMUsername";
this.lastFMUsername.PasswordChar = '\0';
this.lastFMUsername.SelectedText = "";
this.lastFMUsername.SelectionLength = 0;
this.lastFMUsername.SelectionStart = 0;
this.lastFMUsername.Size = new System.Drawing.Size(283, 23);
this.lastFMUsername.TabIndex = 8;
this.lastFMUsername.TabStop = false;
this.lastFMUsername.Text = "Username";
this.lastFMUsername.UseSystemPasswordChar = false;
//
// lastFMPassword
//
this.lastFMPassword.Depth = 0;
this.lastFMPassword.Hint = "";
this.lastFMPassword.Location = new System.Drawing.Point(12, 299);
this.lastFMPassword.MaxLength = 32767;
this.lastFMPassword.MouseState = MaterialSkin.MouseState.HOVER;
this.lastFMPassword.Name = "lastFMPassword";
this.lastFMPassword.Padding = new System.Windows.Forms.Padding(20, 0, 0, 0);
this.lastFMPassword.PasswordChar = '\0';
this.lastFMPassword.SelectedText = "";
this.lastFMPassword.SelectionLength = 0;
this.lastFMPassword.SelectionStart = 0;
this.lastFMPassword.Size = new System.Drawing.Size(283, 23);
this.lastFMPassword.TabIndex = 9;
this.lastFMPassword.TabStop = false;
this.lastFMPassword.Text = "1234567";
this.lastFMPassword.UseSystemPasswordChar = true;
//
// colorWheel1
//
this.colorWheel1.Hue = ((byte)(0));
this.colorWheel1.Lightness = ((byte)(0));
this.colorWheel1.Location = new System.Drawing.Point(405, 97);
this.colorWheel1.Name = "colorWheel1";
this.colorWheel1.Saturation = ((byte)(0));
this.colorWheel1.SecondaryHues = null;
this.colorWheel1.Size = new System.Drawing.Size(183, 191);
this.colorWheel1.TabIndex = 0;
this.colorWheel1.Text = "colorWheel1";
//
// lastFMAuthIndicator
//
this.lastFMAuthIndicator.AutoSize = true;
this.lastFMAuthIndicator.Depth = 0;
this.lastFMAuthIndicator.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
this.lastFMAuthIndicator.ForeColor = System.Drawing.Color.Red;
this.lastFMAuthIndicator.Location = new System.Drawing.Point(29, 325);
this.lastFMAuthIndicator.MouseState = MaterialSkin.MouseState.HOVER;
this.lastFMAuthIndicator.Name = "lastFMAuthIndicator";
this.lastFMAuthIndicator.Size = new System.Drawing.Size(93, 13);
this.lastFMAuthIndicator.TabIndex = 10;
this.lastFMAuthIndicator.Text = "Not Authenticated";
//
// SettingsDialog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(600, 300);
this.ClientSize = new System.Drawing.Size(600, 400);
this.Controls.Add(this.lastFMAuthIndicator);
this.Controls.Add(this.lastFMPassword);
this.Controls.Add(this.lastFMUsername);
this.Controls.Add(this.materialLabel3);
this.Controls.Add(this.materialCheckBox3);
this.Controls.Add(this.materialCheckBox2);
this.Controls.Add(this.materialRaisedButton1);
@ -167,5 +238,9 @@
private MaterialSkin.Controls.MaterialRaisedButton materialRaisedButton1;
private MaterialSkin.Controls.MaterialCheckBox materialCheckBox2;
private MaterialSkin.Controls.MaterialCheckBox materialCheckBox3;
private MaterialSkin.Controls.MaterialLabel materialLabel3;
private MaterialSkin.Controls.MaterialSingleLineTextField lastFMUsername;
private MaterialSkin.Controls.MaterialSingleLineTextField lastFMPassword;
private MaterialSkin.Controls.MaterialLabel lastFMAuthIndicator;
}
}

74
Google Play Music/SettingsDialog.cs

@ -82,6 +82,59 @@ namespace Google_Play_Music
DialogResult = DialogResult.Abort;
Close();
};
lastFMUsername.Text = Properties.Settings.Default.LastFMUsername;
lastFMUsername.GotFocus += (res, send) =>
{
focusDefaultInputField(lastFMUsername, "Username", true);
};
lastFMUsername.LostFocus += async (res, send) =>
{
focusDefaultInputField(lastFMUsername, "Username", false);
Properties.Settings.Default.LastFMUsername = lastFMUsername.Text;
lastFMAuth(-1);
await new LastFM().init();
lastFMAuth((LastFM.user_key != null ? 1 : 0));
};
lastFMUsername.KeyPress += (send, e) =>
{
if (e.KeyChar == (char)13)
{
lastFMPassword.Focus();
}
};
lastFMPassword.Text = Properties.Settings.Default.LastFMPassword;
lastFMPassword.GotFocus += (res, send) =>
{
focusDefaultInputField(lastFMPassword, "1234567", true);
};
lastFMPassword.LostFocus += async (res, send) =>
{
focusDefaultInputField(lastFMPassword, "1234567", false);
Properties.Settings.Default.LastFMPassword = lastFMPassword.Text;
lastFMAuth(-1);
await new LastFM().init();
lastFMAuth((LastFM.user_key != null ? 1 : 0));
};
lastFMPassword.KeyPress += (send, e) =>
{
if (e.KeyChar == (char)13)
{
lastFMUsername.Focus();
}
};
}
private void focusDefaultInputField(MaterialSingleLineTextField field, string defaultText, bool focus)
{
if (field.Text == defaultText && focus)
{
field.Text = "";
} else if (field.Text == "" && !focus)
{
field.Text = defaultText;
}
}
private void Color_Changed(object sender, EventArgs e)
@ -99,10 +152,31 @@ namespace Google_Play_Music
{
Activated += (res, send) =>
{
lastFMAuth((LastFM.user_key != null ? 1 : 0));
Location = new Point(X - 300, Y - 125);
};
var result = ShowDialog();
return result;
}
private void lastFMAuth(int isAuth)
{
// 1 = Auth Success
// 0 = Auth Failure
// -1 = Auth in Progress
if (isAuth == 1)
{
lastFMAuthIndicator.ForeColor = Color.Green;
lastFMAuthIndicator.Text = "Login Successful";
} else if (isAuth == 0)
{
lastFMAuthIndicator.ForeColor = Color.Red;
lastFMAuthIndicator.Text = "Login Failed";
} else if (isAuth == -1)
{
lastFMAuthIndicator.ForeColor = Color.Yellow;
lastFMAuthIndicator.Text = "Logging in...";
}
}
}
}

3
Google Play Music/packages.config

@ -4,9 +4,10 @@
<package id="cef.redist.x86" version="3.2357.1287" targetFramework="net4" />
<package id="CefSharp.Common" version="43.0.0" targetFramework="net4" />
<package id="CefSharp.WinForms" version="43.0.0" targetFramework="net4" />
<package id="Microsoft.Bcl" version="1.1.8" targetFramework="net4" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net4" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net4" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net4" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net4" />
<package id="Microsoft.WindowsAPICodePack-Core" version="1.1.0.2" targetFramework="net4" />
<package id="Microsoft.WindowsAPICodePack-Shell" version="1.1.0.0" targetFramework="net4" />
<package id="WindowsAPICodePack-Core" version="1.1.1" targetFramework="net4" />

Loading…
Cancel
Save