Optimized library assignation to directories

This commit is contained in:
emeric
2024-07-27 14:27:37 +02:00
parent cbc387b8b7
commit a2a2041f49
17 changed files with 215 additions and 49 deletions
+30
View File
@@ -83,6 +83,25 @@ namespace lms::db
return query;
}
std::filesystem::path getPathWithTrailingSeparator(const std::filesystem::path& path)
{
if (path.empty())
return path;
// Convert the path to string
std::string pathStr{ path.string() };
// Check if the last character is a directory separator
if (pathStr.back() != std::filesystem::path::preferred_separator)
{
// If not, add the preferred separator
pathStr += std::filesystem::path::preferred_separator;
}
// Return the new path
return std::filesystem::path{ pathStr };
}
} // namespace
Directory::Directory(const std::filesystem::path& p)
@@ -157,6 +176,17 @@ namespace lms::db
return utils::execRangeQuery<DirectoryId>(query, range);
}
RangeResults<DirectoryId> Directory::findMismatchedLibrary(Session& session, std::optional<Range> range, const std::filesystem::path& rootPath, MediaLibraryId expectedLibraryId)
{
session.checkReadTransaction();
auto query{ session.getDboSession()->query<DirectoryId>("SELECT d.id FROM directory d") };
query.where("d.absolute_path = ? OR d.absolute_path LIKE ?").bind(rootPath).bind(getPathWithTrailingSeparator(rootPath).string() + "%");
query.where("d.media_library_id <> ? OR d.media_library_id IS NULL").bind(expectedLibraryId);
return utils::execRangeQuery<DirectoryId>(query, range);
}
RangeResults<Directory::pointer> Directory::findRootDirectories(Session& session, std::optional<Range> range)
{
auto query{ session.getDboSession()->query<Wt::Dbo::ptr<Directory>>("SELECT d from directory d").where("d.parent_directory_id IS NULL") };