@@ -160,48 +160,68 @@ inline void OnRate(int32_t id, PlayerState* state) {
160160inline void OnOpen (int32_t id, PlayerState* state) {
161161 const auto & media_items = state->medias ()->medias ();
162162
163- auto value_objects = std::unique_ptr<Dart_CObject* []>(
164- new Dart_CObject*[4 + media_items.size () * 2 ]);
165-
166163 Dart_CObject id_object;
167164 id_object.type = Dart_CObject_kInt32;
168165 id_object.value .as_int32 = id;
169- value_objects[0 ] = &id_object;
170166
171167 Dart_CObject type_object;
172168 type_object.type = Dart_CObject_kString;
173169 type_object.value .as_string = " openEvent" ;
174- value_objects[1 ] = &type_object;
175170
176171 Dart_CObject index_object;
177172 index_object.type = Dart_CObject_kInt32;
178173 index_object.value .as_int32 = state->index ();
179- value_objects[2 ] = &index_object;
180174
181175 Dart_CObject is_playlist_object;
182176 is_playlist_object.type = Dart_CObject_kBool;
183177 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;
199211 }
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};
200220
201221 Dart_CObject return_object;
202222 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;
205225 g_dart_post_C_object (g_callback_port, &return_object);
206226}
207227
0 commit comments