66 lines
2.5 KiB
C#
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);
|
|
}
|