From b6ac7638a12976d732ff65e0eaa8a0ad492969b6 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 26 Mar 2013 01:02:31 -0700 Subject: [PATCH] Store QualityPofile properly --- NzbDrone.Core/Datastore/BasicRepository.cs | 1 - .../Converters/QualityIntConverter.cs | 43 +++++++++++++++++++ .../Datastore/Migration/Migration20130324.cs | 2 +- NzbDrone.Core/Datastore/TableMapping.cs | 7 ++- NzbDrone.Core/NzbDrone.Core.csproj | 1 + NzbDrone.Core/Qualities/Quality.cs | 3 +- NzbDrone.Core/Qualities/QualityProfile.cs | 30 ++++++++++++- NzbDrone.Core/ReferenceData/SceneMapping.cs | 2 +- NzbDrone.ncrunchsolution | 1 - 9 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs diff --git a/NzbDrone.Core/Datastore/BasicRepository.cs b/NzbDrone.Core/Datastore/BasicRepository.cs index 11d6270f9..7a8560d73 100644 --- a/NzbDrone.Core/Datastore/BasicRepository.cs +++ b/NzbDrone.Core/Datastore/BasicRepository.cs @@ -58,7 +58,6 @@ namespace NzbDrone.Core.Datastore return _dataMapper.Query().Single(c => c.Id == id); } - public TModel SingleOrDefault() { return All().Single(); diff --git a/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs b/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs new file mode 100644 index 000000000..839ef85be --- /dev/null +++ b/NzbDrone.Core/Datastore/Converters/QualityIntConverter.cs @@ -0,0 +1,43 @@ +using System; +using Marr.Data.Converters; +using Marr.Data.Mapping; +using NzbDrone.Core.Qualities; + +namespace NzbDrone.Core.Datastore.Converters +{ + public class QualityIntConverter : IConverter + { + public object FromDB(ColumnMap map, object dbValue) + { + if (dbValue == DBNull.Value) + { + return Quality.Unknown; + } + + var val = Convert.ToInt32(dbValue); + + return (Quality)val; + } + + public object ToDB(object clrValue) + { + if(clrValue == null) return 0; + + if(clrValue as Quality == null) + { + throw new InvalidOperationException("Attempted to save a quality that isn't really a quality"); + } + + var quality = clrValue as Quality; + return (int)quality; + } + + public Type DbType + { + get + { + return typeof(int); + } + } + } +} \ No newline at end of file diff --git a/NzbDrone.Core/Datastore/Migration/Migration20130324.cs b/NzbDrone.Core/Datastore/Migration/Migration20130324.cs index 9feac7e0d..2d897334c 100644 --- a/NzbDrone.Core/Datastore/Migration/Migration20130324.cs +++ b/NzbDrone.Core/Datastore/Migration/Migration20130324.cs @@ -105,7 +105,7 @@ namespace NzbDrone.Core.Datastore.Migration .WithColumn("Id").AsInt32().PrimaryKey().Identity() .WithColumn("CleanTitle").AsString().NotNullable() .WithColumn("SceneName").AsString().NotNullable() - .WithColumn("SeriesId").AsInt32().NotNullable() + .WithColumn("TvdbId").AsInt32().NotNullable() .WithColumn("SeasonNumber").AsInt32().NotNullable(); Create.Table("Seasons") diff --git a/NzbDrone.Core/Datastore/TableMapping.cs b/NzbDrone.Core/Datastore/TableMapping.cs index e06bc8bd4..1781fc49c 100644 --- a/NzbDrone.Core/Datastore/TableMapping.cs +++ b/NzbDrone.Core/Datastore/TableMapping.cs @@ -40,23 +40,21 @@ namespace NzbDrone.Core.Datastore Mapper.Entity().RegisterModel("History") .HasOne(h => h.Episode, h => h.EpisodeId); + .LazyLoad((db, history) => db.Query().Where(ep => ep.Id == history.EpisodeId).ToList()); Mapper.Entity().RegisterModel("Series") .Relationships.AutoMapComplexTypeProperties() .For(c => c.Covers) .LazyLoad((db, series) => db.Query().Where(cover => cover.SeriesId == series.Id).ToList()); - Mapper.Entity().RegisterModel("Seasons"); Mapper.Entity().RegisterModel("Episodes"); Mapper.Entity().RegisterModel("EpisodeFiles"); Mapper.Entity().RegisterModel("MediaCovers"); - - Mapper.Entity().RegisterModel("QualityProfiles"); + Mapper.Entity().RegisterModel("QualityProfiles").For(q => q.DbAllowed).SetColumnName("Allowed").Ignore(q => q.Allowed); Mapper.Entity().RegisterModel("QualitySizes"); Mapper.Entity().RegisterModel("Logs"); - } @@ -66,6 +64,7 @@ namespace NzbDrone.Core.Datastore MapRepository.Instance.RegisterTypeConverter(typeof(Boolean), new BooleanIntConverter()); MapRepository.Instance.RegisterTypeConverter(typeof(Enum), new EnumIntConverter()); MapRepository.Instance.RegisterTypeConverter(typeof(QualityModel), new EmbeddedDocumentConverter()); + MapRepository.Instance.RegisterTypeConverter(typeof(Quality), new QualityIntConverter()); } } } \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 89e6a0ddc..a47986011 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -196,6 +196,7 @@ + diff --git a/NzbDrone.Core/Qualities/Quality.cs b/NzbDrone.Core/Qualities/Quality.cs index 38b6b2ab9..5f3a77bb6 100644 --- a/NzbDrone.Core/Qualities/Quality.cs +++ b/NzbDrone.Core/Qualities/Quality.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Qualities { - public class Quality : IComparable + public class Quality : IComparable, IEmbeddedDocument { public int Id { get; set; } public string Name { get; set; } diff --git a/NzbDrone.Core/Qualities/QualityProfile.cs b/NzbDrone.Core/Qualities/QualityProfile.cs index 5ec6f799f..e419e13fe 100644 --- a/NzbDrone.Core/Qualities/QualityProfile.cs +++ b/NzbDrone.Core/Qualities/QualityProfile.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using NzbDrone.Core.Datastore; @@ -8,6 +10,32 @@ namespace NzbDrone.Core.Qualities { public string Name { get; set; } public List Allowed { get; set; } + + [EditorBrowsable(EditorBrowsableState.Never)] + public string DbAllowed + { + get + { + string result = String.Empty; + if (Allowed == null) return result; + + foreach (var q in Allowed) + { + result += q.Id + "|"; + } + return result.Trim('|'); + } + private set + { + var qualities = value.Split('|'); + Allowed = new List(qualities.Length); + foreach (var quality in qualities.Where(q => !String.IsNullOrWhiteSpace(q))) + { + Allowed.Add(Quality.FindById(Convert.ToInt32(quality))); + } + } + } + public Quality Cutoff { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.Core/ReferenceData/SceneMapping.cs b/NzbDrone.Core/ReferenceData/SceneMapping.cs index e92d9b260..c3be89ccf 100644 --- a/NzbDrone.Core/ReferenceData/SceneMapping.cs +++ b/NzbDrone.Core/ReferenceData/SceneMapping.cs @@ -6,8 +6,8 @@ namespace NzbDrone.Core.ReferenceData public class SceneMapping : ModelBase { public string CleanTitle { get; set; } - public int TvdbId { get; set; } public string SceneName { get; set; } + public int TvdbId { get; set; } public int SeasonNumber { get; set; } } } \ No newline at end of file diff --git a/NzbDrone.ncrunchsolution b/NzbDrone.ncrunchsolution index 969da6dd4..c725a019c 100644 --- a/NzbDrone.ncrunchsolution +++ b/NzbDrone.ncrunchsolution @@ -2,7 +2,6 @@ 1 True true - true UseDynamicAnalysis Disabled Disabled