Files
Readarr/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedMetadataFiles.cs
T
Robin Dadswell 46c2e0ba82 New: Postgres Support
Co-Authored-By: Qstick <376117+Qstick@users.noreply.github.com>
Co-authored-by: ta264 <ta264@users.noreply.github.com>

(cherry picked from commit 80b1aa9a2c81617bdda7ef551c19a2f114e49204)
2022-08-13 19:55:48 +01:00

90 lines
3.4 KiB
C#

using Dapper;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.Housekeeping.Housekeepers
{
public class CleanupOrphanedMetadataFiles : IHousekeepingTask
{
private readonly IMainDatabase _database;
public CleanupOrphanedMetadataFiles(IMainDatabase database)
{
_database = database;
}
public void Clean()
{
DeleteOrphanedByAuthor();
DeleteOrphanedByBook();
DeleteOrphanedByTrackFile();
DeleteWhereBookIdIsZero();
DeleteWhereTrackFileIsZero();
}
private void DeleteOrphanedByAuthor()
{
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM ""MetadataFiles""
WHERE ""Id"" IN (
SELECT ""MetadataFiles"".""Id"" FROM ""MetadataFiles""
LEFT OUTER JOIN ""Authors""
ON ""MetadataFiles"".""AuthorId"" = ""Authors"".""Id""
WHERE ""Authors"".""Id"" IS NULL)");
}
}
private void DeleteOrphanedByBook()
{
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM ""MetadataFiles""
WHERE ""Id"" IN (
SELECT ""MetadataFiles"".""Id"" FROM ""MetadataFiles""
LEFT OUTER JOIN ""Books""
ON ""MetadataFiles"".""BookId"" = ""Books"".""Id""
WHERE ""MetadataFiles"".""BookId"" > 0
AND ""Books"".""Id"" IS NULL)");
}
}
private void DeleteOrphanedByTrackFile()
{
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM ""MetadataFiles""
WHERE ""Id"" IN (
SELECT ""MetadataFiles"".""Id"" FROM ""MetadataFiles""
LEFT OUTER JOIN ""BookFiles""
ON ""MetadataFiles"".""BookFileId"" = ""BookFiles"".""Id""
WHERE ""MetadataFiles"".""BookFileId"" > 0
AND ""BookFiles"".""Id"" IS NULL)");
}
}
private void DeleteWhereBookIdIsZero()
{
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM ""MetadataFiles""
WHERE ""Id"" IN (
SELECT ""Id"" FROM ""MetadataFiles""
WHERE ""Type"" IN (2, 4)
AND ""BookId"" = 0)");
}
}
private void DeleteWhereTrackFileIsZero()
{
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM ""MetadataFiles""
WHERE ""Id"" IN (
SELECT ""Id"" FROM ""MetadataFiles""
WHERE ""Type"" IN (2, 4)
AND ""BookFileId"" = 0)");
}
}
}
}