Browse Source

feat: priority 0 on actions from web client

Fela Maslen 4 years ago
parent
commit
126eb73d59

+ 1 - 1
gmus-web/src/actions/types.ts

@@ -29,6 +29,6 @@ export interface Action<T extends string = string, P = unknown> {
 export type ActionRemote<T extends ActionTypeRemote = ActionTypeRemote, P = unknown> = Action<
   T,
   P
-> & { fromClient?: string | null };
+> & { priority: number; fromClient?: string | null };
 
 export type ActionLocal<T extends ActionTypeLocal = ActionTypeLocal, P = unknown> = Action<T, P>;

+ 12 - 0
gmus-web/src/effects/effects.spec.ts

@@ -44,6 +44,7 @@ describe(globalEffects.name, () => {
 
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: { ...state.player, ...localPlayer },
       });
     });
@@ -85,6 +86,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: { ...state.player, seekTime: 776 },
         });
       });
@@ -116,6 +118,7 @@ describe(globalEffects.name, () => {
 
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           songId: 123,
           playing: false,
@@ -136,6 +139,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: {
             songId: 123,
             playing: true,
@@ -169,6 +173,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: expect.objectContaining({
             activeClients: ['other-client'],
           }),
@@ -191,6 +196,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: expect.objectContaining({
             activeClients: expect.arrayContaining(['some-client', 'other-client']),
           }),
@@ -228,6 +234,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: {
             songId: 123,
             playing: false,
@@ -280,6 +287,7 @@ describe(globalEffects.name, () => {
 
         expect(result).toStrictEqual<ActionStateSetRemote>({
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: {
             songId: 185,
             playing: true,
@@ -319,6 +327,7 @@ describe(globalEffects.name, () => {
       );
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...initialState.player,
           master: 'some-master',
@@ -354,6 +363,7 @@ describe(globalEffects.name, () => {
       const result = globalEffects(stateWithQueue, action);
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...initialState.player,
           master: 'some-master',
@@ -382,6 +392,7 @@ describe(globalEffects.name, () => {
 
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...initialState.player,
           master: 'some-master',
@@ -410,6 +421,7 @@ describe(globalEffects.name, () => {
 
       expect(result).toStrictEqual<ActionStateSetRemote>({
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...initialState.player,
           master: 'some-master',

+ 11 - 0
gmus-web/src/effects/effects.ts

@@ -33,6 +33,7 @@ function pushToQueue(state: GlobalState, action: ActionQueuePushed): RemoteActio
   }
   return {
     type: ActionTypeRemote.StateSet,
+    priority: 0,
     payload: {
       ...state.player,
       queue: nextQueue,
@@ -50,6 +51,7 @@ function sendStateUpdateToServer(
   }
   return {
     type: ActionTypeRemote.StateSet,
+    priority: 0,
     payload: nextPlayer,
   };
 }
@@ -65,6 +67,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
       }
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: { ...state.player, seekTime: action.payload },
       };
 
@@ -72,6 +75,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
       if (action.payload) {
         return {
           type: ActionTypeRemote.StateSet,
+          priority: 0,
           payload: {
             ...state.player,
             seekTime: state.player.currentTime,
@@ -82,6 +86,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
 
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           playing: false,
@@ -93,6 +98,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
     case ActionTypeLocal.ActiveClientToggled:
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           activeClients: state.player.activeClients.includes(action.payload)
@@ -104,6 +110,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
     case ActionTypeLocal.PlayPaused:
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           playing: !state.player.playing,
@@ -116,6 +123,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
       }
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           songId: action.payload.song?.id ?? null,
@@ -133,6 +141,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
       }
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           queue: state.player.queue.slice(1),
@@ -148,6 +157,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
       }
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: {
           ...state.player,
           queue: state.player.queue.filter((id) => id !== action.payload),
@@ -156,6 +166,7 @@ export function globalEffects(state: GlobalState, action: LocalAction): RemoteAc
     case ActionTypeLocal.QueueOrdered:
       return {
         type: ActionTypeRemote.StateSet,
+        priority: 0,
         payload: { ...state.player, queue: reorderQueue(state.player.queue, action) },
       };