Skip to content

Commit 682b9f4

Browse files
Max2 Python SDK Support (#835)
* Manually wget intershinx to work around Zscaler * Add 360 media unit tests * Validate AAP setting * Fix macOS SSID quering for >= 15.6 * Add get / set camera name commands * Add preset visibility to Python SDK * Generate OGP SDK Code and Protobufs * Add test for 360 media handling * Use lock to solve out of order response handling * Regression test with H12 and clean up logging Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 3cd3e3f commit 682b9f4

File tree

78 files changed

+1635
-450
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+1635
-450
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
@file:OptIn(pbandk.PublicForGeneratedCode::class)
2+
3+
package com.gopro.open_gopro.operations
4+
5+
@pbandk.Export
6+
internal data class RequestSetCameraName(
7+
val name: String? = null,
8+
override val unknownFields: Map<Int, pbandk.UnknownField> = emptyMap()
9+
) : pbandk.Message {
10+
override operator fun plus(
11+
other: pbandk.Message?
12+
): com.gopro.open_gopro.operations.RequestSetCameraName = protoMergeImpl(other)
13+
14+
override val descriptor:
15+
pbandk.MessageDescriptor<com.gopro.open_gopro.operations.RequestSetCameraName>
16+
get() = Companion.descriptor
17+
18+
override val protoSize: Int by lazy { super.protoSize }
19+
20+
internal companion object :
21+
pbandk.Message.Companion<com.gopro.open_gopro.operations.RequestSetCameraName> {
22+
internal val defaultInstance: com.gopro.open_gopro.operations.RequestSetCameraName by lazy {
23+
com.gopro.open_gopro.operations.RequestSetCameraName()
24+
}
25+
26+
override fun decodeWith(
27+
u: pbandk.MessageDecoder
28+
): com.gopro.open_gopro.operations.RequestSetCameraName =
29+
com.gopro.open_gopro.operations.RequestSetCameraName.decodeWithImpl(u)
30+
31+
override val descriptor:
32+
pbandk.MessageDescriptor<com.gopro.open_gopro.operations.RequestSetCameraName> =
33+
pbandk.MessageDescriptor(
34+
fullName = "open_gopro.RequestSetCameraName",
35+
messageClass = com.gopro.open_gopro.operations.RequestSetCameraName::class,
36+
messageCompanion = this,
37+
fields =
38+
buildList(1) {
39+
add(
40+
pbandk.FieldDescriptor(
41+
messageDescriptor = this@Companion::descriptor,
42+
name = "name",
43+
number = 1,
44+
type = pbandk.FieldDescriptor.Type.Primitive.String(hasPresence = true),
45+
jsonName = "name",
46+
value = com.gopro.open_gopro.operations.RequestSetCameraName::name))
47+
})
48+
}
49+
}
50+
51+
@pbandk.Export
52+
@pbandk.JsName("orDefaultForRequestSetCameraName")
53+
internal fun RequestSetCameraName?.orDefault():
54+
com.gopro.open_gopro.operations.RequestSetCameraName =
55+
this ?: RequestSetCameraName.defaultInstance
56+
57+
private fun RequestSetCameraName.protoMergeImpl(plus: pbandk.Message?): RequestSetCameraName =
58+
(plus as? RequestSetCameraName)?.let {
59+
it.copy(name = plus.name ?: name, unknownFields = unknownFields + plus.unknownFields)
60+
} ?: this
61+
62+
@Suppress("UNCHECKED_CAST")
63+
private fun RequestSetCameraName.Companion.decodeWithImpl(
64+
u: pbandk.MessageDecoder
65+
): RequestSetCameraName {
66+
var name: String? = null
67+
68+
val unknownFields =
69+
u.readMessage(this) { _fieldNumber, _fieldValue ->
70+
when (_fieldNumber) {
71+
1 -> name = _fieldValue as String
72+
}
73+
}
74+
75+
return RequestSetCameraName(name, unknownFields)
76+
}

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/cohn.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* cohn.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/live_streaming.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* live_streaming.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/media.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* media.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/network_management.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* network_management.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/preset_status.kt

Lines changed: 122 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* preset_status.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations
@@ -695,6 +692,18 @@ public sealed class EnumPresetTitle(override val value: Int, override val name:
695692

696693
internal object PRESET_TITLE_16_9_SLOMO : EnumPresetTitle(127, "PRESET_TITLE_16_9_SLOMO")
697694

695+
internal object PRESET_TITLE_TIME_LAPSE_VIDEO :
696+
EnumPresetTitle(131, "PRESET_TITLE_TIME_LAPSE_VIDEO")
697+
698+
internal object PRESET_TITLE_TIME_LAPSE_PHOTO :
699+
EnumPresetTitle(132, "PRESET_TITLE_TIME_LAPSE_PHOTO")
700+
701+
internal object PRESET_TITLE_NIGHT_LAPSE_VIDEO :
702+
EnumPresetTitle(133, "PRESET_TITLE_NIGHT_LAPSE_VIDEO")
703+
704+
internal object PRESET_TITLE_NIGHT_LAPSE_PHOTO :
705+
EnumPresetTitle(134, "PRESET_TITLE_NIGHT_LAPSE_PHOTO")
706+
698707
internal class UNRECOGNIZED(value: Int) : EnumPresetTitle(value)
699708

700709
internal companion object :
@@ -780,7 +789,11 @@ public sealed class EnumPresetTitle(override val value: Int, override val name:
780789
PRESET_TITLE_BURST_SLOMO,
781790
PRESET_TITLE_4_3_VIDEO,
782791
PRESET_TITLE_16_9_VIDEO,
783-
PRESET_TITLE_16_9_SLOMO)
792+
PRESET_TITLE_16_9_SLOMO,
793+
PRESET_TITLE_TIME_LAPSE_VIDEO,
794+
PRESET_TITLE_TIME_LAPSE_PHOTO,
795+
PRESET_TITLE_NIGHT_LAPSE_VIDEO,
796+
PRESET_TITLE_NIGHT_LAPSE_PHOTO)
784797
}
785798

786799
override fun fromValue(value: Int): com.gopro.open_gopro.operations.EnumPresetTitle =
@@ -858,6 +871,7 @@ public data class Preset(
858871
val isModified: Boolean? = null,
859872
val isFixed: Boolean? = null,
860873
val customName: String? = null,
874+
val isVisible: Boolean? = null,
861875
override val unknownFields: Map<Int, pbandk.UnknownField> = emptyMap()
862876
) : pbandk.Message {
863877
override operator fun plus(other: pbandk.Message?): com.gopro.open_gopro.operations.Preset =
@@ -882,7 +896,7 @@ public data class Preset(
882896
messageClass = com.gopro.open_gopro.operations.Preset::class,
883897
messageCompanion = this,
884898
fields =
885-
buildList(10) {
899+
buildList(11) {
886900
add(
887901
pbandk.FieldDescriptor(
888902
messageDescriptor = this@Companion::descriptor,
@@ -982,6 +996,14 @@ public data class Preset(
982996
type = pbandk.FieldDescriptor.Type.Primitive.String(hasPresence = true),
983997
jsonName = "customName",
984998
value = com.gopro.open_gopro.operations.Preset::customName))
999+
add(
1000+
pbandk.FieldDescriptor(
1001+
messageDescriptor = this@Companion::descriptor,
1002+
name = "is_visible",
1003+
number = 11,
1004+
type = pbandk.FieldDescriptor.Type.Primitive.Bool(hasPresence = true),
1005+
jsonName = "isVisible",
1006+
value = com.gopro.open_gopro.operations.Preset::isVisible))
9851007
})
9861008
}
9871009
}
@@ -1063,6 +1085,63 @@ internal data class RequestCustomPresetUpdate(
10631085
}
10641086
}
10651087

1088+
@pbandk.Export
1089+
internal data class RequestPresetSetVisibility(
1090+
val id: Int? = null,
1091+
val visible: Boolean? = null,
1092+
override val unknownFields: Map<Int, pbandk.UnknownField> = emptyMap()
1093+
) : pbandk.Message {
1094+
override operator fun plus(
1095+
other: pbandk.Message?
1096+
): com.gopro.open_gopro.operations.RequestPresetSetVisibility = protoMergeImpl(other)
1097+
1098+
override val descriptor:
1099+
pbandk.MessageDescriptor<com.gopro.open_gopro.operations.RequestPresetSetVisibility>
1100+
get() = Companion.descriptor
1101+
1102+
override val protoSize: Int by lazy { super.protoSize }
1103+
1104+
internal companion object :
1105+
pbandk.Message.Companion<com.gopro.open_gopro.operations.RequestPresetSetVisibility> {
1106+
internal val defaultInstance:
1107+
com.gopro.open_gopro.operations.RequestPresetSetVisibility by lazy {
1108+
com.gopro.open_gopro.operations.RequestPresetSetVisibility()
1109+
}
1110+
1111+
override fun decodeWith(
1112+
u: pbandk.MessageDecoder
1113+
): com.gopro.open_gopro.operations.RequestPresetSetVisibility =
1114+
com.gopro.open_gopro.operations.RequestPresetSetVisibility.decodeWithImpl(u)
1115+
1116+
override val descriptor:
1117+
pbandk.MessageDescriptor<com.gopro.open_gopro.operations.RequestPresetSetVisibility> =
1118+
pbandk.MessageDescriptor(
1119+
fullName = "open_gopro.RequestPresetSetVisibility",
1120+
messageClass = com.gopro.open_gopro.operations.RequestPresetSetVisibility::class,
1121+
messageCompanion = this,
1122+
fields =
1123+
buildList(2) {
1124+
add(
1125+
pbandk.FieldDescriptor(
1126+
messageDescriptor = this@Companion::descriptor,
1127+
name = "id",
1128+
number = 1,
1129+
type = pbandk.FieldDescriptor.Type.Primitive.Int32(hasPresence = true),
1130+
jsonName = "id",
1131+
value = com.gopro.open_gopro.operations.RequestPresetSetVisibility::id))
1132+
add(
1133+
pbandk.FieldDescriptor(
1134+
messageDescriptor = this@Companion::descriptor,
1135+
name = "visible",
1136+
number = 2,
1137+
type = pbandk.FieldDescriptor.Type.Primitive.Bool(hasPresence = true),
1138+
jsonName = "visible",
1139+
value =
1140+
com.gopro.open_gopro.operations.RequestPresetSetVisibility::visible))
1141+
})
1142+
}
1143+
}
1144+
10661145
@pbandk.Export
10671146
public data class PresetGroup(
10681147
val id: com.gopro.open_gopro.operations.EnumPresetGroup? = null,
@@ -1278,6 +1357,7 @@ private fun Preset.protoMergeImpl(plus: pbandk.Message?): Preset =
12781357
isModified = plus.isModified ?: isModified,
12791358
isFixed = plus.isFixed ?: isFixed,
12801359
customName = plus.customName ?: customName,
1360+
isVisible = plus.isVisible ?: isVisible,
12811361
unknownFields = unknownFields + plus.unknownFields)
12821362
} ?: this
12831363

@@ -1294,6 +1374,7 @@ private fun Preset.Companion.decodeWithImpl(u: pbandk.MessageDecoder): Preset {
12941374
var isModified: Boolean? = null
12951375
var isFixed: Boolean? = null
12961376
var customName: String? = null
1377+
var isVisible: Boolean? = null
12971378

12981379
val unknownFields =
12991380
u.readMessage(this) { _fieldNumber, _fieldValue ->
@@ -1315,6 +1396,7 @@ private fun Preset.Companion.decodeWithImpl(u: pbandk.MessageDecoder): Preset {
13151396
8 -> isModified = _fieldValue as Boolean
13161397
9 -> isFixed = _fieldValue as Boolean
13171398
10 -> customName = _fieldValue as String
1399+
11 -> isVisible = _fieldValue as Boolean
13181400
}
13191401
}
13201402

@@ -1329,6 +1411,7 @@ private fun Preset.Companion.decodeWithImpl(u: pbandk.MessageDecoder): Preset {
13291411
isModified,
13301412
isFixed,
13311413
customName,
1414+
isVisible,
13321415
unknownFields)
13331416
}
13341417

@@ -1369,6 +1452,40 @@ private fun RequestCustomPresetUpdate.Companion.decodeWithImpl(
13691452
return RequestCustomPresetUpdate(titleId, customName, iconId, unknownFields)
13701453
}
13711454

1455+
@pbandk.Export
1456+
@pbandk.JsName("orDefaultForRequestPresetSetVisibility")
1457+
internal fun RequestPresetSetVisibility?.orDefault():
1458+
com.gopro.open_gopro.operations.RequestPresetSetVisibility =
1459+
this ?: RequestPresetSetVisibility.defaultInstance
1460+
1461+
private fun RequestPresetSetVisibility.protoMergeImpl(
1462+
plus: pbandk.Message?
1463+
): RequestPresetSetVisibility =
1464+
(plus as? RequestPresetSetVisibility)?.let {
1465+
it.copy(
1466+
id = plus.id ?: id,
1467+
visible = plus.visible ?: visible,
1468+
unknownFields = unknownFields + plus.unknownFields)
1469+
} ?: this
1470+
1471+
@Suppress("UNCHECKED_CAST")
1472+
private fun RequestPresetSetVisibility.Companion.decodeWithImpl(
1473+
u: pbandk.MessageDecoder
1474+
): RequestPresetSetVisibility {
1475+
var id: Int? = null
1476+
var visible: Boolean? = null
1477+
1478+
val unknownFields =
1479+
u.readMessage(this) { _fieldNumber, _fieldValue ->
1480+
when (_fieldNumber) {
1481+
1 -> id = _fieldValue as Int
1482+
2 -> visible = _fieldValue as Boolean
1483+
}
1484+
}
1485+
1486+
return RequestPresetSetVisibility(id, visible, unknownFields)
1487+
}
1488+
13721489
@pbandk.Export
13731490
@pbandk.JsName("orDefaultForPresetGroup")
13741491
internal fun PresetGroup?.orDefault(): com.gopro.open_gopro.operations.PresetGroup =

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/request_get_preset_status.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* request_get_preset_status.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations
@@ -48,6 +45,7 @@ internal data class RequestGetPresetStatus(
4845
val unregisterPresetStatus: List<com.gopro.open_gopro.operations.EnumRegisterPresetStatus> =
4946
emptyList(),
5047
val useConstantSettingIds: Boolean? = null,
48+
val includeHidden: Boolean? = null,
5149
override val unknownFields: Map<Int, pbandk.UnknownField> = emptyMap()
5250
) : pbandk.Message {
5351
override operator fun plus(
@@ -78,7 +76,7 @@ internal data class RequestGetPresetStatus(
7876
messageClass = com.gopro.open_gopro.operations.RequestGetPresetStatus::class,
7977
messageCompanion = this,
8078
fields =
81-
buildList(3) {
79+
buildList(4) {
8280
add(
8381
pbandk.FieldDescriptor(
8482
messageDescriptor = this@Companion::descriptor,
@@ -125,6 +123,16 @@ internal data class RequestGetPresetStatus(
125123
value =
126124
com.gopro.open_gopro.operations.RequestGetPresetStatus::
127125
useConstantSettingIds))
126+
add(
127+
pbandk.FieldDescriptor(
128+
messageDescriptor = this@Companion::descriptor,
129+
name = "include_hidden",
130+
number = 4,
131+
type = pbandk.FieldDescriptor.Type.Primitive.Bool(hasPresence = true),
132+
jsonName = "includeHidden",
133+
value =
134+
com.gopro.open_gopro.operations.RequestGetPresetStatus::
135+
includeHidden))
128136
})
129137
}
130138
}
@@ -141,6 +149,7 @@ private fun RequestGetPresetStatus.protoMergeImpl(plus: pbandk.Message?): Reques
141149
registerPresetStatus = registerPresetStatus + plus.registerPresetStatus,
142150
unregisterPresetStatus = unregisterPresetStatus + plus.unregisterPresetStatus,
143151
useConstantSettingIds = plus.useConstantSettingIds ?: useConstantSettingIds,
152+
includeHidden = plus.includeHidden ?: includeHidden,
144153
unknownFields = unknownFields + plus.unknownFields)
145154
} ?: this
146155

@@ -155,6 +164,7 @@ private fun RequestGetPresetStatus.Companion.decodeWithImpl(
155164
pbandk.ListWithSize.Builder<com.gopro.open_gopro.operations.EnumRegisterPresetStatus>? =
156165
null
157166
var useConstantSettingIds: Boolean? = null
167+
var includeHidden: Boolean? = null
158168

159169
val unknownFields =
160170
u.readMessage(this) { _fieldNumber, _fieldValue ->
@@ -178,12 +188,14 @@ private fun RequestGetPresetStatus.Companion.decodeWithImpl(
178188
com.gopro.open_gopro.operations.EnumRegisterPresetStatus>
179189
}
180190
3 -> useConstantSettingIds = _fieldValue as Boolean
191+
4 -> includeHidden = _fieldValue as Boolean
181192
}
182193
}
183194

184195
return RequestGetPresetStatus(
185196
pbandk.ListWithSize.Builder.fixed(registerPresetStatus),
186197
pbandk.ListWithSize.Builder.fixed(unregisterPresetStatus),
187198
useConstantSettingIds,
199+
includeHidden,
188200
unknownFields)
189201
}

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/response_generic.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* response_generic.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

demos/kotlin/kmp_sdk/wsdk/src/commonMain/kotlin/com/gopro/open_gopro/entity/operation/proto/set_camera_control_status.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
/* set_camera_control_status.kt/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro). */
2-
/* This copyright was auto-generated on Fri Jun 6 17:50:51 UTC 2025 */
3-
41
@file:OptIn(pbandk.PublicForGeneratedCode::class)
52

63
package com.gopro.open_gopro.operations

0 commit comments

Comments
 (0)