@rentlydev/rently-tuya 0.1.0
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 +20 -0
- package/README.md +281 -0
- package/android/build.gradle +182 -0
- package/android/gradle.properties +7 -0
- package/android/libs/airbrake-android-1.4.0.jar +0 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/AndroidManifestNew.xml +25 -0
- package/android/src/main/java/com/rentlytuya/RentlyTuyaModule.kt +503 -0
- package/android/src/main/java/com/rentlytuya/RentlyTuyaPackage.kt +18 -0
- package/android/src/main/java/com/rentlytuya/TuyaActivity.kt +45 -0
- package/android/src/main/java/com/rentlytuya/alerts/FormatSDCardAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/PermissionAlert.kt +91 -0
- package/android/src/main/java/com/rentlytuya/alerts/RemoveDoorbellAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/RemoveDoorbellFailureAlert.kt +71 -0
- package/android/src/main/java/com/rentlytuya/alerts/ResetWifiAlert.kt +83 -0
- package/android/src/main/java/com/rentlytuya/alerts/SuccessAlert.kt +74 -0
- package/android/src/main/java/com/rentlytuya/components/Alert.kt +47 -0
- package/android/src/main/java/com/rentlytuya/components/AnchorButton.kt +125 -0
- package/android/src/main/java/com/rentlytuya/components/Button.kt +147 -0
- package/android/src/main/java/com/rentlytuya/components/CustomDatePicker.kt +275 -0
- package/android/src/main/java/com/rentlytuya/components/Divider.kt +53 -0
- package/android/src/main/java/com/rentlytuya/components/EncryptedImageView.kt +59 -0
- package/android/src/main/java/com/rentlytuya/components/Label.kt +155 -0
- package/android/src/main/java/com/rentlytuya/components/LoadingIndicator.kt +75 -0
- package/android/src/main/java/com/rentlytuya/components/Slider.kt +66 -0
- package/android/src/main/java/com/rentlytuya/components/Switch.kt +51 -0
- package/android/src/main/java/com/rentlytuya/components/VideoView.kt +45 -0
- package/android/src/main/java/com/rentlytuya/dashboard/AdvancedSettings.kt +259 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Dashboard.kt +551 -0
- package/android/src/main/java/com/rentlytuya/dashboard/DoorbellSettings.kt +874 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Messages.kt +463 -0
- package/android/src/main/java/com/rentlytuya/dashboard/NavController.kt +358 -0
- package/android/src/main/java/com/rentlytuya/dashboard/OfflineScreen.kt +160 -0
- package/android/src/main/java/com/rentlytuya/dashboard/Playback.kt +685 -0
- package/android/src/main/java/com/rentlytuya/tuya/Messages.kt +234 -0
- package/android/src/main/java/com/rentlytuya/tuya/Playback.kt +385 -0
- package/android/src/main/java/com/rentlytuya/tuya/ScreenCapture.kt +244 -0
- package/android/src/main/java/com/rentlytuya/tuya/Settings.kt +809 -0
- package/android/src/main/java/com/rentlytuya/tuya/Tuya.kt +497 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/LocalColor.kt +80 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/LocalFont.kt +35 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/Theme.kt +34 -0
- package/android/src/main/java/com/rentlytuya/ui/theme/Type.kt +34 -0
- package/android/src/main/java/com/rentlytuya/util/Airbrake.kt +40 -0
- package/android/src/main/java/com/rentlytuya/util/DpConstants.kt +53 -0
- package/android/src/main/java/com/rentlytuya/util/FrescoManager.kt +86 -0
- package/android/src/main/java/com/rentlytuya/util/HeapAnalytics.kt +16 -0
- package/android/src/main/java/com/rentlytuya/util/KeylessModule.kt +81 -0
- package/android/src/main/java/com/rentlytuya/util/PermissionHandler.kt +75 -0
- package/android/src/main/java/com/rentlytuya/util/ReactParamsCheck.kt +152 -0
- package/android/src/main/java/com/rentlytuya/util/Util.kt +128 -0
- package/android/src/main/res/drawable/ic_close.xml +12 -0
- package/android/src/main/res/drawable/ic_launcher_background.xml +170 -0
- package/android/src/main/res/drawable/ic_launcher_foreground.xml +30 -0
- package/android/src/main/res/drawable/img_place_holder.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_message.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_play_back.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-hdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_message.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_play_back.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-mdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_message.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_play_back.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_average.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_charging.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_full.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_good.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_battery_low.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_message.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_play_back.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_action_arrow_backward.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_arrow_backward_white.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_arrow_blue_right.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_calendar.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_camera.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_message.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_play_back.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_record.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_retry.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_setting.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_sound_off.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/ic_sound_on.png +0 -0
- package/android/src/main/res/font/quicksand_bold.ttf +0 -0
- package/android/src/main/res/font/quicksand_light.ttf +0 -0
- package/android/src/main/res/font/quicksand_medium.ttf +0 -0
- package/android/src/main/res/font/quicksand_regular.ttf +0 -0
- package/android/src/main/res/font/quicksand_semi_bold.ttf +0 -0
- package/android/src/main/res/values/strings.xml +121 -0
- package/android/thingMapping.gradle +200 -0
- package/android/thingMapping.json +2014 -0
- package/ios/components/Alert.swift +54 -0
- package/ios/components/AnchorButton.swift +100 -0
- package/ios/components/Button.swift +118 -0
- package/ios/components/CustomDatePicker.swift +275 -0
- package/ios/components/Divider.swift +28 -0
- package/ios/components/Image.swift +72 -0
- package/ios/components/Label.swift +105 -0
- package/ios/components/Switch.swift +61 -0
- package/ios/dashboard/AdvanceSettings.swift +127 -0
- package/ios/dashboard/Dashboard.swift +354 -0
- package/ios/dashboard/Messages.swift +361 -0
- package/ios/dashboard/NavigationController.swift +173 -0
- package/ios/dashboard/OfflineScreen.swift +109 -0
- package/ios/dashboard/Playback.swift +543 -0
- package/ios/dashboard/PreviewManager.swift +117 -0
- package/ios/dashboard/Settings.swift +672 -0
- package/ios/icons/Charging.png +0 -0
- package/ios/icons/Charging@2x.png +0 -0
- package/ios/icons/Charging@3x.png +0 -0
- package/ios/icons/back_arraow.png +0 -0
- package/ios/icons/back_arraow@2x.png +0 -0
- package/ios/icons/back_arraow@3x.png +0 -0
- package/ios/icons/battery_average.png +0 -0
- package/ios/icons/battery_average@2x.png +0 -0
- package/ios/icons/battery_average@3x.png +0 -0
- package/ios/icons/battery_full.png +0 -0
- package/ios/icons/battery_full@2x.png +0 -0
- package/ios/icons/battery_full@3x.png +0 -0
- package/ios/icons/battery_good.png +0 -0
- package/ios/icons/battery_good@2x.png +0 -0
- package/ios/icons/battery_good@3x.png +0 -0
- package/ios/icons/battery_low.png +0 -0
- package/ios/icons/battery_low@2x.png +0 -0
- package/ios/icons/battery_low@3x.png +0 -0
- package/ios/icons/calendar.png +0 -0
- package/ios/icons/calendar@2x.png +0 -0
- package/ios/icons/calendar@3x.png +0 -0
- package/ios/icons/cloud.png +0 -0
- package/ios/icons/cloud@2x.png +0 -0
- package/ios/icons/cloud@3x.png +0 -0
- package/ios/icons/down_update.png +0 -0
- package/ios/icons/down_update@2x.png +0 -0
- package/ios/icons/down_update@3x.png +0 -0
- package/ios/icons/exit_fullscreen.png +0 -0
- package/ios/icons/exit_fullscreen@2x.png +0 -0
- package/ios/icons/exit_fullscreen@3x.png +0 -0
- package/ios/icons/expand.png +0 -0
- package/ios/icons/fullscreen.png +0 -0
- package/ios/icons/fullscreen@2x.png +0 -0
- package/ios/icons/fullscreen@3x.png +0 -0
- package/ios/icons/image_placeholder.png +0 -0
- package/ios/icons/information.png +0 -0
- package/ios/icons/information@2x.png +0 -0
- package/ios/icons/information@3x.png +0 -0
- package/ios/icons/keyless_Setting.png +0 -0
- package/ios/icons/keyless_Setting@2x.png +0 -0
- package/ios/icons/keyless_Setting@3x.png +0 -0
- package/ios/icons/keyless_back@1x.png +0 -0
- package/ios/icons/keyless_back@2x.png +0 -0
- package/ios/icons/keyless_back@3x.png +0 -0
- package/ios/icons/keyless_filter.png +0 -0
- package/ios/icons/keyless_filter@2x.png +0 -0
- package/ios/icons/keyless_filter@3x.png +0 -0
- package/ios/icons/keyless_message.png +0 -0
- package/ios/icons/keyless_message@2x.png +0 -0
- package/ios/icons/keyless_message@3x.png +0 -0
- package/ios/icons/keyless_pause.png +0 -0
- package/ios/icons/keyless_pause@2x.png +0 -0
- package/ios/icons/keyless_pause@3x.png +0 -0
- package/ios/icons/keyless_photo.png +0 -0
- package/ios/icons/keyless_photo@2x.png +0 -0
- package/ios/icons/keyless_photo@3x.png +0 -0
- package/ios/icons/keyless_play.png +0 -0
- package/ios/icons/keyless_play@2x.png +0 -0
- package/ios/icons/keyless_play@3x.png +0 -0
- package/ios/icons/keyless_play_list.png +0 -0
- package/ios/icons/keyless_play_list@2x.png +0 -0
- package/ios/icons/keyless_play_list@3x.png +0 -0
- package/ios/icons/keyless_play_playback.png +0 -0
- package/ios/icons/keyless_play_playback@2x.png +0 -0
- package/ios/icons/keyless_play_playback@3x.png +0 -0
- package/ios/icons/keyless_record.png +0 -0
- package/ios/icons/keyless_record@2x.png +0 -0
- package/ios/icons/keyless_record@3x.png +0 -0
- package/ios/icons/keyless_record_on.png +0 -0
- package/ios/icons/keyless_record_on@2x.png +0 -0
- package/ios/icons/keyless_record_on@3x.png +0 -0
- package/ios/icons/keyless_sound_off.png +0 -0
- package/ios/icons/keyless_sound_off@2x.png +0 -0
- package/ios/icons/keyless_sound_off@3x.png +0 -0
- package/ios/icons/keyless_sound_on.png +0 -0
- package/ios/icons/keyless_sound_on@2x.png +0 -0
- package/ios/icons/keyless_sound_on@3x.png +0 -0
- package/ios/icons/keyless_speak_off.png +0 -0
- package/ios/icons/keyless_speak_off@2x.png +0 -0
- package/ios/icons/keyless_speak_on.png +0 -0
- package/ios/icons/keyless_speak_on@2x.png +0 -0
- package/ios/icons/keyless_speak_on@3x.png +0 -0
- package/ios/icons/refresh.png +0 -0
- package/ios/icons/refresh@2x.png +0 -0
- package/ios/icons/refresh@3x.png +0 -0
- package/ios/icons/ty_camera_control_hd_normal@2x.png +0 -0
- package/ios/icons/ty_camera_control_hd_normal@3x.png +0 -0
- package/ios/icons/ty_camera_control_sd_normal@2x.png +0 -0
- package/ios/icons/ty_camera_control_sd_normal@3x.png +0 -0
- package/ios/icons/upgrade_success.png +0 -0
- package/ios/icons/upgrade_success@2x.png +0 -0
- package/ios/icons/upgrade_success@3x.png +0 -0
- package/ios/listener/KeylessListener.m +8 -0
- package/ios/listener/KeylessListener.swift +56 -0
- package/ios/listener/RentlyTuya-Bridging-Header.h +5 -0
- package/ios/listener/RentlyTuya.mm +56 -0
- package/ios/listener/RentlyTuya.swift +544 -0
- package/ios/theme/LocalColor.swift +33 -0
- package/ios/theme/LocalFont.swift +32 -0
- package/ios/theme/Theme.swift +71 -0
- package/ios/tuya/CameraManager.swift +296 -0
- package/ios/tuya/SettingsManager.swift +475 -0
- package/ios/tuya/Tuya.swift +570 -0
- package/ios/tuya/TuyaMessages.swift +98 -0
- package/ios/utils/Airbrake.swift +31 -0
- package/ios/utils/AppUtility.swift +76 -0
- package/ios/utils/HeapAnalytics.swift +8 -0
- package/ios/utils/OrientationManager.swift +60 -0
- package/ios/utils/PromiseHandler.swift +36 -0
- package/lib/commonjs/index.js +90 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/module/index.js +83 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +75 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/index.d.ts +75 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/package.json +188 -0
- package/rently-tuya.podspec +52 -0
- package/src/index.tsx +158 -0
@@ -0,0 +1,296 @@
|
|
1
|
+
import ThingSmartCameraBase
|
2
|
+
import ThingSmartDeviceKit
|
3
|
+
|
4
|
+
class CameraManager: NSObject, ThingSmartCameraDelegate {
|
5
|
+
|
6
|
+
static let shared = CameraManager()
|
7
|
+
|
8
|
+
private override init() {}
|
9
|
+
|
10
|
+
private func updateState(
|
11
|
+
isConnected: Bool? = nil,
|
12
|
+
isPreviewing: Bool? = nil,
|
13
|
+
isMicOn: Bool? = nil,
|
14
|
+
isRecording: Bool? = nil,
|
15
|
+
isPlaybacking: Bool? = nil,
|
16
|
+
isPaused: Bool? = nil,
|
17
|
+
isHD: Bool? = nil,
|
18
|
+
isMuted: Bool? = nil,
|
19
|
+
isPlaybackMuted: Bool? = nil,
|
20
|
+
previewLoader: Bool? = nil,
|
21
|
+
dashboardLoader: Bool? = nil,
|
22
|
+
playbackLoader: Bool? = nil,
|
23
|
+
datePickerLoader: Bool? = nil,
|
24
|
+
messagesLoader: Bool? = nil,
|
25
|
+
settingsLoader: Bool? = nil,
|
26
|
+
playbackVideoList: [[AnyHashable: Any]]? = nil,
|
27
|
+
recordDays: [Int]? = nil
|
28
|
+
) {
|
29
|
+
if let isConnected = isConnected { Tuya.shared.isConnected = isConnected }
|
30
|
+
if let isPreviewing = isPreviewing { Tuya.shared.isPreviewing = isPreviewing }
|
31
|
+
if let isMicOn = isMicOn { Tuya.shared.isMicOn = isMicOn }
|
32
|
+
if let isRecording = isRecording { Tuya.shared.isRecording = isRecording }
|
33
|
+
if let isPlaybacking = isPlaybacking { Tuya.shared.isPlaybacking = isPlaybacking }
|
34
|
+
if let isPaused = isPaused { Tuya.shared.isPaused = isPaused }
|
35
|
+
if let isHD = isHD { Tuya.shared.isHD = isHD }
|
36
|
+
if let isMuted = isMuted { Tuya.shared.isMuted = isMuted }
|
37
|
+
if let isPlaybackMuted = isPlaybackMuted { Tuya.shared.isPlaybackMuted = isPlaybackMuted }
|
38
|
+
if let previewLoader = previewLoader { Tuya.shared.previewLoader = previewLoader }
|
39
|
+
if let dashboardLoader = dashboardLoader { Tuya.shared.dashboardLoader = dashboardLoader }
|
40
|
+
if let playbackLoader = playbackLoader { Tuya.shared.playbackLoader = playbackLoader }
|
41
|
+
if let datePickerLoader = datePickerLoader { Tuya.shared.datePickerLoader = datePickerLoader }
|
42
|
+
if let messagesLoader = messagesLoader { Tuya.shared.messagesLoader = messagesLoader }
|
43
|
+
if let settingsLoader = settingsLoader { Tuya.shared.settingsLoader = settingsLoader }
|
44
|
+
if let playbackVideoList = playbackVideoList { Tuya.shared.playbackVideoList = playbackVideoList }
|
45
|
+
if let recordDays = recordDays { Tuya.shared.recordDays = recordDays }
|
46
|
+
}
|
47
|
+
|
48
|
+
// Delegate methods
|
49
|
+
func cameraInitFailed(_ errorCode: ThingSmartCameraErrorCode) {
|
50
|
+
updateState(isConnected: false, isPreviewing: false, previewLoader: false)
|
51
|
+
print("Tuya: Camera initialization failed with error code: \(errorCode)")
|
52
|
+
}
|
53
|
+
|
54
|
+
func cameraDidConnected(_ camera: ThingSmartCameraType!) {
|
55
|
+
updateState(isConnected: true)
|
56
|
+
print("Tuya: Camera connected")
|
57
|
+
|
58
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
59
|
+
Tuya.shared.startPreview()
|
60
|
+
}
|
61
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
62
|
+
Tuya.shared.changeResolution(resolution: .high)
|
63
|
+
}
|
64
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
65
|
+
Tuya.shared.enableMute(enable: false, type: .preview) // TODO:: Try to refactor
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
func cameraDisconnected(_ camera: ThingSmartCameraType, specificErrorCode: NSInteger) {
|
70
|
+
updateState(isConnected: false, isPreviewing: false, isPlaybacking: false, previewLoader: false, playbackLoader: false, messagesLoader: false, settingsLoader: false)
|
71
|
+
if AppUtility.shouldClose {
|
72
|
+
AppUtility.dismissRootViewController()
|
73
|
+
}
|
74
|
+
print("Tuya: Camera disconnected with error code: \(specificErrorCode)")
|
75
|
+
}
|
76
|
+
|
77
|
+
func cameraDidBeginPreview(_ camera: ThingSmartCameraType!) {
|
78
|
+
updateState(isPreviewing: true, previewLoader: false)
|
79
|
+
print("Tuya: Live streaming started")
|
80
|
+
}
|
81
|
+
|
82
|
+
func cameraDidStopPreview(_ camera: ThingSmartCameraType) {
|
83
|
+
updateState(isPreviewing: false)
|
84
|
+
print("Tuya: Live streaming stopped")
|
85
|
+
}
|
86
|
+
|
87
|
+
func cameraDidBeginTalk(_ camera: ThingSmartCameraType) {
|
88
|
+
updateState(isMicOn: true, dashboardLoader: false)
|
89
|
+
print("Tuya: Begin talk success")
|
90
|
+
}
|
91
|
+
|
92
|
+
func cameraDidStopTalk(_ camera: ThingSmartCameraType) {
|
93
|
+
updateState(isMicOn: false, dashboardLoader: false)
|
94
|
+
print("Tuya: Stop talk success")
|
95
|
+
}
|
96
|
+
|
97
|
+
func camera(_ camera: ThingSmartCameraType!, definitionChanged definition: ThingSmartCameraDefinition) {
|
98
|
+
updateState(isHD: definition.rawValue >= ThingSmartCameraDefinition.high.rawValue)
|
99
|
+
print("Tuya: Resolution changed to \(definition.rawValue >= ThingSmartCameraDefinition.high.rawValue ? "HD" : "SD")")
|
100
|
+
}
|
101
|
+
|
102
|
+
func camera(_ camera: ThingSmartCameraType!, didReceiveMuteState isMute: Bool, playMode: ThingSmartCameraPlayMode) {
|
103
|
+
if (playMode == .preview) {
|
104
|
+
updateState(isMuted: isMute)
|
105
|
+
} else {
|
106
|
+
updateState(isPlaybackMuted: isMute)
|
107
|
+
}
|
108
|
+
print("Tuya: Mute state changed to: \(isMute) for \(playMode)")
|
109
|
+
}
|
110
|
+
|
111
|
+
func cameraDidStartRecord(_ camera: ThingSmartCameraType) {
|
112
|
+
updateState(isRecording: true)
|
113
|
+
print("Tuya: Camera started recording")
|
114
|
+
}
|
115
|
+
|
116
|
+
func cameraDidStopRecord(_ camera: ThingSmartCameraType) {
|
117
|
+
updateState(isRecording: false)
|
118
|
+
Tuya.shared.isRecordingSuccess = true
|
119
|
+
print("Tuya: Camera stopped recording and video successfully saved to photo album.")
|
120
|
+
}
|
121
|
+
|
122
|
+
// Playback
|
123
|
+
func camera(_ camera: ThingSmartCameraType!, didReceiveTimeSliceQueryData timeSlices: [[AnyHashable: Any]]!) {
|
124
|
+
guard !timeSlices.isEmpty else {
|
125
|
+
updateState(isPlaybacking: false, playbackLoader: false, playbackVideoList: [])
|
126
|
+
Tuya.shared.stopPlayback()
|
127
|
+
print("Tuya: No video data received")
|
128
|
+
return
|
129
|
+
}
|
130
|
+
|
131
|
+
print("Tuya: Received videos: \(String(describing: timeSlices))")
|
132
|
+
|
133
|
+
let lastMoveOutEpoch: Int? = {
|
134
|
+
if let lastMoveOutDate = Tuya.shared.lastMoveoutAt {
|
135
|
+
return DateUtil.shared.convertToEpoch(isoDateString: lastMoveOutDate)
|
136
|
+
}
|
137
|
+
return nil
|
138
|
+
}()
|
139
|
+
|
140
|
+
let filteredTimeSlices = timeSlices.filter { item in
|
141
|
+
guard let startTime = item["startTime"] as? Int else { return false }
|
142
|
+
|
143
|
+
if let lastMoveOutEpoch = lastMoveOutEpoch {
|
144
|
+
return startTime >= lastMoveOutEpoch
|
145
|
+
}
|
146
|
+
return true
|
147
|
+
}.reversed()
|
148
|
+
|
149
|
+
updateState(playbackLoader: false, playbackVideoList: Array(filteredTimeSlices))
|
150
|
+
print("Tuya: Get Video list success \(filteredTimeSlices.first ?? [:])")
|
151
|
+
|
152
|
+
// Start playback for the first valid video item
|
153
|
+
if let firstItem = filteredTimeSlices.first,
|
154
|
+
let startTime = firstItem["startTime"] as? Int,
|
155
|
+
let endTime = firstItem["endTime"] as? Int {
|
156
|
+
Tuya.shared.startPlayback(
|
157
|
+
playTime: startTime,
|
158
|
+
startTime: startTime,
|
159
|
+
stopTime: endTime
|
160
|
+
)
|
161
|
+
Tuya.shared.selectedItem = firstItem
|
162
|
+
print("Tuya: Playback started for the first video item in the reversed list")
|
163
|
+
} else {
|
164
|
+
print("Tuya: No valid videos found after lastMoveOut")
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
func camera(_ camera: ThingSmartCameraType!, didReceiveRecordDayQueryData days: [NSNumber]!) {
|
169
|
+
let daysArray = days.map { $0.intValue }
|
170
|
+
updateState(datePickerLoader: false, recordDays: daysArray)
|
171
|
+
print("Tuya: Received record days: \(daysArray)")
|
172
|
+
}
|
173
|
+
|
174
|
+
func cameraDidBeginPlayback(_ camera: ThingSmartCameraType!) {
|
175
|
+
updateState(isPlaybacking: true, isPaused: false, playbackLoader: false)
|
176
|
+
print("Tuya: Playback Started")
|
177
|
+
}
|
178
|
+
|
179
|
+
func cameraDidPausePlayback(_ camera: ThingSmartCameraType!) {
|
180
|
+
updateState(isPaused: true, playbackLoader: false)
|
181
|
+
print("Tuya: Playback paused")
|
182
|
+
}
|
183
|
+
|
184
|
+
func cameraDidResumePlayback(_ camera: ThingSmartCameraType!) {
|
185
|
+
updateState(isPaused: false, playbackLoader: false)
|
186
|
+
print("Tuya: Playback resumed")
|
187
|
+
}
|
188
|
+
|
189
|
+
func cameraDidStopPlayback(_ camera: ThingSmartCameraType!) {
|
190
|
+
updateState(isPlaybacking: false, isPaused: false)
|
191
|
+
print("Tuya: Playback stopped")
|
192
|
+
}
|
193
|
+
|
194
|
+
func camera(_ camera: ThingSmartCameraType!, thing_didReceiveVideoFrame sampleBuffer: CMSampleBuffer!, frameInfo: ThingSmartVideoFrameInfo) {
|
195
|
+
|
196
|
+
}
|
197
|
+
|
198
|
+
func cameraPlaybackDidFinished(_ camera: ThingSmartCameraType!) {
|
199
|
+
// TODO:: Check the possiblity for playback finished
|
200
|
+
print("Tuya: Playback finished")
|
201
|
+
}
|
202
|
+
|
203
|
+
// Error handling callback
|
204
|
+
func camera(
|
205
|
+
_ camera: ThingSmartCameraType,
|
206
|
+
didOccurredErrorAtStep errStepCode: ThingCameraErrorCode,
|
207
|
+
specificErrorCode errorCode: Int,
|
208
|
+
extErrorCodeInfo: ThingSmartCameraExtErrorCodeInfo!
|
209
|
+
) {
|
210
|
+
updateState(previewLoader: false)
|
211
|
+
Airbrake.logMessage(
|
212
|
+
title: "Error in Camera Manager, Step Code: \(errStepCode)",
|
213
|
+
message: "Error Code: \(errorCode)",
|
214
|
+
additionalInfo: ["extErrorCodeInfo": extErrorCodeInfo ?? "nil"]
|
215
|
+
)
|
216
|
+
|
217
|
+
switch errStepCode {
|
218
|
+
case Thing_ERROR_NONE:
|
219
|
+
print("Tuya: Error None")
|
220
|
+
case Thing_ERROR_CONNECT_FAILED:
|
221
|
+
updateState(
|
222
|
+
isConnected: false,
|
223
|
+
isPreviewing: false,
|
224
|
+
isPlaybacking: false,
|
225
|
+
previewLoader: false,
|
226
|
+
playbackLoader: false,
|
227
|
+
messagesLoader: false,
|
228
|
+
settingsLoader: false
|
229
|
+
)
|
230
|
+
print("Tuya: Failed to create a P2P connection")
|
231
|
+
case Thing_ERROR_CONNECT_DISCONNECT:
|
232
|
+
updateState(
|
233
|
+
isConnected: false,
|
234
|
+
isPreviewing: false,
|
235
|
+
isPlaybacking: false,
|
236
|
+
previewLoader: false,
|
237
|
+
playbackLoader: false,
|
238
|
+
messagesLoader: false,
|
239
|
+
settingsLoader: false
|
240
|
+
)
|
241
|
+
if AppUtility.shouldClose {
|
242
|
+
AppUtility.dismissRootViewController()
|
243
|
+
}
|
244
|
+
print("Tuya: Error, Did connect disconnected")
|
245
|
+
case Thing_ERROR_START_PREVIEW_FAILED:
|
246
|
+
updateState(isPreviewing: false)
|
247
|
+
print("Tuya: Failed to start preview")
|
248
|
+
case Thing_ERROR_ENABLE_HD_FAILED:
|
249
|
+
updateState(dashboardLoader: false)
|
250
|
+
print("Tuya: Failed to change resolution")
|
251
|
+
case Thing_ERROR_GET_HD_FAILED:
|
252
|
+
print("Tuya: Failed to get resolution status")
|
253
|
+
case Thing_ERROR_START_TALK_FAILED:
|
254
|
+
updateState(dashboardLoader: false)
|
255
|
+
print("Tuya: Failed to enable start talk")
|
256
|
+
case Thing_ERROR_ENABLE_MUTE_FAILED:
|
257
|
+
updateState(dashboardLoader: false)
|
258
|
+
print("Tuya: Failed to enable mute")
|
259
|
+
case Thing_ERROR_SNAPSHOOT_FAILED:
|
260
|
+
print("Tuya: Error in taking screenshot")
|
261
|
+
case Thing_ERROR_RECORD_FAILED:
|
262
|
+
updateState(isRecording: false)
|
263
|
+
print("Tuya: Failed to record")
|
264
|
+
case Thing_ERROR_QUERY_RECORD_DAY_FAILED:
|
265
|
+
updateState(isPlaybacking: false, playbackLoader: false)
|
266
|
+
print("Tuya: Failed to get days available for playback")
|
267
|
+
case Thing_ERROR_QUERY_TIMESLICE_FAILED:
|
268
|
+
updateState(isPlaybacking: false, playbackLoader: false)
|
269
|
+
print("Tuya: Failed to get video list")
|
270
|
+
case Thing_ERROR_START_PLAYBACK_FAILED, Thing_ERROR_ENTER_PLAYBACK_FAILED:
|
271
|
+
updateState(isPlaybacking: false, playbackLoader: false)
|
272
|
+
print("Tuya: Error in start playback")
|
273
|
+
case Thing_ERROR_PAUSE_PLAYBACK_FAILED:
|
274
|
+
updateState(playbackLoader: false)
|
275
|
+
print("Tuya: Error in pause playback")
|
276
|
+
case Thing_ERROR_RESUME_PLAYBACK_FAILED:
|
277
|
+
updateState(playbackLoader: false)
|
278
|
+
print("Tuya: Error in resume playback")
|
279
|
+
case Thing_ERROR_QUERY_EVENTLIST_SIFT_FAILED:
|
280
|
+
print("Tuya: Error in query event list")
|
281
|
+
case Thing_ERROR_SET_PLAYBACK_SPEED_FAILED:
|
282
|
+
print("Tuya: Error in set playback speed")
|
283
|
+
case Thing_ERROR_START_VIDEO_TALK_FAILED:
|
284
|
+
print("Tuya: Error in start video talk")
|
285
|
+
case Thing_ERROR_STOP_VIDEO_TALK_FAILED:
|
286
|
+
print("Tuya: Error in pause video talk")
|
287
|
+
case Thing_ERROR_PAUSE_VIDEO_TALK_FAILED:
|
288
|
+
print("Tuya: Error in pause video talk")
|
289
|
+
case Thing_ERROR_RESUME_VIDEO_TALK_FAILED:
|
290
|
+
print("Tuya: Error in resume video talk")
|
291
|
+
default:
|
292
|
+
updateState(isConnected: false)
|
293
|
+
print("Tuya: Camera error occurred at step \(errStepCode) with error code \(errorCode)")
|
294
|
+
}
|
295
|
+
}
|
296
|
+
}
|