@neoskola/auto-play 0.2.18 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/ios/hybrid/HybridNowPlayingTemplate.swift +90 -0
  2. package/ios/templates/NowPlayingTemplate.swift +251 -11
  3. package/lib/specs/NowPlayingTemplate.nitro.d.ts +6 -0
  4. package/lib/templates/NowPlayingTemplate.d.ts +8 -0
  5. package/lib/templates/NowPlayingTemplate.js +18 -0
  6. package/nitrogen/generated/android/ReactNativeAutoPlayOnLoad.cpp +2 -0
  7. package/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +75 -0
  8. package/nitrogen/generated/android/c++/JHybridNowPlayingTemplateSpec.cpp +92 -0
  9. package/nitrogen/generated/android/c++/JHybridNowPlayingTemplateSpec.hpp +6 -0
  10. package/nitrogen/generated/android/c++/JNowPlayingTemplateConfig.hpp +27 -2
  11. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_double_double.kt +80 -0
  12. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridNowPlayingTemplateSpec.kt +24 -0
  13. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NowPlayingTemplateConfig.kt +11 -5
  14. package/nitrogen/generated/ios/ReactNativeAutoPlay-Swift-Cxx-Bridge.cpp +8 -0
  15. package/nitrogen/generated/ios/ReactNativeAutoPlay-Swift-Cxx-Bridge.hpp +58 -0
  16. package/nitrogen/generated/ios/c++/HybridNowPlayingTemplateSpecSwift.hpp +48 -0
  17. package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
  18. package/nitrogen/generated/ios/swift/Func_void_double_double.swift +47 -0
  19. package/nitrogen/generated/ios/swift/HybridNowPlayingTemplateSpec.swift +6 -0
  20. package/nitrogen/generated/ios/swift/HybridNowPlayingTemplateSpec_cxx.swift +114 -0
  21. package/nitrogen/generated/ios/swift/NowPlayingTemplateConfig.swift +83 -1
  22. package/nitrogen/generated/shared/c++/HybridNowPlayingTemplateSpec.cpp +6 -0
  23. package/nitrogen/generated/shared/c++/HybridNowPlayingTemplateSpec.hpp +6 -0
  24. package/nitrogen/generated/shared/c++/NowPlayingTemplateConfig.hpp +10 -2
  25. package/package.json +1 -1
  26. package/src/specs/NowPlayingTemplate.nitro.ts +8 -0
  27. package/src/templates/NowPlayingTemplate.ts +26 -0
@@ -184,4 +184,118 @@ open class HybridNowPlayingTemplateSpec_cxx {
184
184
  return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
185
185
  }
186
186
  }
187
+
188
+ @inline(__always)
189
+ public final func playAudio(templateId: std.string, url: std.string, startFrom: Double) -> bridge.Result_std__shared_ptr_Promise_bool___ {
190
+ do {
191
+ let __result = try self.__implementation.playAudio(templateId: String(templateId), url: String(url), startFrom: startFrom)
192
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_bool__ in
193
+ let __promise = bridge.create_std__shared_ptr_Promise_bool__()
194
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_bool__(__promise)
195
+ __result
196
+ .then({ __result in __promiseHolder.resolve(__result) })
197
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
198
+ return __promise
199
+ }()
200
+ return bridge.create_Result_std__shared_ptr_Promise_bool___(__resultCpp)
201
+ } catch (let __error) {
202
+ let __exceptionPtr = __error.toCpp()
203
+ return bridge.create_Result_std__shared_ptr_Promise_bool___(__exceptionPtr)
204
+ }
205
+ }
206
+
207
+ @inline(__always)
208
+ public final func pauseAudio(templateId: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
209
+ do {
210
+ let __result = try self.__implementation.pauseAudio(templateId: String(templateId))
211
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
212
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
213
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
214
+ __result
215
+ .then({ __result in __promiseHolder.resolve() })
216
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
217
+ return __promise
218
+ }()
219
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
220
+ } catch (let __error) {
221
+ let __exceptionPtr = __error.toCpp()
222
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
223
+ }
224
+ }
225
+
226
+ @inline(__always)
227
+ public final func resumeAudio(templateId: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
228
+ do {
229
+ let __result = try self.__implementation.resumeAudio(templateId: String(templateId))
230
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
231
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
232
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
233
+ __result
234
+ .then({ __result in __promiseHolder.resolve() })
235
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
236
+ return __promise
237
+ }()
238
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
239
+ } catch (let __error) {
240
+ let __exceptionPtr = __error.toCpp()
241
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
242
+ }
243
+ }
244
+
245
+ @inline(__always)
246
+ public final func seekForward(templateId: std.string, seconds: Double) -> bridge.Result_std__shared_ptr_Promise_void___ {
247
+ do {
248
+ let __result = try self.__implementation.seekForward(templateId: String(templateId), seconds: seconds)
249
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
250
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
251
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
252
+ __result
253
+ .then({ __result in __promiseHolder.resolve() })
254
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
255
+ return __promise
256
+ }()
257
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
258
+ } catch (let __error) {
259
+ let __exceptionPtr = __error.toCpp()
260
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
261
+ }
262
+ }
263
+
264
+ @inline(__always)
265
+ public final func seekBackward(templateId: std.string, seconds: Double) -> bridge.Result_std__shared_ptr_Promise_void___ {
266
+ do {
267
+ let __result = try self.__implementation.seekBackward(templateId: String(templateId), seconds: seconds)
268
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
269
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
270
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
271
+ __result
272
+ .then({ __result in __promiseHolder.resolve() })
273
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
274
+ return __promise
275
+ }()
276
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
277
+ } catch (let __error) {
278
+ let __exceptionPtr = __error.toCpp()
279
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
280
+ }
281
+ }
282
+
283
+ @inline(__always)
284
+ public final func stopAudio(templateId: std.string) -> bridge.Result_std__shared_ptr_Promise_void___ {
285
+ do {
286
+ let __result = try self.__implementation.stopAudio(templateId: String(templateId))
287
+ let __resultCpp = { () -> bridge.std__shared_ptr_Promise_void__ in
288
+ let __promise = bridge.create_std__shared_ptr_Promise_void__()
289
+ let __promiseHolder = bridge.wrap_std__shared_ptr_Promise_void__(__promise)
290
+ __result
291
+ .then({ __result in __promiseHolder.resolve() })
292
+ .catch({ __error in __promiseHolder.reject(__error.toCpp()) })
293
+ return __promise
294
+ }()
295
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__resultCpp)
296
+ } catch (let __error) {
297
+ let __exceptionPtr = __error.toCpp()
298
+ return bridge.create_Result_std__shared_ptr_Promise_void___(__exceptionPtr)
299
+ }
300
+ }
187
301
  }
@@ -19,7 +19,7 @@ public extension NowPlayingTemplateConfig {
19
19
  /**
20
20
  * Create a new instance of `NowPlayingTemplateConfig`.
21
21
  */
22
- init(id: String, onWillAppear: ((_ animated: Bool?) -> Void)?, onWillDisappear: ((_ animated: Bool?) -> Void)?, onDidAppear: ((_ animated: Bool?) -> Void)?, onDidDisappear: ((_ animated: Bool?) -> Void)?, onPopped: (() -> Void)?, autoDismissMs: Double?, title: AutoText, subtitle: AutoText?, courseId: String, lessonId: String, image: Variant_GlyphImage_AssetImage?, isPlaying: Bool, onPlay: (() -> Void)?, onPause: (() -> Void)?, onSkipForward: (() -> Void)?, onSkipBackward: (() -> Void)?, onComplete: (() -> Void)?) {
22
+ init(id: String, onWillAppear: ((_ animated: Bool?) -> Void)?, onWillDisappear: ((_ animated: Bool?) -> Void)?, onDidAppear: ((_ animated: Bool?) -> Void)?, onDidDisappear: ((_ animated: Bool?) -> Void)?, onPopped: (() -> Void)?, autoDismissMs: Double?, title: AutoText, subtitle: AutoText?, courseId: String, lessonId: String, image: Variant_GlyphImage_AssetImage?, isPlaying: Bool, onPlay: (() -> Void)?, onPause: (() -> Void)?, onSkipForward: (() -> Void)?, onSkipBackward: (() -> Void)?, onComplete: (() -> Void)?, onProgressUpdate: ((_ currentTime: Double, _ duration: Double) -> Void)?, onPlaybackFinished: (() -> Void)?) {
23
23
  self.init(std.string(id), { () -> bridge.std__optional_std__function_void_std__optional_bool_____animated______ in
24
24
  if let __unwrappedValue = onWillAppear {
25
25
  return bridge.create_std__optional_std__function_void_std__optional_bool_____animated______({ () -> bridge.Func_void_std__optional_bool_ in
@@ -135,6 +135,24 @@ public extension NowPlayingTemplateConfig {
135
135
  } else {
136
136
  return .init()
137
137
  }
138
+ }(), { () -> bridge.std__optional_std__function_void_double____currentTime_____double____duration______ in
139
+ if let __unwrappedValue = onProgressUpdate {
140
+ return bridge.create_std__optional_std__function_void_double____currentTime_____double____duration______({ () -> bridge.Func_void_double_double in
141
+ let __closureWrapper = Func_void_double_double(__unwrappedValue)
142
+ return bridge.create_Func_void_double_double(__closureWrapper.toUnsafe())
143
+ }())
144
+ } else {
145
+ return .init()
146
+ }
147
+ }(), { () -> bridge.std__optional_std__function_void____ in
148
+ if let __unwrappedValue = onPlaybackFinished {
149
+ return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in
150
+ let __closureWrapper = Func_void(__unwrappedValue)
151
+ return bridge.create_Func_void(__closureWrapper.toUnsafe())
152
+ }())
153
+ } else {
154
+ return .init()
155
+ }
138
156
  }())
139
157
  }
140
158
 
@@ -613,4 +631,68 @@ public extension NowPlayingTemplateConfig {
613
631
  }()
614
632
  }
615
633
  }
634
+
635
+ var onProgressUpdate: ((_ currentTime: Double, _ duration: Double) -> Void)? {
636
+ @inline(__always)
637
+ get {
638
+ return { () -> ((_ currentTime: Double, _ duration: Double) -> Void)? in
639
+ if bridge.has_value_std__optional_std__function_void_double____currentTime_____double____duration______(self.__onProgressUpdate) {
640
+ let __unwrapped = bridge.get_std__optional_std__function_void_double____currentTime_____double____duration______(self.__onProgressUpdate)
641
+ return { () -> (Double, Double) -> Void in
642
+ let __wrappedFunction = bridge.wrap_Func_void_double_double(__unwrapped)
643
+ return { (__currentTime: Double, __duration: Double) -> Void in
644
+ __wrappedFunction.call(__currentTime, __duration)
645
+ }
646
+ }()
647
+ } else {
648
+ return nil
649
+ }
650
+ }()
651
+ }
652
+ @inline(__always)
653
+ set {
654
+ self.__onProgressUpdate = { () -> bridge.std__optional_std__function_void_double____currentTime_____double____duration______ in
655
+ if let __unwrappedValue = newValue {
656
+ return bridge.create_std__optional_std__function_void_double____currentTime_____double____duration______({ () -> bridge.Func_void_double_double in
657
+ let __closureWrapper = Func_void_double_double(__unwrappedValue)
658
+ return bridge.create_Func_void_double_double(__closureWrapper.toUnsafe())
659
+ }())
660
+ } else {
661
+ return .init()
662
+ }
663
+ }()
664
+ }
665
+ }
666
+
667
+ var onPlaybackFinished: (() -> Void)? {
668
+ @inline(__always)
669
+ get {
670
+ return { () -> (() -> Void)? in
671
+ if bridge.has_value_std__optional_std__function_void____(self.__onPlaybackFinished) {
672
+ let __unwrapped = bridge.get_std__optional_std__function_void____(self.__onPlaybackFinished)
673
+ return { () -> () -> Void in
674
+ let __wrappedFunction = bridge.wrap_Func_void(__unwrapped)
675
+ return { () -> Void in
676
+ __wrappedFunction.call()
677
+ }
678
+ }()
679
+ } else {
680
+ return nil
681
+ }
682
+ }()
683
+ }
684
+ @inline(__always)
685
+ set {
686
+ self.__onPlaybackFinished = { () -> bridge.std__optional_std__function_void____ in
687
+ if let __unwrappedValue = newValue {
688
+ return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in
689
+ let __closureWrapper = Func_void(__unwrappedValue)
690
+ return bridge.create_Func_void(__closureWrapper.toUnsafe())
691
+ }())
692
+ } else {
693
+ return .init()
694
+ }
695
+ }()
696
+ }
697
+ }
616
698
  }
@@ -18,6 +18,12 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
18
18
  prototype.registerHybridMethod("updateNowPlayingTemplatePlaybackState", &HybridNowPlayingTemplateSpec::updateNowPlayingTemplatePlaybackState);
19
19
  prototype.registerHybridMethod("updateNowPlayingTemplateInfo", &HybridNowPlayingTemplateSpec::updateNowPlayingTemplateInfo);
20
20
  prototype.registerHybridMethod("updateNowPlayingTemplateElapsedTime", &HybridNowPlayingTemplateSpec::updateNowPlayingTemplateElapsedTime);
21
+ prototype.registerHybridMethod("playAudio", &HybridNowPlayingTemplateSpec::playAudio);
22
+ prototype.registerHybridMethod("pauseAudio", &HybridNowPlayingTemplateSpec::pauseAudio);
23
+ prototype.registerHybridMethod("resumeAudio", &HybridNowPlayingTemplateSpec::resumeAudio);
24
+ prototype.registerHybridMethod("seekForward", &HybridNowPlayingTemplateSpec::seekForward);
25
+ prototype.registerHybridMethod("seekBackward", &HybridNowPlayingTemplateSpec::seekBackward);
26
+ prototype.registerHybridMethod("stopAudio", &HybridNowPlayingTemplateSpec::stopAudio);
21
27
  });
22
28
  }
23
29
 
@@ -55,6 +55,12 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
55
55
  virtual std::shared_ptr<Promise<void>> updateNowPlayingTemplatePlaybackState(const std::string& templateId, bool isPlaying) = 0;
56
56
  virtual std::shared_ptr<Promise<void>> updateNowPlayingTemplateInfo(const std::string& templateId, const std::string& title, const std::string& subtitle) = 0;
57
57
  virtual std::shared_ptr<Promise<void>> updateNowPlayingTemplateElapsedTime(const std::string& templateId, double elapsedTime, double duration) = 0;
58
+ virtual std::shared_ptr<Promise<bool>> playAudio(const std::string& templateId, const std::string& url, double startFrom) = 0;
59
+ virtual std::shared_ptr<Promise<void>> pauseAudio(const std::string& templateId) = 0;
60
+ virtual std::shared_ptr<Promise<void>> resumeAudio(const std::string& templateId) = 0;
61
+ virtual std::shared_ptr<Promise<void>> seekForward(const std::string& templateId, double seconds) = 0;
62
+ virtual std::shared_ptr<Promise<void>> seekBackward(const std::string& templateId, double seconds) = 0;
63
+ virtual std::shared_ptr<Promise<void>> stopAudio(const std::string& templateId) = 0;
58
64
 
59
65
  protected:
60
66
  // Hybrid Setup
@@ -63,10 +63,12 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
63
63
  std::optional<std::function<void()>> onSkipForward SWIFT_PRIVATE;
64
64
  std::optional<std::function<void()>> onSkipBackward SWIFT_PRIVATE;
65
65
  std::optional<std::function<void()>> onComplete SWIFT_PRIVATE;
66
+ std::optional<std::function<void(double /* currentTime */, double /* duration */)>> onProgressUpdate SWIFT_PRIVATE;
67
+ std::optional<std::function<void()>> onPlaybackFinished SWIFT_PRIVATE;
66
68
 
67
69
  public:
68
70
  NowPlayingTemplateConfig() = default;
69
- explicit NowPlayingTemplateConfig(std::string id, std::optional<std::function<void(std::optional<bool> /* animated */)>> onWillAppear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onWillDisappear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onDidAppear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onDidDisappear, std::optional<std::function<void()>> onPopped, std::optional<double> autoDismissMs, AutoText title, std::optional<AutoText> subtitle, std::string courseId, std::string lessonId, std::optional<std::variant<GlyphImage, AssetImage>> image, bool isPlaying, std::optional<std::function<void()>> onPlay, std::optional<std::function<void()>> onPause, std::optional<std::function<void()>> onSkipForward, std::optional<std::function<void()>> onSkipBackward, std::optional<std::function<void()>> onComplete): id(id), onWillAppear(onWillAppear), onWillDisappear(onWillDisappear), onDidAppear(onDidAppear), onDidDisappear(onDidDisappear), onPopped(onPopped), autoDismissMs(autoDismissMs), title(title), subtitle(subtitle), courseId(courseId), lessonId(lessonId), image(image), isPlaying(isPlaying), onPlay(onPlay), onPause(onPause), onSkipForward(onSkipForward), onSkipBackward(onSkipBackward), onComplete(onComplete) {}
71
+ explicit NowPlayingTemplateConfig(std::string id, std::optional<std::function<void(std::optional<bool> /* animated */)>> onWillAppear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onWillDisappear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onDidAppear, std::optional<std::function<void(std::optional<bool> /* animated */)>> onDidDisappear, std::optional<std::function<void()>> onPopped, std::optional<double> autoDismissMs, AutoText title, std::optional<AutoText> subtitle, std::string courseId, std::string lessonId, std::optional<std::variant<GlyphImage, AssetImage>> image, bool isPlaying, std::optional<std::function<void()>> onPlay, std::optional<std::function<void()>> onPause, std::optional<std::function<void()>> onSkipForward, std::optional<std::function<void()>> onSkipBackward, std::optional<std::function<void()>> onComplete, std::optional<std::function<void(double /* currentTime */, double /* duration */)>> onProgressUpdate, std::optional<std::function<void()>> onPlaybackFinished): id(id), onWillAppear(onWillAppear), onWillDisappear(onWillDisappear), onDidAppear(onDidAppear), onDidDisappear(onDidDisappear), onPopped(onPopped), autoDismissMs(autoDismissMs), title(title), subtitle(subtitle), courseId(courseId), lessonId(lessonId), image(image), isPlaying(isPlaying), onPlay(onPlay), onPause(onPause), onSkipForward(onSkipForward), onSkipBackward(onSkipBackward), onComplete(onComplete), onProgressUpdate(onProgressUpdate), onPlaybackFinished(onPlaybackFinished) {}
70
72
  };
71
73
 
72
74
  } // namespace margelo::nitro::swe::iternio::reactnativeautoplay
@@ -96,7 +98,9 @@ namespace margelo::nitro {
96
98
  JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onPause")),
97
99
  JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onSkipForward")),
98
100
  JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onSkipBackward")),
99
- JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onComplete"))
101
+ JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onComplete")),
102
+ JSIConverter<std::optional<std::function<void(double, double)>>>::fromJSI(runtime, obj.getProperty(runtime, "onProgressUpdate")),
103
+ JSIConverter<std::optional<std::function<void()>>>::fromJSI(runtime, obj.getProperty(runtime, "onPlaybackFinished"))
100
104
  );
101
105
  }
102
106
  static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::swe::iternio::reactnativeautoplay::NowPlayingTemplateConfig& arg) {
@@ -119,6 +123,8 @@ namespace margelo::nitro {
119
123
  obj.setProperty(runtime, "onSkipForward", JSIConverter<std::optional<std::function<void()>>>::toJSI(runtime, arg.onSkipForward));
120
124
  obj.setProperty(runtime, "onSkipBackward", JSIConverter<std::optional<std::function<void()>>>::toJSI(runtime, arg.onSkipBackward));
121
125
  obj.setProperty(runtime, "onComplete", JSIConverter<std::optional<std::function<void()>>>::toJSI(runtime, arg.onComplete));
126
+ obj.setProperty(runtime, "onProgressUpdate", JSIConverter<std::optional<std::function<void(double, double)>>>::toJSI(runtime, arg.onProgressUpdate));
127
+ obj.setProperty(runtime, "onPlaybackFinished", JSIConverter<std::optional<std::function<void()>>>::toJSI(runtime, arg.onPlaybackFinished));
122
128
  return obj;
123
129
  }
124
130
  static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
@@ -147,6 +153,8 @@ namespace margelo::nitro {
147
153
  if (!JSIConverter<std::optional<std::function<void()>>>::canConvert(runtime, obj.getProperty(runtime, "onSkipForward"))) return false;
148
154
  if (!JSIConverter<std::optional<std::function<void()>>>::canConvert(runtime, obj.getProperty(runtime, "onSkipBackward"))) return false;
149
155
  if (!JSIConverter<std::optional<std::function<void()>>>::canConvert(runtime, obj.getProperty(runtime, "onComplete"))) return false;
156
+ if (!JSIConverter<std::optional<std::function<void(double, double)>>>::canConvert(runtime, obj.getProperty(runtime, "onProgressUpdate"))) return false;
157
+ if (!JSIConverter<std::optional<std::function<void()>>>::canConvert(runtime, obj.getProperty(runtime, "onPlaybackFinished"))) return false;
150
158
  return true;
151
159
  }
152
160
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neoskola/auto-play",
3
- "version": "0.2.18",
3
+ "version": "0.3.1",
4
4
  "description": "Android Auto and Apple CarPlay for react-native",
5
5
  "main": "lib/index",
6
6
  "module": "lib/index",
@@ -9,4 +9,12 @@ export interface NowPlayingTemplate extends HybridObject<{ android: 'kotlin'; io
9
9
  updateNowPlayingTemplatePlaybackState(templateId: string, isPlaying: boolean): Promise<void>;
10
10
  updateNowPlayingTemplateInfo(templateId: string, title: string, subtitle: string): Promise<void>;
11
11
  updateNowPlayingTemplateElapsedTime(templateId: string, elapsedTime: number, duration: number): Promise<void>;
12
+
13
+ // Native audio playback
14
+ playAudio(templateId: string, url: string, startFrom: number): Promise<boolean>;
15
+ pauseAudio(templateId: string): Promise<void>;
16
+ resumeAudio(templateId: string): Promise<void>;
17
+ seekForward(templateId: string, seconds: number): Promise<void>;
18
+ seekBackward(templateId: string, seconds: number): Promise<void>;
19
+ stopAudio(templateId: string): Promise<void>;
12
20
  }
@@ -25,6 +25,8 @@ export interface NitroNowPlayingTemplateConfig extends TemplateConfig {
25
25
  onSkipForward?: () => void;
26
26
  onSkipBackward?: () => void;
27
27
  onComplete?: () => void;
28
+ onProgressUpdate?: (currentTime: number, duration: number) => void;
29
+ onPlaybackFinished?: () => void;
28
30
  }
29
31
 
30
32
  export type NowPlayingTemplateConfig = Omit<
@@ -63,4 +65,28 @@ export class NowPlayingTemplate extends Template<
63
65
  public updateElapsedTime(elapsedTime: number, duration: number) {
64
66
  return HybridNowPlayingTemplate.updateNowPlayingTemplateElapsedTime(this.id, elapsedTime, duration);
65
67
  }
68
+
69
+ public playAudio(url: string, startFrom: number = 0): Promise<boolean> {
70
+ return HybridNowPlayingTemplate.playAudio(this.id, url, startFrom);
71
+ }
72
+
73
+ public pauseAudio(): Promise<void> {
74
+ return HybridNowPlayingTemplate.pauseAudio(this.id);
75
+ }
76
+
77
+ public resumeAudio(): Promise<void> {
78
+ return HybridNowPlayingTemplate.resumeAudio(this.id);
79
+ }
80
+
81
+ public seekForward(seconds: number = 30): Promise<void> {
82
+ return HybridNowPlayingTemplate.seekForward(this.id, seconds);
83
+ }
84
+
85
+ public seekBackward(seconds: number = 30): Promise<void> {
86
+ return HybridNowPlayingTemplate.seekBackward(this.id, seconds);
87
+ }
88
+
89
+ public stopAudio(): Promise<void> {
90
+ return HybridNowPlayingTemplate.stopAudio(this.id);
91
+ }
66
92
  }