Skip to content

Commit f751ceb

Browse files
committed
add PlayOrPause support
1 parent 5f90919 commit f751ceb

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

src/Client/IPlayerClient.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,21 @@ ValueTask<PlayerState> GetPlayerState(
9292
ValueTask Pause(CancellationToken cancellationToken = default);
9393

9494
/// <summary>
95-
/// Toggles pause state.
95+
/// Toggles between <see cref="PlaybackState.Playing"/> and <see cref="PlaybackState.Paused"/>.
96+
/// Does nothing if <see cref="PlaybackState.Stopped"/>.
9697
/// </summary>
9798
/// <param name="cancellationToken">Cancellation token.</param>
9899
/// <returns>Request task.</returns>
99100
ValueTask TogglePause(CancellationToken cancellationToken = default);
100101

102+
/// <summary>
103+
/// Toggles between <see cref="PlaybackState.Playing"/> and <see cref="PlaybackState.Paused"/>.
104+
/// Starts playback if <see cref="PlaybackState.Stopped"/>.
105+
/// </summary>
106+
/// <param name="cancellationToken">Cancellation token.</param>
107+
/// <returns>Request task.</returns>
108+
ValueTask PlayOrPause(CancellationToken cancellationToken = default);
109+
101110
/// <summary>
102111
/// Updates player state.
103112
/// </summary>

src/Client/PlayerClient.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,12 @@ public async ValueTask TogglePause(CancellationToken cancellationToken = default
134134
await _handler.Post("api/player/pause/toggle", null, cancellationToken).ConfigureAwait(false);
135135
}
136136

137+
/// <inheritdoc />
138+
public async ValueTask PlayOrPause(CancellationToken cancellationToken = default)
139+
{
140+
await _handler.Post("api/player/play-pause", null, cancellationToken).ConfigureAwait(false);
141+
}
142+
137143
/// <inheritdoc />
138144
public async ValueTask SetPlayerState(
139145
SetPlayerStateRequest request, CancellationToken cancellationToken = default)

src/CommandLineTool/Commands/PauseCommand.cs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,44 @@
66

77
namespace Beefweb.CommandLineTool.Commands;
88

9-
[Command("pause", Description = "Pause playback")]
9+
[Command("pause", Description = "Pause or resume playback")]
1010
public class PauseCommand(IClientProvider clientProvider) : ServerCommandBase(clientProvider)
1111
{
12-
[Option("-t|--toggle", Description = "Toggle pause state instead of pausing")]
12+
[Option("-p|--play-pause", Description = "Toggle paused state. Start playback if stopped")]
13+
public bool PlayPause { get; set; }
14+
15+
[Option("-t|--toggle", Description = "Toggle paused state. Do nothing if stopped")]
1316
public bool Toggle { get; set; }
1417

15-
[Option("-f|--off", Description = "Disable paused state (does nothing if not paused)")]
18+
[Option("-f|--off", Description = "Disable paused state. Do nothing if not paused")]
1619
public bool Off { get; set; }
1720

1821
public override async Task OnExecuteAsync(CancellationToken ct)
1922
{
2023
await base.OnExecuteAsync(ct);
2124

25+
if (PlayPause)
26+
{
27+
await Client.PlayOrPause(ct);
28+
return;
29+
}
30+
2231
if (Toggle)
2332
{
2433
await Client.TogglePause(ct);
2534
return;
2635
}
2736

28-
if (Off)
37+
if (!Off)
2938
{
30-
var state = await Client.GetPlayerState(null, ct);
31-
32-
if (state.PlaybackState == PlaybackState.Paused)
33-
{
34-
await Client.PlayCurrent(ct);
35-
}
36-
39+
await Client.Pause(ct);
3740
return;
3841
}
3942

40-
await Client.Pause(ct);
43+
var state = await Client.GetPlayerState(null, ct);
44+
if (state.PlaybackState == PlaybackState.Paused)
45+
{
46+
await Client.PlayCurrent(ct);
47+
}
4148
}
4249
}

0 commit comments

Comments
 (0)