Adding support for partial dates (only year or month), fixes #477

This commit is contained in:
emeric
2025-01-19 23:50:39 +01:00
parent c73ff7dc03
commit 33759def78
27 changed files with 594 additions and 170 deletions
@@ -25,6 +25,7 @@
#include "database/Release.hpp"
#include "database/Session.hpp"
#include "database/Track.hpp"
#include "database/Types.hpp"
#include "database/User.hpp"
#include "services/feedback/IFeedbackService.hpp"
#include "services/scrobbling/IScrobblingService.hpp"
@@ -106,7 +107,7 @@ namespace lms::api::subsonic
Release::FindParameters params;
params.setSortMethod(fromYear > toYear ? ReleaseSortMethod::DateDesc : ReleaseSortMethod::DateAsc);
params.setRange(range);
params.setDateRange(DateRange::fromYearRange(std::min(fromYear, toYear), std::max(fromYear, toYear)));
params.setDateRange(YearRange{ std::min(fromYear, toYear), std::max(fromYear, toYear) });
params.setMediaLibrary(mediaLibraryId);
releases = Release::findIds(context.dbSession, params);
+1 -1
View File
@@ -204,7 +204,7 @@ namespace lms::api::subsonic
albumNode.createEmptyArrayChild("artists");
albumNode.setAttribute("displayArtist", "");
}
albumNode.addChild("originalReleaseDate", createItemDateNode(release->getOriginalDate(), release->getOriginalYear()));
albumNode.addChild("originalReleaseDate", createItemDateNode(release->getOriginalDate()));
albumNode.setAttribute("isCompilation", release->isCompilation());
+6 -10
View File
@@ -23,20 +23,16 @@
namespace lms::api::subsonic
{
Response::Node createItemDateNode(const Wt::WDate& date, std::optional<int> year)
Response::Node createItemDateNode(const core::PartialDateTime& date)
{
Response::Node itemDateNode;
if (date.isValid())
{
itemDateNode.setAttribute("year", date.year());
itemDateNode.setAttribute("month", date.month());
itemDateNode.setAttribute("day", date.day());
}
else if (year)
{
if (auto year{ date.getYear() })
itemDateNode.setAttribute("year", *year);
}
if (auto month{ date.getMonth() })
itemDateNode.setAttribute("month", *month);
if (auto day{ date.getDay() })
itemDateNode.setAttribute("day", *day);
return itemDateNode;
}
@@ -19,11 +19,11 @@
#pragma once
#include <Wt/WDate.h>
#include "core/PartialDateTime.hpp"
#include "SubsonicResponse.hpp"
namespace lms::api::subsonic
{
Response::Node createItemDateNode(const Wt::WDate& date, std::optional<int> year);
Response::Node createItemDateNode(const core::PartialDateTime& date);
}