Subsonic: use file added info for 'created' fields, ref #601

This commit is contained in:
emeric
2025-01-25 14:44:49 +01:00
parent 8c11bef1b6
commit e553e840d3
5 changed files with 73 additions and 3 deletions
+8 -1
View File
@@ -708,7 +708,14 @@ namespace lms::db
{
assert(session());
return utils::fetchQuerySingleResult(session()->query<Wt::WDateTime>("SELECT COALESCE(MAX(file_last_write), '1970-01-01T00:00:00') FROM track t").where("t.release_id = ?").bind(getId()));
return utils::fetchQuerySingleResult(session()->query<Wt::WDateTime>("SELECT MAX(file_last_write) FROM track t").where("t.release_id = ?").bind(getId()));
}
core::PartialDateTime Release::getAddedTime() const
{
assert(session());
return utils::fetchQuerySingleResult(session()->query<core::PartialDateTime>("SELECT MAX(file_added) FROM track t").where("t.release_id = ?").bind(getId()));
}
std::vector<std::vector<Cluster::pointer>> Release::getClusterGroups(const std::vector<ClusterTypeId>& clusterTypeIds, std::size_t size) const
@@ -244,6 +244,7 @@ namespace lms::db
std::size_t getDiscCount() const; // may not be total disc (if incomplete for example)
std::vector<DiscInfo> getDiscs() const;
std::chrono::milliseconds getDuration() const;
core::PartialDateTime getAddedTime() const;
Wt::WDateTime getLastWritten() const;
std::string_view getArtistDisplayName() const { return _artistDisplayName; }
bool isCompilation() const { return _isCompilation; }
+62
View File
@@ -1201,4 +1201,66 @@ namespace lms::db::tests
EXPECT_EQ(releases.results[3], releaseC.getId());
}
}
TEST_F(DatabaseFixture, Release_LastWritten)
{
ScopedRelease release{ session, "relA" };
ScopedTrack track1{ session };
ScopedTrack track2{ session };
{
auto transaction{ session.createReadTransaction() };
Wt::WDateTime lastWritten{ release.get()->getLastWritten() };
EXPECT_FALSE(lastWritten.isValid());
}
{
auto transaction{ session.createWriteTransaction() };
track1.get().modify()->setLastWriteTime(Wt::WDateTime{ Wt::WDate{ 2021, 1, 2 } });
track2.get().modify()->setLastWriteTime(Wt::WDateTime{ Wt::WDate{ 2021, 1, 2 }, Wt::WTime{ 15, 36, 24 } });
track1.get().modify()->setRelease(release.get());
track2.get().modify()->setRelease(release.get());
}
{
auto transaction{ session.createReadTransaction() };
Wt::WDateTime lastWritten{ release.get()->getLastWritten() };
ASSERT_TRUE(lastWritten.isValid());
EXPECT_EQ(lastWritten, track2.get()->getLastWriteTime());
}
}
TEST_F(DatabaseFixture, Release_AddedTime)
{
ScopedRelease release{ session, "relA" };
ScopedTrack track1{ session };
ScopedTrack track2{ session };
{
auto transaction{ session.createReadTransaction() };
core::PartialDateTime addedTime{ release.get()->getAddedTime() };
EXPECT_FALSE(addedTime.isValid());
}
{
auto transaction{ session.createWriteTransaction() };
track1.get().modify()->setAddedTime(core::PartialDateTime{ 2021, 1, 2 });
track2.get().modify()->setAddedTime(core::PartialDateTime{ 2021, 1, 2, 15, 36, 24 });
track1.get().modify()->setRelease(release.get());
track2.get().modify()->setRelease(release.get());
}
{
auto transaction{ session.createReadTransaction() };
core::PartialDateTime addedTime{ release.get()->getAddedTime() };
ASSERT_TRUE(addedTime.isValid());
EXPECT_EQ(addedTime, track2.get()->getAddedTime());
}
}
} // namespace lms::db::tests