mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Add refresh route
This commit is contained in:
parent
526ac1b8ab
commit
2273e99074
27
back/src/Kyoo.Abstractions/Controllers/IScanner.cs
Normal file
27
back/src/Kyoo.Abstractions/Controllers/IScanner.cs
Normal file
@ -0,0 +1,27 @@
|
||||
// Kyoo - A portable and vast media library solution.
|
||||
// Copyright (c) Kyoo.
|
||||
//
|
||||
// See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
//
|
||||
// Kyoo is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// Kyoo is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Kyoo.Abstractions.Controllers;
|
||||
|
||||
public interface IScanner
|
||||
{
|
||||
Task SendRefreshRequest(string kind, Guid id);
|
||||
}
|
@ -41,6 +41,29 @@ namespace Kyoo.Core.Api;
|
||||
public class EpisodeApi(ILibraryManager libraryManager)
|
||||
: TranscoderApi<Episode>(libraryManager.Episodes)
|
||||
{
|
||||
/// <summary>
|
||||
/// Refresh
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Ask a metadata refresh.
|
||||
/// </remarks>
|
||||
/// <param name="identifier">The ID or slug of the <see cref="Episode"/>.</param>
|
||||
/// <returns>Nothing</returns>
|
||||
/// <response code="404">No episode with the given ID or slug could be found.</response>
|
||||
[HttpPost("{identifier:id}/refresh")]
|
||||
[PartialPermission(Kind.Write)]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||
public async Task<ActionResult> Refresh(Identifier identifier, [FromServices] IScanner scanner)
|
||||
{
|
||||
Guid id = await identifier.Match(
|
||||
id => Task.FromResult(id),
|
||||
async slug => (await libraryManager.Episodes.Get(slug)).Id
|
||||
);
|
||||
await scanner.SendRefreshRequest(nameof(Episode), id);
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get episode's show
|
||||
/// </summary>
|
||||
|
@ -16,6 +16,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
using Kyoo.Abstractions.Controllers;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@ -41,5 +42,6 @@ public static class RabbitMqModule
|
||||
return factory.CreateConnection();
|
||||
});
|
||||
builder.Services.AddSingleton<RabbitProducer>();
|
||||
builder.Services.AddSingleton<IScanner, ScannerProducer>();
|
||||
}
|
||||
}
|
||||
|
71
back/src/Kyoo.RabbitMq/ScannerProducer.cs
Normal file
71
back/src/Kyoo.RabbitMq/ScannerProducer.cs
Normal file
@ -0,0 +1,71 @@
|
||||
// Kyoo - A portable and vast media library solution.
|
||||
// Copyright (c) Kyoo.
|
||||
//
|
||||
// See AUTHORS.md and LICENSE file in the project root for full license information.
|
||||
//
|
||||
// Kyoo is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// Kyoo is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using Kyoo.Abstractions.Controllers;
|
||||
using Kyoo.Abstractions.Models;
|
||||
using Kyoo.Utils;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
namespace Kyoo.RabbitMq;
|
||||
|
||||
public class ScannerProducer : IScanner
|
||||
{
|
||||
private readonly IModel _channel;
|
||||
|
||||
public ScannerProducer(IConnection rabbitConnection)
|
||||
{
|
||||
_channel = rabbitConnection.CreateModel();
|
||||
_channel.QueueDeclare("scanner", exclusive: false, autoDelete: false);
|
||||
}
|
||||
|
||||
private IRepository<T>.ResourceEventHandler _Publish<T>(
|
||||
string exchange,
|
||||
string type,
|
||||
string action
|
||||
)
|
||||
where T : IResource, IQuery
|
||||
{
|
||||
return (T resource) =>
|
||||
{
|
||||
Message<T> message =
|
||||
new()
|
||||
{
|
||||
Action = action,
|
||||
Type = type,
|
||||
Value = resource,
|
||||
};
|
||||
_channel.BasicPublish(
|
||||
exchange,
|
||||
routingKey: message.AsRoutingKey(),
|
||||
body: message.AsBytes()
|
||||
);
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
}
|
||||
|
||||
public Task SendRefreshRequest(string kind, Guid id)
|
||||
{
|
||||
var message = new { Action = "refresh", Kind = kind.ToLowerInvariant(), Id = id };
|
||||
var body = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(message, Utility.JsonOptions));
|
||||
_channel.BasicPublish("", routingKey: "scanner", body: body);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user