Lidarr/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupUnusedTags.cs

42 lines
1.2 KiB
C#
Raw Normal View History

2017-10-08 20:07:54 +00:00
using System.Collections.Generic;
2020-08-18 20:11:44 +00:00
using System.Data;
using System.Linq;
2020-08-18 20:11:44 +00:00
using Dapper;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.Housekeeping.Housekeepers
{
public class CleanupUnusedTags : IHousekeepingTask
{
private readonly IMainDatabase _database;
public CleanupUnusedTags(IMainDatabase database)
{
_database = database;
}
public void Clean()
{
2020-08-18 20:11:44 +00:00
using (var mapper = _database.OpenConnection())
{
var usedTags = new[] { "Artists", "Notifications", "DelayProfiles", "ReleaseProfiles" }
.SelectMany(v => GetUsedTags(v, mapper))
2020-08-18 20:11:44 +00:00
.Distinct()
.ToArray();
2020-08-18 20:11:44 +00:00
var usedTagsList = string.Join(",", usedTags.Select(d => d.ToString()).ToArray());
2020-08-18 20:11:44 +00:00
mapper.Execute($"DELETE FROM Tags WHERE NOT Id IN ({usedTagsList})");
}
}
2020-08-18 20:11:44 +00:00
private int[] GetUsedTags(string table, IDbConnection mapper)
{
2020-08-18 20:11:44 +00:00
return mapper.Query<List<int>>($"SELECT DISTINCT Tags FROM {table} WHERE NOT Tags = '[]'")
.SelectMany(x => x)
.Distinct()
.ToArray();
}
}
}