refactored many events to use wails bindings, reducing boilerplate
This commit is contained in:
@@ -80,7 +80,7 @@ export class PlayerControls extends LitElement {
|
||||
`;
|
||||
|
||||
private handlePlayClick = () => {
|
||||
this.player.play();
|
||||
queueStore.play();
|
||||
};
|
||||
|
||||
private handlePauseClick = () => {
|
||||
|
||||
+2
-28
@@ -2,44 +2,18 @@
|
||||
// These names must match the corresponding event names in the Go backend.
|
||||
|
||||
export const Events = {
|
||||
// Playback control events
|
||||
// Playback events (backend → frontend push)
|
||||
PlaybackStateChanged: "PlaybackStateChanged",
|
||||
PlaybackFinished: "PlaybackFinished",
|
||||
RequestPlay: "RequestPlay",
|
||||
RequestPause: "RequestPause",
|
||||
RequestLoadFile: "RequestLoadFile",
|
||||
|
||||
// Track events
|
||||
TrackChanged: "TrackChanged",
|
||||
|
||||
// Seek events
|
||||
Seek: "Seek",
|
||||
SeekFailed: "SeekFailed",
|
||||
|
||||
// Volume events
|
||||
RequestSetVolume: "RequestSetVolume",
|
||||
VolumeChanged: "VolumeChanged",
|
||||
|
||||
// Queue events
|
||||
// Queue events (backend → frontend push)
|
||||
QueueChanged: "QueueChanged",
|
||||
QueueIndexChanged: "QueueIndexChanged",
|
||||
QueueModeChanged: "QueueModeChanged",
|
||||
QueueTracksModified: "QueueTracksModified",
|
||||
RequestNext: "RequestNext",
|
||||
RequestPrevious: "RequestPrevious",
|
||||
RequestSetQueue: "RequestSetQueue",
|
||||
RequestAddToQueue: "RequestAddToQueue",
|
||||
RequestPlayNext: "RequestPlayNext",
|
||||
RequestRemoveFromQueue: "RequestRemoveFromQueue",
|
||||
RequestToggleShuffle: "RequestToggleShuffle",
|
||||
RequestCycleRepeat: "RequestCycleRepeat",
|
||||
RequestAddTracksToQueue: "RequestAddTracksToQueue",
|
||||
RequestPlayTracksNext: "RequestPlayTracksNext",
|
||||
RequestPlayQueueIndex: "RequestPlayQueueIndex",
|
||||
RequestRemoveTracksFromQueue: "RequestRemoveTracksFromQueue",
|
||||
RequestInsertTracksAtIndex: "RequestInsertTracksAtIndex",
|
||||
RequestMoveQueueTracks: "RequestMoveQueueTracks",
|
||||
RequestClearQueue: "RequestClearQueue",
|
||||
|
||||
// Playlist events
|
||||
PlaylistCreated: "PlaylistCreated",
|
||||
|
||||
@@ -12,7 +12,7 @@ import { playerStore } from '../player-store';
|
||||
* render() {
|
||||
* return html`
|
||||
* <span>${this.player.currentTrack?.fileName}</span>
|
||||
* <button @click=${() => this.player.play()}>Play</button>
|
||||
* <button @click=${() => this.player.pause()}>Pause</button>
|
||||
* `;
|
||||
* }
|
||||
*/
|
||||
@@ -67,10 +67,6 @@ export class PlayerController implements ReactiveController {
|
||||
// Delegate to store (which delegates to backend)
|
||||
// ===================================================================
|
||||
|
||||
play(): void {
|
||||
playerStore.play();
|
||||
}
|
||||
|
||||
pause(): void {
|
||||
playerStore.pause();
|
||||
}
|
||||
|
||||
@@ -71,6 +71,10 @@ export class QueueController implements ReactiveController {
|
||||
// ACTIONS
|
||||
// ===================================================================
|
||||
|
||||
play(): void {
|
||||
queueStore.play();
|
||||
}
|
||||
|
||||
next(): void {
|
||||
queueStore.next();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { EventsOn, EventsEmit } from '@runtime/runtime';
|
||||
import { EventsOn } from '@runtime/runtime';
|
||||
import { Events } from '../events';
|
||||
import * as Player from '@go/player/Player';
|
||||
|
||||
// TrackInfo mirrors the player.TrackInfo struct in the Go backend.
|
||||
// Fields are serialized as camelCase JSON via struct tags.
|
||||
@@ -79,27 +80,23 @@ class PlayerStore {
|
||||
|
||||
// ===================================================================
|
||||
// ACTIONS
|
||||
// These delegate to the backend via Wails events
|
||||
// These delegate to the backend via Wails bindings
|
||||
// ===================================================================
|
||||
|
||||
play(): void {
|
||||
EventsEmit(Events.RequestPlay);
|
||||
}
|
||||
|
||||
pause(): void {
|
||||
EventsEmit(Events.RequestPause);
|
||||
Player.Pause();
|
||||
}
|
||||
|
||||
loadTrack(filePath: string): void {
|
||||
EventsEmit(Events.RequestLoadFile, filePath);
|
||||
Player.LoadFile(filePath);
|
||||
}
|
||||
|
||||
seek(seconds: number): void {
|
||||
EventsEmit(Events.Seek, seconds);
|
||||
Player.Seek(seconds);
|
||||
}
|
||||
|
||||
setVolume(level: number): void {
|
||||
EventsEmit(Events.RequestSetVolume, level);
|
||||
Player.SetVolume(level);
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { EventsOn, EventsEmit } from '@runtime/runtime';
|
||||
import { EventsOn } from '@runtime/runtime';
|
||||
import { Events } from '../events';
|
||||
import * as Queue from '@go/queue/Queue';
|
||||
|
||||
// Types
|
||||
export interface QueueTrack {
|
||||
@@ -179,15 +180,19 @@ class QueueStore {
|
||||
|
||||
// ===================================================================
|
||||
// ACTIONS
|
||||
// These delegate to the backend via Wails events
|
||||
// These delegate to the backend via Wails bindings
|
||||
// ===================================================================
|
||||
|
||||
play(): void {
|
||||
Queue.Play();
|
||||
}
|
||||
|
||||
next(): void {
|
||||
EventsEmit(Events.RequestNext);
|
||||
Queue.Next();
|
||||
}
|
||||
|
||||
previous(): void {
|
||||
EventsEmit(Events.RequestPrevious);
|
||||
Queue.Previous();
|
||||
}
|
||||
|
||||
setQueue(
|
||||
@@ -195,71 +200,61 @@ class QueueStore {
|
||||
startIndex: number,
|
||||
shuffleStart = false,
|
||||
): void {
|
||||
EventsEmit(
|
||||
Events.RequestSetQueue,
|
||||
filePaths,
|
||||
startIndex,
|
||||
shuffleStart,
|
||||
);
|
||||
Queue.SetQueue(filePaths, startIndex, shuffleStart);
|
||||
}
|
||||
|
||||
addToQueue(filePath: string): void {
|
||||
EventsEmit(Events.RequestAddToQueue, filePath);
|
||||
Queue.AddTrack(filePath);
|
||||
}
|
||||
|
||||
playNext(filePath: string): void {
|
||||
EventsEmit(Events.RequestPlayNext, filePath);
|
||||
Queue.InsertNext(filePath);
|
||||
}
|
||||
|
||||
removeFromQueue(position: number): void {
|
||||
EventsEmit(Events.RequestRemoveFromQueue, position);
|
||||
Queue.RemoveTrack(position);
|
||||
}
|
||||
|
||||
removeTracksFromQueue(positions: number[]): void {
|
||||
EventsEmit(Events.RequestRemoveTracksFromQueue, positions);
|
||||
Queue.RemoveTracks(positions);
|
||||
}
|
||||
|
||||
addTracksToQueue(filePaths: string[]): void {
|
||||
EventsEmit(Events.RequestAddTracksToQueue, filePaths);
|
||||
Queue.AddTracks(filePaths);
|
||||
}
|
||||
|
||||
playTracksNext(filePaths: string[]): void {
|
||||
EventsEmit(Events.RequestPlayTracksNext, filePaths);
|
||||
Queue.InsertNextTracks(filePaths);
|
||||
}
|
||||
|
||||
toggleShuffle(): void {
|
||||
EventsEmit(Events.RequestToggleShuffle);
|
||||
Queue.ToggleShuffle();
|
||||
}
|
||||
|
||||
cycleRepeat(): void {
|
||||
EventsEmit(Events.RequestCycleRepeat);
|
||||
Queue.CycleRepeat();
|
||||
}
|
||||
|
||||
playAtIndex(index: number): void {
|
||||
EventsEmit(Events.RequestPlayQueueIndex, index);
|
||||
Queue.PlayIndex(index);
|
||||
}
|
||||
|
||||
insertTracksAtIndex(filePaths: string[], index: number): void {
|
||||
EventsEmit(
|
||||
Events.RequestInsertTracksAtIndex,
|
||||
filePaths,
|
||||
index,
|
||||
);
|
||||
insertTracksAtIndex(
|
||||
filePaths: string[],
|
||||
index: number,
|
||||
): void {
|
||||
Queue.InsertTracksAt(filePaths, index);
|
||||
}
|
||||
|
||||
moveTracksInQueue(
|
||||
fromIndices: number[],
|
||||
toIndex: number,
|
||||
): void {
|
||||
EventsEmit(
|
||||
Events.RequestMoveQueueTracks,
|
||||
fromIndices,
|
||||
toIndex,
|
||||
);
|
||||
Queue.MoveQueueTracks(fromIndices, toIndex);
|
||||
}
|
||||
|
||||
clearQueue(): void {
|
||||
EventsEmit(Events.RequestClearQueue);
|
||||
Queue.Clear();
|
||||
}
|
||||
|
||||
// ===================================================================
|
||||
|
||||
Reference in New Issue
Block a user