diff --git a/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingEntry.cs b/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingEntry.cs
new file mode 100644
index 0000000..697974c
--- /dev/null
+++ b/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingEntry.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Text.Json.Serialization;
+
+namespace Jellyfin.Plugin.SRFPlay.Api.Models;
+
+///
+/// A scheduled or active recording.
+///
+public class RecordingEntry
+{
+ ///
+ /// Gets or sets the unique recording ID.
+ ///
+ [JsonPropertyName("id")]
+ public string Id { get; set; } = string.Empty;
+
+ ///
+ /// Gets or sets the SRF URN.
+ ///
+ [JsonPropertyName("urn")]
+ public string Urn { get; set; } = string.Empty;
+
+ ///
+ /// Gets or sets the title.
+ ///
+ [JsonPropertyName("title")]
+ public string Title { get; set; } = string.Empty;
+
+ ///
+ /// Gets or sets the description.
+ ///
+ [JsonPropertyName("description")]
+ public string? Description { get; set; }
+
+ ///
+ /// Gets or sets the image URL.
+ ///
+ [JsonPropertyName("imageUrl")]
+ public string? ImageUrl { get; set; }
+
+ ///
+ /// Gets or sets when the livestream starts.
+ ///
+ [JsonPropertyName("validFrom")]
+ public DateTime? ValidFrom { get; set; }
+
+ ///
+ /// Gets or sets when the livestream ends.
+ ///
+ [JsonPropertyName("validTo")]
+ public DateTime? ValidTo { get; set; }
+
+ ///
+ /// Gets or sets the recording state.
+ ///
+ [JsonPropertyName("state")]
+ public RecordingState State { get; set; } = RecordingState.Scheduled;
+
+ ///
+ /// Gets or sets the output file path.
+ ///
+ [JsonPropertyName("outputPath")]
+ public string? OutputPath { get; set; }
+
+ ///
+ /// Gets or sets when the recording actually started.
+ ///
+ [JsonPropertyName("recordingStartedAt")]
+ public DateTime? RecordingStartedAt { get; set; }
+
+ ///
+ /// Gets or sets when the recording ended.
+ ///
+ [JsonPropertyName("recordingEndedAt")]
+ public DateTime? RecordingEndedAt { get; set; }
+
+ ///
+ /// Gets or sets the file size in bytes.
+ ///
+ [JsonPropertyName("fileSizeBytes")]
+ public long? FileSizeBytes { get; set; }
+
+ ///
+ /// Gets or sets the error message if recording failed.
+ ///
+ [JsonPropertyName("errorMessage")]
+ public string? ErrorMessage { get; set; }
+
+ ///
+ /// Gets or sets when this entry was created.
+ ///
+ [JsonPropertyName("createdAt")]
+ public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
+}
diff --git a/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingState.cs b/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingState.cs
new file mode 100644
index 0000000..e1ec683
--- /dev/null
+++ b/Jellyfin.Plugin.SRFPlay/Api/Models/RecordingState.cs
@@ -0,0 +1,25 @@
+namespace Jellyfin.Plugin.SRFPlay.Api.Models;
+
+///
+/// State of a recording.
+///
+public enum RecordingState
+{
+ /// Scheduled for future recording.
+ Scheduled,
+
+ /// Waiting for stream to become available.
+ WaitingForStream,
+
+ /// Currently recording.
+ Recording,
+
+ /// Recording completed successfully.
+ Completed,
+
+ /// Recording failed.
+ Failed,
+
+ /// Recording was cancelled.
+ Cancelled
+}
diff --git a/Jellyfin.Plugin.SRFPlay/Configuration/PluginConfiguration.cs b/Jellyfin.Plugin.SRFPlay/Configuration/PluginConfiguration.cs
index abd4c93..b62c5a9 100644
--- a/Jellyfin.Plugin.SRFPlay/Configuration/PluginConfiguration.cs
+++ b/Jellyfin.Plugin.SRFPlay/Configuration/PluginConfiguration.cs
@@ -156,4 +156,9 @@ public class PluginConfiguration : BasePluginConfiguration
/// When enabled, generates custom thumbnails instead of using SRF-provided images.
///
public bool GenerateTitleCards { get; set; }
+
+ ///
+ /// Gets or sets the output directory for sport livestream recordings.
+ ///
+ public string RecordingOutputPath { get; set; } = string.Empty;
}
diff --git a/Jellyfin.Plugin.SRFPlay/Configuration/configPage.html b/Jellyfin.Plugin.SRFPlay/Configuration/configPage.html
index 31379ad..fa0bb56 100644
--- a/Jellyfin.Plugin.SRFPlay/Configuration/configPage.html
+++ b/Jellyfin.Plugin.SRFPlay/Configuration/configPage.html
@@ -90,6 +90,13 @@
Password for proxy authentication (leave empty if not required)
+ Recording Settings
+
+
Network Settings
@@ -106,6 +113,31 @@
+
+
+ Sport Livestream Recordings
+
+ Upcoming Sport Livestreams
+ Select livestreams to record. The recording starts automatically when the stream goes live.
+
+
+
+ Scheduled & Active Recordings
+
+
+ Completed Recordings
+
+