diff --git a/approot/artists.xml b/approot/artists.xml
index 23425af9..0b467c46 100644
--- a/approot/artists.xml
+++ b/approot/artists.xml
@@ -8,6 +8,11 @@
${most-played-artists}
+
+ ${recently-played-artists}
+
diff --git a/approot/messages.xml b/approot/messages.xml
index e50b99e3..467646ca 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -57,9 +57,11 @@
Add filter
Artists
Most played artists
-Most played releases
+Most played albums
Recently added artists
-Recently added releases
+Recently added albums
+Recently played artists
+Recently played albums
Albums
Search...
Show more
diff --git a/approot/releases.xml b/approot/releases.xml
index 92cf00ce..5bf6e950 100644
--- a/approot/releases.xml
+++ b/approot/releases.xml
@@ -8,6 +8,11 @@
${most-played-releases}
+
+ ${recently-played-releases}
+
diff --git a/src/database/TrackStats.cpp b/src/database/TrackStats.cpp
index c8844503..944ac7a2 100644
--- a/src/database/TrackStats.cpp
+++ b/src/database/TrackStats.cpp
@@ -44,6 +44,19 @@ TrackStats::getMostPlayedArtists(Wt::Dbo::Session& session, User::pointer user,
return std::vector(res.begin(), res.end());
}
+std::vector
+TrackStats::getLastPlayedArtists(Wt::Dbo::Session& session, User::pointer user, int limit)
+{
+ Wt::Dbo::collection res = session.query
+ ("SELECT a FROM artist a INNER JOIN track t ON a.id = t.artist_id INNER JOIN track_stats t_s ON t.id = t_s.track_id")
+ .where("t_s.user_id = ?").bind(user.id())
+ .groupBy("a.id")
+ .orderBy("t_s.last_played DESC")
+ .limit(limit);
+
+ return std::vector(res.begin(), res.end());
+}
+
std::vector
TrackStats::getMostPlayedReleases(Wt::Dbo::Session& session, User::pointer user, int limit)
{
@@ -57,6 +70,19 @@ TrackStats::getMostPlayedReleases(Wt::Dbo::Session& session, User::pointer user,
return std::vector(res.begin(), res.end());
}
+std::vector
+TrackStats::getLastPlayedReleases(Wt::Dbo::Session& session, User::pointer user, int limit)
+{
+ Wt::Dbo::collection res = session.query
+ ("SELECT r FROM release r INNER JOIN track t ON r.id = t.release_id INNER JOIN track_stats t_s ON t.id = t_s.track_id")
+ .where("t_s.user_id = ?").bind(user.id())
+ .groupBy("r.id")
+ .orderBy("t_s.last_played DESC")
+ .limit(limit);
+
+ return std::vector(res.begin(), res.end());
+}
+
TrackStats::pointer
TrackStats::get(Wt::Dbo::Session& session, Track::pointer track, User::pointer user)
{
diff --git a/src/database/TrackStats.hpp b/src/database/TrackStats.hpp
index c599abc8..6c4d66d6 100644
--- a/src/database/TrackStats.hpp
+++ b/src/database/TrackStats.hpp
@@ -20,6 +20,7 @@
#pragma once
#include
+#include
#include
@@ -41,17 +42,22 @@ class TrackStats
TrackStats(Wt::Dbo::ptr