mirror of https://github.com/Radarr/Radarr
Newznab providers will be compared based on url, not name.
Built-in Newznab providers cannot be deleted (they would be re-added anyways), nor can the URL be changed.
This commit is contained in:
parent
b7fea36045
commit
b930eb0993
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
|
@ -216,6 +217,7 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
//Assert
|
//Assert
|
||||||
var result = db.Fetch<NewznabDefinition>();
|
var result = db.Fetch<NewznabDefinition>();
|
||||||
result.Should().HaveCount(5);
|
result.Should().HaveCount(5);
|
||||||
|
result.Should().OnlyContain(i => i.BuiltIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -236,16 +238,39 @@ namespace NzbDrone.Core.Test.ProviderTests
|
||||||
Mocker.SetConstant(db);
|
Mocker.SetConstant(db);
|
||||||
|
|
||||||
db.Insert(definitions[0]);
|
db.Insert(definitions[0]);
|
||||||
db.Insert(definitions[1]);
|
db.Insert(definitions[2]);
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
Mocker.Resolve<NewznabProvider>().InitializeNewznabIndexers(definitions);
|
Mocker.Resolve<NewznabProvider>().InitializeNewznabIndexers(definitions);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
var result = db.Fetch<NewznabDefinition>();
|
var result = db.Fetch<NewznabDefinition>();
|
||||||
result.Should().HaveCount(5);
|
result.Should().HaveCount(2);
|
||||||
result.Where(d => d.Url == "http://www.nzbdrone.com").Should().HaveCount(3);
|
result.Where(d => d.Url == "http://www.nzbdrone.com").Should().HaveCount(1);
|
||||||
result.Where(d => d.Url == "http://www.nzbdrone2.com").Should().HaveCount(2);
|
result.Where(d => d.Url == "http://www.nzbdrone2.com").Should().HaveCount(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void InitializeNewznabIndexers_should_update_matching_indexer_to_be_builtin()
|
||||||
|
{
|
||||||
|
//Setup
|
||||||
|
var definition = Builder<NewznabDefinition>.CreateNew()
|
||||||
|
.With(d => d.Url = "http://www.nzbdrone2.com")
|
||||||
|
.With(d => d.BuiltIn = false)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var db = TestDbHelper.GetEmptyDatabase();
|
||||||
|
Mocker.SetConstant(db);
|
||||||
|
|
||||||
|
db.Insert(definition);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
Mocker.Resolve<NewznabProvider>().InitializeNewznabIndexers(new List<NewznabDefinition>{ definition });
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
var result = db.Fetch<NewznabDefinition>();
|
||||||
|
result.Should().HaveCount(1);
|
||||||
|
result.First().BuiltIn.Should().BeTrue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -107,8 +107,8 @@ namespace NzbDrone.Core
|
||||||
|
|
||||||
var newznabIndexers = new List<NewznabDefinition>
|
var newznabIndexers = new List<NewznabDefinition>
|
||||||
{
|
{
|
||||||
new NewznabDefinition { Enable = false, Name = "Nzbs.org", Url = "http://nzbs.org" },
|
new NewznabDefinition { Enable = false, Name = "Nzbs.org", Url = "https://nzbs.org", BuiltIn = true },
|
||||||
new NewznabDefinition { Enable = false, Name = "Nzb.su", Url = "http://nzb.su" }
|
new NewznabDefinition { Enable = false, Name = "Nzb.su", Url = "https://nzb.su", BuiltIn = true }
|
||||||
};
|
};
|
||||||
|
|
||||||
Kernel.Get<NewznabProvider>().InitializeNewznabIndexers(newznabIndexers);
|
Kernel.Get<NewznabProvider>().InitializeNewznabIndexers(newznabIndexers);
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
using System.Data;
|
||||||
|
using Migrator.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migrations
|
||||||
|
{
|
||||||
|
|
||||||
|
[Migration(20120504)]
|
||||||
|
public class Migration20120504 : NzbDroneMigration
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Database.AddColumn("NewznabDefinitions", "BuiltIn", DbType.Boolean, ColumnProperty.Null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -224,6 +224,7 @@
|
||||||
<Compile Include="Datastore\MigrationLogger.cs" />
|
<Compile Include="Datastore\MigrationLogger.cs" />
|
||||||
<Compile Include="Datastore\MigrationsHelper.cs" />
|
<Compile Include="Datastore\MigrationsHelper.cs" />
|
||||||
<Compile Include="Datastore\CustomeMapper.cs" />
|
<Compile Include="Datastore\CustomeMapper.cs" />
|
||||||
|
<Compile Include="Datastore\Migrations\Migration20120504.cs" />
|
||||||
<Compile Include="Datastore\Migrations\Migration20120430.cs" />
|
<Compile Include="Datastore\Migrations\Migration20120430.cs" />
|
||||||
<Compile Include="Datastore\Migrations\Migration20120420.cs" />
|
<Compile Include="Datastore\Migrations\Migration20120420.cs" />
|
||||||
<Compile Include="Datastore\Migrations\Migration20120228.cs" />
|
<Compile Include="Datastore\Migrations\Migration20120228.cs" />
|
||||||
|
@ -440,7 +441,7 @@
|
||||||
<Compile Include="Providers\MisnamedProvider.cs">
|
<Compile Include="Providers\MisnamedProvider.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Providers\NewznzbProvider.cs">
|
<Compile Include="Providers\NewznabProvider.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Providers\NotificationProvider.cs">
|
<Compile Include="Providers\NotificationProvider.cs">
|
||||||
|
|
|
@ -70,18 +70,28 @@ namespace NzbDrone.Core.Providers
|
||||||
foreach (var feedProvider in indexers)
|
foreach (var feedProvider in indexers)
|
||||||
{
|
{
|
||||||
NewznabDefinition indexerLocal = feedProvider;
|
NewznabDefinition indexerLocal = feedProvider;
|
||||||
if (!currentIndexers.Exists(c => c.Name == indexerLocal.Name))
|
var currentIndexer = currentIndexers
|
||||||
|
.SingleOrDefault(c => new Uri(c.Url.ToLower()).Host == new Uri(indexerLocal.Url.ToLower()).Host);
|
||||||
|
|
||||||
|
if (currentIndexer == null)
|
||||||
{
|
{
|
||||||
var settings = new NewznabDefinition
|
var settings = new NewznabDefinition
|
||||||
{
|
{
|
||||||
Enable = false,
|
Enable = false,
|
||||||
Name = indexerLocal.Name,
|
Name = indexerLocal.Name,
|
||||||
Url = indexerLocal.Url,
|
Url = indexerLocal.Url,
|
||||||
ApiKey = indexerLocal.ApiKey
|
ApiKey = indexerLocal.ApiKey,
|
||||||
|
BuiltIn = true
|
||||||
};
|
};
|
||||||
|
|
||||||
Save(settings);
|
Save(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currentIndexer.BuiltIn = true;
|
||||||
|
Save(currentIndexer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,5 +16,7 @@ namespace NzbDrone.Core.Repository
|
||||||
public String Url { get; set; }
|
public String Url { get; set; }
|
||||||
|
|
||||||
public String ApiKey { get; set; }
|
public String ApiKey { get; set; }
|
||||||
|
|
||||||
|
public bool BuiltIn { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,8 +13,11 @@
|
||||||
<span class="titleText" id="title_@(Model.Id)">
|
<span class="titleText" id="title_@(Model.Id)">
|
||||||
@Model.Name
|
@Model.Name
|
||||||
</span>
|
</span>
|
||||||
<a href="#" id="@Model.Id" class="deleteProvider" onclick="deleteProvider('@(Model.Id)'); return false;">
|
@if(!Model.BuiltIn)
|
||||||
<img src="../../Content/Images/close.png" alt="Delete" width="22px" height="22px" /></a>
|
{
|
||||||
|
<a href="#" id="@Model.Id" class="deleteProvider" onclick="deleteProvider('@(Model.Id)'); return false;">
|
||||||
|
<img src="../../Content/Images/close.png" alt="Delete" width="22px" height="22px" /></a>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="providerOptions">
|
<div class="providerOptions">
|
||||||
@Html.Label("Enabled")
|
@Html.Label("Enabled")
|
||||||
|
@ -22,9 +25,18 @@
|
||||||
|
|
||||||
@Html.LabelFor(x => x.Name)
|
@Html.LabelFor(x => x.Name)
|
||||||
@Html.TextBoxFor(x => x.Name, new {@class = "providerName_textbox"})
|
@Html.TextBoxFor(x => x.Name, new {@class = "providerName_textbox"})
|
||||||
|
|
||||||
@Html.LabelFor(x => x.Url)
|
@if(!Model.BuiltIn)
|
||||||
@Html.TextBoxFor(m => m.Url)
|
{
|
||||||
|
@Html.LabelFor(x => x.Url)
|
||||||
|
@Html.TextBoxFor(m => m.Url)
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@Html.LabelFor(x => x.Url)
|
||||||
|
@Html.TextBoxFor(m => m.Url, new { disabled = "disabled" })
|
||||||
|
}
|
||||||
|
|
||||||
@Html.LabelFor(x => x.ApiKey)
|
@Html.LabelFor(x => x.ApiKey)
|
||||||
@Html.TextBoxFor(m => m.ApiKey)
|
@Html.TextBoxFor(m => m.ApiKey)
|
||||||
|
|
Loading…
Reference in New Issue