Lidarr/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedMetadataFile...

72 lines
2.6 KiB
C#
Raw Normal View History

using NzbDrone.Core.Datastore;
2014-01-26 07:14:55 +00:00
namespace NzbDrone.Core.Housekeeping.Housekeepers
{
public class CleanupOrphanedMetadataFiles : IHousekeepingTask
{
private readonly IMainDatabase _database;
2014-01-26 07:14:55 +00:00
public CleanupOrphanedMetadataFiles(IMainDatabase database)
2014-01-26 07:14:55 +00:00
{
_database = database;
}
public void Clean()
{
DeleteOrphanedByArtist();
DeleteOrphanedByAlbum();
DeleteOrphanedByTrackFile();
DeleteWhereTrackFileIsZero();
2014-01-26 07:14:55 +00:00
}
private void DeleteOrphanedByArtist()
2014-01-26 07:14:55 +00:00
{
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)");
2014-01-26 07:14:55 +00:00
}
private void DeleteOrphanedByAlbum()
2014-01-26 07:14:55 +00:00
{
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)");
2014-01-26 07:14:55 +00:00
}
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)");
}
2014-01-26 07:14:55 +00:00
}
}