mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-03-05 13:40:08 -05:00
Compare commits
3 Commits
paging
...
jackettmig
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0150988bcd | ||
|
|
593231c3af | ||
|
|
dbbb6bf0d1 |
32
src/NzbDrone.Core/Migration/JackettIndexerConfigDefintion.cs
Normal file
32
src/NzbDrone.Core/Migration/JackettIndexerConfigDefintion.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NzbDrone.Core.Migration
|
||||
{
|
||||
public class JackettIndexerConfigDefintion
|
||||
{
|
||||
public string id { get; set; }
|
||||
public string type { get; set; } //DO NOT THINK THIS IS REQUIRED
|
||||
public string name { get; set; } //Again doubt it's needed
|
||||
public string value { get; set; }
|
||||
|
||||
//BELOW ARE THE DIFFERENT THINGS FROM NIT
|
||||
//TODO: Update to ensure json matches up with Prowlarrs
|
||||
public string Cookie { get; set; }
|
||||
public string Username { get; set; }
|
||||
public string 2FA { get; set; }
|
||||
public string Email { get; set; }
|
||||
public string Pid { get; set; }
|
||||
public string Pin { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string Passkey { get; set; }
|
||||
public string ApiKey { get; set; }
|
||||
public string RssKey { get; set; }
|
||||
public string CaptchaText { get; set; }
|
||||
public string CaptchaCookie { get; set; }
|
||||
public string Filters { get; set; }
|
||||
}
|
||||
}
|
||||
20
src/NzbDrone.Core/Migration/JackettIndexerDefinition.cs
Normal file
20
src/NzbDrone.Core/Migration/JackettIndexerDefinition.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System.Collections.Generic;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NzbDrone.Core.Migration
|
||||
{
|
||||
public class JackettIndexerDefinition
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Description { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Configured { get; set; }
|
||||
[JsonProperty("site_link")]
|
||||
public string SiteLink { get; set; }
|
||||
public List<string> AlternativeSiteLinks { get; set; }
|
||||
public string language { get; set; }
|
||||
|
||||
//ignoring last_error, potatoenabled, caps
|
||||
}
|
||||
}
|
||||
81
src/NzbDrone.Core/Migration/JackettMigrationService.cs
Normal file
81
src/NzbDrone.Core/Migration/JackettMigrationService.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Indexers;
|
||||
|
||||
namespace NzbDrone.Core.Migration
|
||||
{
|
||||
public interface IJackettMigrationService
|
||||
{
|
||||
List<JackettIndexerDefinition> GetJackettIndexers(string jackettPath, string jackettApi);
|
||||
List<JackettIndexerConfigDefintion> GetJackettIndexerConfig(JackettIndexerDefinition jackettIndexerDefinition, string jackettPath, string jackettApi);
|
||||
void MigrateJackettIndexer(JackettIndexerDefinition jackettIndexer, List<JackettIndexerConfigDefintion> jackettIndexerConfig);
|
||||
}
|
||||
|
||||
public class JackettMigrationService : IJackettMigrationService
|
||||
{
|
||||
private readonly IIndexerFactory _indexerFactory;
|
||||
private readonly Logger _logger;
|
||||
public IHttpClient HttpClient { get; set; }
|
||||
public IHttpRequestBuilderFactory RequestBuilder { get; set; }
|
||||
|
||||
public JackettMigrationService(IIndexerFactory indexerFactory, Logger logger)
|
||||
{
|
||||
_logger = logger;
|
||||
_indexerFactory = indexerFactory;
|
||||
}
|
||||
|
||||
public List<JackettIndexerDefinition> GetJackettIndexers(string jackettPath, string jackettApi)
|
||||
{
|
||||
_logger.Info("Getting all configured Jackett Indexers");
|
||||
|
||||
var requestBuilder = BuildRequest(jackettPath, jackettApi, true);
|
||||
|
||||
var jsonResponse = JsonConvert.DeserializeObject<List<JackettIndexerDefinition>>(HttpClient.Execute(requestBuilder.Build()).Content);
|
||||
|
||||
return jsonResponse;
|
||||
}
|
||||
|
||||
public List<JackettIndexerConfigDefintion> GetJackettIndexerConfig(JackettIndexerDefinition jackettIndexerDefinition, string jackettPath, string jackettApi)
|
||||
{
|
||||
_logger.Debug($"Getting config from Jackett for {jackettIndexerDefinition.Name}");
|
||||
|
||||
var requestBuilder = BuildRequest(jackettPath, jackettApi, jackettIndexerDefinition.Id);
|
||||
|
||||
var jsonResponse = JsonConvert.DeserializeObject<List<JackettIndexerConfigDefintion>>(HttpClient.Execute(requestBuilder.Build()).Content);
|
||||
|
||||
return jsonResponse;
|
||||
}
|
||||
|
||||
public void MigrateJackettIndexer(JackettIndexerDefinition jackettIndexer, List<JackettIndexerConfigDefintion> jackettIndexerConfig)
|
||||
{
|
||||
_logger.Info($"Creating {jackettIndexer.Name} in Prowlarr");
|
||||
|
||||
//TODO: Creation Logic of indexers
|
||||
}
|
||||
|
||||
protected HttpRequestBuilder BuildRequest(string jackettPath, string jackettApi, bool configuredIndexers)
|
||||
{
|
||||
var url = jackettPath + "api/v2.0/indexers";
|
||||
var requestBuilder = new HttpRequestBuilder(url);
|
||||
requestBuilder.AddQueryParam("apiKey", jackettApi);
|
||||
requestBuilder.AddQueryParam("configured", configuredIndexers);
|
||||
|
||||
return requestBuilder;
|
||||
}
|
||||
|
||||
protected HttpRequestBuilder BuildRequest(string jackettPath, string jackettApi, string indexerId)
|
||||
{
|
||||
var url = jackettPath + "api/v2.0/indexers/" + indexerId + "/config";
|
||||
var requestBuilder = new HttpRequestBuilder(url);
|
||||
requestBuilder.AddQueryParam("apiKey", jackettApi);
|
||||
|
||||
return requestBuilder;
|
||||
}
|
||||
}
|
||||
}
|
||||
32
src/Prowlarr.Api.V1/Migration/MigrationController.cs
Normal file
32
src/Prowlarr.Api.V1/Migration/MigrationController.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NzbDrone.Core.Migration;
|
||||
using Prowlarr.Http;
|
||||
|
||||
namespace Prowlarr.Api.V1.Migration
|
||||
{
|
||||
[V1ApiController]
|
||||
public class MigrationController : Controller
|
||||
{
|
||||
private readonly IJackettMigrationService _jackettMigrationService;
|
||||
|
||||
public MigrationController(IJackettMigrationService jackettMigrationService)
|
||||
{
|
||||
_jackettMigrationService = jackettMigrationService;
|
||||
}
|
||||
|
||||
//TODO: Make this work with the frontend (e.g. passing params for jackettPath and jackettApi
|
||||
[HttpPost("jackettmigration")]
|
||||
public void JackettMigration()
|
||||
{
|
||||
var jackettIndexers = _jackettMigrationService.GetJackettIndexers(jackettPath, jackettApi);
|
||||
|
||||
foreach (var jackettIndexer in jackettIndexers)
|
||||
{
|
||||
var indexerconfig = _jackettMigrationService.GetJackettIndexerConfig(jackettIndexer, jackettPath, jackettApi);
|
||||
_jackettMigrationService.MigrateJackettIndexer(jackettIndexer, indexerconfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
4
src/Prowlarr.Api.V1/Migration/MigrationResource.cs
Normal file
4
src/Prowlarr.Api.V1/Migration/MigrationResource.cs
Normal file
@@ -0,0 +1,4 @@
|
||||
namespace Prowlarr.Api.V1.Migration
|
||||
{
|
||||
|
||||
}
|
||||
@@ -29,6 +29,18 @@ namespace Prowlarr.Http.Extensions
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static string GetNullableStringQueryParameter(this HttpRequest request, string parameter, string defaultValue = null)
|
||||
{
|
||||
var parameterValue = request.Query[parameter];
|
||||
|
||||
if (parameterValue.Any())
|
||||
{
|
||||
return parameterValue.ToString();
|
||||
}
|
||||
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public static PagingResource<TResource> ReadPagingResourceFromRequest<TResource>(this HttpRequest request)
|
||||
{
|
||||
if (!int.TryParse(request.Query["PageSize"].ToString(), out var pageSize))
|
||||
|
||||
Reference in New Issue
Block a user