@@ -160,48 +160,68 @@ inline void OnRate(int32_t id, PlayerState* state) {
160
160
inline void OnOpen (int32_t id, PlayerState* state) {
161
161
const auto & media_items = state->medias ()->medias ();
162
162
163
- auto value_objects = std::unique_ptr<Dart_CObject* []>(
164
- new Dart_CObject*[4 + media_items.size () * 2 ]);
165
-
166
163
Dart_CObject id_object;
167
164
id_object.type = Dart_CObject_kInt32;
168
165
id_object.value .as_int32 = id;
169
- value_objects[0 ] = &id_object;
170
166
171
167
Dart_CObject type_object;
172
168
type_object.type = Dart_CObject_kString;
173
169
type_object.value .as_string = " openEvent" ;
174
- value_objects[1 ] = &type_object;
175
170
176
171
Dart_CObject index_object;
177
172
index_object.type = Dart_CObject_kInt32;
178
173
index_object.value .as_int32 = state->index ();
179
- value_objects[2 ] = &index_object;
180
174
181
175
Dart_CObject is_playlist_object;
182
176
is_playlist_object.type = Dart_CObject_kBool;
183
177
is_playlist_object.value .as_int32 = state->is_playlist ();
184
- value_objects[3 ] = &is_playlist_object;
185
- int index = 0 ;
186
- for (const auto & media : media_items) {
187
- Dart_CObject media_type_object;
188
- media_type_object.type = Dart_CObject_kString;
189
- media_type_object.value .as_string =
190
- const_cast <char *>(media->media_type ().c_str ());
191
-
192
- Dart_CObject resource_object;
193
- resource_object.type = Dart_CObject_kString;
194
- resource_object.value .as_string =
195
- const_cast <char *>(media->resource ().c_str ());
196
- value_objects[index + 4 ] = &media_type_object;
197
- value_objects[index + 5 ] = &resource_object;
198
- index += 2 ;
178
+
179
+ auto types_objects =
180
+ std::unique_ptr<Dart_CObject[]>(new Dart_CObject[media_items.size ()]);
181
+ auto types_object_refs =
182
+ std::unique_ptr<Dart_CObject* []>(new Dart_CObject*[media_items.size ()]);
183
+ std::vector<std::string> types_str (media_items.size ());
184
+ std::vector<const char *> types_ptr (media_items.size ());
185
+ for (int32_t i = 0 ; i < media_items.size (); i++) {
186
+ types_str[i] = media_items[i]->media_type ();
187
+ types_ptr[i] = types_str[i].c_str ();
188
+ Dart_CObject* value_object = &types_objects[i];
189
+ value_object->type = Dart_CObject_kString;
190
+ value_object->value .as_string = const_cast <char *>(types_ptr[i]);
191
+ types_object_refs[i] = value_object;
192
+ }
193
+ Dart_CObject types_object;
194
+ types_object.type = Dart_CObject_kArray;
195
+ types_object.value .as_array .length = media_items.size ();
196
+ types_object.value .as_array .values = types_object_refs.get ();
197
+
198
+ auto resources_objects =
199
+ std::unique_ptr<Dart_CObject[]>(new Dart_CObject[media_items.size ()]);
200
+ auto resources_object_refs =
201
+ std::unique_ptr<Dart_CObject* []>(new Dart_CObject*[media_items.size ()]);
202
+ std::vector<std::string> resources_str (media_items.size ());
203
+ std::vector<const char *> resources_ptr (media_items.size ());
204
+ for (int32_t i = 0 ; i < media_items.size (); i++) {
205
+ resources_str[i] = media_items[i]->resource ();
206
+ resources_ptr[i] = resources_str[i].c_str ();
207
+ Dart_CObject* value_object = &resources_objects[i];
208
+ value_object->type = Dart_CObject_kString;
209
+ value_object->value .as_string = const_cast <char *>(resources_ptr[i]);
210
+ resources_object_refs[i] = value_object;
199
211
}
212
+ Dart_CObject resources_object;
213
+ resources_object.type = Dart_CObject_kArray;
214
+ resources_object.value .as_array .length = media_items.size ();
215
+ resources_object.value .as_array .values = resources_object_refs.get ();
216
+
217
+ Dart_CObject* value_objects[] = {&id_object, &type_object,
218
+ &index_object, &is_playlist_object,
219
+ &types_object, &resources_object};
200
220
201
221
Dart_CObject return_object;
202
222
return_object.type = Dart_CObject_kArray;
203
- return_object.value .as_array .length = 4 + media_items. size () * 2 ;
204
- return_object.value .as_array .values = value_objects. get () ;
223
+ return_object.value .as_array .length = 6 ;
224
+ return_object.value .as_array .values = value_objects;
205
225
g_dart_post_C_object (g_callback_port, &return_object);
206
226
}
207
227
0 commit comments