You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedMetadataFile...

72 lines
2.6 KiB

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()
{
DeleteOrphanedByArtist();
DeleteOrphanedByAlbum();
DeleteOrphanedByTrackFile();
DeleteWhereTrackFileIsZero();
}
private void DeleteOrphanedByArtist()
{
var mapper = _database.GetDataMapper();
mapper.ExecuteNonQuery(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT MetadataFiles.Id FROM MetadataFiles
LEFT OUTER JOIN Artists
ON MetadataFiles.ArtistId = Artists.Id
WHERE Artists.Id IS NULL)");
}
private void DeleteOrphanedByAlbum()
{
var mapper = _database.GetDataMapper();
mapper.ExecuteNonQuery(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT MetadataFiles.Id FROM MetadataFiles
LEFT OUTER JOIN Albums
ON MetadataFiles.AlbumId = Albums.Id
WHERE MetadataFiles.AlbumId > 0
AND Albums.Id IS NULL)");
}
private void DeleteOrphanedByTrackFile()
{
var mapper = _database.GetDataMapper();
mapper.ExecuteNonQuery(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT MetadataFiles.Id FROM MetadataFiles
LEFT OUTER JOIN TrackFiles
ON MetadataFiles.TrackFileId = TrackFiles.Id
WHERE MetadataFiles.TrackFileId > 0
AND TrackFiles.Id IS NULL)");
}
private void DeleteWhereTrackFileIsZero()
{
var mapper = _database.GetDataMapper();
mapper.ExecuteNonQuery(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT Id FROM MetadataFiles
WHERE Type IN (2, 5)
AND TrackFileId = 0)");
}
}
}