2018-03-14 20:41:36 +00:00
|
|
|
using System.Collections.Generic;
|
2019-12-18 21:56:41 +00:00
|
|
|
using System.Data;
|
2016-09-22 17:57:12 +00:00
|
|
|
using System.Linq;
|
2019-12-18 21:56:41 +00:00
|
|
|
using Dapper;
|
2021-09-28 03:58:04 +00:00
|
|
|
using NzbDrone.Common.Extensions;
|
2016-09-22 17:57:12 +00:00
|
|
|
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()
|
|
|
|
{
|
2021-10-19 20:51:15 +00:00
|
|
|
var mapper = _database.OpenConnection();
|
2016-09-22 17:57:12 +00:00
|
|
|
|
2021-10-19 20:51:15 +00:00
|
|
|
var usedTags = new[] { "Movies", "Notifications", "DelayProfiles", "Restrictions", "ImportLists", "Indexers" }
|
|
|
|
.SelectMany(v => GetUsedTags(v, mapper))
|
|
|
|
.Distinct()
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
var usedTagsList = usedTags.Select(d => d.ToString()).Join(",");
|
2016-09-22 17:57:12 +00:00
|
|
|
|
2021-10-19 20:51:15 +00:00
|
|
|
mapper.Execute($"DELETE FROM Tags WHERE NOT Id IN ({usedTagsList})");
|
2016-09-22 17:57:12 +00:00
|
|
|
}
|
|
|
|
|
2019-12-18 21:56:41 +00:00
|
|
|
private int[] GetUsedTags(string table, IDbConnection mapper)
|
2016-09-22 17:57:12 +00:00
|
|
|
{
|
2021-09-28 03:58:04 +00:00
|
|
|
return mapper.Query<List<int>>($"SELECT DISTINCT Tags FROM {table} WHERE NOT Tags = '[]' AND NOT Tags IS NULL")
|
2019-12-18 21:56:41 +00:00
|
|
|
.SelectMany(x => x)
|
|
|
|
.Distinct()
|
|
|
|
.ToArray();
|
2016-09-22 17:57:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|