diff --git a/protos/player.proto b/protos/player.proto index 087e54c..e86cd47 100644 --- a/protos/player.proto +++ b/protos/player.proto @@ -6,16 +6,20 @@ import 'library.proto'; package player; service Player { - rpc PlayTrack(PlayTrackRequest) returns (PlayTrackResponse); + rpc PlayTrack(TrackRequest) returns (PlayTrackResponse); rpc ResumeTrack(google.protobuf.Empty) returns (PauseState); rpc PauseTrack(google.protobuf.Empty) returns (PauseState); rpc TogglePause(google.protobuf.Empty) returns (PauseState); rpc GetStatus(google.protobuf.Empty) returns (stream PlayerStatus); rpc SeekPosition(SeekPositionRequest) returns (SeekPositionResponse); rpc SetVolume(SetVolumeRequest) returns (SetVolumeResponse); + rpc PlayTrackNext(TrackRequest) returns (Queue); + rpc AddTrackToQueue(TrackRequest) returns (Queue); + rpc SkipTrack(google.protobuf.Empty) returns (PlayerStatus); + rpc SkipToQueueIndex(SkipToQueueIndexRequest) returns (PlayerStatus); } -message PlayTrackRequest { +message TrackRequest { string hash = 1; } @@ -29,6 +33,11 @@ message PlayerStatus { bool is_paused = 2; float volume = 3; uint64 progress = 4; + repeated library.Track queue = 5; +} + +message Queue { + repeated library.Track tracks = 1; } message PauseState { @@ -50,3 +59,7 @@ message SetVolumeRequest { message SetVolumeResponse { float volume = 1; } + +message SkipToQueueIndexRequest { + uint32 index = 1; +} diff --git a/src/lib/components/groove/Footer.svelte b/src/lib/components/groove/Footer.svelte index 643cae9..4abdaf0 100644 --- a/src/lib/components/groove/Footer.svelte +++ b/src/lib/components/groove/Footer.svelte @@ -55,14 +55,22 @@ console.log(`SKIP TO QUEUE INDEX ${index}`); } - const submitTogglePause: SubmitFunction = async () => { + const submitPlayerAction: SubmitFunction = async () => { return async ({ update, result }) => { await update({ invalidateAll: false }); - if (result.type === 'success' && result.data && 'isPaused' in result.data) { - player.isPaused = result.data.isPaused; + if (result.type !== 'success' || !result.data) { + return; + } + + if ('isPaused' in result.data) { + if (!('volume' in result.data)) { + player.isPaused = result.data.isPaused; + } else { + player.applyStatus(result.data); + } } }; }; @@ -93,9 +101,9 @@
- -
@@ -116,7 +124,7 @@ {#snippet child({ props })} {/snippet} @@ -125,34 +133,35 @@ -
- {#each [] as _track, i} +
+ {#each player.queue as track, i} {/each} -
+ diff --git a/src/lib/components/groove/TrackListing.svelte b/src/lib/components/groove/TrackListing.svelte index ebb3864..d60f9b3 100644 --- a/src/lib/components/groove/TrackListing.svelte +++ b/src/lib/components/groove/TrackListing.svelte @@ -2,11 +2,10 @@ import { enhance } from '$app/forms'; import { getCoverUrl } from '$lib/covers'; import { getPlayerState } from '$lib/player.svelte'; - - // import { AudioLines } from 'lucide-svelte'; - import { AudioLines } from 'lucide-svelte'; + import { AudioLines, Music2, ListMusic, ListEnd } from 'lucide-svelte'; import type { SubmitFunction } from '../../../routes/tracks/[hash]/$types'; import type { Track } from '$lib/proto/library'; + import * as ContextMenu from '$lib/components/ui/context-menu'; interface Props { track: Track; @@ -14,21 +13,44 @@ let { track }: Props = $props(); + let isOpen = $state(false); + const player = getPlayerState(); const submitPlayTrack: SubmitFunction = async () => { return async ({ update, result }) => { + isOpen = false; + await update({ invalidateAll: false }); - if (result.type === 'success' && result.data) { + if (result.type === 'success' && result.data && 'track' in result.data) { + player.queue = []; player.currentlyPlaying = result.data.track ?? null; player.progress = result.data.position; player.isPaused = false; } }; }; + + const submitEnqueue: SubmitFunction = async () => { + return async ({ update, result }) => { + isOpen = false; + + await update({ + invalidateAll: false + }); + + if (result.type === 'success' && result.data && 'tracks' in result.data) { + player.queue = result.data.tracks; + } + }; + }; + + function contextMenuItemClicked(e: MouseEvent) { + e.stopPropagation(); + }
-
- + + +
+ -
- -
-
-
-

{track.name}

-

{track.artistName}

-
+
+ +
+
+
+

{track.name}

+

{track.artistName}

+
+ + + + + + + + +
+ +
+
+ +
+ +
+
+
+ diff --git a/src/lib/player.svelte.ts b/src/lib/player.svelte.ts index 27601a5..9f9013c 100644 --- a/src/lib/player.svelte.ts +++ b/src/lib/player.svelte.ts @@ -10,6 +10,7 @@ class PlayerState { progress = $state(0n); isPaused = $state(false); adjustingVolume = $state(false); + queue = $state([]); #abortContoller: AbortController | null = null; constructor() { @@ -34,6 +35,7 @@ class PlayerState { this.progress = status.progress; this.currentlyPlaying = status.currentlyPlaying ?? null; this.isPaused = status.isPaused; + this.queue = status.queue; } abort() { diff --git a/src/lib/proto.ts b/src/lib/proto.ts index 5e21160..34adde3 100644 --- a/src/lib/proto.ts +++ b/src/lib/proto.ts @@ -6,7 +6,18 @@ export function serializable(data: T): F { if (typeof value === 'object') { /// @ts-ignore - obj[key] = serializable(value); + if ('length' in value) { + /// @ts-ignore + obj[key] = + value.length > 0 + ? value.map((v) => { + return typeof v === 'object' ? serializable(v) : v; + }) + : []; + } else { + /// @ts-ignore + obj[key] = serializable(value); + } } else { /// @ts-ignore obj[key] = value; diff --git a/src/lib/proto/google/protobuf/empty.ts b/src/lib/proto/google/protobuf/empty.ts index 77093fe..10e3e87 100644 --- a/src/lib/proto/google/protobuf/empty.ts +++ b/src/lib/proto/google/protobuf/empty.ts @@ -32,14 +32,14 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // -import type { BinaryWriteOptions } from '@protobuf-ts/runtime'; -import type { IBinaryWriter } from '@protobuf-ts/runtime'; -import { UnknownFieldHandler } from '@protobuf-ts/runtime'; -import type { BinaryReadOptions } from '@protobuf-ts/runtime'; -import type { IBinaryReader } from '@protobuf-ts/runtime'; -import type { PartialMessage } from '@protobuf-ts/runtime'; -import { reflectionMergePartial } from '@protobuf-ts/runtime'; -import { MessageType } from '@protobuf-ts/runtime'; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; /** * A generic empty message that you can re-use to avoid defining duplicated * empty messages in your APIs. A typical example is to use it as the request @@ -52,34 +52,28 @@ import { MessageType } from '@protobuf-ts/runtime'; * * @generated from protobuf message google.protobuf.Empty */ -export interface Empty {} +export interface Empty { +} // @generated message type with reflection information, may provide speed optimized methods class Empty$Type extends MessageType { - constructor() { - super('google.protobuf.Empty', []); - } - create(value?: PartialMessage): Empty { - const message = globalThis.Object.create(this.messagePrototype!); - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: Empty - ): Empty { - return target ?? this.create(); - } - internalBinaryWrite( - message: Empty, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("google.protobuf.Empty", []); + } + create(value?: PartialMessage): Empty { + const message = globalThis.Object.create((this.messagePrototype!)); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Empty): Empty { + return target ?? this.create(); + } + internalBinaryWrite(message: Empty, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message google.protobuf.Empty diff --git a/src/lib/proto/library.client.ts b/src/lib/proto/library.client.ts index d5177dd..5ed1214 100644 --- a/src/lib/proto/library.client.ts +++ b/src/lib/proto/library.client.ts @@ -1,37 +1,37 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "library.proto" (package "library", syntax proto3) // tslint:disable -import type { RpcTransport } from '@protobuf-ts/runtime-rpc'; -import type { ServiceInfo } from '@protobuf-ts/runtime-rpc'; -import { Library } from './library'; -import { stackIntercept } from '@protobuf-ts/runtime-rpc'; -import type { TrackList } from './library'; -import type { Empty } from './google/protobuf/empty'; -import type { UnaryCall } from '@protobuf-ts/runtime-rpc'; -import type { RpcOptions } from '@protobuf-ts/runtime-rpc'; +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { Library } from "./library"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { TrackList } from "./library"; +import type { Empty } from "./google/protobuf/empty"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** * @generated from protobuf service library.Library */ export interface ILibraryClient { - /** - * @generated from protobuf rpc: ListTracks(google.protobuf.Empty) returns (library.TrackList); - */ - listTracks(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: ListTracks(google.protobuf.Empty) returns (library.TrackList); + */ + listTracks(input: Empty, options?: RpcOptions): UnaryCall; } /** * @generated from protobuf service library.Library */ export class LibraryClient implements ILibraryClient, ServiceInfo { - typeName = Library.typeName; - methods = Library.methods; - options = Library.options; - constructor(private readonly _transport: RpcTransport) {} - /** - * @generated from protobuf rpc: ListTracks(google.protobuf.Empty) returns (library.TrackList); - */ - listTracks(input: Empty, options?: RpcOptions): UnaryCall { - const method = this.methods[0], - opt = this._transport.mergeOptions(options); - return stackIntercept('unary', this._transport, method, opt, input); - } + typeName = Library.typeName; + methods = Library.methods; + options = Library.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * @generated from protobuf rpc: ListTracks(google.protobuf.Empty) returns (library.TrackList); + */ + listTracks(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } } diff --git a/src/lib/proto/library.ts b/src/lib/proto/library.ts index f34788e..75d0a14 100644 --- a/src/lib/proto/library.ts +++ b/src/lib/proto/library.ts @@ -1,113 +1,93 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "library.proto" (package "library", syntax proto3) // tslint:disable -import { Empty } from './google/protobuf/empty'; -import { ServiceType } from '@protobuf-ts/runtime-rpc'; -import type { BinaryWriteOptions } from '@protobuf-ts/runtime'; -import type { IBinaryWriter } from '@protobuf-ts/runtime'; -import { WireType } from '@protobuf-ts/runtime'; -import type { BinaryReadOptions } from '@protobuf-ts/runtime'; -import type { IBinaryReader } from '@protobuf-ts/runtime'; -import { UnknownFieldHandler } from '@protobuf-ts/runtime'; -import type { PartialMessage } from '@protobuf-ts/runtime'; -import { reflectionMergePartial } from '@protobuf-ts/runtime'; -import { MessageType } from '@protobuf-ts/runtime'; +import { Empty } from "./google/protobuf/empty"; +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; /** * @generated from protobuf message library.TrackList */ export interface TrackList { - /** - * @generated from protobuf field: repeated library.Track tracks = 1; - */ - tracks: Track[]; + /** + * @generated from protobuf field: repeated library.Track tracks = 1; + */ + tracks: Track[]; } /** * @generated from protobuf message library.Track */ export interface Track { - /** - * @generated from protobuf field: string hash = 1; - */ - hash: string; - /** - * @generated from protobuf field: string name = 2; - */ - name: string; - /** - * @generated from protobuf field: string artist_name = 3; - */ - artistName: string; - /** - * @generated from protobuf field: uint64 artist_id = 4; - */ - artistId: bigint; - /** - * @generated from protobuf field: uint64 duration = 5; - */ - duration: bigint; + /** + * @generated from protobuf field: string hash = 1; + */ + hash: string; + /** + * @generated from protobuf field: string name = 2; + */ + name: string; + /** + * @generated from protobuf field: string artist_name = 3; + */ + artistName: string; + /** + * @generated from protobuf field: uint64 artist_id = 4; + */ + artistId: bigint; + /** + * @generated from protobuf field: uint64 duration = 5; + */ + duration: bigint; } // @generated message type with reflection information, may provide speed optimized methods class TrackList$Type extends MessageType { - constructor() { - super('library.TrackList', [ - { no: 1, name: 'tracks', kind: 'message', repeat: 1 /*RepeatType.PACKED*/, T: () => Track } - ]); - } - create(value?: PartialMessage): TrackList { - const message = globalThis.Object.create(this.messagePrototype!); - message.tracks = []; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: TrackList - ): TrackList { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* repeated library.Track tracks */ 1: - message.tracks.push(Track.internalBinaryRead(reader, reader.uint32(), options)); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: TrackList, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* repeated library.Track tracks = 1; */ - for (let i = 0; i < message.tracks.length; i++) - Track.internalBinaryWrite( - message.tracks[i], - writer.tag(1, WireType.LengthDelimited).fork(), - options - ).join(); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("library.TrackList", [ + { no: 1, name: "tracks", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Track } + ]); + } + create(value?: PartialMessage): TrackList { + const message = globalThis.Object.create((this.messagePrototype!)); + message.tracks = []; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TrackList): TrackList { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated library.Track tracks */ 1: + message.tracks.push(Track.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TrackList, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated library.Track tracks = 1; */ + for (let i = 0; i < message.tracks.length; i++) + Track.internalBinaryWrite(message.tracks[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message library.TrackList @@ -115,102 +95,78 @@ class TrackList$Type extends MessageType { export const TrackList = new TrackList$Type(); // @generated message type with reflection information, may provide speed optimized methods class Track$Type extends MessageType { - constructor() { - super('library.Track', [ - { no: 1, name: 'hash', kind: 'scalar', T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: 'name', kind: 'scalar', T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: 'artist_name', kind: 'scalar', T: 9 /*ScalarType.STRING*/ }, - { - no: 4, - name: 'artist_id', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - }, - { - no: 5, - name: 'duration', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - } - ]); - } - create(value?: PartialMessage): Track { - const message = globalThis.Object.create(this.messagePrototype!); - message.hash = ''; - message.name = ''; - message.artistName = ''; - message.artistId = 0n; - message.duration = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: Track - ): Track { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string hash */ 1: - message.hash = reader.string(); - break; - case /* string name */ 2: - message.name = reader.string(); - break; - case /* string artist_name */ 3: - message.artistName = reader.string(); - break; - case /* uint64 artist_id */ 4: - message.artistId = reader.uint64().toBigInt(); - break; - case /* uint64 duration */ 5: - message.duration = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: Track, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* string hash = 1; */ - if (message.hash !== '') writer.tag(1, WireType.LengthDelimited).string(message.hash); - /* string name = 2; */ - if (message.name !== '') writer.tag(2, WireType.LengthDelimited).string(message.name); - /* string artist_name = 3; */ - if (message.artistName !== '') - writer.tag(3, WireType.LengthDelimited).string(message.artistName); - /* uint64 artist_id = 4; */ - if (message.artistId !== 0n) writer.tag(4, WireType.Varint).uint64(message.artistId); - /* uint64 duration = 5; */ - if (message.duration !== 0n) writer.tag(5, WireType.Varint).uint64(message.duration); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("library.Track", [ + { no: 1, name: "hash", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "artist_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "artist_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 5, name: "duration", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): Track { + const message = globalThis.Object.create((this.messagePrototype!)); + message.hash = ""; + message.name = ""; + message.artistName = ""; + message.artistId = 0n; + message.duration = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Track): Track { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string hash */ 1: + message.hash = reader.string(); + break; + case /* string name */ 2: + message.name = reader.string(); + break; + case /* string artist_name */ 3: + message.artistName = reader.string(); + break; + case /* uint64 artist_id */ 4: + message.artistId = reader.uint64().toBigInt(); + break; + case /* uint64 duration */ 5: + message.duration = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Track, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string hash = 1; */ + if (message.hash !== "") + writer.tag(1, WireType.LengthDelimited).string(message.hash); + /* string name = 2; */ + if (message.name !== "") + writer.tag(2, WireType.LengthDelimited).string(message.name); + /* string artist_name = 3; */ + if (message.artistName !== "") + writer.tag(3, WireType.LengthDelimited).string(message.artistName); + /* uint64 artist_id = 4; */ + if (message.artistId !== 0n) + writer.tag(4, WireType.Varint).uint64(message.artistId); + /* uint64 duration = 5; */ + if (message.duration !== 0n) + writer.tag(5, WireType.Varint).uint64(message.duration); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message library.Track @@ -219,6 +175,6 @@ export const Track = new Track$Type(); /** * @generated ServiceType for protobuf service library.Library */ -export const Library = new ServiceType('library.Library', [ - { name: 'ListTracks', options: {}, I: Empty, O: TrackList } +export const Library = new ServiceType("library.Library", [ + { name: "ListTracks", options: {}, I: Empty, O: TrackList } ]); diff --git a/src/lib/proto/player.client.ts b/src/lib/proto/player.client.ts index 336dc90..76cf2ae 100644 --- a/src/lib/proto/player.client.ts +++ b/src/lib/proto/player.client.ts @@ -1,159 +1,157 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "player.proto" (package "player", syntax proto3) // tslint:disable -import type { RpcTransport } from '@protobuf-ts/runtime-rpc'; -import type { ServiceInfo } from '@protobuf-ts/runtime-rpc'; -import { Player } from './player'; -import type { SetVolumeResponse } from './player'; -import type { SetVolumeRequest } from './player'; -import type { SeekPositionResponse } from './player'; -import type { SeekPositionRequest } from './player'; -import type { PlayerStatus } from './player'; -import type { ServerStreamingCall } from '@protobuf-ts/runtime-rpc'; -import type { PauseState } from './player'; -import type { Empty } from './google/protobuf/empty'; -import { stackIntercept } from '@protobuf-ts/runtime-rpc'; -import type { PlayTrackResponse } from './player'; -import type { PlayTrackRequest } from './player'; -import type { UnaryCall } from '@protobuf-ts/runtime-rpc'; -import type { RpcOptions } from '@protobuf-ts/runtime-rpc'; +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { Player } from "./player"; +import type { SkipToQueueIndexRequest } from "./player"; +import type { Queue } from "./player"; +import type { SetVolumeResponse } from "./player"; +import type { SetVolumeRequest } from "./player"; +import type { SeekPositionResponse } from "./player"; +import type { SeekPositionRequest } from "./player"; +import type { PlayerStatus } from "./player"; +import type { ServerStreamingCall } from "@protobuf-ts/runtime-rpc"; +import type { PauseState } from "./player"; +import type { Empty } from "./google/protobuf/empty"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { PlayTrackResponse } from "./player"; +import type { TrackRequest } from "./player"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** * @generated from protobuf service player.Player */ export interface IPlayerClient { - /** - * @generated from protobuf rpc: PlayTrack(player.PlayTrackRequest) returns (player.PlayTrackResponse); - */ - playTrack( - input: PlayTrackRequest, - options?: RpcOptions - ): UnaryCall; - /** - * @generated from protobuf rpc: ResumeTrack(google.protobuf.Empty) returns (player.PauseState); - */ - resumeTrack(input: Empty, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: PauseTrack(google.protobuf.Empty) returns (player.PauseState); - */ - pauseTrack(input: Empty, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: TogglePause(google.protobuf.Empty) returns (player.PauseState); - */ - togglePause(input: Empty, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: GetStatus(google.protobuf.Empty) returns (stream player.PlayerStatus); - */ - getStatus(input: Empty, options?: RpcOptions): ServerStreamingCall; - /** - * @generated from protobuf rpc: SeekPosition(player.SeekPositionRequest) returns (player.SeekPositionResponse); - */ - seekPosition( - input: SeekPositionRequest, - options?: RpcOptions - ): UnaryCall; - /** - * @generated from protobuf rpc: SetVolume(player.SetVolumeRequest) returns (player.SetVolumeResponse); - */ - setVolume( - input: SetVolumeRequest, - options?: RpcOptions - ): UnaryCall; + /** + * @generated from protobuf rpc: PlayTrack(player.TrackRequest) returns (player.PlayTrackResponse); + */ + playTrack(input: TrackRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: ResumeTrack(google.protobuf.Empty) returns (player.PauseState); + */ + resumeTrack(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: PauseTrack(google.protobuf.Empty) returns (player.PauseState); + */ + pauseTrack(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: TogglePause(google.protobuf.Empty) returns (player.PauseState); + */ + togglePause(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: GetStatus(google.protobuf.Empty) returns (stream player.PlayerStatus); + */ + getStatus(input: Empty, options?: RpcOptions): ServerStreamingCall; + /** + * @generated from protobuf rpc: SeekPosition(player.SeekPositionRequest) returns (player.SeekPositionResponse); + */ + seekPosition(input: SeekPositionRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: SetVolume(player.SetVolumeRequest) returns (player.SetVolumeResponse); + */ + setVolume(input: SetVolumeRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: PlayTrackNext(player.TrackRequest) returns (player.Queue); + */ + playTrackNext(input: TrackRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: AddTrackToQueue(player.TrackRequest) returns (player.Queue); + */ + addTrackToQueue(input: TrackRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: SkipTrack(google.protobuf.Empty) returns (player.PlayerStatus); + */ + skipTrack(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: SkipToQueueIndex(player.SkipToQueueIndexRequest) returns (player.PlayerStatus); + */ + skipToQueueIndex(input: SkipToQueueIndexRequest, options?: RpcOptions): UnaryCall; } /** * @generated from protobuf service player.Player */ export class PlayerClient implements IPlayerClient, ServiceInfo { - typeName = Player.typeName; - methods = Player.methods; - options = Player.options; - constructor(private readonly _transport: RpcTransport) {} - /** - * @generated from protobuf rpc: PlayTrack(player.PlayTrackRequest) returns (player.PlayTrackResponse); - */ - playTrack( - input: PlayTrackRequest, - options?: RpcOptions - ): UnaryCall { - const method = this.methods[0], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } - /** - * @generated from protobuf rpc: ResumeTrack(google.protobuf.Empty) returns (player.PauseState); - */ - resumeTrack(input: Empty, options?: RpcOptions): UnaryCall { - const method = this.methods[1], - opt = this._transport.mergeOptions(options); - return stackIntercept('unary', this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: PauseTrack(google.protobuf.Empty) returns (player.PauseState); - */ - pauseTrack(input: Empty, options?: RpcOptions): UnaryCall { - const method = this.methods[2], - opt = this._transport.mergeOptions(options); - return stackIntercept('unary', this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: TogglePause(google.protobuf.Empty) returns (player.PauseState); - */ - togglePause(input: Empty, options?: RpcOptions): UnaryCall { - const method = this.methods[3], - opt = this._transport.mergeOptions(options); - return stackIntercept('unary', this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: GetStatus(google.protobuf.Empty) returns (stream player.PlayerStatus); - */ - getStatus(input: Empty, options?: RpcOptions): ServerStreamingCall { - const method = this.methods[4], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'serverStreaming', - this._transport, - method, - opt, - input - ); - } - /** - * @generated from protobuf rpc: SeekPosition(player.SeekPositionRequest) returns (player.SeekPositionResponse); - */ - seekPosition( - input: SeekPositionRequest, - options?: RpcOptions - ): UnaryCall { - const method = this.methods[5], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } - /** - * @generated from protobuf rpc: SetVolume(player.SetVolumeRequest) returns (player.SetVolumeResponse); - */ - setVolume( - input: SetVolumeRequest, - options?: RpcOptions - ): UnaryCall { - const method = this.methods[6], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } + typeName = Player.typeName; + methods = Player.methods; + options = Player.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * @generated from protobuf rpc: PlayTrack(player.TrackRequest) returns (player.PlayTrackResponse); + */ + playTrack(input: TrackRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: ResumeTrack(google.protobuf.Empty) returns (player.PauseState); + */ + resumeTrack(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[1], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: PauseTrack(google.protobuf.Empty) returns (player.PauseState); + */ + pauseTrack(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[2], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: TogglePause(google.protobuf.Empty) returns (player.PauseState); + */ + togglePause(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[3], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: GetStatus(google.protobuf.Empty) returns (stream player.PlayerStatus); + */ + getStatus(input: Empty, options?: RpcOptions): ServerStreamingCall { + const method = this.methods[4], opt = this._transport.mergeOptions(options); + return stackIntercept("serverStreaming", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: SeekPosition(player.SeekPositionRequest) returns (player.SeekPositionResponse); + */ + seekPosition(input: SeekPositionRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[5], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: SetVolume(player.SetVolumeRequest) returns (player.SetVolumeResponse); + */ + setVolume(input: SetVolumeRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[6], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: PlayTrackNext(player.TrackRequest) returns (player.Queue); + */ + playTrackNext(input: TrackRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[7], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: AddTrackToQueue(player.TrackRequest) returns (player.Queue); + */ + addTrackToQueue(input: TrackRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[8], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: SkipTrack(google.protobuf.Empty) returns (player.PlayerStatus); + */ + skipTrack(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[9], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: SkipToQueueIndex(player.SkipToQueueIndexRequest) returns (player.PlayerStatus); + */ + skipToQueueIndex(input: SkipToQueueIndexRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[10], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } } diff --git a/src/lib/proto/player.ts b/src/lib/proto/player.ts index 350119d..dea54e2 100644 --- a/src/lib/proto/player.ts +++ b/src/lib/proto/player.ts @@ -1,242 +1,224 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "player.proto" (package "player", syntax proto3) // tslint:disable -import { Empty } from './google/protobuf/empty'; -import { ServiceType } from '@protobuf-ts/runtime-rpc'; -import type { BinaryWriteOptions } from '@protobuf-ts/runtime'; -import type { IBinaryWriter } from '@protobuf-ts/runtime'; -import { WireType } from '@protobuf-ts/runtime'; -import type { BinaryReadOptions } from '@protobuf-ts/runtime'; -import type { IBinaryReader } from '@protobuf-ts/runtime'; -import { UnknownFieldHandler } from '@protobuf-ts/runtime'; -import type { PartialMessage } from '@protobuf-ts/runtime'; -import { reflectionMergePartial } from '@protobuf-ts/runtime'; -import { MessageType } from '@protobuf-ts/runtime'; -import { Track } from './library'; +import { Empty } from "./google/protobuf/empty"; +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; +import { Track } from "./library"; /** - * @generated from protobuf message player.PlayTrackRequest + * @generated from protobuf message player.TrackRequest */ -export interface PlayTrackRequest { - /** - * @generated from protobuf field: string hash = 1; - */ - hash: string; +export interface TrackRequest { + /** + * @generated from protobuf field: string hash = 1; + */ + hash: string; } /** * @generated from protobuf message player.PlayTrackResponse */ export interface PlayTrackResponse { - /** - * @generated from protobuf field: library.Track track = 1; - */ - track?: Track; - /** - * @generated from protobuf field: uint64 position = 2; - */ - position: bigint; + /** + * @generated from protobuf field: library.Track track = 1; + */ + track?: Track; + /** + * @generated from protobuf field: uint64 position = 2; + */ + position: bigint; } /** * @generated from protobuf message player.PlayerStatus */ export interface PlayerStatus { - /** - * @generated from protobuf field: optional library.Track currently_playing = 1; - */ - currentlyPlaying?: Track; - /** - * @generated from protobuf field: bool is_paused = 2; - */ - isPaused: boolean; - /** - * @generated from protobuf field: float volume = 3; - */ - volume: number; - /** - * @generated from protobuf field: uint64 progress = 4; - */ - progress: bigint; + /** + * @generated from protobuf field: optional library.Track currently_playing = 1; + */ + currentlyPlaying?: Track; + /** + * @generated from protobuf field: bool is_paused = 2; + */ + isPaused: boolean; + /** + * @generated from protobuf field: float volume = 3; + */ + volume: number; + /** + * @generated from protobuf field: uint64 progress = 4; + */ + progress: bigint; + /** + * @generated from protobuf field: repeated library.Track queue = 5; + */ + queue: Track[]; +} +/** + * @generated from protobuf message player.Queue + */ +export interface Queue { + /** + * @generated from protobuf field: repeated library.Track tracks = 1; + */ + tracks: Track[]; } /** * @generated from protobuf message player.PauseState */ export interface PauseState { - /** - * @generated from protobuf field: bool is_paused = 1; - */ - isPaused: boolean; + /** + * @generated from protobuf field: bool is_paused = 1; + */ + isPaused: boolean; } /** * @generated from protobuf message player.SeekPositionRequest */ export interface SeekPositionRequest { - /** - * @generated from protobuf field: uint64 position = 1; - */ - position: bigint; + /** + * @generated from protobuf field: uint64 position = 1; + */ + position: bigint; } /** * @generated from protobuf message player.SeekPositionResponse */ export interface SeekPositionResponse { - /** - * @generated from protobuf field: uint64 position = 1; - */ - position: bigint; + /** + * @generated from protobuf field: uint64 position = 1; + */ + position: bigint; } /** * @generated from protobuf message player.SetVolumeRequest */ export interface SetVolumeRequest { - /** - * @generated from protobuf field: float volume = 1; - */ - volume: number; + /** + * @generated from protobuf field: float volume = 1; + */ + volume: number; } /** * @generated from protobuf message player.SetVolumeResponse */ export interface SetVolumeResponse { - /** - * @generated from protobuf field: float volume = 1; - */ - volume: number; -} -// @generated message type with reflection information, may provide speed optimized methods -class PlayTrackRequest$Type extends MessageType { - constructor() { - super('player.PlayTrackRequest', [ - { no: 1, name: 'hash', kind: 'scalar', T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): PlayTrackRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.hash = ''; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: PlayTrackRequest - ): PlayTrackRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string hash */ 1: - message.hash = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: PlayTrackRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* string hash = 1; */ - if (message.hash !== '') writer.tag(1, WireType.LengthDelimited).string(message.hash); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + /** + * @generated from protobuf field: float volume = 1; + */ + volume: number; } /** - * @generated MessageType for protobuf message player.PlayTrackRequest + * @generated from protobuf message player.SkipToQueueIndexRequest */ -export const PlayTrackRequest = new PlayTrackRequest$Type(); +export interface SkipToQueueIndexRequest { + /** + * @generated from protobuf field: uint32 index = 1; + */ + index: number; +} +// @generated message type with reflection information, may provide speed optimized methods +class TrackRequest$Type extends MessageType { + constructor() { + super("player.TrackRequest", [ + { no: 1, name: "hash", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): TrackRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.hash = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: TrackRequest): TrackRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string hash */ 1: + message.hash = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: TrackRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string hash = 1; */ + if (message.hash !== "") + writer.tag(1, WireType.LengthDelimited).string(message.hash); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message player.TrackRequest + */ +export const TrackRequest = new TrackRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class PlayTrackResponse$Type extends MessageType { - constructor() { - super('player.PlayTrackResponse', [ - { no: 1, name: 'track', kind: 'message', T: () => Track }, - { - no: 2, - name: 'position', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - } - ]); - } - create(value?: PartialMessage): PlayTrackResponse { - const message = globalThis.Object.create(this.messagePrototype!); - message.position = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: PlayTrackResponse - ): PlayTrackResponse { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* library.Track track */ 1: - message.track = Track.internalBinaryRead(reader, reader.uint32(), options, message.track); - break; - case /* uint64 position */ 2: - message.position = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: PlayTrackResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* library.Track track = 1; */ - if (message.track) - Track.internalBinaryWrite( - message.track, - writer.tag(1, WireType.LengthDelimited).fork(), - options - ).join(); - /* uint64 position = 2; */ - if (message.position !== 0n) writer.tag(2, WireType.Varint).uint64(message.position); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.PlayTrackResponse", [ + { no: 1, name: "track", kind: "message", T: () => Track }, + { no: 2, name: "position", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): PlayTrackResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.position = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PlayTrackResponse): PlayTrackResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* library.Track track */ 1: + message.track = Track.internalBinaryRead(reader, reader.uint32(), options, message.track); + break; + case /* uint64 position */ 2: + message.position = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PlayTrackResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* library.Track track = 1; */ + if (message.track) + Track.internalBinaryWrite(message.track, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* uint64 position = 2; */ + if (message.position !== 0n) + writer.tag(2, WireType.Varint).uint64(message.position); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.PlayTrackResponse @@ -244,159 +226,171 @@ class PlayTrackResponse$Type extends MessageType { export const PlayTrackResponse = new PlayTrackResponse$Type(); // @generated message type with reflection information, may provide speed optimized methods class PlayerStatus$Type extends MessageType { - constructor() { - super('player.PlayerStatus', [ - { no: 1, name: 'currently_playing', kind: 'message', T: () => Track }, - { no: 2, name: 'is_paused', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ }, - { no: 3, name: 'volume', kind: 'scalar', T: 2 /*ScalarType.FLOAT*/ }, - { - no: 4, - name: 'progress', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - } - ]); - } - create(value?: PartialMessage): PlayerStatus { - const message = globalThis.Object.create(this.messagePrototype!); - message.isPaused = false; - message.volume = 0; - message.progress = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: PlayerStatus - ): PlayerStatus { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* optional library.Track currently_playing */ 1: - message.currentlyPlaying = Track.internalBinaryRead( - reader, - reader.uint32(), - options, - message.currentlyPlaying - ); - break; - case /* bool is_paused */ 2: - message.isPaused = reader.bool(); - break; - case /* float volume */ 3: - message.volume = reader.float(); - break; - case /* uint64 progress */ 4: - message.progress = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: PlayerStatus, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* optional library.Track currently_playing = 1; */ - if (message.currentlyPlaying) - Track.internalBinaryWrite( - message.currentlyPlaying, - writer.tag(1, WireType.LengthDelimited).fork(), - options - ).join(); - /* bool is_paused = 2; */ - if (message.isPaused !== false) writer.tag(2, WireType.Varint).bool(message.isPaused); - /* float volume = 3; */ - if (message.volume !== 0) writer.tag(3, WireType.Bit32).float(message.volume); - /* uint64 progress = 4; */ - if (message.progress !== 0n) writer.tag(4, WireType.Varint).uint64(message.progress); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.PlayerStatus", [ + { no: 1, name: "currently_playing", kind: "message", T: () => Track }, + { no: 2, name: "is_paused", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 3, name: "volume", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ }, + { no: 4, name: "progress", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 5, name: "queue", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Track } + ]); + } + create(value?: PartialMessage): PlayerStatus { + const message = globalThis.Object.create((this.messagePrototype!)); + message.isPaused = false; + message.volume = 0; + message.progress = 0n; + message.queue = []; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PlayerStatus): PlayerStatus { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* optional library.Track currently_playing */ 1: + message.currentlyPlaying = Track.internalBinaryRead(reader, reader.uint32(), options, message.currentlyPlaying); + break; + case /* bool is_paused */ 2: + message.isPaused = reader.bool(); + break; + case /* float volume */ 3: + message.volume = reader.float(); + break; + case /* uint64 progress */ 4: + message.progress = reader.uint64().toBigInt(); + break; + case /* repeated library.Track queue */ 5: + message.queue.push(Track.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PlayerStatus, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* optional library.Track currently_playing = 1; */ + if (message.currentlyPlaying) + Track.internalBinaryWrite(message.currentlyPlaying, writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* bool is_paused = 2; */ + if (message.isPaused !== false) + writer.tag(2, WireType.Varint).bool(message.isPaused); + /* float volume = 3; */ + if (message.volume !== 0) + writer.tag(3, WireType.Bit32).float(message.volume); + /* uint64 progress = 4; */ + if (message.progress !== 0n) + writer.tag(4, WireType.Varint).uint64(message.progress); + /* repeated library.Track queue = 5; */ + for (let i = 0; i < message.queue.length; i++) + Track.internalBinaryWrite(message.queue[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.PlayerStatus */ export const PlayerStatus = new PlayerStatus$Type(); // @generated message type with reflection information, may provide speed optimized methods +class Queue$Type extends MessageType { + constructor() { + super("player.Queue", [ + { no: 1, name: "tracks", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Track } + ]); + } + create(value?: PartialMessage): Queue { + const message = globalThis.Object.create((this.messagePrototype!)); + message.tracks = []; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Queue): Queue { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated library.Track tracks */ 1: + message.tracks.push(Track.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: Queue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated library.Track tracks = 1; */ + for (let i = 0; i < message.tracks.length; i++) + Track.internalBinaryWrite(message.tracks[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message player.Queue + */ +export const Queue = new Queue$Type(); +// @generated message type with reflection information, may provide speed optimized methods class PauseState$Type extends MessageType { - constructor() { - super('player.PauseState', [ - { no: 1, name: 'is_paused', kind: 'scalar', T: 8 /*ScalarType.BOOL*/ } - ]); - } - create(value?: PartialMessage): PauseState { - const message = globalThis.Object.create(this.messagePrototype!); - message.isPaused = false; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: PauseState - ): PauseState { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* bool is_paused */ 1: - message.isPaused = reader.bool(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: PauseState, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* bool is_paused = 1; */ - if (message.isPaused !== false) writer.tag(1, WireType.Varint).bool(message.isPaused); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.PauseState", [ + { no: 1, name: "is_paused", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } + ]); + } + create(value?: PartialMessage): PauseState { + const message = globalThis.Object.create((this.messagePrototype!)); + message.isPaused = false; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PauseState): PauseState { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* bool is_paused */ 1: + message.isPaused = reader.bool(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: PauseState, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* bool is_paused = 1; */ + if (message.isPaused !== false) + writer.tag(1, WireType.Varint).bool(message.isPaused); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.PauseState @@ -404,67 +398,46 @@ class PauseState$Type extends MessageType { export const PauseState = new PauseState$Type(); // @generated message type with reflection information, may provide speed optimized methods class SeekPositionRequest$Type extends MessageType { - constructor() { - super('player.SeekPositionRequest', [ - { - no: 1, - name: 'position', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - } - ]); - } - create(value?: PartialMessage): SeekPositionRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.position = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: SeekPositionRequest - ): SeekPositionRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 position */ 1: - message.position = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: SeekPositionRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 position = 1; */ - if (message.position !== 0n) writer.tag(1, WireType.Varint).uint64(message.position); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.SeekPositionRequest", [ + { no: 1, name: "position", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): SeekPositionRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.position = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SeekPositionRequest): SeekPositionRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 position */ 1: + message.position = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SeekPositionRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 position = 1; */ + if (message.position !== 0n) + writer.tag(1, WireType.Varint).uint64(message.position); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.SeekPositionRequest @@ -472,67 +445,46 @@ class SeekPositionRequest$Type extends MessageType { export const SeekPositionRequest = new SeekPositionRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class SeekPositionResponse$Type extends MessageType { - constructor() { - super('player.SeekPositionResponse', [ - { - no: 1, - name: 'position', - kind: 'scalar', - T: 4 /*ScalarType.UINT64*/, - L: 0 /*LongType.BIGINT*/ - } - ]); - } - create(value?: PartialMessage): SeekPositionResponse { - const message = globalThis.Object.create(this.messagePrototype!); - message.position = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: SeekPositionResponse - ): SeekPositionResponse { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 position */ 1: - message.position = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: SeekPositionResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 position = 1; */ - if (message.position !== 0n) writer.tag(1, WireType.Varint).uint64(message.position); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.SeekPositionResponse", [ + { no: 1, name: "position", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): SeekPositionResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.position = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SeekPositionResponse): SeekPositionResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 position */ 1: + message.position = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SeekPositionResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 position = 1; */ + if (message.position !== 0n) + writer.tag(1, WireType.Varint).uint64(message.position); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.SeekPositionResponse @@ -540,61 +492,46 @@ class SeekPositionResponse$Type extends MessageType { export const SeekPositionResponse = new SeekPositionResponse$Type(); // @generated message type with reflection information, may provide speed optimized methods class SetVolumeRequest$Type extends MessageType { - constructor() { - super('player.SetVolumeRequest', [ - { no: 1, name: 'volume', kind: 'scalar', T: 2 /*ScalarType.FLOAT*/ } - ]); - } - create(value?: PartialMessage): SetVolumeRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.volume = 0; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: SetVolumeRequest - ): SetVolumeRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* float volume */ 1: - message.volume = reader.float(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: SetVolumeRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* float volume = 1; */ - if (message.volume !== 0) writer.tag(1, WireType.Bit32).float(message.volume); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.SetVolumeRequest", [ + { no: 1, name: "volume", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ } + ]); + } + create(value?: PartialMessage): SetVolumeRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.volume = 0; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetVolumeRequest): SetVolumeRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* float volume */ 1: + message.volume = reader.float(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SetVolumeRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* float volume = 1; */ + if (message.volume !== 0) + writer.tag(1, WireType.Bit32).float(message.volume); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.SetVolumeRequest @@ -602,75 +539,111 @@ class SetVolumeRequest$Type extends MessageType { export const SetVolumeRequest = new SetVolumeRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class SetVolumeResponse$Type extends MessageType { - constructor() { - super('player.SetVolumeResponse', [ - { no: 1, name: 'volume', kind: 'scalar', T: 2 /*ScalarType.FLOAT*/ } - ]); - } - create(value?: PartialMessage): SetVolumeResponse { - const message = globalThis.Object.create(this.messagePrototype!); - message.volume = 0; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: SetVolumeResponse - ): SetVolumeResponse { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* float volume */ 1: - message.volume = reader.float(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: SetVolumeResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* float volume = 1; */ - if (message.volume !== 0) writer.tag(1, WireType.Bit32).float(message.volume); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("player.SetVolumeResponse", [ + { no: 1, name: "volume", kind: "scalar", T: 2 /*ScalarType.FLOAT*/ } + ]); + } + create(value?: PartialMessage): SetVolumeResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.volume = 0; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SetVolumeResponse): SetVolumeResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* float volume */ 1: + message.volume = reader.float(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SetVolumeResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* float volume = 1; */ + if (message.volume !== 0) + writer.tag(1, WireType.Bit32).float(message.volume); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message player.SetVolumeResponse */ export const SetVolumeResponse = new SetVolumeResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class SkipToQueueIndexRequest$Type extends MessageType { + constructor() { + super("player.SkipToQueueIndexRequest", [ + { no: 1, name: "index", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } + ]); + } + create(value?: PartialMessage): SkipToQueueIndexRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.index = 0; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SkipToQueueIndexRequest): SkipToQueueIndexRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint32 index */ 1: + message.index = reader.uint32(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SkipToQueueIndexRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint32 index = 1; */ + if (message.index !== 0) + writer.tag(1, WireType.Varint).uint32(message.index); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message player.SkipToQueueIndexRequest + */ +export const SkipToQueueIndexRequest = new SkipToQueueIndexRequest$Type(); /** * @generated ServiceType for protobuf service player.Player */ -export const Player = new ServiceType('player.Player', [ - { name: 'PlayTrack', options: {}, I: PlayTrackRequest, O: PlayTrackResponse }, - { name: 'ResumeTrack', options: {}, I: Empty, O: PauseState }, - { name: 'PauseTrack', options: {}, I: Empty, O: PauseState }, - { name: 'TogglePause', options: {}, I: Empty, O: PauseState }, - { name: 'GetStatus', serverStreaming: true, options: {}, I: Empty, O: PlayerStatus }, - { name: 'SeekPosition', options: {}, I: SeekPositionRequest, O: SeekPositionResponse }, - { name: 'SetVolume', options: {}, I: SetVolumeRequest, O: SetVolumeResponse } +export const Player = new ServiceType("player.Player", [ + { name: "PlayTrack", options: {}, I: TrackRequest, O: PlayTrackResponse }, + { name: "ResumeTrack", options: {}, I: Empty, O: PauseState }, + { name: "PauseTrack", options: {}, I: Empty, O: PauseState }, + { name: "TogglePause", options: {}, I: Empty, O: PauseState }, + { name: "GetStatus", serverStreaming: true, options: {}, I: Empty, O: PlayerStatus }, + { name: "SeekPosition", options: {}, I: SeekPositionRequest, O: SeekPositionResponse }, + { name: "SetVolume", options: {}, I: SetVolumeRequest, O: SetVolumeResponse }, + { name: "PlayTrackNext", options: {}, I: TrackRequest, O: Queue }, + { name: "AddTrackToQueue", options: {}, I: TrackRequest, O: Queue }, + { name: "SkipTrack", options: {}, I: Empty, O: PlayerStatus }, + { name: "SkipToQueueIndex", options: {}, I: SkipToQueueIndexRequest, O: PlayerStatus } ]); diff --git a/src/lib/proto/settings.client.ts b/src/lib/proto/settings.client.ts index d3e775e..687c5cc 100644 --- a/src/lib/proto/settings.client.ts +++ b/src/lib/proto/settings.client.ts @@ -1,109 +1,76 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "settings.proto" (package "settings", syntax proto3) // tslint:disable -import type { RpcTransport } from '@protobuf-ts/runtime-rpc'; -import type { ServiceInfo } from '@protobuf-ts/runtime-rpc'; -import { Settings } from './settings'; -import type { RefreshPathResponse } from './settings'; -import type { RefreshPathRequest } from './settings'; -import type { DeletePathResponse } from './settings'; -import type { DeletePathRequest } from './settings'; -import type { AddPathResponse } from './settings'; -import type { AddPathRequest } from './settings'; -import { stackIntercept } from '@protobuf-ts/runtime-rpc'; -import type { SettingsData } from './settings'; -import type { Empty } from './google/protobuf/empty'; -import type { UnaryCall } from '@protobuf-ts/runtime-rpc'; -import type { RpcOptions } from '@protobuf-ts/runtime-rpc'; +import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; +import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; +import { Settings } from "./settings"; +import type { RefreshPathResponse } from "./settings"; +import type { RefreshPathRequest } from "./settings"; +import type { DeletePathResponse } from "./settings"; +import type { DeletePathRequest } from "./settings"; +import type { AddPathResponse } from "./settings"; +import type { AddPathRequest } from "./settings"; +import { stackIntercept } from "@protobuf-ts/runtime-rpc"; +import type { SettingsData } from "./settings"; +import type { Empty } from "./google/protobuf/empty"; +import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; +import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; /** * @generated from protobuf service settings.Settings */ export interface ISettingsClient { - /** - * @generated from protobuf rpc: ListPaths(google.protobuf.Empty) returns (settings.SettingsData); - */ - listPaths(input: Empty, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: AddPath(settings.AddPathRequest) returns (settings.AddPathResponse); - */ - addPath(input: AddPathRequest, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: DeletePath(settings.DeletePathRequest) returns (settings.DeletePathResponse); - */ - deletePath( - input: DeletePathRequest, - options?: RpcOptions - ): UnaryCall; - /** - * @generated from protobuf rpc: RefreshPath(settings.RefreshPathRequest) returns (settings.RefreshPathResponse); - */ - refreshPath( - input: RefreshPathRequest, - options?: RpcOptions - ): UnaryCall; + /** + * @generated from protobuf rpc: ListPaths(google.protobuf.Empty) returns (settings.SettingsData); + */ + listPaths(input: Empty, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: AddPath(settings.AddPathRequest) returns (settings.AddPathResponse); + */ + addPath(input: AddPathRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: DeletePath(settings.DeletePathRequest) returns (settings.DeletePathResponse); + */ + deletePath(input: DeletePathRequest, options?: RpcOptions): UnaryCall; + /** + * @generated from protobuf rpc: RefreshPath(settings.RefreshPathRequest) returns (settings.RefreshPathResponse); + */ + refreshPath(input: RefreshPathRequest, options?: RpcOptions): UnaryCall; } /** * @generated from protobuf service settings.Settings */ export class SettingsClient implements ISettingsClient, ServiceInfo { - typeName = Settings.typeName; - methods = Settings.methods; - options = Settings.options; - constructor(private readonly _transport: RpcTransport) {} - /** - * @generated from protobuf rpc: ListPaths(google.protobuf.Empty) returns (settings.SettingsData); - */ - listPaths(input: Empty, options?: RpcOptions): UnaryCall { - const method = this.methods[0], - opt = this._transport.mergeOptions(options); - return stackIntercept('unary', this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: AddPath(settings.AddPathRequest) returns (settings.AddPathResponse); - */ - addPath(input: AddPathRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[1], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } - /** - * @generated from protobuf rpc: DeletePath(settings.DeletePathRequest) returns (settings.DeletePathResponse); - */ - deletePath( - input: DeletePathRequest, - options?: RpcOptions - ): UnaryCall { - const method = this.methods[2], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } - /** - * @generated from protobuf rpc: RefreshPath(settings.RefreshPathRequest) returns (settings.RefreshPathResponse); - */ - refreshPath( - input: RefreshPathRequest, - options?: RpcOptions - ): UnaryCall { - const method = this.methods[3], - opt = this._transport.mergeOptions(options); - return stackIntercept( - 'unary', - this._transport, - method, - opt, - input - ); - } + typeName = Settings.typeName; + methods = Settings.methods; + options = Settings.options; + constructor(private readonly _transport: RpcTransport) { + } + /** + * @generated from protobuf rpc: ListPaths(google.protobuf.Empty) returns (settings.SettingsData); + */ + listPaths(input: Empty, options?: RpcOptions): UnaryCall { + const method = this.methods[0], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: AddPath(settings.AddPathRequest) returns (settings.AddPathResponse); + */ + addPath(input: AddPathRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[1], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: DeletePath(settings.DeletePathRequest) returns (settings.DeletePathResponse); + */ + deletePath(input: DeletePathRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[2], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } + /** + * @generated from protobuf rpc: RefreshPath(settings.RefreshPathRequest) returns (settings.RefreshPathResponse); + */ + refreshPath(input: RefreshPathRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[3], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } } diff --git a/src/lib/proto/settings.ts b/src/lib/proto/settings.ts index 38af3b8..628440e 100644 --- a/src/lib/proto/settings.ts +++ b/src/lib/proto/settings.ts @@ -1,153 +1,127 @@ // @generated by protobuf-ts 2.9.4 // @generated from protobuf file "settings.proto" (package "settings", syntax proto3) // tslint:disable -import { Empty } from './google/protobuf/empty'; -import { ServiceType } from '@protobuf-ts/runtime-rpc'; -import type { BinaryWriteOptions } from '@protobuf-ts/runtime'; -import type { IBinaryWriter } from '@protobuf-ts/runtime'; -import { WireType } from '@protobuf-ts/runtime'; -import type { BinaryReadOptions } from '@protobuf-ts/runtime'; -import type { IBinaryReader } from '@protobuf-ts/runtime'; -import { UnknownFieldHandler } from '@protobuf-ts/runtime'; -import type { PartialMessage } from '@protobuf-ts/runtime'; -import { reflectionMergePartial } from '@protobuf-ts/runtime'; -import { MessageType } from '@protobuf-ts/runtime'; +import { Empty } from "./google/protobuf/empty"; +import { ServiceType } from "@protobuf-ts/runtime-rpc"; +import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; +import type { IBinaryWriter } from "@protobuf-ts/runtime"; +import { WireType } from "@protobuf-ts/runtime"; +import type { BinaryReadOptions } from "@protobuf-ts/runtime"; +import type { IBinaryReader } from "@protobuf-ts/runtime"; +import { UnknownFieldHandler } from "@protobuf-ts/runtime"; +import type { PartialMessage } from "@protobuf-ts/runtime"; +import { reflectionMergePartial } from "@protobuf-ts/runtime"; +import { MessageType } from "@protobuf-ts/runtime"; /** * @generated from protobuf message settings.SettingsData */ export interface SettingsData { - /** - * @generated from protobuf field: repeated settings.LibraryPath library_paths = 1; - */ - libraryPaths: LibraryPath[]; + /** + * @generated from protobuf field: repeated settings.LibraryPath library_paths = 1; + */ + libraryPaths: LibraryPath[]; } /** * @generated from protobuf message settings.LibraryPath */ export interface LibraryPath { - /** - * @generated from protobuf field: uint64 id = 1; - */ - id: bigint; - /** - * @generated from protobuf field: string path = 2; - */ - path: string; + /** + * @generated from protobuf field: uint64 id = 1; + */ + id: bigint; + /** + * @generated from protobuf field: string path = 2; + */ + path: string; } /** * @generated from protobuf message settings.AddPathRequest */ export interface AddPathRequest { - /** - * @generated from protobuf field: string path = 1; - */ - path: string; + /** + * @generated from protobuf field: string path = 1; + */ + path: string; } /** * @generated from protobuf message settings.AddPathResponse */ export interface AddPathResponse { - /** - * @generated from protobuf field: uint64 id = 1; - */ - id: bigint; + /** + * @generated from protobuf field: uint64 id = 1; + */ + id: bigint; } /** * @generated from protobuf message settings.DeletePathRequest */ export interface DeletePathRequest { - /** - * @generated from protobuf field: uint64 id = 1; - */ - id: bigint; + /** + * @generated from protobuf field: uint64 id = 1; + */ + id: bigint; } /** * @generated from protobuf message settings.DeletePathResponse */ -export interface DeletePathResponse {} +export interface DeletePathResponse { +} /** * @generated from protobuf message settings.RefreshPathRequest */ export interface RefreshPathRequest { - /** - * @generated from protobuf field: uint64 id = 1; - */ - id: bigint; + /** + * @generated from protobuf field: uint64 id = 1; + */ + id: bigint; } /** * @generated from protobuf message settings.RefreshPathResponse */ -export interface RefreshPathResponse {} +export interface RefreshPathResponse { +} // @generated message type with reflection information, may provide speed optimized methods class SettingsData$Type extends MessageType { - constructor() { - super('settings.SettingsData', [ - { - no: 1, - name: 'library_paths', - kind: 'message', - repeat: 1 /*RepeatType.PACKED*/, - T: () => LibraryPath - } - ]); - } - create(value?: PartialMessage): SettingsData { - const message = globalThis.Object.create(this.messagePrototype!); - message.libraryPaths = []; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: SettingsData - ): SettingsData { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* repeated settings.LibraryPath library_paths */ 1: - message.libraryPaths.push( - LibraryPath.internalBinaryRead(reader, reader.uint32(), options) - ); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: SettingsData, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* repeated settings.LibraryPath library_paths = 1; */ - for (let i = 0; i < message.libraryPaths.length; i++) - LibraryPath.internalBinaryWrite( - message.libraryPaths[i], - writer.tag(1, WireType.LengthDelimited).fork(), - options - ).join(); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.SettingsData", [ + { no: 1, name: "library_paths", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => LibraryPath } + ]); + } + create(value?: PartialMessage): SettingsData { + const message = globalThis.Object.create((this.messagePrototype!)); + message.libraryPaths = []; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SettingsData): SettingsData { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated settings.LibraryPath library_paths */ 1: + message.libraryPaths.push(LibraryPath.internalBinaryRead(reader, reader.uint32(), options)); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: SettingsData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated settings.LibraryPath library_paths = 1; */ + for (let i = 0; i < message.libraryPaths.length; i++) + LibraryPath.internalBinaryWrite(message.libraryPaths[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.SettingsData @@ -155,68 +129,54 @@ class SettingsData$Type extends MessageType { export const SettingsData = new SettingsData$Type(); // @generated message type with reflection information, may provide speed optimized methods class LibraryPath$Type extends MessageType { - constructor() { - super('settings.LibraryPath', [ - { no: 1, name: 'id', kind: 'scalar', T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, - { no: 2, name: 'path', kind: 'scalar', T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): LibraryPath { - const message = globalThis.Object.create(this.messagePrototype!); - message.id = 0n; - message.path = ''; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: LibraryPath - ): LibraryPath { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 id */ 1: - message.id = reader.uint64().toBigInt(); - break; - case /* string path */ 2: - message.path = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: LibraryPath, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 id = 1; */ - if (message.id !== 0n) writer.tag(1, WireType.Varint).uint64(message.id); - /* string path = 2; */ - if (message.path !== '') writer.tag(2, WireType.LengthDelimited).string(message.path); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.LibraryPath", [ + { no: 1, name: "id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }, + { no: 2, name: "path", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): LibraryPath { + const message = globalThis.Object.create((this.messagePrototype!)); + message.id = 0n; + message.path = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LibraryPath): LibraryPath { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 id */ 1: + message.id = reader.uint64().toBigInt(); + break; + case /* string path */ 2: + message.path = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: LibraryPath, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 id = 1; */ + if (message.id !== 0n) + writer.tag(1, WireType.Varint).uint64(message.id); + /* string path = 2; */ + if (message.path !== "") + writer.tag(2, WireType.LengthDelimited).string(message.path); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.LibraryPath @@ -224,61 +184,46 @@ class LibraryPath$Type extends MessageType { export const LibraryPath = new LibraryPath$Type(); // @generated message type with reflection information, may provide speed optimized methods class AddPathRequest$Type extends MessageType { - constructor() { - super('settings.AddPathRequest', [ - { no: 1, name: 'path', kind: 'scalar', T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): AddPathRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.path = ''; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: AddPathRequest - ): AddPathRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string path */ 1: - message.path = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: AddPathRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* string path = 1; */ - if (message.path !== '') writer.tag(1, WireType.LengthDelimited).string(message.path); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.AddPathRequest", [ + { no: 1, name: "path", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): AddPathRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.path = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AddPathRequest): AddPathRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string path */ 1: + message.path = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AddPathRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string path = 1; */ + if (message.path !== "") + writer.tag(1, WireType.LengthDelimited).string(message.path); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.AddPathRequest @@ -286,61 +231,46 @@ class AddPathRequest$Type extends MessageType { export const AddPathRequest = new AddPathRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class AddPathResponse$Type extends MessageType { - constructor() { - super('settings.AddPathResponse', [ - { no: 1, name: 'id', kind: 'scalar', T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } - ]); - } - create(value?: PartialMessage): AddPathResponse { - const message = globalThis.Object.create(this.messagePrototype!); - message.id = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: AddPathResponse - ): AddPathResponse { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 id */ 1: - message.id = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: AddPathResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 id = 1; */ - if (message.id !== 0n) writer.tag(1, WireType.Varint).uint64(message.id); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.AddPathResponse", [ + { no: 1, name: "id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): AddPathResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.id = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AddPathResponse): AddPathResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 id */ 1: + message.id = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: AddPathResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 id = 1; */ + if (message.id !== 0n) + writer.tag(1, WireType.Varint).uint64(message.id); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.AddPathResponse @@ -348,61 +278,46 @@ class AddPathResponse$Type extends MessageType { export const AddPathResponse = new AddPathResponse$Type(); // @generated message type with reflection information, may provide speed optimized methods class DeletePathRequest$Type extends MessageType { - constructor() { - super('settings.DeletePathRequest', [ - { no: 1, name: 'id', kind: 'scalar', T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } - ]); - } - create(value?: PartialMessage): DeletePathRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.id = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: DeletePathRequest - ): DeletePathRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 id */ 1: - message.id = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: DeletePathRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 id = 1; */ - if (message.id !== 0n) writer.tag(1, WireType.Varint).uint64(message.id); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.DeletePathRequest", [ + { no: 1, name: "id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): DeletePathRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.id = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeletePathRequest): DeletePathRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 id */ 1: + message.id = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: DeletePathRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 id = 1; */ + if (message.id !== 0n) + writer.tag(1, WireType.Varint).uint64(message.id); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.DeletePathRequest @@ -410,31 +325,24 @@ class DeletePathRequest$Type extends MessageType { export const DeletePathRequest = new DeletePathRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class DeletePathResponse$Type extends MessageType { - constructor() { - super('settings.DeletePathResponse', []); - } - create(value?: PartialMessage): DeletePathResponse { - const message = globalThis.Object.create(this.messagePrototype!); - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: DeletePathResponse - ): DeletePathResponse { - return target ?? this.create(); - } - internalBinaryWrite( - message: DeletePathResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.DeletePathResponse", []); + } + create(value?: PartialMessage): DeletePathResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeletePathResponse): DeletePathResponse { + return target ?? this.create(); + } + internalBinaryWrite(message: DeletePathResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.DeletePathResponse @@ -442,61 +350,46 @@ class DeletePathResponse$Type extends MessageType { export const DeletePathResponse = new DeletePathResponse$Type(); // @generated message type with reflection information, may provide speed optimized methods class RefreshPathRequest$Type extends MessageType { - constructor() { - super('settings.RefreshPathRequest', [ - { no: 1, name: 'id', kind: 'scalar', T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } - ]); - } - create(value?: PartialMessage): RefreshPathRequest { - const message = globalThis.Object.create(this.messagePrototype!); - message.id = 0n; - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: RefreshPathRequest - ): RefreshPathRequest { - let message = target ?? this.create(), - end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 id */ 1: - message.id = reader.uint64().toBigInt(); - break; - default: - let u = options.readUnknownField; - if (u === 'throw') - throw new globalThis.Error( - `Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}` - ); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)( - this.typeName, - message, - fieldNo, - wireType, - d - ); - } - } - return message; - } - internalBinaryWrite( - message: RefreshPathRequest, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - /* uint64 id = 1; */ - if (message.id !== 0n) writer.tag(1, WireType.Varint).uint64(message.id); - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.RefreshPathRequest", [ + { no: 1, name: "id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ } + ]); + } + create(value?: PartialMessage): RefreshPathRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.id = 0n; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RefreshPathRequest): RefreshPathRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* uint64 id */ 1: + message.id = reader.uint64().toBigInt(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: RefreshPathRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* uint64 id = 1; */ + if (message.id !== 0n) + writer.tag(1, WireType.Varint).uint64(message.id); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.RefreshPathRequest @@ -504,31 +397,24 @@ class RefreshPathRequest$Type extends MessageType { export const RefreshPathRequest = new RefreshPathRequest$Type(); // @generated message type with reflection information, may provide speed optimized methods class RefreshPathResponse$Type extends MessageType { - constructor() { - super('settings.RefreshPathResponse', []); - } - create(value?: PartialMessage): RefreshPathResponse { - const message = globalThis.Object.create(this.messagePrototype!); - if (value !== undefined) reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead( - reader: IBinaryReader, - length: number, - options: BinaryReadOptions, - target?: RefreshPathResponse - ): RefreshPathResponse { - return target ?? this.create(); - } - internalBinaryWrite( - message: RefreshPathResponse, - writer: IBinaryWriter, - options: BinaryWriteOptions - ): IBinaryWriter { - let u = options.writeUnknownFields; - if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } + constructor() { + super("settings.RefreshPathResponse", []); + } + create(value?: PartialMessage): RefreshPathResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RefreshPathResponse): RefreshPathResponse { + return target ?? this.create(); + } + internalBinaryWrite(message: RefreshPathResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } } /** * @generated MessageType for protobuf message settings.RefreshPathResponse @@ -537,9 +423,9 @@ export const RefreshPathResponse = new RefreshPathResponse$Type(); /** * @generated ServiceType for protobuf service settings.Settings */ -export const Settings = new ServiceType('settings.Settings', [ - { name: 'ListPaths', options: {}, I: Empty, O: SettingsData }, - { name: 'AddPath', options: {}, I: AddPathRequest, O: AddPathResponse }, - { name: 'DeletePath', options: {}, I: DeletePathRequest, O: DeletePathResponse }, - { name: 'RefreshPath', options: {}, I: RefreshPathRequest, O: RefreshPathResponse } +export const Settings = new ServiceType("settings.Settings", [ + { name: "ListPaths", options: {}, I: Empty, O: SettingsData }, + { name: "AddPath", options: {}, I: AddPathRequest, O: AddPathResponse }, + { name: "DeletePath", options: {}, I: DeletePathRequest, O: DeletePathResponse }, + { name: "RefreshPath", options: {}, I: RefreshPathRequest, O: RefreshPathResponse } ]); diff --git a/src/routes/player/+page.server.ts b/src/routes/player/+page.server.ts index fc36438..5c69d45 100644 --- a/src/routes/player/+page.server.ts +++ b/src/routes/player/+page.server.ts @@ -2,8 +2,30 @@ import { PlayerClient } from '$lib/proto/player.client'; import { fail } from '@sveltejs/kit'; import { protoTransport } from '../../hooks.server'; import type { Actions } from './$types'; +import { serializable } from '$lib/proto'; +import type { PlayerStatus } from '$lib/proto/player'; export const actions = { + skip: async () => { + const client = new PlayerClient(protoTransport); + + const response = await client.skipTrack({}); + + return serializable(response.response); + }, + 'skip-to-queue-index': async ({ url }) => { + const index = url.searchParams.get('index')?.toString(); + + if (!index) { + return fail(400); + } + + const client = new PlayerClient(protoTransport); + + const response = await client.skipToQueueIndex({ index: parseInt(index) }); + + return serializable(response.response); + }, resume: async () => { const client = new PlayerClient(protoTransport); diff --git a/src/routes/tracks/[hash]/+page.server.ts b/src/routes/tracks/[hash]/+page.server.ts index 5bd18ad..777a6b3 100644 --- a/src/routes/tracks/[hash]/+page.server.ts +++ b/src/routes/tracks/[hash]/+page.server.ts @@ -3,7 +3,7 @@ import { fail } from '@sveltejs/kit'; import { protoTransport } from '../../../hooks.server'; import type { Actions } from './$types'; import { serializable } from '$lib/proto'; -import type { PlayTrackResponse } from '$lib/proto/player'; +import type { PlayTrackResponse, Queue } from '$lib/proto/player'; export const actions = { play: async ({ params }) => { @@ -18,5 +18,23 @@ export const actions = { } return serializable(response.response); + }, + 'add-to-queue': async ({ params }) => { + const client = new PlayerClient(protoTransport); + + const response = await client.addTrackToQueue({ + hash: params.hash + }); + + return serializable(response.response); + }, + 'play-next': async ({ params }) => { + const client = new PlayerClient(protoTransport); + + const response = await client.playTrackNext({ + hash: params.hash + }); + + return serializable(response.response); } } satisfies Actions;