#nullable disable using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Session; using MediaBrowser.Controller.SyncPlay.Queue; using MediaBrowser.Model.SyncPlay; namespace MediaBrowser.Controller.SyncPlay { /// /// Interface IGroupStateContext. /// public interface IGroupStateContext { /// /// Gets the default ping value used for sessions, in milliseconds. /// /// The default ping value used for sessions, in milliseconds. long DefaultPing { get; } /// /// Gets the maximum time offset error accepted for dates reported by clients, in milliseconds. /// /// The maximum offset error accepted, in milliseconds. long TimeSyncOffset { get; } /// /// Gets the maximum offset error accepted for position reported by clients, in milliseconds. /// /// The maximum offset error accepted, in milliseconds. long MaxPlaybackOffset { get; } /// /// Gets the group identifier. /// /// The group identifier. Guid GroupId { get; } /// /// Gets or sets the position ticks. /// /// The position ticks. long PositionTicks { get; set; } /// /// Gets or sets the last activity. /// /// The last activity. DateTime LastActivity { get; set; } /// /// Gets the play queue. /// /// The play queue. PlayQueueManager PlayQueue { get; } /// /// Sets a new state. /// /// The new state. void SetState(IGroupState state); /// /// Sends a GroupUpdate message to the interested sessions. /// /// The type of the data of the message. /// The current session. /// The filtering type. /// The message to send. /// The cancellation token. /// The task. Task SendGroupUpdate(SessionInfo from, SyncPlayBroadcastType type, GroupUpdate message, CancellationToken cancellationToken); /// /// Sends a playback command to the interested sessions. /// /// The current session. /// The filtering type. /// The message to send. /// The cancellation token. /// The task. Task SendCommand(SessionInfo from, SyncPlayBroadcastType type, SendCommand message, CancellationToken cancellationToken); /// /// Builds a new playback command with some default values. /// /// The command type. /// The command. SendCommand NewSyncPlayCommand(SendCommandType type); /// /// Builds a new group update message. /// /// The type of the data of the message. /// The update type. /// The data to send. /// The group update. GroupUpdate NewSyncPlayGroupUpdate(GroupUpdateType type, T data); /// /// Sanitizes the PositionTicks, considers the current playing item when available. /// /// The PositionTicks. /// The sanitized position ticks. long SanitizePositionTicks(long? positionTicks); /// /// Updates the ping of a session, in milliseconds. /// /// The session. /// The ping, in milliseconds. void UpdatePing(SessionInfo session, long ping); /// /// Gets the highest ping in the group, in milliseconds. /// /// The highest ping in the group. long GetHighestPing(); /// /// Sets the session's buffering state. /// /// The session. /// The state. void SetBuffering(SessionInfo session, bool isBuffering); /// /// Sets the buffering state of all the sessions. /// /// The state. void SetAllBuffering(bool isBuffering); /// /// Gets the group buffering state. /// /// true if there is a session buffering in the group; false otherwise. bool IsBuffering(); /// /// Sets the session's group wait state. /// /// The session. /// The state. void SetIgnoreGroupWait(SessionInfo session, bool ignoreGroupWait); /// /// Sets a new play queue. /// /// The new play queue. /// The playing item position in the play queue. /// The start position ticks. /// true if the play queue has been changed; false if something went wrong. bool SetPlayQueue(IReadOnlyList playQueue, int playingItemPosition, long startPositionTicks); /// /// Sets the playing item. /// /// The new playing item identifier. /// true if the play queue has been changed; false if something went wrong. bool SetPlayingItem(Guid playlistItemId); /// /// Clears the play queue. /// /// Whether to remove the playing item as well. void ClearPlayQueue(bool clearPlayingItem); /// /// Removes items from the play queue. /// /// The items to remove. /// true if playing item got removed; false otherwise. bool RemoveFromPlayQueue(IReadOnlyList playlistItemIds); /// /// Moves an item in the play queue. /// /// The playlist identifier of the item to move. /// The new position. /// true if item has been moved; false if something went wrong. bool MoveItemInPlayQueue(Guid playlistItemId, int newIndex); /// /// Updates the play queue. /// /// The new items to add to the play queue. /// The mode with which the items will be added. /// true if the play queue has been changed; false if something went wrong. bool AddToPlayQueue(IReadOnlyList newItems, GroupQueueMode mode); /// /// Restarts current item in play queue. /// void RestartCurrentItem(); /// /// Picks next item in play queue. /// /// true if the item changed; false otherwise. bool NextItemInQueue(); /// /// Picks previous item in play queue. /// /// true if the item changed; false otherwise. bool PreviousItemInQueue(); /// /// Sets the repeat mode. /// /// The new mode. void SetRepeatMode(GroupRepeatMode mode); /// /// Sets the shuffle mode. /// /// The new mode. void SetShuffleMode(GroupShuffleMode mode); /// /// Creates a play queue update. /// /// The reason for the update. /// The play queue update. PlayQueueUpdate GetPlayQueueUpdate(PlayQueueUpdateReason reason); } }