Skip to content

Commit

Permalink
- Added current track duration to the progress bar.
Browse files Browse the repository at this point in the history
- Added code to cancel Last.fm profile link.
  • Loading branch information
dumbie committed Jan 25, 2022
1 parent 25b8fcd commit 8226968
Show file tree
Hide file tree
Showing 13 changed files with 382 additions and 303 deletions.
38 changes: 30 additions & 8 deletions ZuseMe-Groove/ZuseMe/Api/ApiAuth.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,39 @@ public static async Task AuthLinkLogin()
ConfigurationManager.RefreshSection("appSettings");
}

//Update interface
AppVariables.WindowMain.button_LinkLastFM.Content = "Cancel Last.fm link";
AppVariables.WindowMain.button_UnlinkLastFM.IsEnabled = false;
AppVariables.WindowMain.progress_LoginStatus.Visibility = Visibility.Visible;
AppVariables.WindowMain.textblock_LoginStatus.Visibility = Visibility.Visible;

//Continue in browser
Process.Start(ApiVariables.UrlLogin + "?api_key=" + ApiVariables.KeyPublic + "&token=" + loginToken.token);

//Start task to check login
TaskStartLoop(AuthLoginCheckLoop, AppTasks.vTask_LoginCheck);
}
catch { }
}

public static async Task AuthCancelLogin()
{
try
{
//Reset current auth
AuthUnlinkLogin();

//Update interface
AppVariables.WindowMain.progress_LoginStatus.Visibility = Visibility.Visible;
AppVariables.WindowMain.textblock_LoginStatus.Visibility = Visibility.Visible;
AppVariables.WindowMain.button_LinkLastFM.IsEnabled = false;
AppVariables.WindowMain.button_UnlinkLastFM.IsEnabled = false;
AVActions.ActionDispatcherInvoke(delegate
{
AppVariables.WindowMain.button_LinkLastFM.Content = "Link my Last.fm profile";
AppVariables.WindowMain.button_UnlinkLastFM.IsEnabled = true;
AppVariables.WindowMain.progress_LoginStatus.Visibility = Visibility.Collapsed;
AppVariables.WindowMain.textblock_LoginStatus.Visibility = Visibility.Collapsed;
});

//Stop the task loop
await TaskStopLoop(AppTasks.vTask_LoginCheck);
}
catch { }
}
Expand Down Expand Up @@ -96,10 +118,10 @@ private static async Task AuthLoginCheckLoop()
AVActions.ActionDispatcherInvoke(delegate
{
AppVariables.WindowMain.UpdateLastFMUsername();
AppVariables.WindowMain.button_LinkLastFM.Content = "Link my Last.fm profile";
AppVariables.WindowMain.button_UnlinkLastFM.IsEnabled = true;
AppVariables.WindowMain.progress_LoginStatus.Visibility = Visibility.Collapsed;
AppVariables.WindowMain.textblock_LoginStatus.Visibility = Visibility.Collapsed;
AppVariables.WindowMain.button_LinkLastFM.IsEnabled = true;
AppVariables.WindowMain.button_UnlinkLastFM.IsEnabled = true;
});

//Stop the task loop
Expand Down Expand Up @@ -136,7 +158,7 @@ private static async Task<AuthToken> AuthGetAuthToken()

//Download token
Uri apiUrl = new Uri(ApiVariables.UrlApi + urlParameter);
string apiResult = await AVDownloader.DownloadStringAsync(2000, "ZuseMe", null, apiUrl);
string apiResult = await AVDownloader.DownloadStringAsync(2500, "ZuseMe", null, apiUrl);

//Extract token
JsonSerializerSettings jsonSettings = new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Error };
Expand Down Expand Up @@ -175,7 +197,7 @@ private static async Task<SessionToken> AuthGetSessionToken()

//Download token
Uri apiUrl = new Uri(ApiVariables.UrlApi + urlParameter);
string apiResult = await AVDownloader.DownloadStringAsync(2000, "ZuseMe", null, apiUrl);
string apiResult = await AVDownloader.DownloadStringAsync(2500, "ZuseMe", null, apiUrl);

//Extract token
JsonSerializerSettings jsonSettings = new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Error };
Expand Down
26 changes: 14 additions & 12 deletions ZuseMe-Groove/ZuseMe/Api/ApiScrobble.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace ZuseMe.Api
{
public class ApiScrobble
{
public static async Task ScrobbleTrack(string artist, string title, string album, string duration)
public static async Task ScrobbleTrack(string artist, string title, string album, string duration, string trackNumber)
{
try
{
Expand All @@ -27,10 +27,11 @@ public static async Task ScrobbleTrack(string artist, string title, string album
requestParameters.Add("api_key", ApiVariables.KeyPublic);
requestParameters.Add("sk", sessionToken);

if (!string.IsNullOrWhiteSpace(artist) && album != "Unknown") { requestParameters.Add("artist", artist); }
if (!string.IsNullOrWhiteSpace(title) && album != "Unknown") { requestParameters.Add("track", title); }
if (!string.IsNullOrWhiteSpace(artist) && artist != "Unknown") { requestParameters.Add("artist", artist); }
if (!string.IsNullOrWhiteSpace(title) && title != "Unknown") { requestParameters.Add("track", title); }
if (!string.IsNullOrWhiteSpace(album) && album != "Unknown") { requestParameters.Add("album", album); }
requestParameters.Add("duration", duration);
if (!string.IsNullOrWhiteSpace(duration) && duration != "0") { requestParameters.Add("duration", duration); }
if (!string.IsNullOrWhiteSpace(trackNumber) && trackNumber != "0") { requestParameters.Add("trackNumber", trackNumber); }
requestParameters.Add("timestamp", ApiFunctions.UnixTimeFromDateTime(DateTime.Now));

//Generate api signature
Expand All @@ -44,13 +45,13 @@ public static async Task ScrobbleTrack(string artist, string title, string album

//Post parameters
Uri apiUrl = new Uri(ApiVariables.UrlApi);
string apiResult = await AVDownloader.SendPostRequestAsync(2000, "ZuseMe", null, apiUrl, postContent);
string apiResult = await AVDownloader.SendPostRequestAsync(2500, "ZuseMe", null, apiUrl, postContent);
Debug.WriteLine(apiResult);
}
catch { }
}

public static async Task UpdateNowPlaying(string artist, string title, string album, string duration)
public static async Task UpdateNowPlaying(string artist, string title, string album, string duration, string trackNumber)
{
try
{
Expand All @@ -67,10 +68,11 @@ public static async Task UpdateNowPlaying(string artist, string title, string al
requestParameters.Add("api_key", ApiVariables.KeyPublic);
requestParameters.Add("sk", sessionToken);

requestParameters.Add("artist", artist);
requestParameters.Add("track", title);
requestParameters.Add("album", album);
requestParameters.Add("duration", duration);
if (!string.IsNullOrWhiteSpace(artist) && artist != "Unknown") { requestParameters.Add("artist", artist); }
if (!string.IsNullOrWhiteSpace(title) && title != "Unknown") { requestParameters.Add("track", title); }
if (!string.IsNullOrWhiteSpace(album) && album != "Unknown") { requestParameters.Add("album", album); }
if (!string.IsNullOrWhiteSpace(duration) && duration != "0") { requestParameters.Add("duration", duration); }
if (!string.IsNullOrWhiteSpace(trackNumber) && trackNumber != "0") { requestParameters.Add("trackNumber", trackNumber); }

//Generate api signature
string apiSignature = ApiFunctions.GenerateApiSignature(requestParameters);
Expand All @@ -83,7 +85,7 @@ public static async Task UpdateNowPlaying(string artist, string title, string al

//Post parameters
Uri apiUrl = new Uri(ApiVariables.UrlApi);
string apiResult = await AVDownloader.SendPostRequestAsync(2000, "ZuseMe", null, apiUrl, postContent);
string apiResult = await AVDownloader.SendPostRequestAsync(2500, "ZuseMe", null, apiUrl, postContent);
Debug.WriteLine(apiResult);
}
catch { }
Expand Down Expand Up @@ -117,7 +119,7 @@ public static async Task RemoveNowPlaying()

//Post parameters
Uri apiUrl = new Uri(ApiVariables.UrlApi);
string apiResult = await AVDownloader.SendPostRequestAsync(2000, "ZuseMe", null, apiUrl, postContent);
string apiResult = await AVDownloader.SendPostRequestAsync(2500, "ZuseMe", null, apiUrl, postContent);
Debug.WriteLine(apiResult);
}
catch { }
Expand Down
13 changes: 3 additions & 10 deletions ZuseMe-Groove/ZuseMe/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@
using System;
using System.Configuration;
using System.Windows;
using ZuseMe.Api;

namespace ZuseMe
{
public partial class App : Application
{
//Application Startup
protected override async void OnStartup(StartupEventArgs e)
protected override void OnStartup(StartupEventArgs e)
{
try
{
Expand All @@ -19,14 +18,8 @@ protected override async void OnStartup(StartupEventArgs e)
//Create tray menu
AppTray TrayMenu = new AppTray();

//Remove current scrobble
await ApiScrobble.RemoveNowPlaying();

//Register media session events
await MediaInformation.RegisterMediaSessionManager();

//Start scrobble monitor task
AVActions.TaskStartLoop(MediaScrobble.MediaScrobbleLoop, AppTasks.vTask_MonitorScrobble);
//Start monitor media task
AVActions.TaskStartLoop(MediaInformation.MediaInformationLoop, AppTasks.vTask_MonitorMedia);

//Check api login
if (Convert.ToString(ConfigurationManager.AppSettings["LastFMSessionToken"]) == string.Empty)
Expand Down
2 changes: 1 addition & 1 deletion ZuseMe-Groove/ZuseMe/AppTasks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace ZuseMe
public class AppTasks
{
//Application Tasks
public static AVTaskDetails vTask_MonitorScrobble = new AVTaskDetails();
public static AVTaskDetails vTask_MonitorMedia = new AVTaskDetails();
public static AVTaskDetails vTask_LoginCheck = new AVTaskDetails();
}
}
3 changes: 2 additions & 1 deletion ZuseMe-Groove/ZuseMe/AppTray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public AppTray()

//Create tray icon
sysTrayIcon = new NotifyIcon();
sysTrayIcon.Text = "ZuseMe";
sysTrayIcon.Text = "ZuseMe (Last.fm client)";
sysTrayIcon.Icon = new Icon(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ZuseMe.Assets.ZuseMe.ico"));

//Add menu to tray icon
Expand All @@ -37,6 +37,7 @@ public AppTray()
}
catch { }
}

private void OnShow(object sender, EventArgs e)
{
try
Expand Down
13 changes: 8 additions & 5 deletions ZuseMe-Groove/ZuseMe/AppVariables.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,22 @@ public static class AppVariables
//Application Windows
public static MainWindow WindowMain = new MainWindow();

//Media Variables
//Player Variables
//MSEdge
//foobar2000.exe (foo_mediacontrol)
//SpotifyAB.SpotifyMusic_zpdnekdrzrea0 / Spotify.exe
public static string[] MediaPlayers = { "Microsoft.ZuneMusic_8wekyb3d8bbwe", "foobar2000.exe", "Spotify.exe" };
public static string[] MediaPlayers = { "Microsoft.ZuneMusic_8wekyb3d8bbwe", "foobar2000.exe", "Spotify.exe", "MSEdge" };

//Media Variables
public static MediaPlaybackType? MediaPlaybackType = null;
public static GlobalSystemMediaTransportControlsSessionPlaybackStatus? MediaPlaybackStatus = null;

public static bool MediaScrobbled = false;
public static int MediaSecondsCurrent = 0;
public static int MediaSecondsTotal = 60;
public static bool ScrobbleRemoved = false;
public static bool ScrobbleSubmitted = false;
public static int ScrobbleSecondsCurrent = 0;

public static int MediaSecondsTotalOriginal = 0;
public static int MediaSecondsTotalCustom = 60;
public static int MediaTracknumber = 0;
public static string MediaArtist = string.Empty;
public static string MediaAlbum = string.Empty;
Expand Down
Binary file modified ZuseMe-Groove/ZuseMe/Assets/Scrobble.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8226968

Please sign in to comment.