Add recording of livestreams
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user