Added last.fm support to scrobble data, fixes #138

This commit is contained in:
emeric
2026-06-09 22:56:59 +02:00
parent 709a1509b6
commit f8aa2ed17d
33 changed files with 1548 additions and 45 deletions
+9 -1
View File
@@ -35,7 +35,7 @@ namespace lms::db
{
namespace
{
static constexpr Version LMS_DATABASE_VERSION{ 105 };
static constexpr Version LMS_DATABASE_VERSION{ 106 };
}
VersionInfo::VersionInfo()
@@ -1729,6 +1729,13 @@ FROM track)");
utils::executeCommand(*session.getDboSession(), R"(ALTER TABLE "playlist_file" ADD COLUMN "cover_image_file" text NOT NULL DEFAULT '')");
}
void migrateFromV105(Session& session)
{
utils::executeCommand(*session.getDboSession(), R"(ALTER TABLE "user" ADD COLUMN "lastfm_api_key" TEXT NOT NULL DEFAULT '')");
utils::executeCommand(*session.getDboSession(), R"(ALTER TABLE "user" ADD COLUMN "lastfm_api_secret" TEXT NOT NULL DEFAULT '')");
utils::executeCommand(*session.getDboSession(), R"(ALTER TABLE "user" ADD COLUMN "lastfm_session_key" TEXT NOT NULL DEFAULT '')");
}
bool doDbMigration(Session& session)
{
constexpr std::string_view outdatedMsg{ "Outdated database, please rebuild it (delete the .db file and restart)" };
@@ -1810,6 +1817,7 @@ FROM track)");
{ 102, migrateFromV102 },
{ 103, migrateFromV103 },
{ 104, migrateFromV104 },
{ 105, migrateFromV105 },
};
bool migrationPerformed{};
@@ -198,6 +198,7 @@ namespace lms::db
{
Internal = 0,
ListenBrainz = 1,
LastFm = 2,
};
enum class FeedbackBackend
@@ -118,6 +118,9 @@ namespace lms::db
void setFeedbackBackend(FeedbackBackend feedbackBackend) { _feedbackBackend = feedbackBackend; }
void setScrobblingBackend(ScrobblingBackend scrobblingBackend) { _scrobblingBackend = scrobblingBackend; }
void setListenBrainzToken(std::string_view token) { _listenbrainzToken = token; }
void setLastFmApiKey(std::string_view key) { _lastFmApiKey = key; }
void setLastFmApiSecret(std::string_view secret) { _lastFmApiSecret = secret; }
void setLastFmSessionKey(std::string_view key) { _lastFmSessionKey = key; }
// read
bool isAdmin() const { return _type == UserType::ADMIN; }
@@ -134,6 +137,9 @@ namespace lms::db
FeedbackBackend getFeedbackBackend() const { return _feedbackBackend; }
ScrobblingBackend getScrobblingBackend() const { return _scrobblingBackend; }
std::string_view getListenBrainzToken() const { return _listenbrainzToken; }
std::string_view getLastFmApiKey() const { return _lastFmApiKey; }
std::string_view getLastFmApiSecret() const { return _lastFmApiSecret; }
std::string_view getLastFmSessionKey() const { return _lastFmSessionKey; }
template<class Action>
void persist(Action& a)
@@ -155,6 +161,9 @@ namespace lms::db
Wt::Dbo::field(a, _feedbackBackend, "feedback_backend");
Wt::Dbo::field(a, _scrobblingBackend, "scrobbling_backend");
Wt::Dbo::field(a, _listenbrainzToken, "listenbrainz_token");
Wt::Dbo::field(a, _lastFmApiKey, "lastfm_api_key");
Wt::Dbo::field(a, _lastFmApiSecret, "lastfm_api_secret");
Wt::Dbo::field(a, _lastFmSessionKey, "lastfm_session_key");
Wt::Dbo::hasMany(a, _authTokens, Wt::Dbo::ManyToOne, "user");
Wt::Dbo::hasMany(a, _uiStates, Wt::Dbo::ManyToOne, "user");
@@ -176,7 +185,10 @@ namespace lms::db
core::EnumSet<TrackArtistLinkType> _uiInlineArtistRelationships{ TrackArtistLinkType::Composer, TrackArtistLinkType::Performer };
FeedbackBackend _feedbackBackend{ defaultFeedbackBackend };
ScrobblingBackend _scrobblingBackend{ defaultScrobblingBackend };
std::string _listenbrainzToken; // Musicbrainz Identifier
std::string _listenbrainzToken;
std::string _lastFmApiKey;
std::string _lastFmApiSecret;
std::string _lastFmSessionKey;
// Admin defined settings
UserType _type{ UserType::REGULAR };