repo creation with initial code after cloning public repo

This commit is contained in:
2026-02-19 07:36:25 -05:00
commit 460884fea3
2860 changed files with 650825 additions and 0 deletions
@@ -0,0 +1,31 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class AbstractPlaybackRequest.
/// </summary>
public abstract class AbstractPlaybackRequest : IGroupPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="AbstractPlaybackRequest"/> class.
/// </summary>
protected AbstractPlaybackRequest()
{
// Do nothing.
}
/// <inheritdoc />
public RequestType Type { get; } = RequestType.Playback;
/// <inheritdoc />
public abstract PlaybackRequestType Action { get; }
/// <inheritdoc />
public abstract void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken);
}
}
@@ -0,0 +1,63 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class BufferGroupRequest.
/// </summary>
public class BufferGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="BufferGroupRequest"/> class.
/// </summary>
/// <param name="when">When the request has been made, as reported by the client.</param>
/// <param name="positionTicks">The position ticks.</param>
/// <param name="isPlaying">Whether the client playback is unpaused.</param>
/// <param name="playlistItemId">The playlist item identifier of the playing item.</param>
public BufferGroupRequest(DateTime when, long positionTicks, bool isPlaying, Guid playlistItemId)
{
When = when;
PositionTicks = positionTicks;
IsPlaying = isPlaying;
PlaylistItemId = playlistItemId;
}
/// <summary>
/// Gets when the request has been made by the client.
/// </summary>
/// <value>The date of the request.</value>
public DateTime When { get; }
/// <summary>
/// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long PositionTicks { get; }
/// <summary>
/// Gets a value indicating whether the client playback is unpaused.
/// </summary>
/// <value>The client playback status.</value>
public bool IsPlaying { get; }
/// <summary>
/// Gets the playlist item identifier of the playing item.
/// </summary>
/// <value>The playlist item identifier.</value>
public Guid PlaylistItemId { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Buffer;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,38 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class IgnoreWaitGroupRequest.
/// </summary>
public class IgnoreWaitGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="IgnoreWaitGroupRequest"/> class.
/// </summary>
/// <param name="ignoreWait">Whether the client should be ignored.</param>
public IgnoreWaitGroupRequest(bool ignoreWait)
{
IgnoreWait = ignoreWait;
}
/// <summary>
/// Gets a value indicating whether the client should be ignored.
/// </summary>
/// <value>The client group-wait status.</value>
public bool IgnoreWait { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.IgnoreWait;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,47 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class MovePlaylistItemGroupRequest.
/// </summary>
public class MovePlaylistItemGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="MovePlaylistItemGroupRequest"/> class.
/// </summary>
/// <param name="playlistItemId">The playlist identifier of the item.</param>
/// <param name="newIndex">The new position.</param>
public MovePlaylistItemGroupRequest(Guid playlistItemId, int newIndex)
{
PlaylistItemId = playlistItemId;
NewIndex = newIndex;
}
/// <summary>
/// Gets the playlist identifier of the item.
/// </summary>
/// <value>The playlist identifier of the item.</value>
public Guid PlaylistItemId { get; }
/// <summary>
/// Gets the new position.
/// </summary>
/// <value>The new position.</value>
public int NewIndex { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.MovePlaylistItem;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,39 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class NextItemGroupRequest.
/// </summary>
public class NextItemGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="NextItemGroupRequest"/> class.
/// </summary>
/// <param name="playlistItemId">The playing item identifier.</param>
public NextItemGroupRequest(Guid playlistItemId)
{
PlaylistItemId = playlistItemId;
}
/// <summary>
/// Gets the playing item identifier.
/// </summary>
/// <value>The playing item identifier.</value>
public Guid PlaylistItemId { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.NextItem;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,23 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PauseGroupRequest.
/// </summary>
public class PauseGroupRequest : AbstractPlaybackRequest
{
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Pause;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,38 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PingGroupRequest.
/// </summary>
public class PingGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="PingGroupRequest"/> class.
/// </summary>
/// <param name="ping">The ping time.</param>
public PingGroupRequest(long ping)
{
Ping = ping;
}
/// <summary>
/// Gets the ping time.
/// </summary>
/// <value>The ping time.</value>
public long Ping { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Ping;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,56 @@
#nullable disable
using System;
using System.Collections.Generic;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PlayGroupRequest.
/// </summary>
public class PlayGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="PlayGroupRequest"/> class.
/// </summary>
/// <param name="playingQueue">The playing queue.</param>
/// <param name="playingItemPosition">The playing item position.</param>
/// <param name="startPositionTicks">The start position ticks.</param>
public PlayGroupRequest(IReadOnlyList<Guid> playingQueue, int playingItemPosition, long startPositionTicks)
{
PlayingQueue = playingQueue ?? Array.Empty<Guid>();
PlayingItemPosition = playingItemPosition;
StartPositionTicks = startPositionTicks;
}
/// <summary>
/// Gets the playing queue.
/// </summary>
/// <value>The playing queue.</value>
public IReadOnlyList<Guid> PlayingQueue { get; }
/// <summary>
/// Gets the position of the playing item in the queue.
/// </summary>
/// <value>The playing item position.</value>
public int PlayingItemPosition { get; }
/// <summary>
/// Gets the start position ticks.
/// </summary>
/// <value>The start position ticks.</value>
public long StartPositionTicks { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Play;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,39 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PreviousItemGroupRequest.
/// </summary>
public class PreviousItemGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="PreviousItemGroupRequest"/> class.
/// </summary>
/// <param name="playlistItemId">The playing item identifier.</param>
public PreviousItemGroupRequest(Guid playlistItemId)
{
PlaylistItemId = playlistItemId;
}
/// <summary>
/// Gets the playing item identifier.
/// </summary>
/// <value>The playing item identifier.</value>
public Guid PlaylistItemId { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.PreviousItem;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,48 @@
#nullable disable
using System;
using System.Collections.Generic;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class QueueGroupRequest.
/// </summary>
public class QueueGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="QueueGroupRequest"/> class.
/// </summary>
/// <param name="items">The items to add to the queue.</param>
/// <param name="mode">The enqueue mode.</param>
public QueueGroupRequest(IReadOnlyList<Guid> items, GroupQueueMode mode)
{
ItemIds = items ?? Array.Empty<Guid>();
Mode = mode;
}
/// <summary>
/// Gets the items to enqueue.
/// </summary>
/// <value>The items to enqueue.</value>
public IReadOnlyList<Guid> ItemIds { get; }
/// <summary>
/// Gets the mode in which to add the new items.
/// </summary>
/// <value>The enqueue mode.</value>
public GroupQueueMode Mode { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Queue;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,63 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class ReadyGroupRequest.
/// </summary>
public class ReadyGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="ReadyGroupRequest"/> class.
/// </summary>
/// <param name="when">When the request has been made, as reported by the client.</param>
/// <param name="positionTicks">The position ticks.</param>
/// <param name="isPlaying">Whether the client playback is unpaused.</param>
/// <param name="playlistItemId">The playlist item identifier of the playing item.</param>
public ReadyGroupRequest(DateTime when, long positionTicks, bool isPlaying, Guid playlistItemId)
{
When = when;
PositionTicks = positionTicks;
IsPlaying = isPlaying;
PlaylistItemId = playlistItemId;
}
/// <summary>
/// Gets when the request has been made by the client.
/// </summary>
/// <value>The date of the request.</value>
public DateTime When { get; }
/// <summary>
/// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long PositionTicks { get; }
/// <summary>
/// Gets a value indicating whether the client playback is unpaused.
/// </summary>
/// <value>The client playback status.</value>
public bool IsPlaying { get; }
/// <summary>
/// Gets the playlist item identifier of the playing item.
/// </summary>
/// <value>The playlist item identifier.</value>
public Guid PlaylistItemId { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Ready;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,56 @@
#nullable disable
using System;
using System.Collections.Generic;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class RemoveFromPlaylistGroupRequest.
/// </summary>
public class RemoveFromPlaylistGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="RemoveFromPlaylistGroupRequest"/> class.
/// </summary>
/// <param name="items">The playlist ids of the items to remove.</param>
/// <param name="clearPlaylist">Whether to clear the entire playlist. The items list will be ignored.</param>
/// <param name="clearPlayingItem">Whether to remove the playing item as well. Used only when clearing the playlist.</param>
public RemoveFromPlaylistGroupRequest(IReadOnlyList<Guid> items, bool clearPlaylist = false, bool clearPlayingItem = false)
{
PlaylistItemIds = items ?? Array.Empty<Guid>();
ClearPlaylist = clearPlaylist;
ClearPlayingItem = clearPlayingItem;
}
/// <summary>
/// Gets the playlist identifiers of the items.
/// </summary>
/// <value>The playlist identifiers of the items.</value>
public IReadOnlyList<Guid> PlaylistItemIds { get; }
/// <summary>
/// Gets a value indicating whether the entire playlist should be cleared.
/// </summary>
/// <value>Whether the entire playlist should be cleared.</value>
public bool ClearPlaylist { get; }
/// <summary>
/// Gets a value indicating whether the playing item should be removed as well.
/// </summary>
/// <value>Whether the playing item should be removed as well.</value>
public bool ClearPlayingItem { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.RemoveFromPlaylist;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,38 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SeekGroupRequest.
/// </summary>
public class SeekGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="SeekGroupRequest"/> class.
/// </summary>
/// <param name="positionTicks">The position ticks.</param>
public SeekGroupRequest(long positionTicks)
{
PositionTicks = positionTicks;
}
/// <summary>
/// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long PositionTicks { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Seek;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,39 @@
#nullable disable
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetPlaylistItemGroupRequest.
/// </summary>
public class SetPlaylistItemGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="SetPlaylistItemGroupRequest"/> class.
/// </summary>
/// <param name="playlistItemId">The playlist identifier of the item.</param>
public SetPlaylistItemGroupRequest(Guid playlistItemId)
{
PlaylistItemId = playlistItemId;
}
/// <summary>
/// Gets the playlist identifier of the playing item.
/// </summary>
/// <value>The playlist identifier of the playing item.</value>
public Guid PlaylistItemId { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetPlaylistItem;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,38 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetRepeatModeGroupRequest.
/// </summary>
public class SetRepeatModeGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="SetRepeatModeGroupRequest"/> class.
/// </summary>
/// <param name="mode">The repeat mode.</param>
public SetRepeatModeGroupRequest(GroupRepeatMode mode)
{
Mode = mode;
}
/// <summary>
/// Gets the repeat mode.
/// </summary>
/// <value>The repeat mode.</value>
public GroupRepeatMode Mode { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetRepeatMode;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,38 @@
#nullable disable
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetShuffleModeGroupRequest.
/// </summary>
public class SetShuffleModeGroupRequest : AbstractPlaybackRequest
{
/// <summary>
/// Initializes a new instance of the <see cref="SetShuffleModeGroupRequest"/> class.
/// </summary>
/// <param name="mode">The shuffle mode.</param>
public SetShuffleModeGroupRequest(GroupShuffleMode mode)
{
Mode = mode;
}
/// <summary>
/// Gets the shuffle mode.
/// </summary>
/// <value>The shuffle mode.</value>
public GroupShuffleMode Mode { get; }
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetShuffleMode;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,21 @@
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class StopGroupRequest.
/// </summary>
public class StopGroupRequest : AbstractPlaybackRequest
{
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Stop;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}
@@ -0,0 +1,21 @@
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class UnpauseGroupRequest.
/// </summary>
public class UnpauseGroupRequest : AbstractPlaybackRequest
{
/// <inheritdoc />
public override PlaybackRequestType Action { get; } = PlaybackRequestType.Unpause;
/// <inheritdoc />
public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(this, context, state.Type, session, cancellationToken);
}
}
}