capacitor-plugin-playlist 0.8.0 → 0.8.2

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.
@@ -12,7 +12,7 @@ import org.json.JSONObject
12
12
  import java.util.*
13
13
 
14
14
  @CapacitorPlugin(name = "Playlist")
15
- class PlaylistPlugin : Plugin(), OnStatusReportListener {
15
+ public class PlaylistPlugin : Plugin(), OnStatusReportListener {
16
16
  var TAG = "PlaylistPlugin"
17
17
  private var statusCallback: OnStatusCallback? = null
18
18
  private var audioPlayerImpl: RmxAudioPlayer? = null
@@ -191,6 +191,25 @@ class PlaylistPlugin : Plugin(), OnStatusReportListener {
191
191
  }
192
192
  }
193
193
 
194
+ @PluginMethod
195
+ fun getPlaylist(call: PluginCall) {
196
+ Handler(Looper.getMainLooper()).post {
197
+ val playlistManager = audioPlayerImpl!!.playlistManager
198
+ val audioTracks = playlistManager.items
199
+ val itemsArray = JSONArray()
200
+
201
+ for (track in audioTracks) {
202
+ itemsArray.put(track.toDict())
203
+ }
204
+
205
+ val result = JSObject()
206
+ result.put("items", itemsArray)
207
+ call.resolve(result)
208
+
209
+ Log.i(TAG, "getPlaylist: ${audioTracks.size} items")
210
+ }
211
+ }
212
+
194
213
  @PluginMethod
195
214
  fun play(call: PluginCall) {
196
215
  Handler(Looper.getMainLooper()).post {
@@ -357,14 +376,14 @@ class PlaylistPlugin : Plugin(), OnStatusReportListener {
357
376
  }
358
377
 
359
378
  @PluginMethod
360
- fun setVolume(call: PluginCall) {
379
+ fun setPlaybackVolume(call: PluginCall) {
361
380
  Handler(Looper.getMainLooper()).post {
362
- val volume = call.getFloat("volume", audioPlayerImpl!!.volume)!!
363
- audioPlayerImpl!!.volume = volume
381
+ val volume = call.getFloat("volume", 1.0f)!!
382
+ audioPlayerImpl!!.setVolume(volume)
364
383
 
365
384
  call.resolve()
366
385
 
367
- Log.i(TAG, "addItem")
386
+ Log.i(TAG, "setPlaybackVolume: $volume")
368
387
  }
369
388
  }
370
389
 
@@ -164,6 +164,10 @@ class PlaylistManager(application: Application) :
164
164
  var foundItem: AudioTrack? = null
165
165
  var removingCurrent = false
166
166
 
167
+ // Get the current playback position in milliseconds before removing items
168
+ val progress = currentProgress
169
+ val seekPosition: Long = if (progress != null) progress.position else 0
170
+
167
171
  // If isPlaying is true, and currentItem is not null,
168
172
  // that implies that currentItem is the currently playing item.
169
173
  // If removingCurrent gets set to true, we are removing the currently playing item,
@@ -178,7 +182,9 @@ class PlaylistManager(application: Application) :
178
182
  }
179
183
  items = audioTracks
180
184
  currentPosition = if (removingCurrent) currentPosition else audioTracks.indexOf(currentItem)
181
- beginPlayback(currentPosition.toLong(), !wasPlaying)
185
+ // If removing the current item, start from beginning (0), otherwise preserve playback position
186
+ val seekStart = if (removingCurrent) 0 else seekPosition
187
+ beginPlayback(seekStart, !wasPlaying)
182
188
  if (this.playlistHandler != null) {
183
189
  this.playlistHandler!!.updateMediaControls()
184
190
  }
@@ -194,6 +200,11 @@ class PlaylistManager(application: Application) :
194
200
  var currentPosition = currentPosition
195
201
  val currentItem = currentItem // may be null
196
202
  var removingCurrent = false
203
+
204
+ // Get the current playback position in milliseconds before removing items
205
+ val progress = currentProgress
206
+ val seekPosition: Long = if (progress != null) progress.position else 0
207
+
197
208
  for (item in its) {
198
209
  val resolvedIndex = resolveItemPosition(item.trackIndex, item.trackId)
199
210
  if (resolvedIndex >= 0) {
@@ -207,7 +218,9 @@ class PlaylistManager(application: Application) :
207
218
  }
208
219
  items = audioTracks
209
220
  currentPosition = if (removingCurrent) currentPosition else audioTracks.indexOf(currentItem)
210
- beginPlayback(currentPosition.toLong(), !wasPlaying)
221
+ // If removing the current item, start from beginning (0), otherwise preserve playback position
222
+ val seekStart = if (removingCurrent) 0 else seekPosition
223
+ beginPlayback(seekStart, !wasPlaying)
211
224
  return removedTracks
212
225
  }
213
226
 
package/dist/docs.json CHANGED
@@ -167,6 +167,18 @@
167
167
  "complexTypes": [],
168
168
  "slug": "clearallitems"
169
169
  },
170
+ {
171
+ "name": "getPlaylist",
172
+ "signature": "() => Promise<GetPlaylistResult>",
173
+ "parameters": [],
174
+ "returns": "Promise<GetPlaylistResult>",
175
+ "tags": [],
176
+ "docs": "",
177
+ "complexTypes": [
178
+ "GetPlaylistResult"
179
+ ],
180
+ "slug": "getplaylist"
181
+ },
170
182
  {
171
183
  "name": "play",
172
184
  "signature": "() => Promise<void>",
@@ -1676,6 +1688,25 @@
1676
1688
  }
1677
1689
  ]
1678
1690
  },
1691
+ {
1692
+ "name": "GetPlaylistResult",
1693
+ "slug": "getplaylistresult",
1694
+ "docs": "",
1695
+ "tags": [],
1696
+ "methods": [],
1697
+ "properties": [
1698
+ {
1699
+ "name": "items",
1700
+ "tags": [],
1701
+ "docs": "",
1702
+ "complexTypes": [
1703
+ "Array",
1704
+ "AudioTrack"
1705
+ ],
1706
+ "type": "Array<AudioTrack>"
1707
+ }
1708
+ ]
1709
+ },
1679
1710
  {
1680
1711
  "name": "SeekToOptions",
1681
1712
  "slug": "seektooptions",
@@ -14,6 +14,7 @@ export interface PlaylistPlugin {
14
14
  removeItem(options: RemoveItemOptions): Promise<void>;
15
15
  removeItems(options: RemoveItemsOptions): Promise<void>;
16
16
  clearAllItems(): Promise<void>;
17
+ getPlaylist(): Promise<GetPlaylistResult>;
17
18
  play(): Promise<void>;
18
19
  pause(): Promise<void>;
19
20
  skipForward(): Promise<void>;
@@ -72,3 +73,6 @@ export interface SetLoopOptions {
72
73
  export interface SetPlaybackRateOptions {
73
74
  rate: number;
74
75
  }
76
+ export interface GetPlaylistResult {
77
+ items: Array<AudioTrack>;
78
+ }
package/dist/esm/web.d.ts CHANGED
@@ -12,6 +12,9 @@ export declare class PlaylistWeb extends WebPlugin implements PlaylistPlugin {
12
12
  addAllItems(options: AddAllItemOptions): Promise<void>;
13
13
  addItem(options: AddItemOptions): Promise<void>;
14
14
  clearAllItems(): Promise<void>;
15
+ getPlaylist(): Promise<{
16
+ items: AudioTrack[];
17
+ }>;
15
18
  initialize(): Promise<void>;
16
19
  pause(): Promise<void>;
17
20
  play(): Promise<void>;
package/dist/esm/web.js CHANGED
@@ -29,6 +29,9 @@ export class PlaylistWeb extends WebPlugin {
29
29
  this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, "INVALID");
30
30
  return Promise.resolve();
31
31
  }
32
+ async getPlaylist() {
33
+ return Promise.resolve({ items: this.playlistItems });
34
+ }
32
35
  async initialize() {
33
36
  this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, "INVALID");
34
37
  return Promise.resolve();
@@ -303,6 +306,10 @@ export class PlaylistWeb extends WebPlugin {
303
306
  this.audio.addEventListener('durationchange', () => {
304
307
  this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));
305
308
  });
309
+ this.audio.addEventListener('seeking', () => {
310
+ const status = this.getCurrentTrackStatus(this.lastState);
311
+ this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_SEEK, status);
312
+ });
306
313
  }
307
314
  }
308
315
  getCurrentTrackId() {
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
@@ -593,6 +593,9 @@ class PlaylistWeb extends core.WebPlugin {
593
593
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, "INVALID");
594
594
  return Promise.resolve();
595
595
  }
596
+ async getPlaylist() {
597
+ return Promise.resolve({ items: this.playlistItems });
598
+ }
596
599
  async initialize() {
597
600
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_INIT, null, "INVALID");
598
601
  return Promise.resolve();
@@ -867,6 +870,10 @@ class PlaylistWeb extends core.WebPlugin {
867
870
  this.audio.addEventListener('durationchange', () => {
868
871
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));
869
872
  });
873
+ this.audio.addEventListener('seeking', () => {
874
+ const status = this.getCurrentTrackStatus(this.lastState);
875
+ this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_SEEK, status);
876
+ });
870
877
  }
871
878
  }
872
879
  getCurrentTrackId() {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * (iOS only): Playback has stalled due to insufficient network\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist\n */\n this.addItem = (trackItem) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && !removeItem.trackIndex) {\n new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({ id: removeItem.trackId, index: removeItem.trackIndex });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({ items: items });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.hlsLoaded = false;\n }\n addAllItems(options) {\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n return Promise.resolve();\n }\n addItem(options) {\n const track = validateTrack(options.item);\n if (track) {\n this.playlistItems.push(track);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, track, track.trackId);\n }\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (let track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (let { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.audio = undefined;\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n this.playlistItems.forEach((item, index) => {\n if (options.index && options.index === index) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n else if (options.id && options.id === item.trackId) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n });\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === this.playlistItems.length - 1) {\n found = -1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found + 1,\n currentItem: this.playlistItems[found + 1]\n }, this.playlistItems[found + 1].trackId);\n return this.setCurrent(this.playlistItems[found + 1]);\n }\n return Promise.reject();\n }\n async skipBack() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === 0) {\n found = this.playlistItems.length - 1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found - 1,\n currentItem: this.playlistItems[found - 1]\n }, this.playlistItems[found - 1].trackId);\n return this.setCurrent(this.playlistItems[found - 1]);\n }\n return Promise.reject();\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: Hls, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => { this.setMediaSessionRemoteControlMetadata(); });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('playing', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, this.getCurrentTrackStatus('error'));\n });\n this.audio.addEventListener('ended', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n }\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n if (this.currentTrack) {\n for (let i = 0; i < this.playlistItems.length; i++) {\n if (this.playlistItems[i].trackId === this.currentTrack.trackId) {\n return i;\n }\n }\n }\n return -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n this.currentTrack = item;\n if (item.assetUrl.includes('.m3u8')) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (window.Hls !== undefined || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.1.1';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * (iOS only): Playback has stalled due to insufficient network\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist\n */\n this.addItem = (trackItem) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && !removeItem.trackIndex) {\n new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({ id: removeItem.trackId, index: removeItem.trackIndex });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({ items: items });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.hlsLoaded = false;\n }\n addAllItems(options) {\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n return Promise.resolve();\n }\n addItem(options) {\n const track = validateTrack(options.item);\n if (track) {\n this.playlistItems.push(track);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, track, track.trackId);\n }\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async getPlaylist() {\n return Promise.resolve({ items: this.playlistItems });\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (let track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (let { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.audio = undefined;\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n this.playlistItems.forEach((item, index) => {\n if (options.index && options.index === index) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n else if (options.id && options.id === item.trackId) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n });\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === this.playlistItems.length - 1) {\n found = -1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found + 1,\n currentItem: this.playlistItems[found + 1]\n }, this.playlistItems[found + 1].trackId);\n return this.setCurrent(this.playlistItems[found + 1]);\n }\n return Promise.reject();\n }\n async skipBack() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === 0) {\n found = this.playlistItems.length - 1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found - 1,\n currentItem: this.playlistItems[found - 1]\n }, this.playlistItems[found - 1].trackId);\n return this.setCurrent(this.playlistItems[found - 1]);\n }\n return Promise.reject();\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: Hls, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => { this.setMediaSessionRemoteControlMetadata(); });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('playing', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, this.getCurrentTrackStatus('error'));\n });\n this.audio.addEventListener('ended', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n this.audio.addEventListener('seeking', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_SEEK, status);\n });\n }\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n if (this.currentTrack) {\n for (let i = 0; i < this.playlistItems.length; i++) {\n if (this.playlistItems[i].trackId === this.currentTrack.trackId) {\n return i;\n }\n }\n }\n return -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n this.currentTrack = item;\n if (item.assetUrl.includes('.m3u8')) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (window.Hls !== undefined || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.1.1';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -592,6 +592,9 @@ var capacitorPlaylist = (function (exports, core) {
592
592
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, "INVALID");
593
593
  return Promise.resolve();
594
594
  }
595
+ async getPlaylist() {
596
+ return Promise.resolve({ items: this.playlistItems });
597
+ }
595
598
  async initialize() {
596
599
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_INIT, null, "INVALID");
597
600
  return Promise.resolve();
@@ -866,6 +869,10 @@ var capacitorPlaylist = (function (exports, core) {
866
869
  this.audio.addEventListener('durationchange', () => {
867
870
  this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));
868
871
  });
872
+ this.audio.addEventListener('seeking', () => {
873
+ const status = this.getCurrentTrackStatus(this.lastState);
874
+ this.updateStatus(exports.RmxAudioStatusMessage.RMXSTATUS_SEEK, status);
875
+ });
869
876
  }
870
877
  }
871
878
  getCurrentTrackId() {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * (iOS only): Playback has stalled due to insufficient network\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist\n */\n this.addItem = (trackItem) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && !removeItem.trackIndex) {\n new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({ id: removeItem.trackId, index: removeItem.trackIndex });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({ items: items });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.hlsLoaded = false;\n }\n addAllItems(options) {\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n return Promise.resolve();\n }\n addItem(options) {\n const track = validateTrack(options.item);\n if (track) {\n this.playlistItems.push(track);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, track, track.trackId);\n }\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (let track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (let { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.audio = undefined;\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n this.playlistItems.forEach((item, index) => {\n if (options.index && options.index === index) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n else if (options.id && options.id === item.trackId) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n });\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === this.playlistItems.length - 1) {\n found = -1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found + 1,\n currentItem: this.playlistItems[found + 1]\n }, this.playlistItems[found + 1].trackId);\n return this.setCurrent(this.playlistItems[found + 1]);\n }\n return Promise.reject();\n }\n async skipBack() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === 0) {\n found = this.playlistItems.length - 1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found - 1,\n currentItem: this.playlistItems[found - 1]\n }, this.playlistItems[found - 1].trackId);\n return this.setCurrent(this.playlistItems[found - 1]);\n }\n return Promise.reject();\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: Hls, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => { this.setMediaSessionRemoteControlMetadata(); });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('playing', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, this.getCurrentTrackStatus('error'));\n });\n this.audio.addEventListener('ended', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n }\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n if (this.currentTrack) {\n for (let i = 0; i < this.playlistItems.length; i++) {\n if (this.playlistItems[i].trackId === this.currentTrack.trackId) {\n return i;\n }\n }\n }\n return -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n this.currentTrack = item;\n if (item.assetUrl.includes('.m3u8')) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (window.Hls !== undefined || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.1.1';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/Constants.js","esm/plugin.js","esm/utils.js","esm/RmxAudioPlayer.js","esm/web.js"],"sourcesContent":["/**\n * Enum describing the possible errors that may come from the plugins\n */\nexport var RmxAudioErrorType;\n(function (RmxAudioErrorType) {\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_ACTIVE\"] = 0] = \"RMXERR_NONE_ACTIVE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_ABORTED\"] = 1] = \"RMXERR_ABORTED\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NETWORK\"] = 2] = \"RMXERR_NETWORK\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_DECODE\"] = 3] = \"RMXERR_DECODE\";\n RmxAudioErrorType[RmxAudioErrorType[\"RMXERR_NONE_SUPPORTED\"] = 4] = \"RMXERR_NONE_SUPPORTED\";\n})(RmxAudioErrorType || (RmxAudioErrorType = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioErrorType values\n */\nexport const RmxAudioErrorTypeDescriptions = [\n 'No Active Sources',\n 'Aborted',\n 'Network',\n 'Failed to Decode',\n 'No Supported Sources',\n];\n/**\n * Enumeration of all status messages raised by the plugin.\n * NONE, REGISTER and INIT are structural and probably not useful to you.\n */\nexport var RmxAudioStatusMessage;\n(function (RmxAudioStatusMessage) {\n /**\n * The starting state of the plugin. You will never see this value;\n * it changes before the callbacks are even registered to report changes to this value.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_NONE\"] = 0] = \"RMXSTATUS_NONE\";\n /**\n * Raised when the plugin registers the callback handler for onStatus callbacks.\n * You will probably not be able to see this (nor do you need to).\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_REGISTER\"] = 1] = \"RMXSTATUS_REGISTER\";\n /**\n * Reserved for future use\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_INIT\"] = 2] = \"RMXSTATUS_INIT\";\n /**\n * Indicates an error is reported in the 'value' field.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ERROR\"] = 5] = \"RMXSTATUS_ERROR\";\n /**\n * The reported track is being loaded by the player\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADING\"] = 10] = \"RMXSTATUS_LOADING\";\n /**\n * The reported track is able to begin playback\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_CANPLAY\"] = 11] = \"RMXSTATUS_CANPLAY\";\n /**\n * The reported track has loaded 100% of the file (either from disc or network)\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_LOADED\"] = 15] = \"RMXSTATUS_LOADED\";\n /**\n * (iOS only): Playback has stalled due to insufficient network\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STALLED\"] = 20] = \"RMXSTATUS_STALLED\";\n /**\n * Reports an update in the reported track's buffering status\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_BUFFERING\"] = 25] = \"RMXSTATUS_BUFFERING\";\n /**\n * The reported track has started (or resumed) playing\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYING\"] = 30] = \"RMXSTATUS_PLAYING\";\n /**\n * The reported track has been paused, either by the user or by the system.\n * (iOS only): This value is raised when MP3's are malformed (but still playable).\n * These require the user to explicitly press play again. This can be worked\n * around and is on the TODO list.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PAUSE\"] = 35] = \"RMXSTATUS_PAUSE\";\n /**\n * Reports a change in the reported track's playback position.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYBACK_POSITION\"] = 40] = \"RMXSTATUS_PLAYBACK_POSITION\";\n /**\n * The reported track has seeked.\n * On Android, only the plugin consumer can generate this (Notification controls on Android do not include a seek bar).\n * On iOS, the Command Center includes a seek bar so this will be reported when the user has seeked via Command Center.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_SEEK\"] = 45] = \"RMXSTATUS_SEEK\";\n /**\n * The reported track has completed playback.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_COMPLETED\"] = 50] = \"RMXSTATUS_COMPLETED\";\n /**\n * The reported track's duration has changed. This is raised once, when duration is updated for the first time.\n * For streams, this value is never reported.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_DURATION\"] = 55] = \"RMXSTATUS_DURATION\";\n /**\n * All playback has stopped, probably because the plugin is shutting down.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_STOPPED\"] = 60] = \"RMXSTATUS_STOPPED\";\n /**\n * The playlist has skipped forward to the next track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_FORWARD\"] = 90] = \"RMX_STATUS_SKIP_FORWARD\";\n /**\n * The playlist has skipped back to the previous track.\n * On both Android and iOS, this will be raised if the notification controls/Command Center were used to skip.\n * It is unlikely you need to consume this event: RMXSTATUS_TRACK_CHANGED is also reported when this occurs,\n * so you can generalize your track change handling in one place.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMX_STATUS_SKIP_BACK\"] = 95] = \"RMX_STATUS_SKIP_BACK\";\n /**\n * Reported when the current track has changed in the native player. This event contains full data about\n * the new track, including the index and the actual track itself. The type of the 'value' field in this case\n * is OnStatusTrackChangedData.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_TRACK_CHANGED\"] = 100] = \"RMXSTATUS_TRACK_CHANGED\";\n /**\n * The entire playlist has completed playback.\n * After this event has been raised, the current item is set to null and the current index to -1.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_COMPLETED\"] = 105] = \"RMXSTATUS_PLAYLIST_COMPLETED\";\n /**\n * An item has been added to the playlist. For the setPlaylistItems and addAllItems methods, this status is\n * raised once for every track in the collection.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_ADDED\"] = 110] = \"RMXSTATUS_ITEM_ADDED\";\n /**\n * An item has been removed from the playlist. For the removeItems and clearAllItems methods, this status is\n * raised once for every track that was removed.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_ITEM_REMOVED\"] = 115] = \"RMXSTATUS_ITEM_REMOVED\";\n /**\n * All items have been removed from the playlist\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_PLAYLIST_CLEARED\"] = 120] = \"RMXSTATUS_PLAYLIST_CLEARED\";\n /**\n * Just for testing.. you don't need this and in fact can never receive it, the plugin is destroyed before it can be raised.\n */\n RmxAudioStatusMessage[RmxAudioStatusMessage[\"RMXSTATUS_VIEWDISAPPEAR\"] = 200] = \"RMXSTATUS_VIEWDISAPPEAR\";\n})(RmxAudioStatusMessage || (RmxAudioStatusMessage = {}));\n;\n/**\n * String descriptions corresponding to the RmxAudioStatusMessage values\n */\nexport const RmxAudioStatusMessageDescriptions = {\n 0: 'No Status',\n 1: 'Plugin Registered',\n 2: 'Plugin Initialized',\n 5: 'Error',\n 10: 'Loading',\n 11: 'CanPlay',\n 15: 'Loaded',\n 20: 'Stalled',\n 25: 'Buffering',\n 30: 'Playing',\n 35: 'Paused',\n 40: 'Playback Position Changed',\n 45: 'Seeked',\n 50: 'Playback Completed',\n 55: 'Duration Changed',\n 60: 'Stopped',\n 90: 'Skip Forward',\n 95: 'Skip Backward',\n 100: 'Track Changed',\n 105: 'Playlist Completed',\n 110: 'Track Added',\n 115: 'Track Removed',\n 120: 'Playlist Cleared',\n 200: 'DEBUG_View_Disappeared',\n};\n//# sourceMappingURL=Constants.js.map","import { registerPlugin } from '@capacitor/core';\n// todo: find out why we get imported twice\nlet playListWebInstance;\nconst Playlist = registerPlugin('Playlist', {\n web: () => import('./web').then(m => {\n if (!playListWebInstance) {\n playListWebInstance = new m.PlaylistWeb();\n }\n return playListWebInstance;\n }),\n});\nexport { Playlist };\n//# sourceMappingURL=plugin.js.map","/**\n * Validates the list of AudioTrack items to ensure they are valid.\n * Used internally but you can call this if you need to :)\n *\n * @param items The AudioTrack items to validate\n */\nexport const validateTracks = (items) => {\n if (!items || !Array.isArray(items)) {\n return [];\n }\n return items.map(validateTrack).filter(x => !!x); // may produce an empty array!\n};\n/**\n * Validate a single track and ensure it is valid for playback.\n * Used internally but you can call this if you need to :)\n *\n * @param track The AudioTrack to validate\n */\nexport const validateTrack = (track) => {\n if (!track) {\n return null;\n }\n // For now we will rely on TS to do the heavy lifting, but we can add a validation here\n // that all the required fields are valid. For now we just take care of the unique ID.\n track.trackId = track.trackId || generateUUID();\n return track;\n};\n/**\n * Generate a v4 UUID for use as a unique trackId. Used internally, but you can use this to generate track ID's if you want.\n */\nconst generateUUID = () => {\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n d += performance.now(); //use high-precision timer if available\n }\n // There are better ways to do this in ES6, we are intentionally avoiding the import\n // of an ES6 polyfill here.\n const template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n return [].slice.call(template).map(function (c) {\n if (c === '-' || c === '4') {\n return c;\n }\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n }).join('');\n};\n//# sourceMappingURL=utils.js.map","import { RmxAudioStatusMessage, RmxAudioStatusMessageDescriptions } from './Constants';\nimport { Playlist } from './plugin';\nimport { validateTrack, validateTracks } from './utils';\n/*!\n * Module dependencies.\n */\nconst itemStatusChangeTypes = [\n RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION,\n RmxAudioStatusMessage.RMXSTATUS_DURATION,\n RmxAudioStatusMessage.RMXSTATUS_BUFFERING,\n RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n RmxAudioStatusMessage.RMXSTATUS_LOADING,\n RmxAudioStatusMessage.RMXSTATUS_LOADED,\n RmxAudioStatusMessage.RMXSTATUS_PAUSE,\n RmxAudioStatusMessage.RMXSTATUS_COMPLETED,\n RmxAudioStatusMessage.RMXSTATUS_ERROR,\n];\nexport class RmxAudioPlayer {\n /**\n * The current summarized state of the player, as a string. It is preferred that you use the 'isX' accessors,\n * because they properly interpret the range of these values, but this field is exposed if you wish to observe\n * or interrogate it.\n */\n get currentState() {\n return this._currentState;\n }\n get currentTrack() {\n return this._currentItem;\n }\n /**\n * If the playlist is currently playling a track.\n */\n get isPlaying() {\n return this._currentState === 'playing';\n }\n /**\n * True if the playlist is currently paused\n */\n get isPaused() {\n return this._currentState === 'paused' || this._currentState === 'stopped';\n }\n /**\n * True if the plugin is currently loading its *current* track.\n * On iOS, many tracks are loaded in parallel, so this only reports for the *current item*, e.g.\n * the item that will begin playback if you press pause.\n * If you need track-specific data, it is better to watch the onStatus stream and watch for RMXSTATUS_LOADING,\n * which will be raised independently & simultaneously for every track in the playlist.\n * On Android, tracks are only loaded as they begin playback, so this value and RMXSTATUS_LOADING should always\n * apply to the same track.\n */\n get isLoading() {\n return this._currentState === 'loading';\n }\n /**\n * True if the *currently playing track* has been loaded and can be played (this includes if it is *currently playing*).\n */\n get hasLoaded() {\n return this._hasLoaded;\n }\n /**\n * True if the *current track* has reported an error. In almost all cases,\n * the playlist will automatically skip forward to the next track, in which case you will also receive\n * an RMXSTATUS_TRACK_CHANGED event.\n */\n get hasError() {\n return this._hasError;\n }\n /**\n * Creates a new RmxAudioPlayer instance.\n */\n constructor() {\n this.handlers = {};\n this.options = { verbose: false, resetStreamOnPause: true };\n this._readyResolve = () => {\n };\n this._readyReject = () => {\n };\n this._currentState = 'unknown';\n this._hasError = false;\n this._hasLoaded = false;\n this._currentItem = null;\n /**\n * Player interface\n */\n /**\n * Returns a promise that resolves when the plugin is ready.\n */\n this.ready = () => {\n return this._initPromise;\n };\n this.initialize = async () => {\n Playlist.addListener('status', (data) => {\n if (data.action === 'status') {\n this.onStatus(data.status.trackId, data.status.msgType, data.status.value);\n }\n else {\n console.warn('Unknown audio player onStatus message:', data);\n }\n });\n try {\n await Playlist.initialize();\n this._readyResolve();\n }\n catch (args) {\n const message = 'Capacitor RMXAUDIOPLAYER: Error initializing:';\n console.warn(message, args);\n this._readyReject();\n }\n };\n /**\n * Sets the player options. This can be called at any time and is not required before playback can be initiated.\n */\n this.setOptions = (options) => {\n this.options = Object.assign(Object.assign({}, this.options), options);\n return Playlist.setOptions(this.options);\n };\n /**\n * Playlist item management\n */\n /**\n * Sets the entire list of tracks to be played by the playlist.\n * This will clear all previous items from the playlist.\n * If you pass options.retainPosition = true, the current playback position will be\n * recorded and used when playback restarts. This can be used, for example, to set the\n * playlist to a new set of tracks, but retain the currently-playing item to avoid skipping.\n */\n this.setPlaylistItems = (items, options) => {\n return Playlist.setPlaylistItems({ items: validateTracks(items), options: options || {} });\n };\n /**\n * Add a single track to the end of the playlist\n */\n this.addItem = (trackItem) => {\n const validTrackItem = validateTrack(trackItem);\n if (!validTrackItem) {\n throw new Error('Provided track is null or not an audio track');\n }\n return Playlist.addItem({ item: validTrackItem });\n };\n /**\n * Adds the list of tracks to the end of the playlist.\n */\n this.addAllItems = (items) => {\n return Playlist.addAllItems({ items: validateTracks(items) });\n };\n /**\n * Removes a track from the playlist. If this is the currently playing item, the next item will automatically begin playback.\n */\n this.removeItem = (removeItem) => {\n if (!removeItem) {\n throw new Error('Track removal spec is empty');\n }\n if (!removeItem.trackId && !removeItem.trackIndex) {\n new Error('Track removal spec is invalid');\n }\n return Playlist.removeItem({ id: removeItem.trackId, index: removeItem.trackIndex });\n };\n /**\n * Removes all given tracks from the playlist; these can be specified either by trackId or trackIndex. If the removed items\n * include the currently playing item, the next available item will automatically begin playing.\n */\n this.removeItems = (items) => {\n return Playlist.removeItems({ items: items });\n };\n /**\n * Clear the entire playlist. This will result in the STOPPED event being raised.\n */\n this.clearAllItems = () => {\n return Playlist.clearAllItems();\n };\n /**\n * Playback management\n */\n /**\n * Begin playback. If no tracks have been added, this has no effect.\n */\n this.play = () => {\n return Playlist.play();\n };\n /**\n * Play the track at the given index. If the track does not exist, this has no effect.\n */\n this.playTrackByIndex = (index, position) => {\n return Playlist.playTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.playTrackById = (id, position) => {\n return Playlist.playTrackById({ id, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackByIndex = (index, position) => {\n return Playlist.selectTrackByIndex({ index, position: position || 0 });\n };\n /**\n * Play the track matching the given trackId. If the track does not exist, this has no effect.\n */\n this.selectTrackById = (id, position) => {\n return Playlist.selectTrackById({ id, position: position || 0 });\n };\n /**\n * Pause playback\n */\n this.pause = () => {\n return Playlist.pause();\n };\n /**\n * Skip to the next track. If you are already at the end, and loop is false, this has no effect.\n * If you are at the end, and loop is true, playback will begin at the beginning of the playlist.\n */\n this.skipForward = () => {\n return Playlist.skipForward();\n };\n /**\n * Skip to the previous track. If you are already at the beginning, this has no effect.\n */\n this.skipBack = () => {\n return Playlist.skipBack();\n };\n /**\n * Seek to the given position in the currently playing track. If the value exceeds the track length,\n * the track will complete and playback of the next track will begin.\n */\n this.seekTo = (position) => {\n return Playlist.seekTo({ position });\n };\n /**\n * Set the playback speed; a float value between [-1, 1] inclusive. If set to 0, this pauses playback.\n */\n this.setPlaybackRate = (rate) => {\n return Playlist.setPlaybackRate({ rate });\n };\n /**\n * Set the playback volume. Float value between [0, 1] inclusive.\n * On both Android and iOS, this sets the volume of the media stream, which can be externally\n * controlled by setting the overall hardware volume.\n */\n this.setVolume = (volume) => {\n return Playlist.setPlaybackVolume({ volume });\n };\n /**\n * Sets a flag indicating whether the playlist should loop back to the beginning once it reaches the end.\n */\n this.setLoop = (loop) => {\n return Playlist.setLoop({ loop: loop });\n };\n this.handlers = {};\n new Promise((resolve) => {\n window.addEventListener('beforeunload', () => resolve(), { once: true });\n }).then(() => Playlist.release());\n this._initPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve;\n this._readyReject = reject;\n });\n }\n /**\n * Status event handling\n */\n /**\n * @internal\n * Call this function to emit an onStatus event via the on('status') handler.\n * Internal use only, to raise events received from the native interface.\n */\n onStatus(trackId, type, value) {\n var _a;\n const status = { msgType: type, trackId: trackId, value: value };\n if (this.options.verbose) {\n console.debug(`RmxAudioPlayer.onStatus: ${RmxAudioStatusMessageDescriptions[type]}(${type}) [${trackId}]: `, value);\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED) {\n this._hasError = false;\n this._hasLoaded = false;\n this._currentState = 'loading';\n this._currentItem = (_a = status.value) === null || _a === void 0 ? void 0 : _a.currentItem;\n }\n // The plugin's status changes only in response to specific events.\n if (itemStatusChangeTypes.indexOf(status.msgType) >= 0) {\n // Only change the plugin's *current status* if the event being raised is for the current active track.\n if (this._currentItem && this._currentItem.trackId === trackId) {\n if (status.value && status.value.status) {\n this._currentState = status.value.status;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_CANPLAY) {\n this._hasLoaded = true;\n }\n if (status.msgType === RmxAudioStatusMessage.RMXSTATUS_ERROR) {\n this._hasError = true;\n }\n }\n }\n this.emit('status', status);\n }\n on(eventName, callback) {\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(callback);\n }\n /**\n * Remove an event handler from the plugin\n * @param eventName The name of the event whose subscription is to be removed\n * @param handle The event handler to destroy. Ensure that this is the SAME INSTANCE as the handler\n * that was passed in to create the subscription!\n */\n off(eventName, handle) {\n if (Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n const handleIndex = this.handlers[eventName].indexOf(handle);\n if (handleIndex >= 0) {\n this.handlers[eventName].splice(handleIndex, 1);\n }\n }\n }\n /**\n * @internal\n * Raises an event via the corresponding event handler. Internal use only.\n * @param args Event args to pass through to the handler.\n */\n emit(...args) {\n const eventName = args.shift();\n if (!Object.prototype.hasOwnProperty.call(this.handlers, eventName)) {\n return false;\n }\n const handler = this.handlers[eventName];\n for (let i = 0; i < handler.length; i++) {\n const callback = this.handlers[eventName][i];\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n return true;\n }\n}\n//# sourceMappingURL=RmxAudioPlayer.js.map","import { WebPlugin } from '@capacitor/core';\nimport { RmxAudioStatusMessage } from './Constants';\nimport { validateTrack, validateTracks } from './utils';\nexport class PlaylistWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.playlistItems = [];\n this.loop = false;\n this.options = {};\n this.currentTrack = null;\n this.lastState = 'stopped';\n this.hlsLoaded = false;\n }\n addAllItems(options) {\n this.playlistItems = this.playlistItems.concat(validateTracks(options.items));\n return Promise.resolve();\n }\n addItem(options) {\n const track = validateTrack(options.item);\n if (track) {\n this.playlistItems.push(track);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_ADDED, track, track.trackId);\n }\n return Promise.resolve();\n }\n async clearAllItems() {\n await this.release();\n this.playlistItems = [];\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_CLEARED, null, \"INVALID\");\n return Promise.resolve();\n }\n async getPlaylist() {\n return Promise.resolve({ items: this.playlistItems });\n }\n async initialize() {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_INIT, null, \"INVALID\");\n return Promise.resolve();\n }\n async pause() {\n var _a;\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.pause();\n }\n async play() {\n var _a;\n await ((_a = this.audio) === null || _a === void 0 ? void 0 : _a.play());\n }\n async playTrackById(options) {\n for (let track of this.playlistItems) {\n if (track.trackId === options.id) {\n if (track !== this.currentTrack) {\n await this.setCurrent(track);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async playTrackByIndex(options) {\n for (let { index, item } of this.playlistItems.map((item, index) => ({ index, item }))) {\n if (index === options.index) {\n if (item !== this.currentTrack) {\n await this.setCurrent(item);\n if (this.audio && (options === null || options === void 0 ? void 0 : options.position) && options.position > 0) {\n this.audio.currentTime = options.position;\n }\n }\n return this.play();\n }\n }\n return Promise.reject();\n }\n async release() {\n await this.pause();\n this.audio = undefined;\n return Promise.resolve();\n }\n async create() {\n this.audio = document.createElement('audio');\n this.audio.crossOrigin = 'anonymous';\n this.audio.preload = 'metadata';\n this.audio.controls = true;\n this.audio.autoplay = false;\n return Promise.resolve();\n }\n removeItem(options) {\n this.playlistItems.forEach((item, index) => {\n if (options.index && options.index === index) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n else if (options.id && options.id === item.trackId) {\n const removedTrack = this.playlistItems.splice(index, 1);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ITEM_REMOVED, removedTrack[0], removedTrack[0].trackId);\n }\n });\n return Promise.resolve();\n }\n removeItems(options) {\n options.items.forEach(async (item) => {\n await this.removeItem(item);\n });\n return Promise.resolve();\n }\n seekTo(options) {\n if (this.audio) {\n this.audio.currentTime = options.position;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n selectTrackById(options) {\n for (const item of this.playlistItems) {\n if (item.trackId === options.id) {\n return this.setCurrent(item);\n }\n }\n return Promise.reject();\n }\n selectTrackByIndex(options) {\n let index = 0;\n for (const item of this.playlistItems) {\n if (index === options.index) {\n return this.setCurrent(item);\n }\n index++;\n }\n return Promise.reject();\n }\n setLoop(options) {\n this.loop = options.loop;\n return Promise.resolve();\n }\n setOptions(options) {\n this.options = options || {};\n return Promise.resolve();\n }\n setPlaybackVolume(options) {\n if (this.audio) {\n this.audio.volume = options.volume;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setPlaylistItems(options) {\n var _a, _b, _c;\n this.playlistItems = options.items;\n if (this.playlistItems.length > 0) {\n let currentItem = this.playlistItems.filter(i => { var _a; return i.trackId === ((_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromId); })[0];\n if (!currentItem) {\n currentItem = this.playlistItems[0];\n }\n await this.setCurrent(currentItem, (_b = (_a = options.options) === null || _a === void 0 ? void 0 : _a.playFromPosition) !== null && _b !== void 0 ? _b : 0);\n if (!((_c = options.options) === null || _c === void 0 ? void 0 : _c.startPaused)) {\n await this.play();\n }\n }\n return Promise.resolve();\n }\n async skipForward() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === this.playlistItems.length - 1) {\n found = -1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found + 1,\n currentItem: this.playlistItems[found + 1]\n }, this.playlistItems[found + 1].trackId);\n return this.setCurrent(this.playlistItems[found + 1]);\n }\n return Promise.reject();\n }\n async skipBack() {\n let found = null;\n this.playlistItems.forEach((item, index) => {\n if (!found && this.getCurrentTrackId() === item.trackId) {\n found = index;\n }\n });\n if (found === 0) {\n found = this.playlistItems.length - 1;\n }\n if (found !== null) {\n this.updateStatus(RmxAudioStatusMessage.RMX_STATUS_SKIP_BACK, {\n currentIndex: found - 1,\n currentItem: this.playlistItems[found - 1]\n }, this.playlistItems[found - 1].trackId);\n return this.setCurrent(this.playlistItems[found - 1]);\n }\n return Promise.reject();\n }\n setPlaybackRate(options) {\n if (this.audio) {\n this.audio.playbackRate = options.rate;\n return Promise.resolve();\n }\n return Promise.reject();\n }\n async setMediaSessionRemoteControlMetadata() {\n const audioTrack = this.currentTrack;\n if (!navigator.mediaSession) {\n console.warn('Media Session API not available');\n return Promise.reject();\n }\n navigator.mediaSession.metadata = new MediaMetadata({\n title: audioTrack.title,\n artist: audioTrack.artist,\n album: audioTrack.album,\n artwork: [\n { src: audioTrack.albumArt, sizes: '96x96', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '128x128', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '192x192', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '256x256', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '384x384', type: 'image/jpeg' },\n { src: audioTrack.albumArt, sizes: '512x512', type: 'image/jpeg' },\n ]\n });\n navigator.mediaSession.setActionHandler('play', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('pause', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('nexttrack', (details) => { this.mediaSessionControlsHandler(details); });\n navigator.mediaSession.setActionHandler('previoustrack', (details) => { this.mediaSessionControlsHandler(details); });\n return Promise.resolve();\n }\n async mediaSessionControlsHandler(actionDetails) {\n switch (actionDetails.action) {\n case 'play':\n this.play();\n break;\n case 'pause':\n this.pause();\n break;\n case 'nexttrack':\n this.skipForward();\n break;\n case 'previoustrack':\n this.skipBack();\n break;\n }\n return Promise.resolve();\n }\n // register events\n /*\n private registerHlsListeners(hls: Hls, position?: number) {\n hls.on(Hls.Events.MANIFEST_PARSED, async () => {\n this.notifyListeners('status', {\n action: \"status\",\n status: {\n msgType: RmxAudioStatusMessage.RMXSTATUS_CANPLAY,\n trackId: this.getCurrentTrackId(),\n value: this.getCurrentTrackStatus('loading'),\n }\n })\n if(position) {\n await this.seekTo({position});\n }\n });\n }*/\n registerHtmlListeners(position) {\n const canPlayListener = async () => {\n var _a;\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_CANPLAY, this.getCurrentTrackStatus('paused'));\n if (position) {\n await this.seekTo({ position });\n }\n (_a = this.audio) === null || _a === void 0 ? void 0 : _a.removeEventListener('canplay', canPlayListener);\n };\n if (this.audio) {\n this.audio.addEventListener('loadstart', () => { this.setMediaSessionRemoteControlMetadata(); });\n this.audio.addEventListener('canplay', canPlayListener);\n this.audio.addEventListener('playing', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYING, this.getCurrentTrackStatus('playing'));\n });\n this.audio.addEventListener('pause', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PAUSE, this.getCurrentTrackStatus('paused'));\n });\n this.audio.addEventListener('error', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_ERROR, this.getCurrentTrackStatus('error'));\n });\n this.audio.addEventListener('ended', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_COMPLETED, this.getCurrentTrackStatus('stopped'));\n const currentTrackIndex = this.playlistItems.findIndex(i => i.trackId === this.getCurrentTrackId());\n if (currentTrackIndex === this.playlistItems.length - 1) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYLIST_COMPLETED, this.getCurrentTrackStatus('stopped'));\n }\n else {\n this.setCurrent(this.playlistItems[currentTrackIndex + 1], undefined, true);\n }\n });\n let lastTrackId, lastPosition;\n this.audio.addEventListener('timeupdate', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n if (lastTrackId !== this.getCurrentTrackId() || lastPosition !== status.currentPosition) {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_PLAYBACK_POSITION, status);\n lastTrackId = this.getCurrentTrackId();\n lastPosition = status.currentPosition;\n }\n });\n this.audio.addEventListener('durationchange', () => {\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_DURATION, this.getCurrentTrackStatus(this.lastState));\n });\n this.audio.addEventListener('seeking', () => {\n const status = this.getCurrentTrackStatus(this.lastState);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_SEEK, status);\n });\n }\n }\n getCurrentTrackId() {\n if (this.currentTrack) {\n return this.currentTrack.trackId;\n }\n return 'INVALID';\n }\n getCurrentIndex() {\n if (this.currentTrack) {\n for (let i = 0; i < this.playlistItems.length; i++) {\n if (this.playlistItems[i].trackId === this.currentTrack.trackId) {\n return i;\n }\n }\n }\n return -1;\n }\n getCurrentTrackStatus(currentState) {\n var _a, _b, _c;\n this.lastState = currentState;\n return {\n trackId: this.getCurrentTrackId(),\n isStream: !!((_a = this.currentTrack) === null || _a === void 0 ? void 0 : _a.isStream),\n currentIndex: this.getCurrentIndex(),\n status: currentState,\n currentPosition: ((_b = this.audio) === null || _b === void 0 ? void 0 : _b.currentTime) || 0,\n duration: ((_c = this.audio) === null || _c === void 0 ? void 0 : _c.duration) || 0,\n };\n }\n async setCurrent(item, position, forceAutoplay = false) {\n let wasPlaying = false;\n if (this.audio) {\n wasPlaying = !this.audio.paused;\n await this.release();\n }\n await this.create();\n this.currentTrack = item;\n if (item.assetUrl.includes('.m3u8')) {\n await this.loadHlsJs();\n const hls = new Hls({\n autoStartLoad: true,\n debug: false,\n enableWorker: true,\n });\n hls.attachMedia(this.audio);\n hls.on(Hls.Events.MEDIA_ATTACHED, () => {\n hls.loadSource(item.assetUrl);\n });\n //this.registerHlsListeners(hls, position);\n }\n else {\n this.audio.src = item.assetUrl;\n }\n await this.registerHtmlListeners(position);\n this.updateStatus(RmxAudioStatusMessage.RMXSTATUS_TRACK_CHANGED, {\n currentItem: item\n });\n if (wasPlaying || forceAutoplay) {\n //this.play();\n this.audio.addEventListener('canplay', () => {\n this.play();\n });\n }\n }\n updateStatus(msgType, value, trackId) {\n this.notifyListeners('status', {\n action: 'status',\n status: {\n msgType: msgType,\n trackId: trackId ? trackId : this.getCurrentTrackId(),\n value: value\n }\n });\n }\n loadHlsJs() {\n if (window.Hls !== undefined || this.hlsLoaded) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n console.log(\"LOADING HLS FROM CDN\");\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = 'https://cdn.jsdelivr.net/npm/hls.js@1.1.1';\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = () => {\n this.hlsLoaded = true;\n resolve(void 0);\n };\n script.onerror = () => {\n reject();\n };\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["RmxAudioErrorType","RmxAudioStatusMessage","registerPlugin","WebPlugin"],"mappings":"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"}
@@ -13,6 +13,7 @@ CAP_PLUGIN(PlaylistPlugin, "Playlist",
13
13
  CAP_PLUGIN_METHOD(removeItem, CAPPluginReturnPromise);
14
14
  CAP_PLUGIN_METHOD(removeItems, CAPPluginReturnPromise);
15
15
  CAP_PLUGIN_METHOD(clearAllItems, CAPPluginReturnPromise);
16
+ CAP_PLUGIN_METHOD(getPlaylist, CAPPluginReturnPromise);
16
17
  CAP_PLUGIN_METHOD(play, CAPPluginReturnPromise);
17
18
  CAP_PLUGIN_METHOD(pause, CAPPluginReturnPromise);
18
19
  CAP_PLUGIN_METHOD(skipForward, CAPPluginReturnPromise);
@@ -81,6 +81,11 @@ public class PlaylistPlugin: CAPPlugin, StatusUpdater {
81
81
  audioPlayerImpl.clearAllItems()
82
82
  call.resolve();
83
83
  }
84
+ @objc func getPlaylist(_ call: CAPPluginCall) {
85
+ let tracks = audioPlayerImpl.avQueuePlayer.queuedAudioTracks
86
+ let items = tracks.map { $0.toDict() }
87
+ call.resolve(["items": items]);
88
+ }
84
89
  @objc func play(_ call: CAPPluginCall) {
85
90
  audioPlayerImpl.playCommand(false)
86
91
  call.resolve();
@@ -28,7 +28,7 @@ final class RmxAudioPlayer: NSObject {
28
28
  private var isWaitingToStartPlayback = false
29
29
  private var loop = false
30
30
 
31
- private let avQueuePlayer = AVBidirectionalQueuePlayer(items: [])
31
+ let avQueuePlayer = AVBidirectionalQueuePlayer(items: [])
32
32
 
33
33
  private var lastTrackId: String? = nil
34
34
  private var lastRate: Float? = nil
@@ -256,6 +256,23 @@ final class RmxAudioPlayer: NSObject {
256
256
  func playCommand(_ isCommand: Bool) {
257
257
  wasPlayingInterrupted = false
258
258
  initializeMPCommandCenter()
259
+
260
+ // Ensure audio session is active before playing
261
+ // This is critical when resuming after video player has deactivated the session
262
+ let audioSession = AVAudioSession.sharedInstance()
263
+ if !audioSession.isOtherAudioPlaying {
264
+ // Only reactivate if no other audio is playing
265
+ do {
266
+ try audioSession.setActive(true)
267
+ } catch {
268
+ print("Warning: Could not activate audio session: \(error.localizedDescription)")
269
+ // Try to reactivate with category setup
270
+ activateAudioSession()
271
+ }
272
+ } else {
273
+ // If other audio is playing, ensure our category is set correctly
274
+ activateAudioSession()
275
+ }
259
276
 
260
277
  if resetStreamOnPause,
261
278
  let currentTrack = avQueuePlayer.currentAudioTrack,
@@ -348,12 +365,11 @@ final class RmxAudioPlayer: NSObject {
348
365
  let action = "music-controls-seek-to"
349
366
  print(String(format: "%@ %.3f", action, positionTime))
350
367
 
351
- if isCommand {
352
- let playerItem = avQueuePlayer.currentAudioTrack
353
- onStatus(.rmxstatus_SEEK, trackId: playerItem?.trackId, param: [
354
- "position": NSNumber(value: positionTime)
355
- ])
356
- }
368
+ // Always fire seek event, not just for commands
369
+ let playerItem = avQueuePlayer.currentAudioTrack
370
+ onStatus(.rmxstatus_SEEK, trackId: playerItem?.trackId, param: [
371
+ "position": NSNumber(value: positionTime)
372
+ ])
357
373
  }
358
374
 
359
375
  func setVolume(_ volume: Float) {
@@ -406,6 +422,8 @@ final class RmxAudioPlayer: NSObject {
406
422
  avQueuePlayer.removeAllItems()
407
423
  wasPlayingInterrupted = false
408
424
 
425
+ // Clear lock screen player info when playlist is cleared
426
+ MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
409
427
  }
410
428
 
411
429
  // MARK: - remote control events
@@ -553,7 +571,7 @@ final class RmxAudioPlayer: NSObject {
553
571
  guard !isReplacingItems && self.lastTrackId != playerItem?.trackId else {
554
572
  return
555
573
  }
556
- print("observe change currentItem: lastTrackId \(self.lastTrackId) playerItem: \(playerItem?.trackId)")
574
+ print("observe change currentItem: lastTrackId \(self.lastTrackId ?? "nil") playerItem: \(playerItem?.trackId ?? "nil")")
557
575
  self.lastTrackId = playerItem?.trackId
558
576
  handleCurrentItemChanged(playerItem)
559
577
  } else {
@@ -709,7 +727,7 @@ final class RmxAudioPlayer: NSObject {
709
727
 
710
728
  func handleCurrentItemChanged(_ playerItem: AudioTrack?) {
711
729
  if let playerItem = playerItem {
712
- print("Queue changed current item to: \(playerItem.trackId)")
730
+ print("Queue changed current item to: \(playerItem.trackId ?? "nil")")
713
731
  // NSLog(@"New music name: %@", ((AVURLAsset*)playerItem.asset).URL.pathComponents.lastObject);
714
732
  print("New item ID: \(playerItem.trackId ?? "")")
715
733
  print("Queue is at end: \(avQueuePlayer.isAtEnd ? "YES" : "NO")")
@@ -779,9 +797,9 @@ final class RmxAudioPlayer: NSObject {
779
797
  // Failed. Examine AVPlayerItem.error
780
798
  isWaitingToStartPlayback = false
781
799
  var errorMsg = ""
782
- if playerItem.error != nil {
783
- print("\(playerItem.error)")
784
- errorMsg = "Error playing audio track: \((playerItem.error as NSError?)?.localizedFailureReason ?? "")"
800
+ if let error = playerItem.error {
801
+ print("\(error)")
802
+ errorMsg = "Error playing audio track: \((error as NSError).localizedFailureReason ?? "")"
785
803
  }
786
804
  print("AVPlayerItemStatusFailed: \(errorMsg)")
787
805
  let errorParam = createError(withCode: .rmxerr_DECODE, message: errorMsg)
@@ -1049,12 +1067,15 @@ final class RmxAudioPlayer: NSObject {
1049
1067
  options.insert(.allowBluetoothA2DP)
1050
1068
 
1051
1069
  do {
1070
+ // Always set category first, even if session is already active
1071
+ // This ensures we have the correct category after video player exits
1052
1072
  try avSession.setCategory(.playAndRecord, options: options)
1053
1073
  } catch {
1054
1074
  print("Error setting category! \(error.localizedDescription)")
1055
1075
  }
1056
1076
 
1057
1077
  do {
1078
+ // Activate the session (will activate if not active, or update if already active)
1058
1079
  try AVAudioSession.sharedInstance().setActive(true)
1059
1080
  } catch {
1060
1081
  print("Could not activate audio session. \(error.localizedDescription)")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-plugin-playlist",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "Playlist ",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",