Added relative file path+file size in DB

This commit is contained in:
emeric
2024-04-14 09:37:24 +02:00
parent be600b5e13
commit b23f38facf
28 changed files with 346 additions and 302 deletions
+6 -45
View File
@@ -59,39 +59,6 @@ namespace lms::api::subsonic
return "";
}
std::string getTrackPath(const Track::pointer& track)
{
std::string path;
// The track path has to be relative from the root
const auto release{ track->getRelease() };
if (release)
{
auto artists{ release->getReleaseArtists() };
if (artists.empty())
artists = release->getArtists();
if (artists.size() > 1)
path = "Various Artists/";
else if (artists.size() == 1)
path = utils::makeNameFilesystemCompatible(artists.front()->getName()) + "/";
path += utils::makeNameFilesystemCompatible(track->getRelease()->getName()) + "/";
}
if (track->getDiscNumber())
path += std::to_string(*track->getDiscNumber()) + "-";
if (track->getTrackNumber())
path += std::to_string(*track->getTrackNumber()) + "-";
path += utils::makeNameFilesystemCompatible(track->getName());
if (track->getPath().has_extension())
path += track->getPath().extension();
return path;
}
}
Response::Node createSongNode(RequestContext& context, const Track::pointer& track, const User::pointer& user)
@@ -110,19 +77,13 @@ namespace lms::api::subsonic
if (track->getYear())
trackResponse.setAttribute("year", *track->getYear());
trackResponse.setAttribute("playCount", core::Service<scrobbling::IScrobblingService>::get()->getCount(user->getId(), track->getId()));
trackResponse.setAttribute("path", getTrackPath(track));
{
// TODO, store this in DB
std::error_code ec;
const auto fileSize{ std::filesystem::file_size(track->getPath(), ec) };
if (!ec)
trackResponse.setAttribute("size", fileSize);
}
trackResponse.setAttribute("path", track->getRelativeFilePath().string());
trackResponse.setAttribute("size", track->getFileSize());
if (track->getPath().has_extension())
if (track->getAbsoluteFilePath().has_extension())
{
auto extension{ track->getPath().extension() };
trackResponse.setAttribute("suffix", extension.string().substr(1));
auto extension{ track->getAbsoluteFilePath().extension() };
trackResponse.setAttribute("suffix", extension.string().substr(1) /* skip leading .*/);
}
{
@@ -157,7 +118,7 @@ namespace lms::api::subsonic
trackResponse.setAttribute("bitRate", (track->getBitrate() / 1000));
trackResponse.setAttribute("type", "music");
trackResponse.setAttribute("created", core::stringUtils::toISO8601String(track->getLastWritten()));
trackResponse.setAttribute("contentType", av::getMimeType(track->getPath().extension()));
trackResponse.setAttribute("contentType", av::getMimeType(track->getAbsoluteFilePath().extension()));
if (const Wt::WDateTime dateTime{ core::Service<feedback::IFeedbackService>::get()->getStarredDateTime(user->getId(), track->getId()) }; dateTime.isValid())
trackResponse.setAttribute("starred", core::stringUtils::toISO8601String(dateTime));