Subsonic: use file added info for 'created' fields, ref #601
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user