Skip to content

Commit 5d3be00

Browse files
mfazekasclaude
andcommitted
fix: add missing Promise import in experimental Android property files, extract shared async helpers
- Add missing `import com.margelo.nitro.core.Promise` to all 6 experimental Android ViewModel property files (Boolean, Color, Enum, List, Number, String) - Extract private async helpers in iOS new Color and List to eliminate non-trivial code duplication between deprecated sync and async methods Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5728122 commit 5d3be00

8 files changed

Lines changed: 29 additions & 29 deletions

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelBooleanProperty.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.util.Log
44
import androidx.annotation.Keep
55
import app.rive.ViewModelInstance
66
import com.facebook.proguard.annotations.DoNotStrip
7+
import com.margelo.nitro.core.Promise
78
import kotlinx.coroutines.flow.first
89
import kotlinx.coroutines.runBlocking
910

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelColorProperty.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.util.Log
44
import androidx.annotation.Keep
55
import app.rive.ViewModelInstance
66
import com.facebook.proguard.annotations.DoNotStrip
7+
import com.margelo.nitro.core.Promise
78
import kotlinx.coroutines.flow.first
89
import kotlinx.coroutines.runBlocking
910

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelEnumProperty.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.util.Log
44
import androidx.annotation.Keep
55
import app.rive.ViewModelInstance
66
import com.facebook.proguard.annotations.DoNotStrip
7+
import com.margelo.nitro.core.Promise
78
import kotlinx.coroutines.flow.first
89
import kotlinx.coroutines.runBlocking
910

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelListProperty.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import app.rive.ViewModelInstance
66
import app.rive.ViewModelInstanceSource
77
import app.rive.core.CommandQueue
88
import com.facebook.proguard.annotations.DoNotStrip
9+
import com.margelo.nitro.core.Promise
910
import kotlinx.coroutines.runBlocking
1011

1112
@Keep
@@ -36,26 +37,25 @@ class HybridViewModelListProperty(
3637
return Promise.async { instance.getListSize(path).toDouble() }
3738
}
3839

40+
private suspend fun fetchInstanceAt(index: Double): HybridViewModelInstanceSpec? {
41+
val file = parentFile.riveFile ?: return null
42+
val source = ViewModelInstanceSource.ReferenceListItem(instance, path, index.toInt())
43+
val vmi = ViewModelInstance.fromFile(file, source)
44+
return HybridViewModelInstance(vmi, riveWorker, parentFile)
45+
}
46+
3947
// Deprecated: Use getInstanceAtAsync instead
4048
override fun getInstanceAt(index: Double): HybridViewModelInstanceSpec? {
4149
return try {
42-
val file = parentFile.riveFile ?: return null
43-
val source = ViewModelInstanceSource.ReferenceListItem(instance, path, index.toInt())
44-
val vmi = ViewModelInstance.fromFile(file, source)
45-
HybridViewModelInstance(vmi, riveWorker, parentFile)
50+
runBlocking { fetchInstanceAt(index) }
4651
} catch (e: Exception) {
4752
Log.e(TAG, "getInstanceAt($index) failed for path '$path'", e)
4853
null
4954
}
5055
}
5156

5257
override fun getInstanceAtAsync(index: Double): Promise<HybridViewModelInstanceSpec?> {
53-
return Promise.async {
54-
val file = parentFile.riveFile ?: return@async null
55-
val source = ViewModelInstanceSource.ReferenceListItem(instance, path, index.toInt())
56-
val vmi = ViewModelInstance.fromFile(file, source)
57-
HybridViewModelInstance(vmi, riveWorker, parentFile)
58-
}
58+
return Promise.async { fetchInstanceAt(index) }
5959
}
6060

6161
override fun addInstance(instance: HybridViewModelInstanceSpec) {

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelNumberProperty.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.util.Log
44
import androidx.annotation.Keep
55
import app.rive.ViewModelInstance
66
import com.facebook.proguard.annotations.DoNotStrip
7+
import com.margelo.nitro.core.Promise
78
import kotlinx.coroutines.flow.first
89
import kotlinx.coroutines.runBlocking
910

android/src/experimental/java/com/margelo/nitro/rive/HybridViewModelStringProperty.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.util.Log
44
import androidx.annotation.Keep
55
import app.rive.ViewModelInstance
66
import com.facebook.proguard.annotations.DoNotStrip
7+
import com.margelo.nitro.core.Promise
78
import kotlinx.coroutines.flow.first
89
import kotlinx.coroutines.runBlocking
910

ios/new/HybridViewModelColorProperty.swift

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ class HybridViewModelColorProperty: HybridViewModelColorPropertySpec {
1212
super.init()
1313
}
1414

15+
private func fetchColorValue() async throws -> Double {
16+
let color = try await instance.value(of: prop)
17+
return Double(color.argbValue)
18+
}
19+
1520
// Deprecated: Use getValueAsync instead (for reading)
1621
var value: Double {
1722
get {
1823
do {
19-
let color = try blockingAsync { try await self.instance.value(of: self.prop) }
20-
return Double(color.argbValue)
24+
return try blockingAsync { try await self.fetchColorValue() }
2125
} catch {
2226
RCTLogError("[ColorProperty] getValue failed: \(error)")
2327
return 0
@@ -34,12 +38,7 @@ class HybridViewModelColorProperty: HybridViewModelColorPropertySpec {
3438
}
3539

3640
func getValueAsync() throws -> Promise<Double> {
37-
let inst = instance
38-
let p = prop
39-
return Promise.async {
40-
let color = try await inst.value(of: p)
41-
return Double(color.argbValue)
42-
}
41+
return Promise.async { try await self.fetchColorValue() }
4342
}
4443

4544
func addListener(onChanged: @escaping (Double) -> Void) throws -> () -> Void {

ios/new/HybridViewModelListProperty.swift

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,18 @@ class HybridViewModelListProperty: HybridViewModelListPropertySpec {
3636
}
3737
}
3838

39+
private func fetchInstance(at index: Double) async throws -> (any HybridViewModelInstanceSpec)? {
40+
let vmi = try await vmiInstance.value(of: prop, at: Int32(index))
41+
return HybridViewModelInstance(viewModelInstance: vmi, worker: worker)
42+
}
43+
3944
// Deprecated: Use getInstanceAtAsync instead
4045
func getInstanceAt(index: Double) throws -> (any HybridViewModelInstanceSpec)? {
41-
return try blockingAsync {
42-
let vmi = try await self.vmiInstance.value(of: self.prop, at: Int32(index))
43-
return HybridViewModelInstance(viewModelInstance: vmi, worker: self.worker)
44-
}
46+
return try blockingAsync { try await self.fetchInstance(at: index) }
4547
}
4648

4749
func getInstanceAtAsync(index: Double) throws -> Promise<(any HybridViewModelInstanceSpec)?> {
48-
let inst = vmiInstance
49-
let p = prop
50-
let w = worker
51-
return Promise.async {
52-
let vmi = try await inst.value(of: p, at: Int32(index))
53-
return HybridViewModelInstance(viewModelInstance: vmi, worker: w)
54-
}
50+
return Promise.async { try await self.fetchInstance(at: index) }
5551
}
5652

5753
func addInstance(instance: any HybridViewModelInstanceSpec) throws {

0 commit comments

Comments
 (0)