@microsoft/live-share-media 1.4.0 → 2.0.0-internal.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +30 -31
  2. package/bin/cjs/IMediaPlayer.d.ts.map +1 -0
  3. package/bin/cjs/IMediaPlayer.js.map +1 -0
  4. package/bin/{LiveMediaSession.d.ts → cjs/LiveMediaSession.d.ts} +16 -9
  5. package/bin/cjs/LiveMediaSession.d.ts.map +1 -0
  6. package/bin/{LiveMediaSession.js → cjs/LiveMediaSession.js} +31 -25
  7. package/bin/cjs/LiveMediaSession.js.map +1 -0
  8. package/bin/{LiveMediaSessionCoordinator.d.ts → cjs/LiveMediaSessionCoordinator.d.ts} +57 -13
  9. package/bin/cjs/LiveMediaSessionCoordinator.d.ts.map +1 -0
  10. package/bin/{LiveMediaSessionCoordinator.js → cjs/LiveMediaSessionCoordinator.js} +152 -64
  11. package/bin/cjs/LiveMediaSessionCoordinator.js.map +1 -0
  12. package/bin/{LiveMediaSessionCoordinatorSuspension.d.ts → cjs/LiveMediaSessionCoordinatorSuspension.d.ts} +1 -1
  13. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  14. package/bin/cjs/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  15. package/bin/{MediaPlayerSynchronizer.d.ts → cjs/MediaPlayerSynchronizer.d.ts} +22 -8
  16. package/bin/cjs/MediaPlayerSynchronizer.d.ts.map +1 -0
  17. package/bin/{MediaPlayerSynchronizer.js → cjs/MediaPlayerSynchronizer.js} +40 -43
  18. package/bin/cjs/MediaPlayerSynchronizer.js.map +1 -0
  19. package/bin/{MediaSessionActionThrottler.d.ts → cjs/MediaSessionActionThrottler.d.ts} +1 -1
  20. package/bin/cjs/MediaSessionActionThrottler.d.ts.map +1 -0
  21. package/bin/cjs/MediaSessionActionThrottler.js.map +1 -0
  22. package/bin/cjs/MediaSessionExtensions.d.ts.map +1 -0
  23. package/bin/{MediaSessionExtensions.js → cjs/MediaSessionExtensions.js} +1 -1
  24. package/bin/cjs/MediaSessionExtensions.js.map +1 -0
  25. package/bin/{RepeatedActionThrottler.d.ts → cjs/RepeatedActionThrottler.d.ts} +2 -2
  26. package/bin/cjs/RepeatedActionThrottler.d.ts.map +1 -0
  27. package/bin/{RepeatedActionThrottler.js → cjs/RepeatedActionThrottler.js} +3 -3
  28. package/bin/cjs/RepeatedActionThrottler.js.map +1 -0
  29. package/bin/{VolumeManager.d.ts → cjs/VolumeManager.d.ts} +6 -6
  30. package/bin/cjs/VolumeManager.d.ts.map +1 -0
  31. package/bin/{VolumeManager.js → cjs/VolumeManager.js} +6 -6
  32. package/bin/cjs/VolumeManager.js.map +1 -0
  33. package/bin/cjs/index.d.ts +14 -0
  34. package/bin/cjs/index.d.ts.map +1 -0
  35. package/bin/{internals → cjs}/index.js +9 -8
  36. package/bin/cjs/index.js.map +1 -0
  37. package/bin/{internals → cjs/internals}/GroupCoordinatorState.d.ts +14 -12
  38. package/bin/cjs/internals/GroupCoordinatorState.d.ts.map +1 -0
  39. package/bin/{internals → cjs/internals}/GroupCoordinatorState.js +47 -50
  40. package/bin/cjs/internals/GroupCoordinatorState.js.map +1 -0
  41. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.d.ts +6 -5
  42. package/bin/cjs/internals/GroupPlaybackPosition.d.ts.map +1 -0
  43. package/bin/{internals → cjs/internals}/GroupPlaybackPosition.js +3 -3
  44. package/bin/cjs/internals/GroupPlaybackPosition.js.map +1 -0
  45. package/bin/{internals → cjs/internals}/GroupPlaybackRate.d.ts +4 -5
  46. package/bin/cjs/internals/GroupPlaybackRate.d.ts.map +1 -0
  47. package/bin/{internals → cjs/internals}/GroupPlaybackRate.js +3 -6
  48. package/bin/cjs/internals/GroupPlaybackRate.js.map +1 -0
  49. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.d.ts +5 -6
  50. package/bin/cjs/internals/GroupPlaybackTrack.d.ts.map +1 -0
  51. package/bin/{internals → cjs/internals}/GroupPlaybackTrack.js +3 -6
  52. package/bin/cjs/internals/GroupPlaybackTrack.js.map +1 -0
  53. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.d.ts +5 -6
  54. package/bin/cjs/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  55. package/bin/{internals → cjs/internals}/GroupPlaybackTrackData.js +5 -8
  56. package/bin/cjs/internals/GroupPlaybackTrackData.js.map +1 -0
  57. package/bin/{internals → cjs/internals}/GroupTransportState.d.ts +8 -9
  58. package/bin/cjs/internals/GroupTransportState.d.ts.map +1 -0
  59. package/bin/{internals → cjs/internals}/GroupTransportState.js +5 -8
  60. package/bin/cjs/internals/GroupTransportState.js.map +1 -0
  61. package/bin/cjs/internals/PriorityTimeInterval.d.ts +33 -0
  62. package/bin/cjs/internals/PriorityTimeInterval.d.ts.map +1 -0
  63. package/bin/cjs/internals/PriorityTimeInterval.js +45 -0
  64. package/bin/cjs/internals/PriorityTimeInterval.js.map +1 -0
  65. package/bin/cjs/internals/consts.d.ts.map +1 -0
  66. package/bin/cjs/internals/consts.js.map +1 -0
  67. package/bin/cjs/internals/errors.d.ts.map +1 -0
  68. package/bin/cjs/internals/errors.js.map +1 -0
  69. package/bin/cjs/internals/interfaces.d.ts +23 -0
  70. package/bin/cjs/internals/interfaces.d.ts.map +1 -0
  71. package/bin/{internals → cjs/internals}/interfaces.js.map +1 -1
  72. package/bin/cjs/package.json +1 -0
  73. package/bin/esm/IMediaPlayer.d.ts +21 -0
  74. package/bin/esm/IMediaPlayer.d.ts.map +1 -0
  75. package/bin/esm/IMediaPlayer.js +6 -0
  76. package/bin/esm/IMediaPlayer.js.map +1 -0
  77. package/bin/esm/LiveMediaSession.d.ts +97 -0
  78. package/bin/esm/LiveMediaSession.d.ts.map +1 -0
  79. package/bin/esm/LiveMediaSession.js +257 -0
  80. package/bin/esm/LiveMediaSession.js.map +1 -0
  81. package/bin/esm/LiveMediaSessionCoordinator.d.ts +304 -0
  82. package/bin/esm/LiveMediaSessionCoordinator.d.ts.map +1 -0
  83. package/bin/esm/LiveMediaSessionCoordinator.js +556 -0
  84. package/bin/esm/LiveMediaSessionCoordinator.js.map +1 -0
  85. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts +20 -0
  86. package/bin/esm/LiveMediaSessionCoordinatorSuspension.d.ts.map +1 -0
  87. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js +24 -0
  88. package/bin/esm/LiveMediaSessionCoordinatorSuspension.js.map +1 -0
  89. package/bin/esm/MediaPlayerSynchronizer.d.ts +204 -0
  90. package/bin/esm/MediaPlayerSynchronizer.d.ts.map +1 -0
  91. package/bin/esm/MediaPlayerSynchronizer.js +570 -0
  92. package/bin/esm/MediaPlayerSynchronizer.js.map +1 -0
  93. package/bin/esm/MediaSessionActionThrottler.d.ts +12 -0
  94. package/bin/esm/MediaSessionActionThrottler.d.ts.map +1 -0
  95. package/bin/esm/MediaSessionActionThrottler.js +10 -0
  96. package/bin/esm/MediaSessionActionThrottler.js.map +1 -0
  97. package/bin/esm/MediaSessionExtensions.d.ts +177 -0
  98. package/bin/esm/MediaSessionExtensions.d.ts.map +1 -0
  99. package/bin/esm/MediaSessionExtensions.js +23 -0
  100. package/bin/esm/MediaSessionExtensions.js.map +1 -0
  101. package/bin/esm/RepeatedActionThrottler.d.ts +20 -0
  102. package/bin/esm/RepeatedActionThrottler.d.ts.map +1 -0
  103. package/bin/esm/RepeatedActionThrottler.js +59 -0
  104. package/bin/esm/RepeatedActionThrottler.js.map +1 -0
  105. package/bin/esm/VolumeManager.d.ts +84 -0
  106. package/bin/esm/VolumeManager.d.ts.map +1 -0
  107. package/bin/esm/VolumeManager.js +171 -0
  108. package/bin/esm/VolumeManager.js.map +1 -0
  109. package/bin/esm/index.d.ts +14 -0
  110. package/bin/esm/index.d.ts.map +1 -0
  111. package/bin/esm/index.js +14 -0
  112. package/bin/esm/index.js.map +1 -0
  113. package/bin/esm/internals/GroupCoordinatorState.d.ts +110 -0
  114. package/bin/esm/internals/GroupCoordinatorState.d.ts.map +1 -0
  115. package/bin/esm/internals/GroupCoordinatorState.js +512 -0
  116. package/bin/esm/internals/GroupCoordinatorState.js.map +1 -0
  117. package/bin/esm/internals/GroupPlaybackPosition.d.ts +71 -0
  118. package/bin/esm/internals/GroupPlaybackPosition.d.ts.map +1 -0
  119. package/bin/esm/internals/GroupPlaybackPosition.js +166 -0
  120. package/bin/esm/internals/GroupPlaybackPosition.js.map +1 -0
  121. package/bin/esm/internals/GroupPlaybackRate.d.ts +38 -0
  122. package/bin/esm/internals/GroupPlaybackRate.d.ts.map +1 -0
  123. package/bin/esm/internals/GroupPlaybackRate.js +55 -0
  124. package/bin/esm/internals/GroupPlaybackRate.js.map +1 -0
  125. package/bin/esm/internals/GroupPlaybackTrack.d.ts +45 -0
  126. package/bin/esm/internals/GroupPlaybackTrack.d.ts.map +1 -0
  127. package/bin/esm/internals/GroupPlaybackTrack.js +118 -0
  128. package/bin/esm/internals/GroupPlaybackTrack.js.map +1 -0
  129. package/bin/esm/internals/GroupPlaybackTrackData.d.ts +40 -0
  130. package/bin/esm/internals/GroupPlaybackTrackData.d.ts.map +1 -0
  131. package/bin/esm/internals/GroupPlaybackTrackData.js +66 -0
  132. package/bin/esm/internals/GroupPlaybackTrackData.js.map +1 -0
  133. package/bin/esm/internals/GroupTransportState.d.ts +52 -0
  134. package/bin/esm/internals/GroupTransportState.d.ts.map +1 -0
  135. package/bin/esm/internals/GroupTransportState.js +116 -0
  136. package/bin/esm/internals/GroupTransportState.js.map +1 -0
  137. package/bin/esm/internals/PriorityTimeInterval.d.ts +33 -0
  138. package/bin/esm/internals/PriorityTimeInterval.d.ts.map +1 -0
  139. package/bin/esm/internals/PriorityTimeInterval.js +41 -0
  140. package/bin/esm/internals/PriorityTimeInterval.js.map +1 -0
  141. package/bin/esm/internals/consts.d.ts +83 -0
  142. package/bin/esm/internals/consts.d.ts.map +1 -0
  143. package/bin/esm/internals/consts.js +89 -0
  144. package/bin/esm/internals/consts.js.map +1 -0
  145. package/bin/esm/internals/errors.d.ts +17 -0
  146. package/bin/esm/internals/errors.d.ts.map +1 -0
  147. package/bin/esm/internals/errors.js +29 -0
  148. package/bin/esm/internals/errors.js.map +1 -0
  149. package/bin/esm/internals/interfaces.d.ts +23 -0
  150. package/bin/esm/internals/interfaces.d.ts.map +1 -0
  151. package/bin/esm/internals/interfaces.js +2 -0
  152. package/bin/esm/internals/interfaces.js.map +1 -0
  153. package/package.json +31 -15
  154. package/src/LiveMediaSession.ts +29 -14
  155. package/src/LiveMediaSessionCoordinator.ts +149 -37
  156. package/src/LiveMediaSessionCoordinatorSuspension.ts +1 -1
  157. package/src/MediaPlayerSynchronizer.ts +26 -11
  158. package/src/MediaSessionActionThrottler.ts +1 -1
  159. package/src/RepeatedActionThrottler.ts +2 -2
  160. package/src/VolumeManager.ts +6 -6
  161. package/src/index.ts +9 -9
  162. package/src/internals/GroupCoordinatorState.ts +19 -15
  163. package/src/internals/GroupPlaybackPosition.ts +9 -9
  164. package/src/internals/GroupPlaybackRate.ts +4 -4
  165. package/src/internals/GroupPlaybackTrack.ts +5 -5
  166. package/src/internals/GroupPlaybackTrackData.ts +5 -5
  167. package/src/internals/GroupTransportState.ts +8 -8
  168. package/src/internals/PriorityTimeInterval.ts +76 -0
  169. package/src/internals/interfaces.ts +15 -1
  170. package/tsconfig.cjs.json +14 -0
  171. package/tsconfig.json +65 -74
  172. package/.nycrc.json +0 -11
  173. package/bin/IMediaPlayer.d.ts.map +0 -1
  174. package/bin/IMediaPlayer.js.map +0 -1
  175. package/bin/LiveMediaSession.d.ts.map +0 -1
  176. package/bin/LiveMediaSession.js.map +0 -1
  177. package/bin/LiveMediaSessionCoordinator.d.ts.map +0 -1
  178. package/bin/LiveMediaSessionCoordinator.js.map +0 -1
  179. package/bin/LiveMediaSessionCoordinatorSuspension.d.ts.map +0 -1
  180. package/bin/LiveMediaSessionCoordinatorSuspension.js.map +0 -1
  181. package/bin/MediaPlayerSynchronizer.d.ts.map +0 -1
  182. package/bin/MediaPlayerSynchronizer.js.map +0 -1
  183. package/bin/MediaSessionActionThrottler.d.ts.map +0 -1
  184. package/bin/MediaSessionActionThrottler.js.map +0 -1
  185. package/bin/MediaSessionExtensions.d.ts.map +0 -1
  186. package/bin/MediaSessionExtensions.js.map +0 -1
  187. package/bin/RepeatedActionThrottler.d.ts.map +0 -1
  188. package/bin/RepeatedActionThrottler.js.map +0 -1
  189. package/bin/VolumeManager.d.ts.map +0 -1
  190. package/bin/VolumeManager.js.map +0 -1
  191. package/bin/index.d.ts +0 -14
  192. package/bin/index.d.ts.map +0 -1
  193. package/bin/index.js +0 -30
  194. package/bin/index.js.map +0 -1
  195. package/bin/internals/GroupCoordinatorState.d.ts.map +0 -1
  196. package/bin/internals/GroupCoordinatorState.js.map +0 -1
  197. package/bin/internals/GroupPlaybackPosition.d.ts.map +0 -1
  198. package/bin/internals/GroupPlaybackPosition.js.map +0 -1
  199. package/bin/internals/GroupPlaybackRate.d.ts.map +0 -1
  200. package/bin/internals/GroupPlaybackRate.js.map +0 -1
  201. package/bin/internals/GroupPlaybackTrack.d.ts.map +0 -1
  202. package/bin/internals/GroupPlaybackTrack.js.map +0 -1
  203. package/bin/internals/GroupPlaybackTrackData.d.ts.map +0 -1
  204. package/bin/internals/GroupPlaybackTrackData.js.map +0 -1
  205. package/bin/internals/GroupTransportState.d.ts.map +0 -1
  206. package/bin/internals/GroupTransportState.js.map +0 -1
  207. package/bin/internals/consts.d.ts.map +0 -1
  208. package/bin/internals/consts.js.map +0 -1
  209. package/bin/internals/errors.d.ts.map +0 -1
  210. package/bin/internals/errors.js.map +0 -1
  211. package/bin/internals/index.d.ts +0 -13
  212. package/bin/internals/index.d.ts.map +0 -1
  213. package/bin/internals/index.js.map +0 -1
  214. package/bin/internals/interfaces.d.ts +0 -10
  215. package/bin/internals/interfaces.d.ts.map +0 -1
  216. package/src/internals/index.ts +0 -13
  217. package/tsconfig.build.json +0 -9
  218. package/typedoc.json +0 -10
  219. /package/bin/{IMediaPlayer.d.ts → cjs/IMediaPlayer.d.ts} +0 -0
  220. /package/bin/{IMediaPlayer.js → cjs/IMediaPlayer.js} +0 -0
  221. /package/bin/{LiveMediaSessionCoordinatorSuspension.js → cjs/LiveMediaSessionCoordinatorSuspension.js} +0 -0
  222. /package/bin/{MediaSessionActionThrottler.js → cjs/MediaSessionActionThrottler.js} +0 -0
  223. /package/bin/{MediaSessionExtensions.d.ts → cjs/MediaSessionExtensions.d.ts} +0 -0
  224. /package/bin/{internals → cjs/internals}/consts.d.ts +0 -0
  225. /package/bin/{internals → cjs/internals}/consts.js +0 -0
  226. /package/bin/{internals → cjs/internals}/errors.d.ts +0 -0
  227. /package/bin/{internals → cjs/internals}/errors.js +0 -0
  228. /package/bin/{internals → cjs/internals}/interfaces.js +0 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ import { ILiveEvent, TimeInterval, IEvent } from "@microsoft/live-share";
6
+ import { IRuntimeSignaler, LiveShareRuntime } from "@microsoft/live-share/internal";
7
+ import { ExtendedMediaMetadata, CoordinationWaitPoint, ExtendedMediaSessionPlaybackState, ExtendedMediaSessionActionDetails } from "../MediaSessionExtensions.js";
8
+ import { GroupPlaybackTrack, IPlaybackTrack } from "./GroupPlaybackTrack.js";
9
+ import { GroupTransportState, ITransportState } from "./GroupTransportState.js";
10
+ import { GroupPlaybackPosition } from "./GroupPlaybackPosition.js";
11
+ import { IMediaPlayerState } from "../LiveMediaSessionCoordinator.js";
12
+ import { GroupPlaybackTrackData, IPlaybackTrackData } from "./GroupPlaybackTrackData.js";
13
+ import { GroupPlaybackRate, IPlaybackRate } from "./GroupPlaybackRate.js";
14
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
15
+ import { IGenericTypedEvents } from "./interfaces.js";
16
+ import { PriorityTimeInterval } from "./PriorityTimeInterval.js";
17
+ /**
18
+ * @hidden
19
+ */
20
+ export interface IPositionUpdateEvent {
21
+ track: IPlaybackTrack;
22
+ trackData: IPlaybackTrackData;
23
+ transport: ITransportState;
24
+ playbackRate: IPlaybackRate;
25
+ playbackState: ExtendedMediaSessionPlaybackState;
26
+ position: number;
27
+ waitPoint?: CoordinationWaitPoint;
28
+ }
29
+ /**
30
+ * @hidden
31
+ */
32
+ export interface ITransportCommandEvent {
33
+ track: IPlaybackTrack;
34
+ position: number;
35
+ }
36
+ /**
37
+ * @hidden
38
+ */
39
+ export interface IRateChangeCommandEvent {
40
+ playbackRate: number;
41
+ }
42
+ /**
43
+ * @hidden
44
+ */
45
+ export interface ISetTrackEvent {
46
+ metadata: ExtendedMediaMetadata | null;
47
+ waitPoints: CoordinationWaitPoint[];
48
+ }
49
+ /**
50
+ * @hidden
51
+ */
52
+ export interface ISetTrackDataEvent {
53
+ data: object | null;
54
+ }
55
+ /**
56
+ * @hidden
57
+ */
58
+ export interface ITriggerActionEvent extends IEvent {
59
+ details: ExtendedMediaSessionActionDetails;
60
+ }
61
+ /**
62
+ * @hidden
63
+ */
64
+ export declare enum GroupCoordinatorStateEvents {
65
+ newwaitpoint = "newwaitpoint",
66
+ triggeraction = "triggeraction",
67
+ triggeractionignored = "triggeractionignored"
68
+ }
69
+ /**
70
+ * @hidden
71
+ */
72
+ export declare class GroupCoordinatorState extends TypedEventEmitter<IGenericTypedEvents> {
73
+ private readonly _runtime;
74
+ private readonly _liveRuntime;
75
+ private readonly _logger;
76
+ private readonly _maxPlaybackDrift;
77
+ private _getMediaPlayerState;
78
+ private _playbackTrack;
79
+ private _playbackTrackData;
80
+ private _transportState;
81
+ private _playbackPosition;
82
+ private _playbackRate;
83
+ private _suspensionCnt;
84
+ private _waitPoint?;
85
+ private _lastStateChange;
86
+ private _lastStateChangeTime;
87
+ constructor(runtime: IRuntimeSignaler, liveRuntime: LiveShareRuntime, maxPlaybackDrift: TimeInterval, positionUpdateInterval: PriorityTimeInterval, getMediaPlayerState: () => IMediaPlayerState);
88
+ get playbackTrack(): GroupPlaybackTrack;
89
+ get playbackTrackData(): GroupPlaybackTrackData;
90
+ get transportState(): GroupTransportState;
91
+ get playbackPosition(): GroupPlaybackPosition;
92
+ get playbackRate(): GroupPlaybackRate;
93
+ get waitingAt(): CoordinationWaitPoint | undefined;
94
+ get isSuspended(): boolean;
95
+ get isWaiting(): boolean;
96
+ beginSuspension(waitPoint?: CoordinationWaitPoint): void;
97
+ endSuspension(syncState: boolean): void;
98
+ createPositionUpdateEvent(state: IMediaPlayerState): IPositionUpdateEvent;
99
+ handleSetTrack(event: ILiveEvent<ISetTrackEvent>, local: boolean): void;
100
+ handleSetTrackData(event: ILiveEvent<ISetTrackDataEvent>, local: boolean): void;
101
+ handleRateChangeCommand(event: ILiveEvent<IRateChangeCommandEvent>, local: boolean): void;
102
+ handleTransportCommand(event: ILiveEvent<ITransportCommandEvent>, local: boolean): void;
103
+ handlePositionUpdate(event: ILiveEvent<IPositionUpdateEvent>, local: boolean): void;
104
+ syncLocalMediaSession(): Promise<void>;
105
+ private emitSetTrack;
106
+ private emitTriggerActionOrIgnored;
107
+ private emitTriggerAction;
108
+ private emitTriggerActionIgnored;
109
+ }
110
+ //# sourceMappingURL=GroupCoordinatorState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupCoordinatorState.d.ts","sourceRoot":"","sources":["../../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,UAAU,EACV,YAAY,EAEZ,MAAM,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,iCAAiC,EAEpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,kBAAkB,EAElB,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,mBAAmB,EACnB,eAAe,EAElB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,qBAAqB,EAExB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACH,sBAAsB,EAEtB,kBAAkB,EAErB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACH,iBAAiB,EACjB,aAAa,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC;IAC5B,aAAa,EAAE,iCAAiC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,qBAAqB,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,MAAM;IAC/C,OAAO,EAAE,iCAAiC,CAAC;CAC9C;AAED;;GAEG;AACH,oBAAY,2BAA2B;IACnC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,oBAAoB,yBAAyB;CAChD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,iBAAiB,CAAC,mBAAmB,CAAC;IAC7E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAe;IACjD,OAAO,CAAC,oBAAoB,CAA0B;IAGtD,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,iBAAiB,CAAwB;IACjD,OAAO,CAAC,aAAa,CAAoB;IAGzC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,UAAU,CAAC,CAAwB;IAM3C,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,oBAAoB,CAAa;gBAGrC,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,gBAAgB,EAC7B,gBAAgB,EAAE,YAAY,EAC9B,sBAAsB,EAAE,oBAAoB,EAC5C,mBAAmB,EAAE,MAAM,iBAAiB;IAoJhD,IAAW,aAAa,IAAI,kBAAkB,CAE7C;IAED,IAAW,iBAAiB,IAAI,sBAAsB,CAErD;IAED,IAAW,cAAc,IAAI,mBAAmB,CAE/C;IAED,IAAW,gBAAgB,IAAI,qBAAqB,CAEnD;IAED,IAAW,YAAY,IAAI,iBAAiB,CAE3C;IAED,IAAW,SAAS,IAAI,qBAAqB,GAAG,SAAS,CAExD;IAED,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAEM,eAAe,CAAC,SAAS,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAYxD,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAcvC,yBAAyB,CAC5B,KAAK,EAAE,iBAAiB,GACzB,oBAAoB;IA2BhB,cAAc,CACjB,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,EACjC,KAAK,EAAE,OAAO,GACf,IAAI;IA2BA,kBAAkB,CACrB,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,EACrC,KAAK,EAAE,OAAO,GACf,IAAI;IA0BA,uBAAuB,CAC1B,KAAK,EAAE,UAAU,CAAC,uBAAuB,CAAC,EAC1C,KAAK,EAAE,OAAO,GACf,IAAI;IAuBA,sBAAsB,CACzB,KAAK,EAAE,UAAU,CAAC,sBAAsB,CAAC,EACzC,KAAK,EAAE,OAAO,GACf,IAAI;IAkEA,oBAAoB,CACvB,KAAK,EAAE,UAAU,CAAC,oBAAoB,CAAC,EACvC,KAAK,EAAE,OAAO,GACf,IAAI;IAyEM,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;YA8IrC,YAAY;IAmB1B,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,wBAAwB;CAUnC"}
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the Microsoft Live Share SDK License.
4
+ */
5
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
14
+ import { LiveTelemetryLogger, } from "@microsoft/live-share";
15
+ import { waitUntilConnected, } from "@microsoft/live-share/internal";
16
+ import { GroupPlaybackTrack, GroupPlaybackTrackEvents, } from "./GroupPlaybackTrack.js";
17
+ import { GroupTransportState, } from "./GroupTransportState.js";
18
+ import { GroupPlaybackPosition, } from "./GroupPlaybackPosition.js";
19
+ import { GroupTransportStateEvents } from "./GroupTransportState.js";
20
+ import { GroupPlaybackTrackData, PlaybackTrackDataEvents, } from "./GroupPlaybackTrackData.js";
21
+ import { TelemetryEvents } from "./consts.js";
22
+ import { GroupPlaybackRate, PlaybackRateEvents, } from "./GroupPlaybackRate.js";
23
+ import { TypedEventEmitter } from "@fluid-internal/client-utils";
24
+ /**
25
+ * @hidden
26
+ */
27
+ export var GroupCoordinatorStateEvents;
28
+ (function (GroupCoordinatorStateEvents) {
29
+ GroupCoordinatorStateEvents["newwaitpoint"] = "newwaitpoint";
30
+ GroupCoordinatorStateEvents["triggeraction"] = "triggeraction";
31
+ GroupCoordinatorStateEvents["triggeractionignored"] = "triggeractionignored";
32
+ })(GroupCoordinatorStateEvents || (GroupCoordinatorStateEvents = {}));
33
+ /**
34
+ * @hidden
35
+ */
36
+ export class GroupCoordinatorState extends TypedEventEmitter {
37
+ constructor(runtime, liveRuntime, maxPlaybackDrift, positionUpdateInterval, getMediaPlayerState) {
38
+ super();
39
+ // Suspension tracking
40
+ this._suspensionCnt = 0;
41
+ // "Soft Suspension" tracking
42
+ // - Soft suspensions temporarily disconnect the local media session when transitioning between
43
+ // paused, playing, and none states. This is to give the local client time to finish any inprogress
44
+ // operations like sending a transport command or ending a suspension.
45
+ this._lastStateChange = "none";
46
+ this._lastStateChangeTime = 0;
47
+ this._runtime = runtime;
48
+ this._liveRuntime = liveRuntime;
49
+ this._logger = new LiveTelemetryLogger(runtime, liveRuntime);
50
+ this._maxPlaybackDrift = maxPlaybackDrift;
51
+ this._playbackTrack = new GroupPlaybackTrack(getMediaPlayerState);
52
+ this._playbackTrackData = new GroupPlaybackTrackData(this._playbackTrack);
53
+ this._playbackRate = new GroupPlaybackRate();
54
+ this._transportState = new GroupTransportState(this._playbackTrack, this._playbackRate, getMediaPlayerState, this._liveRuntime);
55
+ this._playbackPosition = new GroupPlaybackPosition(this._transportState, this._playbackRate, this._runtime, this._liveRuntime, positionUpdateInterval);
56
+ this._getMediaPlayerState = getMediaPlayerState;
57
+ // Listen track related events
58
+ this._playbackTrack.on(GroupPlaybackTrackEvents.trackChange, (evt) => {
59
+ if (!this.isSuspended) {
60
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackChanged);
61
+ this.emitSetTrack(evt.clientId, evt.metadata, evt.source);
62
+ }
63
+ else {
64
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackChangeDelayed);
65
+ }
66
+ });
67
+ // Listen for track data changes
68
+ this._playbackTrackData.on(PlaybackTrackDataEvents.dataChange, (evt) => __awaiter(this, void 0, void 0, function* () {
69
+ if (!this.isSuspended && !this.isWaiting) {
70
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackDataChanged);
71
+ }
72
+ else {
73
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackDataChangeDelayed);
74
+ }
75
+ const clientId = yield waitUntilConnected(this._runtime);
76
+ this.emitTriggerActionOrIgnored({
77
+ action: "datachange",
78
+ source: evt.source,
79
+ data: evt.data,
80
+ clientId: evt.clientId,
81
+ local: evt.clientId === clientId,
82
+ });
83
+ }));
84
+ this._playbackRate.on(PlaybackRateEvents.rateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
85
+ if (!this.isSuspended && !this.isWaiting) {
86
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.PlaybackRateChanged);
87
+ }
88
+ else {
89
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator
90
+ .PlaybackRateChangedDelayed);
91
+ }
92
+ const localClientId = yield waitUntilConnected(this._runtime);
93
+ const local = evt.clientId === localClientId;
94
+ this.emitTriggerActionOrIgnored({
95
+ action: "ratechange",
96
+ source: evt.source,
97
+ clientId: evt.clientId,
98
+ local,
99
+ playbackRate: evt.playbackRate,
100
+ });
101
+ }));
102
+ // Listen to transport related events
103
+ this._transportState.on(GroupTransportStateEvents.transportStateChange, (evt) => __awaiter(this, void 0, void 0, function* () {
104
+ const tag = this.isSuspended || this.isWaiting
105
+ ? TelemetryEvents.GroupCoordinator
106
+ .TransportStateChangeDelayed
107
+ : TelemetryEvents.GroupCoordinator
108
+ .TransportStateChanged;
109
+ this._logger.sendTelemetryEvent(tag, null, {
110
+ action: evt.action,
111
+ seekTime: evt.seekTime,
112
+ });
113
+ const localClientId = yield waitUntilConnected(this._runtime);
114
+ const local = evt.clientId === localClientId;
115
+ // Trigger action
116
+ switch (evt.action) {
117
+ case "play":
118
+ this.emitTriggerActionOrIgnored({
119
+ action: "play",
120
+ source: evt.source,
121
+ clientId: evt.clientId,
122
+ local,
123
+ seekTime: evt.seekTime,
124
+ });
125
+ break;
126
+ case "pause":
127
+ this.emitTriggerActionOrIgnored({
128
+ action: "pause",
129
+ source: evt.source,
130
+ clientId: evt.clientId,
131
+ local,
132
+ seekTime: evt.seekTime,
133
+ });
134
+ break;
135
+ case "seekto":
136
+ this.emitTriggerActionOrIgnored({
137
+ action: "seekto",
138
+ source: evt.source,
139
+ clientId: evt.clientId,
140
+ local,
141
+ seekTime: evt.seekTime,
142
+ });
143
+ break;
144
+ }
145
+ }));
146
+ }
147
+ get playbackTrack() {
148
+ return this._playbackTrack;
149
+ }
150
+ get playbackTrackData() {
151
+ return this._playbackTrackData;
152
+ }
153
+ get transportState() {
154
+ return this._transportState;
155
+ }
156
+ get playbackPosition() {
157
+ return this._playbackPosition;
158
+ }
159
+ get playbackRate() {
160
+ return this._playbackRate;
161
+ }
162
+ get waitingAt() {
163
+ return this._waitPoint;
164
+ }
165
+ get isSuspended() {
166
+ return this._suspensionCnt > 0;
167
+ }
168
+ get isWaiting() {
169
+ return !!this._waitPoint;
170
+ }
171
+ beginSuspension(waitPoint) {
172
+ this._suspensionCnt++;
173
+ if (waitPoint) {
174
+ // Save most recent wait point
175
+ this._waitPoint = waitPoint;
176
+ // Add to track state if dynamic wait point
177
+ this.playbackTrack.addWaitPoint(waitPoint);
178
+ }
179
+ }
180
+ endSuspension(syncState) {
181
+ if (this._suspensionCnt == 0) {
182
+ throw new Error(`GroupCoordinatorState:endSuspension - cannot end suspension when there are no active suspensions. The expected value is > 0 but the actual count is ${this._suspensionCnt}`);
183
+ }
184
+ this._suspensionCnt--;
185
+ if (this._suspensionCnt == 0 && syncState) {
186
+ // Sync media session to group
187
+ this.syncLocalMediaSession();
188
+ }
189
+ }
190
+ createPositionUpdateEvent(state) {
191
+ const { positionState, playbackState } = state;
192
+ if (this.isSuspended) {
193
+ // Report suspension state
194
+ return {
195
+ track: this.playbackTrack.current,
196
+ trackData: this.playbackTrackData.current,
197
+ transport: this.transportState.current,
198
+ playbackRate: this.playbackRate.current,
199
+ playbackState: "suspended",
200
+ position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
201
+ waitPoint: this._waitPoint,
202
+ };
203
+ }
204
+ else {
205
+ // Report current position
206
+ return {
207
+ track: this.playbackTrack.current,
208
+ trackData: this.playbackTrackData.current,
209
+ transport: this.transportState.current,
210
+ playbackRate: this.playbackRate.current,
211
+ playbackState: this._waitPoint ? "waiting" : playbackState,
212
+ position: (positionState === null || positionState === void 0 ? void 0 : positionState.position) || 0.0,
213
+ waitPoint: this._waitPoint,
214
+ };
215
+ }
216
+ }
217
+ handleSetTrack(event, local) {
218
+ // Update shared track
219
+ // - Will trigger 'trackChange' event to update media session
220
+ const updated = this.playbackTrack.updateTrack({
221
+ metadata: event.data.metadata,
222
+ waitPoints: event.data.waitPoints,
223
+ timestamp: event.timestamp,
224
+ clientId: event.clientId || "",
225
+ }, "user");
226
+ if (updated) {
227
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
228
+ correlationId: LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
229
+ });
230
+ }
231
+ }
232
+ handleSetTrackData(event, local) {
233
+ // Update shared track data
234
+ // - Will trigger 'dataChange' event to update media session
235
+ const updated = this.playbackTrackData.updateData({
236
+ data: event.data.data,
237
+ timestamp: event.timestamp,
238
+ clientId: event.clientId || "",
239
+ }, "user");
240
+ if (updated) {
241
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator.RemoteSetTrackReceived, null, {
242
+ correlationId: LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp),
243
+ });
244
+ }
245
+ }
246
+ handleRateChangeCommand(event, local) {
247
+ const newState = {
248
+ playbackRate: event.data.playbackRate,
249
+ clientId: event.clientId,
250
+ timestamp: event.timestamp,
251
+ };
252
+ const updated = this.playbackRate.updatePlaybackRate(newState, "user");
253
+ if (updated) {
254
+ const correlationId = LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
255
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator.RemoteRateChangeReceived, null, {
256
+ correlationId: correlationId,
257
+ });
258
+ }
259
+ }
260
+ handleTransportCommand(event, local) {
261
+ // Ensure change is for current track
262
+ // - Will trigger a 'trackChange' event if newer track.
263
+ this.playbackTrack.updateTrack(event.data.track, "system");
264
+ if (this.playbackTrack.compare(event.data.track.metadata)) {
265
+ // Update playback state
266
+ let playbackState = this.transportState.playbackState;
267
+ switch (event.name) {
268
+ case "play":
269
+ playbackState = "playing";
270
+ break;
271
+ case "pause":
272
+ playbackState = "paused";
273
+ break;
274
+ }
275
+ // Try to update playback state
276
+ const newState = {
277
+ playbackState: playbackState,
278
+ startPosition: event.data.position,
279
+ timestamp: event.timestamp,
280
+ clientId: event.clientId || "",
281
+ };
282
+ const updated = this.transportState.updateState(newState, "user");
283
+ if (updated) {
284
+ const correlationId = LiveTelemetryLogger.formatCorrelationId(event.clientId, event.timestamp);
285
+ switch (event.name) {
286
+ case "play":
287
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator
288
+ .RemotePlayReceived, null, {
289
+ correlationId: correlationId,
290
+ });
291
+ break;
292
+ case "pause":
293
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator
294
+ .RemotePauseReceived, null, {
295
+ correlationId: correlationId,
296
+ });
297
+ break;
298
+ case "seekTo":
299
+ this._logger.sendTelemetryEvent(TelemetryEvents.SessionCoordinator
300
+ .RemoteSeekToReceived, null, {
301
+ correlationId: correlationId,
302
+ });
303
+ break;
304
+ }
305
+ }
306
+ }
307
+ }
308
+ handlePositionUpdate(event, local) {
309
+ // Ensure change is for current track
310
+ // - Will trigger a 'trackChange' event if newer track.
311
+ this.playbackTrack.updateTrack(event.data.track, "system");
312
+ if (this.playbackTrack.compare(event.data.track.metadata)) {
313
+ // Ensure we have the latest track data
314
+ this.playbackTrackData.updateData(event.data.trackData, "system");
315
+ // Update transport state if needed
316
+ // - Ignore transport state changes if the client has ended as this will cause the local
317
+ // player to start playback even though the video may have ended for everyone.
318
+ if (event.data.playbackState != "ended") {
319
+ this.transportState.updateState(event.data.transport, "system");
320
+ }
321
+ // Ensure change is for current transport state
322
+ if (this.transportState.compare(event.data.transport)) {
323
+ // Update playback position
324
+ const position = {
325
+ playbackState: event.data.playbackState,
326
+ waitPoint: event.data.waitPoint,
327
+ position: event.data.position,
328
+ timestamp: event.timestamp,
329
+ clientId: event.clientId || "",
330
+ };
331
+ this.playbackPosition.UpdatePlaybackPosition(position);
332
+ // Ensure local media session is in sync with group
333
+ if (local && !this.isSuspended) {
334
+ // Begin a "soft suspension" on select state changes
335
+ // - This is needed because the catchup logic can try to sync the client with
336
+ // the rest of the group while the local player is trying to to seek to a
337
+ // new position.
338
+ switch (event.data.playbackState) {
339
+ case "none":
340
+ case "paused":
341
+ case "playing":
342
+ if (event.data.playbackState !=
343
+ this._lastStateChange) {
344
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator
345
+ .BeginSoftSuspension, null, { playbackState: event.data.playbackState });
346
+ this._lastStateChange =
347
+ event.data.playbackState;
348
+ this._lastStateChangeTime =
349
+ this._liveRuntime.getTimestamp();
350
+ }
351
+ break;
352
+ }
353
+ // Are we waiting?
354
+ if (this.isWaiting) {
355
+ // Check for end of waiting
356
+ if (this.playbackPosition.clientsWaiting == 0) {
357
+ this._waitPoint = undefined;
358
+ // Start syncing again
359
+ this.syncLocalMediaSession();
360
+ }
361
+ }
362
+ else {
363
+ // Sync client with group
364
+ this.syncLocalMediaSession();
365
+ }
366
+ }
367
+ }
368
+ }
369
+ }
370
+ syncLocalMediaSession() {
371
+ return __awaiter(this, void 0, void 0, function* () {
372
+ // Skip further syncs if we're waiting or in a "soft suspension".
373
+ const softSuspensionDelta = this._liveRuntime.getTimestamp() - this._lastStateChangeTime;
374
+ if (!this.isWaiting && softSuspensionDelta >= 1000) {
375
+ let { metadata, trackData, positionState, playbackState } = this._getMediaPlayerState();
376
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.CheckingForSyncIssues);
377
+ // Check for track change
378
+ if (!this.playbackTrack.compare(metadata)) {
379
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackOutOfSync);
380
+ this.emitSetTrack(this.playbackTrack.current.clientId, this.playbackTrack.metadata, "system");
381
+ return;
382
+ }
383
+ // Once local playback has ended there's no need to further sync the client. In fact
384
+ // doing so could cause the player to loop.
385
+ // - The playbackPosition.trackEnded check is to catch late joiners and prevents syncing if everyone
386
+ // else has finished the video.
387
+ // - Should another user seek or press play after the video has ended that will cause
388
+ // a transport action to trigger which will take the player out of the ended state.
389
+ if (playbackState != "ended" &&
390
+ !this._playbackPosition.trackEnded) {
391
+ // Ensure we have a position
392
+ let position = positionState === null || positionState === void 0 ? void 0 : positionState.position;
393
+ if (position == undefined) {
394
+ position = 0.0;
395
+ }
396
+ // Check for catchup
397
+ // - Target can return -1 in cases where there is no position tracking data
398
+ const target = this.playbackPosition.targetPosition;
399
+ if (target >= 0.0 &&
400
+ Math.abs(target - position) >=
401
+ Math.max(this._maxPlaybackDrift.seconds, this._maxPlaybackDrift.seconds *
402
+ this._playbackRate.rate)) {
403
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.PositionOutOfSync, null, {
404
+ current: position,
405
+ target: target,
406
+ });
407
+ this.emitTriggerAction({
408
+ action: "catchup",
409
+ source: "system",
410
+ clientId: yield waitUntilConnected(this._runtime),
411
+ local: true,
412
+ seekTime: target,
413
+ });
414
+ }
415
+ const localClientId = yield waitUntilConnected(this._runtime);
416
+ // Sync transport state
417
+ if (this.transportState.playbackState != playbackState) {
418
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TransportOutOfSync, null, {
419
+ current: playbackState,
420
+ target: this.transportState.playbackState,
421
+ });
422
+ const local = localClientId === this.transportState.current.clientId;
423
+ switch (this.transportState.playbackState) {
424
+ case "playing":
425
+ this.emitTriggerAction({
426
+ action: "play",
427
+ source: "system",
428
+ clientId: this.transportState.current.clientId,
429
+ local,
430
+ });
431
+ break;
432
+ case "paused":
433
+ this.emitTriggerAction({
434
+ action: "pause",
435
+ source: "system",
436
+ clientId: this.transportState.current.clientId,
437
+ local,
438
+ });
439
+ break;
440
+ }
441
+ }
442
+ // Sync track data
443
+ if (JSON.stringify(this.playbackTrackData.data) !=
444
+ JSON.stringify(trackData)) {
445
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.TrackDataOutOfSync);
446
+ const local = localClientId ===
447
+ this.playbackTrackData.current.clientId;
448
+ this.emitTriggerAction({
449
+ action: "datachange",
450
+ source: "system",
451
+ clientId: this.playbackTrackData.current.clientId,
452
+ local,
453
+ data: this.playbackTrackData.data,
454
+ });
455
+ }
456
+ // Sync playback rate
457
+ if (this.playbackRate.rate != (positionState === null || positionState === void 0 ? void 0 : positionState.playbackRate)) {
458
+ this._logger.sendTelemetryEvent(TelemetryEvents.GroupCoordinator.PlaybackRateOutOfSync);
459
+ const local = localClientId ===
460
+ this.playbackTrackData.current.clientId;
461
+ this.emitTriggerAction({
462
+ action: "ratechange",
463
+ source: "system",
464
+ clientId: this.playbackTrackData.current.clientId,
465
+ local,
466
+ playbackRate: this.playbackRate.rate,
467
+ });
468
+ }
469
+ }
470
+ }
471
+ });
472
+ }
473
+ emitSetTrack(clientId, metadata, source) {
474
+ return __awaiter(this, void 0, void 0, function* () {
475
+ // Reset tracking states
476
+ this._waitPoint = undefined;
477
+ const localClientId = yield waitUntilConnected(this._runtime);
478
+ // Trigger settrack action
479
+ this.emitTriggerAction({
480
+ action: "settrack",
481
+ source,
482
+ clientId,
483
+ local: localClientId === clientId,
484
+ metadata,
485
+ });
486
+ });
487
+ }
488
+ emitTriggerActionOrIgnored(details) {
489
+ if (this.isSuspended || this.isWaiting) {
490
+ return this.emitTriggerActionIgnored(details);
491
+ }
492
+ else {
493
+ return this.emitTriggerAction(details);
494
+ }
495
+ }
496
+ emitTriggerAction(details) {
497
+ const evt = {
498
+ name: GroupCoordinatorStateEvents.triggeraction,
499
+ details: details,
500
+ };
501
+ this.emit(GroupCoordinatorStateEvents.triggeraction, evt);
502
+ }
503
+ emitTriggerActionIgnored(details) {
504
+ details.ignoreReason = "localusersuspended";
505
+ const evt = {
506
+ name: GroupCoordinatorStateEvents.triggeractionignored,
507
+ details: details,
508
+ };
509
+ this.emit(GroupCoordinatorStateEvents.triggeractionignored, evt);
510
+ }
511
+ }
512
+ //# sourceMappingURL=GroupCoordinatorState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupCoordinatorState.js","sourceRoot":"","sources":["../../../src/internals/GroupCoordinatorState.ts"],"names":[],"mappings":"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"}