Duncan Tourolle 87bdec280b
All checks were successful
🏗️ Build Plugin / build (push) Successful in 46s
🧪 Test Plugin / test (push) Successful in 37s
🚀 Release Plugin / build-and-release (push) Successful in 53s
Add recording of livestreams
2026-03-07 15:52:51 +01:00

66 lines
2.5 KiB
C#

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Plugin.SRFPlay.Api.Models;
using Jellyfin.Plugin.SRFPlay.Api.Models.PlayV3;
namespace Jellyfin.Plugin.SRFPlay.Services.Interfaces;
/// <summary>
/// Service for managing sport livestream recordings.
/// </summary>
public interface IRecordingService
{
/// <summary>
/// Gets upcoming sport livestreams that can be recorded.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>List of upcoming sport livestreams.</returns>
Task<IReadOnlyList<PlayV3TvProgram>> GetUpcomingScheduleAsync(CancellationToken cancellationToken = default);
/// <summary>
/// Schedules a livestream for recording.
/// </summary>
/// <param name="urn">The SRF URN to record.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The created recording entry.</returns>
Task<RecordingEntry> ScheduleRecordingAsync(string urn, CancellationToken cancellationToken = default);
/// <summary>
/// Cancels a scheduled recording.
/// </summary>
/// <param name="recordingId">The recording ID.</param>
/// <returns>True if cancelled.</returns>
bool CancelRecording(string recordingId);
/// <summary>
/// Stops an active recording.
/// </summary>
/// <param name="recordingId">The recording ID.</param>
/// <returns>True if stopped.</returns>
bool StopRecording(string recordingId);
/// <summary>
/// Gets all recordings by state.
/// </summary>
/// <param name="stateFilter">Optional state filter.</param>
/// <returns>List of matching recording entries.</returns>
IReadOnlyList<RecordingEntry> GetRecordings(RecordingState? stateFilter = null);
/// <summary>
/// Deletes a completed recording (entry and optionally the file).
/// </summary>
/// <param name="recordingId">The recording ID.</param>
/// <param name="deleteFile">Whether to delete the file too.</param>
/// <returns>True if deleted.</returns>
bool DeleteRecording(string recordingId, bool deleteFile = true);
/// <summary>
/// Checks scheduled recordings and starts/stops them as needed.
/// Called periodically by the scheduler task.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A task representing the async operation.</returns>
Task ProcessRecordingsAsync(CancellationToken cancellationToken = default);
}