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

90 lines
3.2 KiB
C#
Raw Normal View History

2020-08-18 20:11:44 +00:00
using Dapper;
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();
DeleteWhereAlbumIdIsZero();
DeleteWhereTrackFileIsZero();
2014-01-26 07:14:55 +00:00
}
private void DeleteOrphanedByArtist()
2014-01-26 07:14:55 +00:00
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM MetadataFiles
2014-01-26 07:14:55 +00:00
WHERE Id IN (
SELECT MetadataFiles.Id FROM MetadataFiles
LEFT OUTER JOIN Artists
ON MetadataFiles.ArtistId = Artists.Id
WHERE Artists.Id IS NULL)");
2020-08-18 20:11:44 +00:00
}
2014-01-26 07:14:55 +00:00
}
private void DeleteOrphanedByAlbum()
2014-01-26 07:14:55 +00:00
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM MetadataFiles
2014-01-26 07:14:55 +00:00
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)");
2020-08-18 20:11:44 +00:00
}
2014-01-26 07:14:55 +00:00
}
private void DeleteOrphanedByTrackFile()
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"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)");
2020-08-18 20:11:44 +00:00
}
}
private void DeleteWhereAlbumIdIsZero()
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT Id FROM MetadataFiles
WHERE Type IN (4, 6)
AND AlbumId = 0)");
2020-08-18 20:11:44 +00:00
}
}
private void DeleteWhereTrackFileIsZero()
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
mapper.Execute(@"DELETE FROM MetadataFiles
WHERE Id IN (
SELECT Id FROM MetadataFiles
WHERE Type IN (2, 5)
AND TrackFileId = 0)");
2020-08-18 20:11:44 +00:00
}
}
2014-01-26 07:14:55 +00:00
}
}