using Dapper; using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Housekeeping.Housekeepers { public class CleanupOrphanedTrackFiles : IHousekeepingTask { private readonly IMainDatabase _database; public CleanupOrphanedTrackFiles(IMainDatabase database) { _database = database; } public void Clean() { using (var mapper = _database.OpenConnection()) { // Unlink where track no longer exists mapper.Execute(@"UPDATE ""TrackFiles"" SET ""AlbumId"" = 0 WHERE ""Id"" IN ( SELECT ""TrackFiles"".""Id"" FROM ""TrackFiles"" LEFT OUTER JOIN ""Tracks"" ON ""TrackFiles"".""Id"" = ""Tracks"".""TrackFileId"" WHERE ""Tracks"".""Id"" IS NULL)"); // Unlink Tracks where the Trackfiles entry no longer exists mapper.Execute(@"UPDATE ""Tracks"" SET ""TrackFileId"" = 0 WHERE ""Id"" IN ( SELECT ""Tracks"".""Id"" FROM ""Tracks"" LEFT OUTER JOIN ""TrackFiles"" ON ""Tracks"".""TrackFileId"" = ""TrackFiles"".""Id"" WHERE ""TrackFiles"".""Id"" IS NULL)"); } } } }