Add M4B and Unknown Audio qualities

pull/1063/head
ta264 3 years ago
parent f6a04f7890
commit 065f03a01a

@ -0,0 +1,155 @@
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Dapper;
using FluentMigrator;
using NzbDrone.Core.Datastore.Converters;
using NzbDrone.Core.Datastore.Migration.Framework;
using NzbDrone.Core.Profiles.Qualities;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(011)]
public class update_audio_qualities : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Execute.WithConnection(UpdateAudioQualities);
}
private void UpdateAudioQualities(IDbConnection conn, IDbTransaction tran)
{
SqlMapper.AddTypeHandler(new EmbeddedDocumentConverter<List<ProfileItem10>>(new QualityIntConverter()));
var updater = new ProfileUpdater10(conn, tran);
updater.SplitQualityAppend(10, 12); // Add M4B above MP3
updater.SplitQualityPrepend(10, 13); // Add UnknownAudio below MP3
updater.Commit();
}
public class Profile10
{
public int Id { get; set; }
public string Name { get; set; }
public int Cutoff { get; set; }
public List<ProfileItem10> Items { get; set; }
}
public class ProfileItem10
{
public int Quality { get; set; }
public bool Allowed { get; set; }
public List<ProfileItem10> Items { get; set; } = new List<ProfileItem10>();
}
public class ProfileUpdater10
{
private readonly IDbConnection _connection;
private readonly IDbTransaction _transaction;
private List<Profile10> _profiles;
private HashSet<Profile10> _changedProfiles = new HashSet<Profile10>();
public ProfileUpdater10(IDbConnection conn, IDbTransaction tran)
{
_connection = conn;
_transaction = tran;
_profiles = _connection.Query<Profile10>(@"SELECT Id, Name, Cutoff, Items FROM QualityProfiles",
transaction: _transaction).ToList();
}
public void Commit()
{
var sql = "UPDATE QualityProfiles SET Name = @Name, Cutoff = @Cutoff, Items = @Items WHERE Id = @Id";
_connection.Execute(sql, _changedProfiles, transaction: _transaction);
_changedProfiles.Clear();
}
public void PrependQuality(int quality)
{
foreach (var profile in _profiles)
{
if (profile.Items.Any(v => v.Quality == quality))
{
continue;
}
profile.Items.Insert(0, new ProfileItem10
{
Quality = quality,
Allowed = false
});
_changedProfiles.Add(profile);
}
}
public void AppendQuality(int quality)
{
foreach (var profile in _profiles)
{
if (profile.Items.Any(v => v.Quality == quality))
{
continue;
}
profile.Items.Add(new ProfileItem10
{
Quality = quality,
Allowed = false
});
_changedProfiles.Add(profile);
}
}
public void SplitQualityPrepend(int find, int quality)
{
foreach (var profile in _profiles)
{
if (profile.Items.Any(v => v.Quality == quality))
{
continue;
}
var findIndex = profile.Items.FindIndex(v => v.Quality == find);
profile.Items.Insert(findIndex, new ProfileItem10
{
Quality = quality,
Allowed = profile.Items[findIndex].Allowed
});
if (profile.Cutoff == find)
{
profile.Cutoff = quality;
}
_changedProfiles.Add(profile);
}
}
public void SplitQualityAppend(int find, int quality)
{
foreach (var profile in _profiles)
{
if (profile.Items.Any(v => v.Quality == quality))
{
continue;
}
var findIndex = profile.Items.FindIndex(v => v.Quality == find);
profile.Items.Insert(findIndex + 1, new ProfileItem10
{
Quality = quality,
Allowed = profile.Items[findIndex].Allowed
});
_changedProfiles.Add(profile);
}
}
}
}
}

@ -33,7 +33,7 @@ namespace NzbDrone.Core.MediaFiles
{ ".wma", Quality.MP3_320 },
{ ".m4a", Quality.MP3_320 },
{ ".m4p", Quality.MP3_320 },
{ ".m4b", Quality.MP3_320 },
{ ".m4b", Quality.M4B },
{ ".aac", Quality.MP3_320 },
{ ".mp4a", Quality.MP3_320 },
{ ".ogg", Quality.MP3_320 },

@ -71,6 +71,9 @@ namespace NzbDrone.Core.Parser
case Codec.WAVPACK:
result.Quality = Quality.FLAC;
break;
case Codec.AAC:
result.Quality = Quality.M4B;
break;
case Codec.MP1:
case Codec.MP2:
case Codec.MP3VBR:
@ -78,7 +81,6 @@ namespace NzbDrone.Core.Parser
case Codec.APE:
case Codec.WMA:
case Codec.WAV:
case Codec.AAC:
case Codec.AACVBR:
case Codec.OGG:
case Codec.OPUS:
@ -219,15 +221,8 @@ namespace NzbDrone.Core.Parser
case Codec.WAVPACK:
case Codec.WAV:
return Quality.FLAC;
case Codec.MP1:
case Codec.MP2:
case Codec.MP3VBR:
case Codec.MP3CBR:
case Codec.APE:
case Codec.WMA:
case Codec.AAC:
case Codec.OGG:
case Codec.OPUS:
return Quality.M4B;
default:
return Quality.MP3_320;
}

@ -96,16 +96,17 @@ namespace NzbDrone.Core.Profiles.Qualities
Quality.MOBI,
Quality.EPUB,
Quality.AZW3,
Quality.UnknownAudio,
Quality.MP3_320,
Quality.M4B,
Quality.FLAC);
AddDefaultProfile("Lossless Audio",
Quality.FLAC,
Quality.FLAC);
AddDefaultProfile("Standard Audio",
AddDefaultProfile("Audio",
Quality.MP3_320,
Quality.MP3_320);
Quality.UnknownAudio,
Quality.MP3_320,
Quality.M4B,
Quality.FLAC);
AddDefaultProfile("Text",
Quality.MOBI,

@ -70,13 +70,15 @@ namespace NzbDrone.Core.Qualities
return !Equals(left, right);
}
public static Quality Unknown => new Quality(0, "Unknown");
public static Quality Unknown => new Quality(0, "Unknown Text");
public static Quality PDF => new Quality(1, "PDF");
public static Quality MOBI => new Quality(2, "MOBI");
public static Quality EPUB => new Quality(3, "EPUB");
public static Quality AZW3 => new Quality(4, "AZW3");
public static Quality MP3_320 => new Quality(10, "MP3-320");
public static Quality FLAC => new Quality(11, "FLAC");
public static Quality M4B => new Quality(12, "M4B");
public static Quality UnknownAudio => new Quality(13, "Unknown Audio");
static Quality()
{
@ -87,7 +89,9 @@ namespace NzbDrone.Core.Qualities
MOBI,
EPUB,
AZW3,
UnknownAudio,
MP3_320,
M4B,
FLAC
};
@ -99,13 +103,15 @@ namespace NzbDrone.Core.Qualities
DefaultQualityDefinitions = new HashSet<QualityDefinition>
{
new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 350, GroupWeight = 1 },
new QualityDefinition(Quality.PDF) { Weight = 5, MinSize = 0, MaxSize = 350, GroupWeight = 2 },
new QualityDefinition(Quality.MOBI) { Weight = 10, MinSize = 0, MaxSize = 350, GroupWeight = 10 },
new QualityDefinition(Quality.EPUB) { Weight = 11, MinSize = 0, MaxSize = 350, GroupWeight = 11 },
new QualityDefinition(Quality.AZW3) { Weight = 12, MinSize = 0, MaxSize = 350, GroupWeight = 12 },
new QualityDefinition(Quality.MP3_320) { Weight = 100, MinSize = 0, MaxSize = 350, GroupWeight = 100 },
new QualityDefinition(Quality.FLAC) { Weight = 110, MinSize = 0, MaxSize = null, GroupWeight = 110 },
new QualityDefinition(Quality.Unknown) { Weight = 1, MinSize = 0, MaxSize = 350, GroupWeight = 1 },
new QualityDefinition(Quality.PDF) { Weight = 5, MinSize = 0, MaxSize = 350, GroupWeight = 2 },
new QualityDefinition(Quality.MOBI) { Weight = 10, MinSize = 0, MaxSize = 350, GroupWeight = 10 },
new QualityDefinition(Quality.EPUB) { Weight = 11, MinSize = 0, MaxSize = 350, GroupWeight = 11 },
new QualityDefinition(Quality.AZW3) { Weight = 12, MinSize = 0, MaxSize = 350, GroupWeight = 12 },
new QualityDefinition(Quality.UnknownAudio) { Weight = 50, MinSize = 0, MaxSize = 350, GroupWeight = 50 },
new QualityDefinition(Quality.MP3_320) { Weight = 100, MinSize = 0, MaxSize = 350, GroupWeight = 100 },
new QualityDefinition(Quality.M4B) { Weight = 105, MinSize = 0, MaxSize = 350, GroupWeight = 105 },
new QualityDefinition(Quality.FLAC) { Weight = 110, MinSize = 0, MaxSize = null, GroupWeight = 110 },
};
}

Loading…
Cancel
Save