Duncan Tourolle 2f5a182afd
Some checks failed
🏗️ Build Plugin / call (push) Failing after 0s
📝 Create/Update Release Draft & Release Bump PR / call (push) Failing after 0s
🔬 Run CodeQL / call (push) Failing after 0s
🧪 Test Plugin / call (push) Failing after 0s
First POC with working playback
2025-12-13 23:54:33 +01:00

113 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Jellyfin.Plugin.JellyLMS.Models;
namespace Jellyfin.Plugin.JellyLMS.Services;
/// <summary>
/// Interface for LMS JSON-RPC API communication.
/// </summary>
public interface ILmsApiClient
{
/// <summary>
/// Tests the connection to the LMS server.
/// </summary>
/// <returns>Server status with connection result.</returns>
Task<LmsServerStatus> TestConnectionAsync();
/// <summary>
/// Gets all players connected to LMS.
/// </summary>
/// <returns>List of LMS players.</returns>
Task<List<LmsPlayer>> GetPlayersAsync();
/// <summary>
/// Gets the status of a specific player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>The player status.</returns>
Task<PlayerStatusResult?> GetPlayerStatusAsync(string playerMac);
/// <summary>
/// Plays a URL on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <param name="url">The audio URL to play.</param>
/// <param name="title">Optional title for display.</param>
/// <returns>True if successful.</returns>
Task<bool> PlayUrlAsync(string playerMac, string url, string? title = null);
/// <summary>
/// Pauses playback on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> PauseAsync(string playerMac);
/// <summary>
/// Resumes playback on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> PlayAsync(string playerMac);
/// <summary>
/// Stops playback on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> StopAsync(string playerMac);
/// <summary>
/// Sets the volume on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <param name="volume">Volume level (0-100).</param>
/// <returns>True if successful.</returns>
Task<bool> SetVolumeAsync(string playerMac, int volume);
/// <summary>
/// Seeks to a position on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <param name="positionSeconds">Position in seconds.</param>
/// <returns>True if successful.</returns>
Task<bool> SeekAsync(string playerMac, double positionSeconds);
/// <summary>
/// Powers on the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> PowerOnAsync(string playerMac);
/// <summary>
/// Powers off the specified player.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> PowerOffAsync(string playerMac);
/// <summary>
/// Syncs a slave player to a master player.
/// </summary>
/// <param name="masterMac">The master player's MAC address.</param>
/// <param name="slaveMac">The slave player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> SyncPlayerAsync(string masterMac, string slaveMac);
/// <summary>
/// Removes a player from its sync group.
/// </summary>
/// <param name="playerMac">The player's MAC address.</param>
/// <returns>True if successful.</returns>
Task<bool> UnsyncPlayerAsync(string playerMac);
/// <summary>
/// Gets all current sync groups.
/// </summary>
/// <returns>List of sync groups.</returns>
Task<List<SyncGroup>> GetSyncGroupsAsync();
}