@javascriptcommon/react-native-track-player 1.2.9 → 4.1.4
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.
- package/LICENSE +201 -21
- package/README.md +8 -0
- package/android/build.gradle +92 -18
- package/android/proguard-rules.txt +0 -3
- package/android/src/main/AndroidManifest.xml +10 -13
- package/android/src/main/java/com/doublesymmetry/trackplayer/HeadlessJsMediaService.kt +199 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/TrackPlayer.kt +33 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/AudioPlayerStateExt.kt +19 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/EnumExtensions.kt +5 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/extensions/NumberExt.kt +13 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/MetadataAdapter.kt +227 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/NowPlayingMetadata.kt +16 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/PlaybackMetadata.kt +203 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/State.kt +13 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/Track.kt +67 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackAudioItem.kt +18 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/model/TrackMetadata.kt +38 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicEvents.kt +67 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/module/MusicModule.kt +778 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/service/MusicService.kt +1286 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/utils/AppForegroundTracker.kt +35 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/utils/BundleUtils.kt +147 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/utils/CoilBitmapLoader.kt +65 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/utils/MediaItemBuilder.kt +41 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/utils/RejectionException.kt +11 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoView.kt +42 -0
- package/android/src/main/java/com/doublesymmetry/trackplayer/video/TrackPlayerVideoViewManager.kt +18 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/EventHolder.kt +30 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/event/PlayerEventHolder.kt +124 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioContentType.kt +10 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItem.kt +118 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioItemTransitionReason.kt +33 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/AudioPlayerState.kt +30 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/BufferConfig.kt +8 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CacheConfig.kt +17 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/Capability.kt +19 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/CustomButton.kt +19 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/FocusChangeData.kt +3 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/MediaSessionCallback.kt +17 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayWhenReadyChangeData.kt +3 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackEndedReason.kt +5 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlaybackError.kt +6 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerConfig.kt +36 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PlayerOptions.kt +40 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/PositionChangedReason.kt +39 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/RepeatMode.kt +16 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/models/WakeMode.kt +7 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/AudioPlayer.kt +756 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/ForwardingPlayer.java +1124 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/QueuedAudioPlayer.kt +279 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/APMRenderersFactory.kt +33 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Buffer.kt +34 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/Cache.kt +27 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/FocusManager.kt +59 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/player/components/MediaFactory.kt +130 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/processors/TeeListener.kt +171 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/service/MusicService.kt +127 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/FFT.java +99 -0
- package/android/src/main/java/com/lovegaoshi/kotlinaudio/utils/Utils.kt +113 -0
- package/android/src/main/res/drawable/baseline_repeat_24.xml +5 -0
- package/android/src/main/res/drawable/baseline_repeat_one_24.xml +5 -0
- package/android/src/main/res/drawable/forward.xml +5 -0
- package/android/src/main/res/drawable/heart_24px.xml +5 -0
- package/android/src/main/res/drawable/hearte_24px.xml +5 -0
- package/android/src/main/res/drawable/ifl_24px.xml +5 -0
- package/android/src/main/res/drawable/rewind.xml +5 -0
- package/android/src/main/res/drawable/shuffle_24px.xml +5 -0
- package/android/src/main/res/values/strings.xml +5 -0
- package/android/src/main/res/xml/automotive_app_desc.xml +3 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/22AMillion.jpg +0 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/22AMI.imageset/Contents.json +21 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/Contents.json +6 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/Contents.json +21 -0
- package/ios/Example/SwiftAudio/Assets.xcassets/cover.imageset/cover.jpg +0 -0
- package/ios/Example/SwiftAudio/AudioController.swift +46 -0
- package/ios/Example/SwiftAudio/Extensions.swift +22 -0
- package/ios/Example/SwiftAudio/PlayerView.swift +172 -0
- package/ios/Example/SwiftAudio/PlayerViewModel.swift +120 -0
- package/ios/Example/SwiftAudio/Preview Content/Preview Assets.xcassets/Contents.json +6 -0
- package/ios/Example/SwiftAudio/QueueView.swift +65 -0
- package/ios/{TrackPlayer.xcodeproj/xcuserdata/marco.xcuserdatad/xcschemes/xcschememanagement.plist → Example/SwiftAudio/SwiftAudio.entitlements} +6 -8
- package/ios/Example/SwiftAudio/SwiftAudioApp.swift +17 -0
- package/ios/Example/SwiftAudio.xcodeproj/project.pbxproj +412 -0
- package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/contents.xcworkspacedata +1 -1
- package/ios/RNTrackPlayer/Models/Capabilities.swift +39 -4
- package/ios/RNTrackPlayer/Models/MediaURL.swift +12 -6
- package/ios/RNTrackPlayer/Models/MetadataAdapter.swift +147 -0
- package/ios/RNTrackPlayer/Models/PitchAlgorithms.swift +13 -0
- package/ios/RNTrackPlayer/Models/SessionCategories.swift +106 -0
- package/ios/RNTrackPlayer/Models/State.swift +26 -0
- package/ios/RNTrackPlayer/Models/Track.swift +74 -54
- package/ios/RNTrackPlayer/RNTrackPlayer.swift +867 -406
- package/ios/RNTrackPlayer/Support/RNTrackPlayer-Bridging-Header.h +1 -0
- package/ios/RNTrackPlayer/TrackPlayer.h +14 -0
- package/ios/RNTrackPlayer/TrackPlayer.mm +249 -0
- package/ios/RNTrackPlayer/Utils/EventType.swift +45 -0
- package/ios/RNTrackPlayer/Utils/Metadata.swift +60 -0
- package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoView.swift +83 -0
- package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.m +5 -0
- package/ios/RNTrackPlayer/Video/RNTrackPlayerVideoViewManager.swift +17 -0
- package/ios/SwiftAudioEx/Package.swift +20 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapper.swift +531 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperDelegate.swift +27 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperProtocol.swift +69 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AVPlayerWrapper/AVPlayerWrapperState.swift +43 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioItem.swift +158 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayer.swift +459 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioPlayerError.swift +26 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSession.swift +33 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioSessionController/AudioSessionController.swift +135 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/AudioTap.swift +96 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Event.swift +155 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/MediaItemProperty.swift +95 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoCenter.swift +17 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoController.swift +73 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoControllerProtocol.swift +26 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoKeyValue.swift +14 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/NowPlayingInfoController/NowPlayingInfoProperty.swift +234 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemNotificationObserver.swift +102 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerItemObserver.swift +136 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerObserver.swift +120 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Observer/AVPlayerTimeObserver.swift +112 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueueManager.swift +356 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/QueuedAudioPlayer.swift +236 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommand.swift +170 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RemoteCommandController/RemoteCommandController.swift +206 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/RepeatMode.swift +15 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/TimeEventFrequency.swift +26 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/Utils/DispatchQueueType.swift +18 -0
- package/ios/SwiftAudioEx/Sources/SwiftAudioEx/WaveformAudioTap.swift +159 -0
- package/lib/specs/NativeTrackPlayer.d.ts +134 -0
- package/lib/specs/NativeTrackPlayer.js +4 -0
- package/lib/src/TrackPlayerModule.web.d.ts +2 -0
- package/lib/src/TrackPlayerModule.web.js +2 -0
- package/lib/src/VideoView.d.ts +16 -0
- package/lib/src/VideoView.js +25 -0
- package/lib/src/constants/AndroidAudioContentType.d.ts +35 -0
- package/lib/src/constants/AndroidAudioContentType.js +36 -0
- package/lib/src/constants/AndroidAutoContentStyle.d.ts +10 -0
- package/lib/src/constants/AndroidAutoContentStyle.js +11 -0
- package/lib/src/constants/AppKilledPlaybackBehavior.d.ts +17 -0
- package/lib/src/constants/AppKilledPlaybackBehavior.js +18 -0
- package/lib/src/constants/Capability.d.ts +17 -0
- package/lib/src/constants/Capability.js +19 -0
- package/lib/src/constants/Event.d.ts +172 -0
- package/lib/src/constants/Event.js +173 -0
- package/lib/src/constants/IOSCategory.d.ts +36 -0
- package/lib/src/constants/IOSCategory.js +37 -0
- package/lib/src/constants/IOSCategoryMode.d.ts +47 -0
- package/lib/src/constants/IOSCategoryMode.js +48 -0
- package/lib/src/constants/IOSCategoryOptions.d.ts +44 -0
- package/lib/src/constants/IOSCategoryOptions.js +45 -0
- package/lib/src/constants/MediaItemPlayable.d.ts +4 -0
- package/lib/src/constants/MediaItemPlayable.js +5 -0
- package/lib/src/constants/PitchAlgorithm.d.ts +14 -0
- package/lib/src/constants/PitchAlgorithm.js +16 -0
- package/lib/src/constants/RatingType.d.ts +8 -0
- package/lib/src/constants/RatingType.js +10 -0
- package/lib/src/constants/RepeatMode.d.ts +8 -0
- package/lib/src/constants/RepeatMode.js +10 -0
- package/lib/src/constants/State.d.ts +34 -0
- package/lib/src/constants/State.js +35 -0
- package/lib/src/constants/TrackType.d.ts +6 -0
- package/lib/src/constants/TrackType.js +7 -0
- package/lib/src/constants/index.d.ts +14 -0
- package/lib/src/constants/index.js +14 -0
- package/lib/src/hooks/index.d.ts +6 -0
- package/lib/src/hooks/index.js +6 -0
- package/lib/src/hooks/useActiveTrack.d.ts +2 -0
- package/lib/src/hooks/useActiveTrack.js +28 -0
- package/lib/src/hooks/useAppIsInBackground.d.ts +1 -0
- package/lib/src/hooks/useAppIsInBackground.js +16 -0
- package/lib/src/hooks/useIsPlaying.d.ts +35 -0
- package/lib/src/hooks/useIsPlaying.js +50 -0
- package/lib/src/hooks/usePlayWhenReady.d.ts +1 -0
- package/lib/src/hooks/usePlayWhenReady.js +27 -0
- package/lib/src/hooks/usePlaybackState.d.ts +10 -0
- package/lib/src/hooks/usePlaybackState.js +35 -0
- package/lib/src/hooks/useProgress.d.ts +7 -0
- package/lib/src/hooks/useProgress.js +55 -0
- package/lib/src/hooks/useTrackPlayerEvents.d.ts +8 -0
- package/lib/src/hooks/useTrackPlayerEvents.js +30 -0
- package/lib/src/index.d.ts +6 -0
- package/lib/src/index.js +6 -0
- package/lib/src/interfaces/AndroidAutoBrowseTree.d.ts +5 -0
- package/lib/src/interfaces/AndroidAutoBrowseTree.js +1 -0
- package/lib/src/interfaces/AndroidOptions.d.ts +41 -0
- package/lib/src/interfaces/AndroidOptions.js +1 -0
- package/lib/src/interfaces/CustomButtons.d.ts +5 -0
- package/lib/src/interfaces/CustomButtons.js +1 -0
- package/lib/src/interfaces/FeedbackOptions.d.ts +6 -0
- package/lib/src/interfaces/FeedbackOptions.js +1 -0
- package/lib/src/interfaces/MediaItem.d.ts +18 -0
- package/lib/src/interfaces/MediaItem.js +1 -0
- package/lib/src/interfaces/MetadataOptions.d.ts +3 -0
- package/lib/src/interfaces/MetadataOptions.js +1 -0
- package/lib/src/interfaces/NowPlayingMetadata.d.ts +4 -0
- package/lib/src/interfaces/NowPlayingMetadata.js +1 -0
- package/lib/src/interfaces/PlaybackState.d.ts +8 -0
- package/lib/src/interfaces/PlaybackState.js +1 -0
- package/lib/src/interfaces/PlayerOptions.d.ts +132 -0
- package/lib/src/interfaces/PlayerOptions.js +1 -0
- package/lib/src/interfaces/Progress.d.ts +15 -0
- package/lib/src/interfaces/Progress.js +1 -0
- package/lib/src/interfaces/ResourceObject.d.ts +1 -0
- package/lib/src/interfaces/ResourceObject.js +1 -0
- package/lib/src/interfaces/ServiceHandler.d.ts +1 -0
- package/lib/src/interfaces/ServiceHandler.js +1 -0
- package/lib/src/interfaces/Track.d.ts +21 -0
- package/lib/src/interfaces/Track.js +1 -0
- package/lib/src/interfaces/TrackMetadataBase.d.ts +28 -0
- package/lib/src/interfaces/TrackMetadataBase.js +1 -0
- package/lib/src/interfaces/UpdateOptions.d.ts +52 -0
- package/lib/src/interfaces/UpdateOptions.js +1 -0
- package/lib/src/interfaces/events/AudioMetadataReceivedEvent.d.ts +33 -0
- package/lib/src/interfaces/events/AudioMetadataReceivedEvent.js +1 -0
- package/lib/src/interfaces/events/ControllerConnectedEvent.d.ts +8 -0
- package/lib/src/interfaces/events/ControllerConnectedEvent.js +1 -0
- package/lib/src/interfaces/events/EventPayloadByEvent.d.ts +77 -0
- package/lib/src/interfaces/events/EventPayloadByEvent.js +1 -0
- package/lib/src/interfaces/events/FFTUpdateEvent.d.ts +7 -0
- package/lib/src/interfaces/events/FFTUpdateEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.d.ts +24 -0
- package/lib/src/interfaces/events/PlaybackActiveTrackChangedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.d.ts +4 -0
- package/lib/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackErrorEvent.d.ts +6 -0
- package/lib/src/interfaces/events/PlaybackErrorEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.d.ts +16 -0
- package/lib/src/interfaces/events/PlaybackMetadataReceivedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.d.ts +4 -0
- package/lib/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.d.ts +4 -0
- package/lib/src/interfaces/events/PlaybackProgressUpdatedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackQueueEndedEvent.d.ts +9 -0
- package/lib/src/interfaces/events/PlaybackQueueEndedEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackResumeEvent.d.ts +3 -0
- package/lib/src/interfaces/events/PlaybackResumeEvent.js +1 -0
- package/lib/src/interfaces/events/PlaybackTrackChangedEvent.d.ts +11 -0
- package/lib/src/interfaces/events/PlaybackTrackChangedEvent.js +1 -0
- package/lib/src/interfaces/events/PlayerErrorEvent.d.ts +6 -0
- package/lib/src/interfaces/events/PlayerErrorEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteBrowseEvent.d.ts +4 -0
- package/lib/src/interfaces/events/RemoteBrowseEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteCustomActionEvent.d.ts +7 -0
- package/lib/src/interfaces/events/RemoteCustomActionEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteDuckEvent.d.ts +13 -0
- package/lib/src/interfaces/events/RemoteDuckEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteJumpBackwardEvent.d.ts +7 -0
- package/lib/src/interfaces/events/RemoteJumpBackwardEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteJumpForwardEvent.d.ts +7 -0
- package/lib/src/interfaces/events/RemoteJumpForwardEvent.js +1 -0
- package/lib/src/interfaces/events/RemotePlayIdEvent.d.ts +4 -0
- package/lib/src/interfaces/events/RemotePlayIdEvent.js +1 -0
- package/lib/src/interfaces/events/RemotePlaySearchEvent.d.ts +9 -0
- package/lib/src/interfaces/events/RemotePlaySearchEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteSearchEvent.d.ts +3 -0
- package/lib/src/interfaces/events/RemoteSearchEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteSeekEvent.d.ts +4 -0
- package/lib/src/interfaces/events/RemoteSeekEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteSetRatingEvent.d.ts +4 -0
- package/lib/src/interfaces/events/RemoteSetRatingEvent.js +1 -0
- package/lib/src/interfaces/events/RemoteSkipEvent.d.ts +3 -0
- package/lib/src/interfaces/events/RemoteSkipEvent.js +1 -0
- package/lib/src/interfaces/events/index.d.ts +20 -0
- package/lib/src/interfaces/events/index.js +20 -0
- package/lib/src/interfaces/index.d.ts +15 -0
- package/lib/src/interfaces/index.js +15 -0
- package/lib/src/resolveAssetSource.d.ts +2 -0
- package/lib/src/resolveAssetSource.js +3 -0
- package/lib/src/resolveAssetSource.web.d.ts +2 -0
- package/lib/src/resolveAssetSource.web.js +8 -0
- package/lib/src/trackPlayer.d.ts +371 -0
- package/lib/src/trackPlayer.js +627 -0
- package/lib/web/TrackPlayer/Player.d.ts +40 -0
- package/lib/web/TrackPlayer/Player.js +188 -0
- package/lib/web/TrackPlayer/PlaylistPlayer.d.ts +31 -0
- package/lib/web/TrackPlayer/PlaylistPlayer.js +181 -0
- package/lib/web/TrackPlayer/RepeatMode.d.ts +5 -0
- package/lib/web/TrackPlayer/RepeatMode.js +6 -0
- package/lib/web/TrackPlayer/SetupNotCalledError.d.ts +3 -0
- package/lib/web/TrackPlayer/SetupNotCalledError.js +5 -0
- package/lib/web/TrackPlayer/index.d.ts +3 -0
- package/lib/web/TrackPlayer/index.js +3 -0
- package/lib/web/TrackPlayerModule.d.ts +63 -0
- package/lib/web/TrackPlayerModule.js +153 -0
- package/lib/web/index.d.ts +3 -0
- package/lib/web/index.js +3 -0
- package/package.json +85 -6
- package/react-native-track-player.podspec +13 -13
- package/specs/NativeTrackPlayer.ts +153 -0
- package/src/TrackPlayerModule.web.ts +2 -0
- package/src/VideoView.tsx +51 -0
- package/src/constants/AndroidAudioContentType.ts +35 -0
- package/src/constants/AndroidAutoContentStyle.ts +10 -0
- package/src/constants/AppKilledPlaybackBehavior.ts +19 -0
- package/src/constants/Capability.ts +19 -0
- package/src/constants/Event.ts +173 -0
- package/src/constants/IOSCategory.ts +36 -0
- package/src/constants/IOSCategoryMode.ts +47 -0
- package/src/constants/IOSCategoryOptions.ts +44 -0
- package/src/constants/MediaItemPlayable.ts +4 -0
- package/src/constants/PitchAlgorithm.ts +16 -0
- package/src/constants/RatingType.ts +10 -0
- package/src/constants/RepeatMode.ts +10 -0
- package/src/constants/State.ts +34 -0
- package/src/constants/TrackType.ts +6 -0
- package/src/constants/index.ts +14 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/useActiveTrack.ts +36 -0
- package/src/hooks/useAppIsInBackground.ts +20 -0
- package/src/hooks/useIsPlaying.ts +56 -0
- package/src/hooks/usePlayWhenReady.ts +37 -0
- package/src/hooks/usePlaybackState.ts +45 -0
- package/src/hooks/useProgress.ts +64 -0
- package/src/hooks/useTrackPlayerEvents.ts +48 -0
- package/src/index.ts +8 -0
- package/src/interfaces/AndroidAutoBrowseTree.ts +6 -0
- package/src/interfaces/AndroidOptions.ts +48 -0
- package/src/interfaces/CustomButtons.ts +6 -0
- package/src/interfaces/FeedbackOptions.ts +7 -0
- package/src/interfaces/MediaItem.ts +19 -0
- package/src/interfaces/MetadataOptions.ts +4 -0
- package/src/interfaces/NowPlayingMetadata.ts +5 -0
- package/src/interfaces/PlaybackState.ts +11 -0
- package/src/interfaces/PlayerOptions.ts +138 -0
- package/src/interfaces/Progress.ts +15 -0
- package/src/interfaces/ResourceObject.ts +1 -0
- package/src/interfaces/ServiceHandler.ts +1 -0
- package/src/interfaces/Track.ts +23 -0
- package/src/interfaces/TrackMetadataBase.ts +29 -0
- package/src/interfaces/UpdateOptions.ts +59 -0
- package/src/interfaces/events/AudioMetadataReceivedEvent.ts +37 -0
- package/src/interfaces/events/ControllerConnectedEvent.ts +9 -0
- package/src/interfaces/events/EventPayloadByEvent.ts +80 -0
- package/src/interfaces/events/FFTUpdateEvent.ts +9 -0
- package/src/interfaces/events/PlaybackActiveTrackChangedEvent.ts +29 -0
- package/src/interfaces/events/PlaybackAnimatedVolumeChangedEvent.ts +4 -0
- package/src/interfaces/events/PlaybackErrorEvent.ts +6 -0
- package/src/interfaces/events/PlaybackMetadataReceivedEvent.ts +16 -0
- package/src/interfaces/events/PlaybackPlayWhenReadyChangedEvent.ts +4 -0
- package/src/interfaces/events/PlaybackProgressUpdatedEvent.ts +5 -0
- package/src/interfaces/events/PlaybackQueueEndedEvent.ts +9 -0
- package/src/interfaces/events/PlaybackResumeEvent.ts +5 -0
- package/src/interfaces/events/PlaybackTrackChangedEvent.ts +11 -0
- package/src/interfaces/events/PlayerErrorEvent.ts +6 -0
- package/src/interfaces/events/RemoteBrowseEvent.ts +4 -0
- package/src/interfaces/events/RemoteCustomActionEvent.ts +7 -0
- package/src/interfaces/events/RemoteDuckEvent.ts +13 -0
- package/src/interfaces/events/RemoteJumpBackwardEvent.ts +7 -0
- package/src/interfaces/events/RemoteJumpForwardEvent.ts +7 -0
- package/src/interfaces/events/RemotePlayIdEvent.ts +4 -0
- package/src/interfaces/events/RemotePlaySearchEvent.ts +21 -0
- package/src/interfaces/events/RemoteSearchEvent.ts +3 -0
- package/src/interfaces/events/RemoteSeekEvent.ts +4 -0
- package/src/interfaces/events/RemoteSetRatingEvent.ts +5 -0
- package/src/interfaces/events/RemoteSkipEvent.ts +3 -0
- package/src/interfaces/events/index.ts +20 -0
- package/src/interfaces/index.ts +15 -0
- package/src/resolveAssetSource.ts +3 -0
- package/src/resolveAssetSource.web.ts +10 -0
- package/src/trackPlayer.ts +806 -0
- package/web/TrackPlayer/Player.ts +201 -0
- package/web/TrackPlayer/PlaylistPlayer.ts +215 -0
- package/web/TrackPlayer/RepeatMode.ts +6 -0
- package/web/TrackPlayer/SetupNotCalledError.ts +5 -0
- package/web/TrackPlayer/index.ts +3 -0
- package/web/TrackPlayerModule.ts +181 -0
- package/web/index.ts +4 -0
- package/CHANGELOG.md +0 -75
- package/android/react-native-music-control.iml +0 -139
- package/android/react-native-track-player.iml +0 -151
- package/android/src/main/java/com/guichaguri/trackplayer/TrackPlayer.java +0 -28
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicEvents.java +0 -55
- package/android/src/main/java/com/guichaguri/trackplayer/module/MusicModule.java +0 -298
- package/android/src/main/java/com/guichaguri/trackplayer/service/HeadlessJsMediaService.java +0 -174
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicBinder.java +0 -47
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicManager.java +0 -383
- package/android/src/main/java/com/guichaguri/trackplayer/service/MusicService.java +0 -271
- package/android/src/main/java/com/guichaguri/trackplayer/service/Utils.java +0 -243
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/ButtonEvents.java +0 -148
- package/android/src/main/java/com/guichaguri/trackplayer/service/metadata/MetadataManager.java +0 -379
- package/android/src/main/java/com/guichaguri/trackplayer/service/models/Track.java +0 -141
- package/android/src/main/java/com/guichaguri/trackplayer/service/models/TrackType.java +0 -35
- package/android/src/main/res/drawable-hdpi/ic_forward.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_next.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_previous.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_rewind.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_stop.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_forward.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_next.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_previous.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_rewind.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_stop.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_forward.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_next.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_previous.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_rewind.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_stop.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_forward.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_next.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_previous.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_rewind.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_stop.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_forward.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_logo.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_next.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_pause.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_play.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_previous.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_rewind.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_stop.png +0 -0
- package/index.d.ts +0 -174
- package/index.js +0 -4
- package/ios/RNTrackPlayer/RNTrackPlayerBridge.h +0 -12
- package/ios/RNTrackPlayer/RNTrackPlayerBridge.m +0 -29
- package/ios/TrackPlayer.xcodeproj/project.pbxproj +0 -495
- package/ios/TrackPlayer.xcodeproj/project.xcworkspace/xcuserdata/marco.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/ProgressComponent.js +0 -70
- package/lib/eventTypes.js +0 -28
- package/lib/hooks.js +0 -160
- package/lib/index.js +0 -177
- /package/ios/{TrackPlayer.xcodeproj → Example/SwiftAudio.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
// !$*UTF8*$!
|
|
2
|
+
{
|
|
3
|
+
archiveVersion = 1;
|
|
4
|
+
classes = {
|
|
5
|
+
};
|
|
6
|
+
objectVersion = 60;
|
|
7
|
+
objects = {
|
|
8
|
+
|
|
9
|
+
/* Begin PBXBuildFile section */
|
|
10
|
+
9B88195D2BC8657A00E20DCE /* SwiftAudioApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B88195C2BC8657A00E20DCE /* SwiftAudioApp.swift */; };
|
|
11
|
+
9B8819612BC8657B00E20DCE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B8819602BC8657B00E20DCE /* Assets.xcassets */; };
|
|
12
|
+
9B8819652BC8657B00E20DCE /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B8819642BC8657B00E20DCE /* Preview Assets.xcassets */; };
|
|
13
|
+
9B8819712BC866A300E20DCE /* AudioController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B88196C2BC866A300E20DCE /* AudioController.swift */; };
|
|
14
|
+
9B8819742BC866A300E20DCE /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B88196F2BC866A300E20DCE /* Extensions.swift */; };
|
|
15
|
+
9B8819752BC866A300E20DCE /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8819702BC866A300E20DCE /* PlayerView.swift */; };
|
|
16
|
+
9B88197A2BC9883200E20DCE /* PlayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8819792BC9883200E20DCE /* PlayerViewModel.swift */; };
|
|
17
|
+
9B88197C2BC98F5000E20DCE /* QueueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B88197B2BC98F5000E20DCE /* QueueView.swift */; };
|
|
18
|
+
CCF141D92E463E9300D6683E /* SwiftAudioEx in Frameworks */ = {isa = PBXBuildFile; productRef = CCF141D82E463E9300D6683E /* SwiftAudioEx */; };
|
|
19
|
+
/* End PBXBuildFile section */
|
|
20
|
+
|
|
21
|
+
/* Begin PBXFileReference section */
|
|
22
|
+
9B8819592BC8657A00E20DCE /* SwiftAudio.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftAudio.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
23
|
+
9B88195C2BC8657A00E20DCE /* SwiftAudioApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftAudioApp.swift; sourceTree = "<group>"; };
|
|
24
|
+
9B8819602BC8657B00E20DCE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
|
25
|
+
9B8819622BC8657B00E20DCE /* SwiftAudio.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SwiftAudio.entitlements; sourceTree = "<group>"; };
|
|
26
|
+
9B8819642BC8657B00E20DCE /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
|
27
|
+
9B88196B2BC865E100E20DCE /* SwiftAudioEx */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SwiftAudioEx; path = ..; sourceTree = "<group>"; };
|
|
28
|
+
9B88196C2BC866A300E20DCE /* AudioController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AudioController.swift; sourceTree = "<group>"; };
|
|
29
|
+
9B88196F2BC866A300E20DCE /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
|
|
30
|
+
9B8819702BC866A300E20DCE /* PlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = "<group>"; };
|
|
31
|
+
9B8819792BC9883200E20DCE /* PlayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerViewModel.swift; sourceTree = "<group>"; };
|
|
32
|
+
9B88197B2BC98F5000E20DCE /* QueueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueView.swift; sourceTree = "<group>"; };
|
|
33
|
+
/* End PBXFileReference section */
|
|
34
|
+
|
|
35
|
+
/* Begin PBXFrameworksBuildPhase section */
|
|
36
|
+
9B8819562BC8657A00E20DCE /* Frameworks */ = {
|
|
37
|
+
isa = PBXFrameworksBuildPhase;
|
|
38
|
+
buildActionMask = 2147483647;
|
|
39
|
+
files = (
|
|
40
|
+
CCF141D92E463E9300D6683E /* SwiftAudioEx in Frameworks */,
|
|
41
|
+
);
|
|
42
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
43
|
+
};
|
|
44
|
+
/* End PBXFrameworksBuildPhase section */
|
|
45
|
+
|
|
46
|
+
/* Begin PBXGroup section */
|
|
47
|
+
9B8819502BC8657A00E20DCE = {
|
|
48
|
+
isa = PBXGroup;
|
|
49
|
+
children = (
|
|
50
|
+
9B88196B2BC865E100E20DCE /* SwiftAudioEx */,
|
|
51
|
+
9B88195B2BC8657A00E20DCE /* SwiftAudio */,
|
|
52
|
+
9B88195A2BC8657A00E20DCE /* Products */,
|
|
53
|
+
9B8819762BC866E800E20DCE /* Frameworks */,
|
|
54
|
+
);
|
|
55
|
+
sourceTree = "<group>";
|
|
56
|
+
};
|
|
57
|
+
9B88195A2BC8657A00E20DCE /* Products */ = {
|
|
58
|
+
isa = PBXGroup;
|
|
59
|
+
children = (
|
|
60
|
+
9B8819592BC8657A00E20DCE /* SwiftAudio.app */,
|
|
61
|
+
);
|
|
62
|
+
name = Products;
|
|
63
|
+
sourceTree = "<group>";
|
|
64
|
+
};
|
|
65
|
+
9B88195B2BC8657A00E20DCE /* SwiftAudio */ = {
|
|
66
|
+
isa = PBXGroup;
|
|
67
|
+
children = (
|
|
68
|
+
9B88196C2BC866A300E20DCE /* AudioController.swift */,
|
|
69
|
+
9B88196F2BC866A300E20DCE /* Extensions.swift */,
|
|
70
|
+
9B8819792BC9883200E20DCE /* PlayerViewModel.swift */,
|
|
71
|
+
9B8819702BC866A300E20DCE /* PlayerView.swift */,
|
|
72
|
+
9B88195C2BC8657A00E20DCE /* SwiftAudioApp.swift */,
|
|
73
|
+
9B88197B2BC98F5000E20DCE /* QueueView.swift */,
|
|
74
|
+
9B8819602BC8657B00E20DCE /* Assets.xcassets */,
|
|
75
|
+
9B8819622BC8657B00E20DCE /* SwiftAudio.entitlements */,
|
|
76
|
+
9B8819632BC8657B00E20DCE /* Preview Content */,
|
|
77
|
+
);
|
|
78
|
+
path = SwiftAudio;
|
|
79
|
+
sourceTree = "<group>";
|
|
80
|
+
};
|
|
81
|
+
9B8819632BC8657B00E20DCE /* Preview Content */ = {
|
|
82
|
+
isa = PBXGroup;
|
|
83
|
+
children = (
|
|
84
|
+
9B8819642BC8657B00E20DCE /* Preview Assets.xcassets */,
|
|
85
|
+
);
|
|
86
|
+
path = "Preview Content";
|
|
87
|
+
sourceTree = "<group>";
|
|
88
|
+
};
|
|
89
|
+
9B8819762BC866E800E20DCE /* Frameworks */ = {
|
|
90
|
+
isa = PBXGroup;
|
|
91
|
+
children = (
|
|
92
|
+
);
|
|
93
|
+
name = Frameworks;
|
|
94
|
+
sourceTree = "<group>";
|
|
95
|
+
};
|
|
96
|
+
/* End PBXGroup section */
|
|
97
|
+
|
|
98
|
+
/* Begin PBXNativeTarget section */
|
|
99
|
+
9B8819582BC8657A00E20DCE /* SwiftAudio */ = {
|
|
100
|
+
isa = PBXNativeTarget;
|
|
101
|
+
buildConfigurationList = 9B8819682BC8657B00E20DCE /* Build configuration list for PBXNativeTarget "SwiftAudio" */;
|
|
102
|
+
buildPhases = (
|
|
103
|
+
9B8819552BC8657A00E20DCE /* Sources */,
|
|
104
|
+
9B8819562BC8657A00E20DCE /* Frameworks */,
|
|
105
|
+
9B8819572BC8657A00E20DCE /* Resources */,
|
|
106
|
+
);
|
|
107
|
+
buildRules = (
|
|
108
|
+
);
|
|
109
|
+
dependencies = (
|
|
110
|
+
);
|
|
111
|
+
name = SwiftAudio;
|
|
112
|
+
packageProductDependencies = (
|
|
113
|
+
CCF141D82E463E9300D6683E /* SwiftAudioEx */,
|
|
114
|
+
);
|
|
115
|
+
productName = SwiftAudio;
|
|
116
|
+
productReference = 9B8819592BC8657A00E20DCE /* SwiftAudio.app */;
|
|
117
|
+
productType = "com.apple.product-type.application";
|
|
118
|
+
};
|
|
119
|
+
/* End PBXNativeTarget section */
|
|
120
|
+
|
|
121
|
+
/* Begin PBXProject section */
|
|
122
|
+
9B8819512BC8657A00E20DCE /* Project object */ = {
|
|
123
|
+
isa = PBXProject;
|
|
124
|
+
attributes = {
|
|
125
|
+
BuildIndependentTargetsInParallel = 1;
|
|
126
|
+
LastSwiftUpdateCheck = 1530;
|
|
127
|
+
LastUpgradeCheck = 1530;
|
|
128
|
+
TargetAttributes = {
|
|
129
|
+
9B8819582BC8657A00E20DCE = {
|
|
130
|
+
CreatedOnToolsVersion = 15.3;
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
buildConfigurationList = 9B8819542BC8657A00E20DCE /* Build configuration list for PBXProject "SwiftAudio" */;
|
|
135
|
+
compatibilityVersion = "Xcode 14.0";
|
|
136
|
+
developmentRegion = en;
|
|
137
|
+
hasScannedForEncodings = 0;
|
|
138
|
+
knownRegions = (
|
|
139
|
+
en,
|
|
140
|
+
Base,
|
|
141
|
+
);
|
|
142
|
+
mainGroup = 9B8819502BC8657A00E20DCE;
|
|
143
|
+
packageReferences = (
|
|
144
|
+
CCF141D72E463E9300D6683E /* XCLocalSwiftPackageReference "../SwiftAudioEx" */,
|
|
145
|
+
);
|
|
146
|
+
productRefGroup = 9B88195A2BC8657A00E20DCE /* Products */;
|
|
147
|
+
projectDirPath = "";
|
|
148
|
+
projectRoot = "";
|
|
149
|
+
targets = (
|
|
150
|
+
9B8819582BC8657A00E20DCE /* SwiftAudio */,
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
/* End PBXProject section */
|
|
154
|
+
|
|
155
|
+
/* Begin PBXResourcesBuildPhase section */
|
|
156
|
+
9B8819572BC8657A00E20DCE /* Resources */ = {
|
|
157
|
+
isa = PBXResourcesBuildPhase;
|
|
158
|
+
buildActionMask = 2147483647;
|
|
159
|
+
files = (
|
|
160
|
+
9B8819652BC8657B00E20DCE /* Preview Assets.xcassets in Resources */,
|
|
161
|
+
9B8819612BC8657B00E20DCE /* Assets.xcassets in Resources */,
|
|
162
|
+
);
|
|
163
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
164
|
+
};
|
|
165
|
+
/* End PBXResourcesBuildPhase section */
|
|
166
|
+
|
|
167
|
+
/* Begin PBXSourcesBuildPhase section */
|
|
168
|
+
9B8819552BC8657A00E20DCE /* Sources */ = {
|
|
169
|
+
isa = PBXSourcesBuildPhase;
|
|
170
|
+
buildActionMask = 2147483647;
|
|
171
|
+
files = (
|
|
172
|
+
9B8819742BC866A300E20DCE /* Extensions.swift in Sources */,
|
|
173
|
+
9B8819752BC866A300E20DCE /* PlayerView.swift in Sources */,
|
|
174
|
+
9B8819712BC866A300E20DCE /* AudioController.swift in Sources */,
|
|
175
|
+
9B88197A2BC9883200E20DCE /* PlayerViewModel.swift in Sources */,
|
|
176
|
+
9B88197C2BC98F5000E20DCE /* QueueView.swift in Sources */,
|
|
177
|
+
9B88195D2BC8657A00E20DCE /* SwiftAudioApp.swift in Sources */,
|
|
178
|
+
);
|
|
179
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
180
|
+
};
|
|
181
|
+
/* End PBXSourcesBuildPhase section */
|
|
182
|
+
|
|
183
|
+
/* Begin XCBuildConfiguration section */
|
|
184
|
+
9B8819662BC8657B00E20DCE /* Debug */ = {
|
|
185
|
+
isa = XCBuildConfiguration;
|
|
186
|
+
buildSettings = {
|
|
187
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
188
|
+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
|
189
|
+
CLANG_ANALYZER_NONNULL = YES;
|
|
190
|
+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
191
|
+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
|
192
|
+
CLANG_ENABLE_MODULES = YES;
|
|
193
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
194
|
+
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
195
|
+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
196
|
+
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
197
|
+
CLANG_WARN_COMMA = YES;
|
|
198
|
+
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
199
|
+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
200
|
+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
201
|
+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
202
|
+
CLANG_WARN_EMPTY_BODY = YES;
|
|
203
|
+
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
204
|
+
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
205
|
+
CLANG_WARN_INT_CONVERSION = YES;
|
|
206
|
+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
207
|
+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
208
|
+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
209
|
+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
210
|
+
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
211
|
+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
212
|
+
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
213
|
+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
214
|
+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
215
|
+
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
216
|
+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
217
|
+
COPY_PHASE_STRIP = NO;
|
|
218
|
+
DEBUG_INFORMATION_FORMAT = dwarf;
|
|
219
|
+
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
220
|
+
ENABLE_TESTABILITY = YES;
|
|
221
|
+
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
222
|
+
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
223
|
+
GCC_DYNAMIC_NO_PIC = NO;
|
|
224
|
+
GCC_NO_COMMON_BLOCKS = YES;
|
|
225
|
+
GCC_OPTIMIZATION_LEVEL = 0;
|
|
226
|
+
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
227
|
+
"DEBUG=1",
|
|
228
|
+
"$(inherited)",
|
|
229
|
+
);
|
|
230
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
231
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
232
|
+
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
233
|
+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
234
|
+
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
235
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
236
|
+
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
237
|
+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
238
|
+
MTL_FAST_MATH = YES;
|
|
239
|
+
ONLY_ACTIVE_ARCH = YES;
|
|
240
|
+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
|
241
|
+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
242
|
+
};
|
|
243
|
+
name = Debug;
|
|
244
|
+
};
|
|
245
|
+
9B8819672BC8657B00E20DCE /* Release */ = {
|
|
246
|
+
isa = XCBuildConfiguration;
|
|
247
|
+
buildSettings = {
|
|
248
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
249
|
+
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
|
250
|
+
CLANG_ANALYZER_NONNULL = YES;
|
|
251
|
+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
252
|
+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
|
253
|
+
CLANG_ENABLE_MODULES = YES;
|
|
254
|
+
CLANG_ENABLE_OBJC_ARC = YES;
|
|
255
|
+
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
256
|
+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
257
|
+
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
258
|
+
CLANG_WARN_COMMA = YES;
|
|
259
|
+
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
260
|
+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
261
|
+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
262
|
+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
263
|
+
CLANG_WARN_EMPTY_BODY = YES;
|
|
264
|
+
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
265
|
+
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
266
|
+
CLANG_WARN_INT_CONVERSION = YES;
|
|
267
|
+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
268
|
+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
269
|
+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
270
|
+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
271
|
+
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
272
|
+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
273
|
+
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
274
|
+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
275
|
+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
276
|
+
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
277
|
+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
278
|
+
COPY_PHASE_STRIP = NO;
|
|
279
|
+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
|
280
|
+
ENABLE_NS_ASSERTIONS = NO;
|
|
281
|
+
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
282
|
+
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
283
|
+
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
284
|
+
GCC_NO_COMMON_BLOCKS = YES;
|
|
285
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
286
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
287
|
+
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
288
|
+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
289
|
+
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
290
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
291
|
+
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
292
|
+
MTL_ENABLE_DEBUG_INFO = NO;
|
|
293
|
+
MTL_FAST_MATH = YES;
|
|
294
|
+
SWIFT_COMPILATION_MODE = wholemodule;
|
|
295
|
+
};
|
|
296
|
+
name = Release;
|
|
297
|
+
};
|
|
298
|
+
9B8819692BC8657B00E20DCE /* Debug */ = {
|
|
299
|
+
isa = XCBuildConfiguration;
|
|
300
|
+
buildSettings = {
|
|
301
|
+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
302
|
+
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
|
303
|
+
CODE_SIGN_ENTITLEMENTS = SwiftAudio/SwiftAudio.entitlements;
|
|
304
|
+
CODE_SIGN_STYLE = Automatic;
|
|
305
|
+
CURRENT_PROJECT_VERSION = 1;
|
|
306
|
+
DEVELOPMENT_ASSET_PATHS = "\"SwiftAudio/Preview Content\"";
|
|
307
|
+
DEVELOPMENT_TEAM = K6KUHVMMR8;
|
|
308
|
+
ENABLE_HARDENED_RUNTIME = YES;
|
|
309
|
+
ENABLE_PREVIEWS = YES;
|
|
310
|
+
GENERATE_INFOPLIST_FILE = YES;
|
|
311
|
+
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
|
|
312
|
+
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
|
|
313
|
+
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
|
|
314
|
+
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
|
|
315
|
+
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
|
|
316
|
+
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
|
|
317
|
+
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
|
|
318
|
+
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
|
|
319
|
+
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
320
|
+
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
321
|
+
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
|
322
|
+
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
|
|
323
|
+
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
|
|
324
|
+
MACOSX_DEPLOYMENT_TARGET = 14.2;
|
|
325
|
+
MARKETING_VERSION = 1.0;
|
|
326
|
+
PRODUCT_BUNDLE_IDENTIFIER = com.doublesymmetry.SwiftAudio;
|
|
327
|
+
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
328
|
+
SDKROOT = auto;
|
|
329
|
+
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
|
|
330
|
+
SWIFT_EMIT_LOC_STRINGS = YES;
|
|
331
|
+
SWIFT_VERSION = 5.0;
|
|
332
|
+
TARGETED_DEVICE_FAMILY = "1,2";
|
|
333
|
+
};
|
|
334
|
+
name = Debug;
|
|
335
|
+
};
|
|
336
|
+
9B88196A2BC8657B00E20DCE /* Release */ = {
|
|
337
|
+
isa = XCBuildConfiguration;
|
|
338
|
+
buildSettings = {
|
|
339
|
+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
340
|
+
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
|
341
|
+
CODE_SIGN_ENTITLEMENTS = SwiftAudio/SwiftAudio.entitlements;
|
|
342
|
+
CODE_SIGN_STYLE = Automatic;
|
|
343
|
+
CURRENT_PROJECT_VERSION = 1;
|
|
344
|
+
DEVELOPMENT_ASSET_PATHS = "\"SwiftAudio/Preview Content\"";
|
|
345
|
+
DEVELOPMENT_TEAM = K6KUHVMMR8;
|
|
346
|
+
ENABLE_HARDENED_RUNTIME = YES;
|
|
347
|
+
ENABLE_PREVIEWS = YES;
|
|
348
|
+
GENERATE_INFOPLIST_FILE = YES;
|
|
349
|
+
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
|
|
350
|
+
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
|
|
351
|
+
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
|
|
352
|
+
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
|
|
353
|
+
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
|
|
354
|
+
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
|
|
355
|
+
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
|
|
356
|
+
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
|
|
357
|
+
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
358
|
+
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
359
|
+
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
|
360
|
+
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
|
|
361
|
+
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
|
|
362
|
+
MACOSX_DEPLOYMENT_TARGET = 14.2;
|
|
363
|
+
MARKETING_VERSION = 1.0;
|
|
364
|
+
PRODUCT_BUNDLE_IDENTIFIER = com.doublesymmetry.SwiftAudio;
|
|
365
|
+
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
366
|
+
SDKROOT = auto;
|
|
367
|
+
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
|
|
368
|
+
SWIFT_EMIT_LOC_STRINGS = YES;
|
|
369
|
+
SWIFT_VERSION = 5.0;
|
|
370
|
+
TARGETED_DEVICE_FAMILY = "1,2";
|
|
371
|
+
};
|
|
372
|
+
name = Release;
|
|
373
|
+
};
|
|
374
|
+
/* End XCBuildConfiguration section */
|
|
375
|
+
|
|
376
|
+
/* Begin XCConfigurationList section */
|
|
377
|
+
9B8819542BC8657A00E20DCE /* Build configuration list for PBXProject "SwiftAudio" */ = {
|
|
378
|
+
isa = XCConfigurationList;
|
|
379
|
+
buildConfigurations = (
|
|
380
|
+
9B8819662BC8657B00E20DCE /* Debug */,
|
|
381
|
+
9B8819672BC8657B00E20DCE /* Release */,
|
|
382
|
+
);
|
|
383
|
+
defaultConfigurationIsVisible = 0;
|
|
384
|
+
defaultConfigurationName = Release;
|
|
385
|
+
};
|
|
386
|
+
9B8819682BC8657B00E20DCE /* Build configuration list for PBXNativeTarget "SwiftAudio" */ = {
|
|
387
|
+
isa = XCConfigurationList;
|
|
388
|
+
buildConfigurations = (
|
|
389
|
+
9B8819692BC8657B00E20DCE /* Debug */,
|
|
390
|
+
9B88196A2BC8657B00E20DCE /* Release */,
|
|
391
|
+
);
|
|
392
|
+
defaultConfigurationIsVisible = 0;
|
|
393
|
+
defaultConfigurationName = Release;
|
|
394
|
+
};
|
|
395
|
+
/* End XCConfigurationList section */
|
|
396
|
+
|
|
397
|
+
/* Begin XCLocalSwiftPackageReference section */
|
|
398
|
+
CCF141D72E463E9300D6683E /* XCLocalSwiftPackageReference "../SwiftAudioEx" */ = {
|
|
399
|
+
isa = XCLocalSwiftPackageReference;
|
|
400
|
+
relativePath = ../SwiftAudioEx;
|
|
401
|
+
};
|
|
402
|
+
/* End XCLocalSwiftPackageReference section */
|
|
403
|
+
|
|
404
|
+
/* Begin XCSwiftPackageProductDependency section */
|
|
405
|
+
CCF141D82E463E9300D6683E /* SwiftAudioEx */ = {
|
|
406
|
+
isa = XCSwiftPackageProductDependency;
|
|
407
|
+
productName = SwiftAudioEx;
|
|
408
|
+
};
|
|
409
|
+
/* End XCSwiftPackageProductDependency section */
|
|
410
|
+
};
|
|
411
|
+
rootObject = 9B8819512BC8657A00E20DCE /* Project object */;
|
|
412
|
+
}
|
|
@@ -9,9 +9,44 @@
|
|
|
9
9
|
import Foundation
|
|
10
10
|
|
|
11
11
|
enum Capability: String {
|
|
12
|
-
case play, pause, stop, next, previous, jumpForward, jumpBackward, seek, like, dislike, bookmark
|
|
13
|
-
}
|
|
12
|
+
case play, pause, togglePlayPause, stop, next, previous, jumpForward, jumpBackward, seek, like, dislike, bookmark
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
func mapToPlayerCommand(forwardJumpInterval: NSNumber?,
|
|
15
|
+
backwardJumpInterval: NSNumber?,
|
|
16
|
+
likeOptions: [String: Any]?,
|
|
17
|
+
dislikeOptions: [String: Any]?,
|
|
18
|
+
bookmarkOptions: [String: Any]?) -> RemoteCommand {
|
|
19
|
+
switch self {
|
|
20
|
+
case .stop:
|
|
21
|
+
return .stop
|
|
22
|
+
case .play:
|
|
23
|
+
return .play
|
|
24
|
+
case .pause:
|
|
25
|
+
return .pause
|
|
26
|
+
case .togglePlayPause:
|
|
27
|
+
return .togglePlayPause
|
|
28
|
+
case .next:
|
|
29
|
+
return .next
|
|
30
|
+
case .previous:
|
|
31
|
+
return .previous
|
|
32
|
+
case .seek:
|
|
33
|
+
return .changePlaybackPosition
|
|
34
|
+
case .jumpForward:
|
|
35
|
+
return .skipForward(preferredIntervals: [(forwardJumpInterval ?? backwardJumpInterval) ?? 15])
|
|
36
|
+
case .jumpBackward:
|
|
37
|
+
return .skipBackward(preferredIntervals: [(backwardJumpInterval ?? forwardJumpInterval) ?? 15])
|
|
38
|
+
case .like:
|
|
39
|
+
return .like(isActive: likeOptions?["isActive"] as? Bool ?? false,
|
|
40
|
+
localizedTitle: likeOptions?["title"] as? String ?? "Like",
|
|
41
|
+
localizedShortTitle: likeOptions?["title"] as? String ?? "Like")
|
|
42
|
+
case .dislike:
|
|
43
|
+
return .dislike(isActive: dislikeOptions?["isActive"] as? Bool ?? false,
|
|
44
|
+
localizedTitle: dislikeOptions?["title"] as? String ?? "Dislike",
|
|
45
|
+
localizedShortTitle: dislikeOptions?["title"] as? String ?? "Dislike")
|
|
46
|
+
case .bookmark:
|
|
47
|
+
return .bookmark(isActive: bookmarkOptions?["isActive"] as? Bool ?? false,
|
|
48
|
+
localizedTitle: bookmarkOptions?["title"] as? String ?? "Bookmark",
|
|
49
|
+
localizedShortTitle: bookmarkOptions?["title"] as? String ?? "Bookmark")
|
|
50
|
+
}
|
|
51
|
+
}
|
|
17
52
|
}
|
|
@@ -18,15 +18,21 @@ struct MediaURL {
|
|
|
18
18
|
guard let object = object else { return nil }
|
|
19
19
|
originalObject = object
|
|
20
20
|
|
|
21
|
+
// This is based on logic found in RCTConvert NSURLRequest,
|
|
22
|
+
// and uses RCTConvert NSURL to create a valid URL from various formats
|
|
21
23
|
if let localObject = object as? [String: Any] {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
let
|
|
25
|
-
|
|
24
|
+
var url = localObject["uri"] as? String ?? localObject["url"] as! String
|
|
25
|
+
|
|
26
|
+
if let bundleName = localObject["bundle"] as? String {
|
|
27
|
+
url = String(format: "%@.bundle/%@", bundleName, url)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
isLocal = url.lowercased().hasPrefix("http") ? false : true
|
|
31
|
+
value = RCTConvert.nsurl(url)
|
|
26
32
|
} else {
|
|
27
33
|
let url = object as! String
|
|
28
|
-
isLocal = url.lowercased().
|
|
29
|
-
value = RCTConvert.nsurl(url
|
|
34
|
+
isLocal = url.lowercased().hasPrefix("file://")
|
|
35
|
+
value = RCTConvert.nsurl(url)
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MetadataAdapter.swift
|
|
3
|
+
// react-native-track-player
|
|
4
|
+
//
|
|
5
|
+
// Created by David Chavez on 01.08.23.
|
|
6
|
+
// Copyright © 2023 Double Symmetry. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import AVFoundation
|
|
11
|
+
|
|
12
|
+
typealias RawMetadataGroup = [[String: Any]]
|
|
13
|
+
|
|
14
|
+
class MetadataAdapter {
|
|
15
|
+
private static func getMetadataItem(metadata: [AVMetadataItem], forIdentifier: AVMetadataIdentifier) -> String? {
|
|
16
|
+
return AVMetadataItem.metadataItems(from: metadata, filteredByIdentifier: forIdentifier).first?.stringValue
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private static func convertToSerializableItems(items: [AVMetadataItem]) -> RawMetadataGroup {
|
|
20
|
+
var rawGroup: RawMetadataGroup = []
|
|
21
|
+
|
|
22
|
+
for metadataItem in items {
|
|
23
|
+
var rawMetadataItem: [String: Any] = [:]
|
|
24
|
+
rawMetadataItem["time"] = metadataItem.time.seconds
|
|
25
|
+
rawMetadataItem["value"] = metadataItem.value
|
|
26
|
+
rawMetadataItem["key"] = metadataItem.key
|
|
27
|
+
if let commonKey = metadataItem.commonKey?.rawValue {
|
|
28
|
+
rawMetadataItem["commonKey"] = commonKey
|
|
29
|
+
}
|
|
30
|
+
if let keySpace = metadataItem.keySpace?.rawValue {
|
|
31
|
+
rawMetadataItem["keySpace"] = keySpace
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
rawGroup.append(rawMetadataItem)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return rawGroup
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// MARK: - Public
|
|
41
|
+
|
|
42
|
+
static func convertToGroupedMetadata(metadataGroups: [AVTimedMetadataGroup]) -> RawMetadataGroup {
|
|
43
|
+
var ret: RawMetadataGroup = []
|
|
44
|
+
|
|
45
|
+
for metadataGroup in metadataGroups {
|
|
46
|
+
let entry = convertToCommonMetadata(metadata: metadataGroup.items)
|
|
47
|
+
ret.append(entry)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return ret
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static func convertToCommonMetadata(metadata: [AVMetadataItem], skipRaw: Bool = false) -> [String: Any] {
|
|
54
|
+
var rawMetadataItem: [String: Any] = [:]
|
|
55
|
+
rawMetadataItem["title"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierTitle)
|
|
56
|
+
rawMetadataItem["artist"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierArtist)
|
|
57
|
+
rawMetadataItem["albumName"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierAlbumName)
|
|
58
|
+
rawMetadataItem["subtitle"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataSetSubtitle)
|
|
59
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .iTunesMetadataTrackSubTitle)
|
|
60
|
+
rawMetadataItem["description"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierDescription)
|
|
61
|
+
rawMetadataItem["artworkUri"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierArtwork)
|
|
62
|
+
rawMetadataItem["trackNumber"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataTrackNumber)
|
|
63
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .iTunesMetadataTrackNumber)
|
|
64
|
+
rawMetadataItem["composer"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataComposer)
|
|
65
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .iTunesMetadataComposer)
|
|
66
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .quickTimeMetadataComposer)
|
|
67
|
+
rawMetadataItem["conductor"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataConductor)
|
|
68
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .iTunesMetadataConductor)
|
|
69
|
+
rawMetadataItem["genre"] = getMetadataItem(metadata: metadata, forIdentifier: .quickTimeMetadataGenre)
|
|
70
|
+
rawMetadataItem["compilation"] = getMetadataItem(metadata: metadata, forIdentifier: .iTunesMetadataDiscCompilation)
|
|
71
|
+
rawMetadataItem["station"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataInternetRadioStationName)
|
|
72
|
+
rawMetadataItem["mediaType"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataMediaType)
|
|
73
|
+
rawMetadataItem["creationDate"] = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierCreationDate)
|
|
74
|
+
rawMetadataItem["creationYear"] = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataYear)
|
|
75
|
+
?? getMetadataItem(metadata: metadata, forIdentifier: .quickTimeMetadataYear)
|
|
76
|
+
|
|
77
|
+
if !skipRaw {
|
|
78
|
+
rawMetadataItem["raw"] = convertToSerializableItems(items: metadata)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return rawMetadataItem
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@available(*, deprecated, message: "Will be removed down the line")
|
|
85
|
+
static func legacyConversion(metadata: [AVMetadataItem]) -> [String : String?] {
|
|
86
|
+
var source: String {
|
|
87
|
+
switch metadata.first?.keySpace {
|
|
88
|
+
case AVMetadataKeySpace.id3:
|
|
89
|
+
return "id3"
|
|
90
|
+
case AVMetadataKeySpace.icy:
|
|
91
|
+
return "icy"
|
|
92
|
+
case AVMetadataKeySpace.quickTimeMetadata:
|
|
93
|
+
return "quicktime"
|
|
94
|
+
case AVMetadataKeySpace.common:
|
|
95
|
+
return "unknown"
|
|
96
|
+
default: return "unknown"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let album = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierAlbumName) ?? ""
|
|
101
|
+
var artist = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierArtist) ?? ""
|
|
102
|
+
var title = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierTitle) ?? ""
|
|
103
|
+
var date = getMetadataItem(metadata: metadata, forIdentifier: .commonIdentifierCreationDate) ?? ""
|
|
104
|
+
var url = "";
|
|
105
|
+
var genre = "";
|
|
106
|
+
if (source == "icy") {
|
|
107
|
+
url = getMetadataItem(metadata: metadata, forIdentifier: .icyMetadataStreamURL) ?? ""
|
|
108
|
+
} else if (source == "id3") {
|
|
109
|
+
if (date.isEmpty) {
|
|
110
|
+
date = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataDate) ?? ""
|
|
111
|
+
}
|
|
112
|
+
genre = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataContentType) ?? ""
|
|
113
|
+
url = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataOfficialAudioSourceWebpage) ?? ""
|
|
114
|
+
if (url.isEmpty) {
|
|
115
|
+
url = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataOfficialAudioFileWebpage) ?? ""
|
|
116
|
+
}
|
|
117
|
+
if (url.isEmpty) {
|
|
118
|
+
url = getMetadataItem(metadata: metadata, forIdentifier: .id3MetadataOfficialArtistWebpage) ?? ""
|
|
119
|
+
}
|
|
120
|
+
} else if (source == "quicktime") {
|
|
121
|
+
genre = getMetadataItem(metadata: metadata, forIdentifier: .quickTimeMetadataGenre) ?? ""
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Detect ICY metadata and split title into artist & title:
|
|
125
|
+
// - source should be either "unknown" (pre iOS 14) or "icy" (iOS 14 and above)
|
|
126
|
+
// - we have a title, but no artist
|
|
127
|
+
if ((source == "unknown" || source == "icy") && !title.isEmpty && artist.isEmpty) {
|
|
128
|
+
if let index = title.range(of: " - ")?.lowerBound {
|
|
129
|
+
artist = String(title.prefix(upTo: index));
|
|
130
|
+
title = String(title.suffix(from: title.index(index, offsetBy: 3)));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
var data : [String : String?] = [
|
|
134
|
+
"title": title.isEmpty ? nil : title,
|
|
135
|
+
"url": url.isEmpty ? nil : url,
|
|
136
|
+
"artist": artist.isEmpty ? nil : artist,
|
|
137
|
+
"album": album.isEmpty ? nil : album,
|
|
138
|
+
"date": date.isEmpty ? nil : date,
|
|
139
|
+
"genre": genre.isEmpty ? nil : genre
|
|
140
|
+
]
|
|
141
|
+
if (data.values.contains { $0 != nil }) {
|
|
142
|
+
data["source"] = source
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return data
|
|
146
|
+
}
|
|
147
|
+
}
|