diff --git a/WinPlaza/MainWindow.xaml b/WinPlaza/MainWindow.xaml
index 7c37e1f..8215870 100644
--- a/WinPlaza/MainWindow.xaml
+++ b/WinPlaza/MainWindow.xaml
@@ -32,8 +32,8 @@
-
-
+
+
@@ -54,6 +54,7 @@
+
diff --git a/WinPlaza/MainWindow.xaml.cs b/WinPlaza/MainWindow.xaml.cs
index 1ea3ad4..ab1eeb7 100644
--- a/WinPlaza/MainWindow.xaml.cs
+++ b/WinPlaza/MainWindow.xaml.cs
@@ -23,7 +23,6 @@ namespace WinPlaza {
private Timer tGfx;
private Timer tLogon;
private bool AudioInit=false;
- private bool LikedCTrack=false;
#endregion
#region Delegates
private delegate void dgtNoParam();
@@ -54,6 +53,8 @@ namespace WinPlaza {
btLogin.Visibility = Visibility.Hidden;
imLogin.IsEnabled = false;
imLogin.Visibility = Visibility.Hidden;
+ btDislike.IsEnabled = true;
+ btLike.IsEnabled = true;
SetStatus($"Logged in as {await plaza.GetUser()}");
}
private async void DgtRefresh(bool Force = false) {
@@ -75,6 +76,22 @@ namespace WinPlaza {
lbDislikeCt.Content = s.Dislikes;
lbElapsed.Content = $"{(s.CalculatedElapsed / 60).ToString("D")}:{(s.CalculatedElapsed % 60).ToString("D2")}";
if(LastArtwork != s.ArtworkUri || Force) {
+ Nightwave.Vote v = await plaza.GetVote() ?? Nightwave.Vote.Neutral;
+ switch(v) {
+ case Nightwave.Vote.Dislike:
+ sbVote.Text = "👎";
+ break;
+ case Nightwave.Vote.Like:
+ sbVote.Text = "👍";
+ break;
+ case Nightwave.Vote.Favourite:
+ sbVote.Text = "💖";
+ break;
+ default:
+ sbVote.Text = "🤷♀️";
+ break;
+ }
+ //TODO visual effect on the like/dislike buttons to indicate user's vote
lbArtist.Content = s.Artist;
lbTitle.Content = s.Title;
lbAlbum.Content = s.Album;
@@ -83,12 +100,10 @@ namespace WinPlaza {
slDuration.Maximum = s.Duration;
lbTime.Content = $"{(s.Duration / 60).ToString("D")}:{(s.Duration % 60).ToString("D2")}";
if(LastArtwork != s.ArtworkUri) {
- if(btPlayPause.IsChecked == true)
- SetStatus("Playing");
- LikedCTrack = false;
art.Source = new BitmapImage(new Uri(s.ArtworkUri));
LastArtwork = s.ArtworkUri;
}
+ SetStatus("");
}
}
private void DgtAudio() {
@@ -228,16 +243,21 @@ namespace WinPlaza {
btLogin.Visibility = Visibility.Hidden;
imLogin.IsEnabled = false;
imLogin.Visibility = Visibility.Hidden;
+ btDislike.IsEnabled = true;
+ btLike.IsEnabled = true;
SetStatus($"Logged in as {await plaza.GetUser()}");
}
private async void BtLike_Click(object sender, RoutedEventArgs e) {
_ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLike);
- Nightwave.Vote v = Nightwave.Vote.Like;
- if(LikedCTrack)
+ Nightwave.Vote v = await plaza.GetVote() ?? Nightwave.Vote.Neutral;
+ if(v == Nightwave.Vote.Like)
v = Nightwave.Vote.Favourite;
+ else if(v == Nightwave.Vote.Favourite)
+ v = Nightwave.Vote.Neutral;
+ else
+ v = Nightwave.Vote.Like;
if(await plaza.CastVote(v)) {
SetStatus($"Submitted {v}!");
- LikedCTrack = !LikedCTrack;
} else
SetStatus($"Something went weird while casting {v}");
_ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btLike);
@@ -245,12 +265,14 @@ namespace WinPlaza {
}
private async void BtDislike_Click(object sender, RoutedEventArgs e) {
_ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btDislike);
- if(await plaza.CastVote(Nightwave.Vote.Dislike))
- SetStatus("Song disliked!");
+ Nightwave.Vote v = Nightwave.Vote.Dislike;
+ if(await plaza.GetVote() == Nightwave.Vote.Dislike)
+ v = Nightwave.Vote.Neutral;
+ if(await plaza.CastVote(v))
+ SetStatus($"Submitted {v}!");
else
- SetStatus("Something went weird while disliking");
+ SetStatus($"Something went weird while casting {v}");
_ = Dispatcher.BeginInvoke(new dgtCtrl(DgtToggleEnabled), btDislike);
- LikedCTrack = false;
_ = Dispatcher.BeginInvoke(new dgtBool(DgtRefresh), true);
}
private void SbOnTop_Click(object sender, RoutedEventArgs e) {
diff --git a/WinPlaza/WinPlaza.csproj b/WinPlaza/WinPlaza.csproj
index 06b08ad..edfd9a4 100644
--- a/WinPlaza/WinPlaza.csproj
+++ b/WinPlaza/WinPlaza.csproj
@@ -31,8 +31,8 @@
true
index.html
false
- 4
- 1.5.0.%2a
+ 1
+ 1.6.0.%2a
false
true
true
@@ -73,7 +73,7 @@
true
- false
+ true
WinPlaza.App
diff --git a/libplaza/Main.cs b/libplaza/Main.cs
index f895cb2..fd87b6d 100644
--- a/libplaza/Main.cs
+++ b/libplaza/Main.cs
@@ -16,7 +16,6 @@ namespace libplaza {
public string album;
public int length;
public int position;
- public long updated;
public string artwork;
public string artwork_s;
public int likes;
@@ -25,6 +24,7 @@ namespace libplaza {
public class PlazaJson {
public bool maintenance;
public int listeners;
+ public long updated_at;
[JsonProperty]
public PlazaPlayback playback;
}
@@ -39,6 +39,9 @@ namespace libplaza {
public string status;
public int[] ratings;
}
+ public class PlazaGetVote {
+ public int rate;
+ }
public class PlazaLogonResult {
public string status;
public string username;
@@ -102,7 +105,6 @@ namespace libplaza {
_bc.FaultOccurred = true;
}
}
- public async void EvtUpdate() => await Update();
public async Task GetNightwaveAsync() {
Status status;
HttpResponseMessage _r=await _hcl.GetAsync("/status");
@@ -118,7 +120,7 @@ namespace libplaza {
Artist = j.playback.artist,
Elapsed = j.playback.position,
Duration = j.playback.length,
- Since = j.playback.updated,
+ Since = j.updated_at,
Likes = j.playback.likes,
Dislikes = j.playback.hates,
Listeners = j.listeners,
@@ -127,6 +129,15 @@ namespace libplaza {
};
return status;
}
+ public async Task GetVote() {
+ if(!await CheckSession())
+ return null;
+ HttpResponseMessage _r=await _hcl.GetAsync("/vote");
+ if(!_r.IsSuccessStatusCode)
+ return null;
+ PlazaGetVote r=JsonConvert.DeserializeObject(await _r.Content.ReadAsStringAsync());
+ return (Vote)r.rate;
+ }
public async Task CastVote(Vote v) {
if(!await CheckSession())
return false;