@@ -30,49 +30,6 @@ bool GetValueFromEncodableMap(const flutter::EncodableMap *map, const char *key,
30
30
return false ;
31
31
}
32
32
33
- // Returns the value associated with key in arguments. Throws invalid_argument
34
- // exception if key doesn't exist in arguments or if entry has invalid type or
35
- // value.
36
- //
37
- // This function must always be called within a try-catch block.
38
- // See `HandleMethodCall`.
39
- template <typename T>
40
- T GetRequiredArg (const flutter::EncodableMap *arguments, const char *key) {
41
- T value;
42
- if (GetValueFromEncodableMap (arguments, key, value)) {
43
- return value;
44
- }
45
- std::string message = " No " + std::string (key) +
46
- " provided or entry has invalid type or value." ;
47
- throw std::invalid_argument (message);
48
- }
49
-
50
- // Returns the matching `ReleaseMode` enum from string. Throws invalid_argument
51
- // exception the given string cannot be resolved to any `ReleaseMode`.
52
- //
53
- // This function must always be called within a try-catch block.
54
- // See `HandleMethodCall`.
55
- ReleaseMode StringToReleaseMode (const std::string &release_mode) {
56
- if (release_mode == " ReleaseMode.RELEASE" ) {
57
- return ReleaseMode::kRelease ;
58
- } else if (release_mode == " ReleaseMode.LOOP" ) {
59
- return ReleaseMode::kLoop ;
60
- } else if (release_mode == " ReleaseMode.STOP" ) {
61
- return ReleaseMode::kStop ;
62
- }
63
- throw std::invalid_argument (" Invalid release mode." );
64
- }
65
-
66
- // Throws result as exception if the given result has error.
67
- //
68
- // This function must always be called within a try-catch block.
69
- // See `HandleMethodCall`.
70
- void ThrowIfError (const TizenResult &result) {
71
- if (!result) {
72
- throw result;
73
- }
74
- }
75
-
76
33
class AudioplayersTizenPlugin : public flutter ::Plugin {
77
34
public:
78
35
static void RegisterWithRegistrar (flutter::PluginRegistrar *registrar) {
@@ -116,90 +73,211 @@ class AudioplayersTizenPlugin : public flutter::Plugin {
116
73
117
74
AudioPlayer *player = GetAudioPlayer (player_id, mode);
118
75
119
- // try-catch block to capture exceptions thrown by:
120
- // - `ThrowIfError`
121
- // - `GetRequiredArg`
122
- // - `StringToReleaseMode`
123
- try {
124
- const auto &method_name = method_call.method_name ();
125
- if (method_name == " play" ) {
126
- double volume = 0.0 ;
127
- std::string url;
128
- int32_t position = 0 ;
129
- if (GetValueFromEncodableMap (arguments, " volume" , volume)) {
130
- ThrowIfError (player->SetVolume (volume));
76
+ const auto &method_name = method_call.method_name ();
77
+ if (method_name == " play" ) {
78
+ double volume = 0.0 ;
79
+ std::string url;
80
+ int32_t position = 0 ;
81
+
82
+ if (GetValueFromEncodableMap (arguments, " volume" , volume)) {
83
+ auto tizen_result = player->SetVolume (volume);
84
+ if (!tizen_result) {
85
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
86
+ return ;
131
87
}
132
- if (GetValueFromEncodableMap (arguments, " url" , url)) {
133
- ThrowIfError (player->SetUrl (url));
88
+ }
89
+
90
+ if (GetValueFromEncodableMap (arguments, " url" , url)) {
91
+ auto tizen_result = player->SetUrl (url);
92
+ if (!tizen_result) {
93
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
94
+ return ;
134
95
}
135
- ThrowIfError (player->Play ());
136
- if (GetValueFromEncodableMap (arguments, " position" , position)) {
137
- ThrowIfError (player->Seek (position));
96
+ }
97
+
98
+ auto tizen_result = player->Play ();
99
+ if (!tizen_result) {
100
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
101
+ return ;
102
+ }
103
+
104
+ if (GetValueFromEncodableMap (arguments, " position" , position)) {
105
+ auto tizen_result = player->Seek (position);
106
+ if (!tizen_result) {
107
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
108
+ return ;
138
109
}
139
- result->Success (flutter::EncodableValue (1 ));
140
- } else if (method_name == " playBytes" ) {
141
- double volume = 0.0 ;
142
- std::vector<uint8_t > bytes;
143
- int32_t position = 0 ;
144
- if (GetValueFromEncodableMap (arguments, " volume" , volume)) {
145
- ThrowIfError (player->SetVolume (volume));
110
+ }
111
+
112
+ result->Success (flutter::EncodableValue (1 ));
113
+ } else if (method_name == " playBytes" ) {
114
+ double volume = 0.0 ;
115
+ std::vector<uint8_t > bytes;
116
+ int32_t position = 0 ;
117
+
118
+ if (GetValueFromEncodableMap (arguments, " volume" , volume)) {
119
+ auto tizen_result = player->SetVolume (volume);
120
+ if (!tizen_result) {
121
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
122
+ return ;
146
123
}
147
- if (GetValueFromEncodableMap (arguments, " bytes" , bytes)) {
148
- ThrowIfError (player->SetDataSource (bytes));
124
+ }
125
+
126
+ if (GetValueFromEncodableMap (arguments, " bytes" , bytes)) {
127
+ auto tizen_result = player->SetDataSource (bytes);
128
+ if (!tizen_result) {
129
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
130
+ return ;
149
131
}
150
- ThrowIfError (player->Play ());
151
- if (GetValueFromEncodableMap (arguments, " position" , position)) {
152
- ThrowIfError (player->Seek (position));
132
+ }
133
+
134
+ auto tizen_result = player->Play ();
135
+ if (!tizen_result) {
136
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
137
+ return ;
138
+ }
139
+
140
+ if (GetValueFromEncodableMap (arguments, " position" , position)) {
141
+ auto tizen_result = player->Seek (position);
142
+ if (!tizen_result) {
143
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
144
+ return ;
153
145
}
154
- result->Success (flutter::EncodableValue (1 ));
155
- } else if (method_name == " resume" ) {
156
- ThrowIfError (player->Play ());
157
- result->Success (flutter::EncodableValue (1 ));
158
- } else if (method_name == " pause" ) {
159
- ThrowIfError (player->Pause ());
160
- result->Success (flutter::EncodableValue (1 ));
161
- } else if (method_name == " stop" ) {
162
- ThrowIfError (player->Stop ());
163
- result->Success (flutter::EncodableValue (1 ));
164
- } else if (method_name == " release" ) {
165
- player->Release ();
166
- result->Success (flutter::EncodableValue (1 ));
167
- } else if (method_name == " seek" ) {
168
- ThrowIfError (
169
- player->Seek (GetRequiredArg<int32_t >(arguments, " position" )));
170
- result->Success (flutter::EncodableValue (1 ));
171
- } else if (method_name == " setVolume" ) {
172
- ThrowIfError (
173
- player->SetVolume (GetRequiredArg<double >(arguments, " volume" )));
174
- result->Success (flutter::EncodableValue (1 ));
175
- } else if (method_name == " setUrl" ) {
176
- ThrowIfError (
177
- player->SetUrl (GetRequiredArg<std::string>(arguments, " url" )));
178
- result->Success (flutter::EncodableValue (1 ));
179
- } else if (method_name == " setPlaybackRate" ) {
180
- ThrowIfError (player->SetPlaybackRate (
181
- GetRequiredArg<double >(arguments, " playbackRate" )));
182
- result->Success (flutter::EncodableValue (1 ));
183
- } else if (method_name == " setReleaseMode" ) {
184
- std::string release_mode =
185
- GetRequiredArg<std::string>(arguments, " releaseMode" );
186
- ThrowIfError (player->SetReleaseMode (StringToReleaseMode (release_mode)));
187
- result->Success (flutter::EncodableValue (1 ));
188
- } else if (method_name == " getDuration" ) {
189
- int duration;
190
- ThrowIfError (player->GetDuration (duration));
191
- result->Success (flutter::EncodableValue (duration));
192
- } else if (method_name == " getCurrentPosition" ) {
193
- int position;
194
- ThrowIfError (player->GetCurrentPosition (position));
195
- result->Success (flutter::EncodableValue (position));
146
+ }
147
+
148
+ result->Success (flutter::EncodableValue (1 ));
149
+ } else if (method_name == " resume" ) {
150
+ auto tizen_result = player->Play ();
151
+ if (!tizen_result) {
152
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
153
+ return ;
154
+ }
155
+ result->Success (flutter::EncodableValue (1 ));
156
+ } else if (method_name == " pause" ) {
157
+ auto tizen_result = player->Pause ();
158
+ if (!tizen_result) {
159
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
160
+ return ;
161
+ }
162
+ result->Success (flutter::EncodableValue (1 ));
163
+ } else if (method_name == " stop" ) {
164
+ auto tizen_result = player->Stop ();
165
+ if (!tizen_result) {
166
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
167
+ return ;
168
+ }
169
+ result->Success (flutter::EncodableValue (1 ));
170
+ } else if (method_name == " release" ) {
171
+ player->Release ();
172
+ result->Success (flutter::EncodableValue (1 ));
173
+ } else if (method_name == " seek" ) {
174
+ int32_t position;
175
+ if (!GetValueFromEncodableMap (arguments, " position" , position)) {
176
+ result->Error (
177
+ kInvalidArgument ,
178
+ " No position provided or entry has invalid type or value." );
179
+ return ;
180
+ }
181
+
182
+ auto tizen_result = player->Seek (position);
183
+ if (!tizen_result) {
184
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
185
+ return ;
186
+ }
187
+
188
+ result->Success (flutter::EncodableValue (1 ));
189
+ } else if (method_name == " setVolume" ) {
190
+ int32_t volume;
191
+ if (!GetValueFromEncodableMap (arguments, " volume" , volume)) {
192
+ result->Error (kInvalidArgument ,
193
+ " No volume provided or entry has invalid type or value." );
194
+ return ;
195
+ }
196
+
197
+ auto tizen_result = player->SetVolume (volume);
198
+ if (!tizen_result) {
199
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
200
+ return ;
201
+ }
202
+
203
+ result->Success (flutter::EncodableValue (1 ));
204
+ } else if (method_name == " setUrl" ) {
205
+ std::string url;
206
+ if (!GetValueFromEncodableMap (arguments, " url" , url)) {
207
+ result->Error (kInvalidArgument ,
208
+ " No url provided or entry has invalid type or value." );
209
+ return ;
210
+ }
211
+ auto tizen_result = player->SetUrl (url);
212
+ if (!tizen_result) {
213
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
214
+ return ;
215
+ }
216
+
217
+ result->Success (flutter::EncodableValue (1 ));
218
+ } else if (method_name == " setPlaybackRate" ) {
219
+ double playback_rate;
220
+ if (!GetValueFromEncodableMap (arguments, " playbackRate" , playback_rate)) {
221
+ result->Error (
222
+ kInvalidArgument ,
223
+ " No playbackRate provided or entry has invalid type or value." );
224
+ return ;
225
+ }
226
+ auto tizen_result = player->SetPlaybackRate (playback_rate);
227
+ if (!tizen_result) {
228
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
229
+ return ;
230
+ }
231
+
232
+ result->Success (flutter::EncodableValue (1 ));
233
+ } else if (method_name == " setReleaseMode" ) {
234
+ std::string release_mode;
235
+ if (!GetValueFromEncodableMap (arguments, " releaseMode" , release_mode)) {
236
+ result->Error (
237
+ kInvalidArgument ,
238
+ " No releaseMode provided or entry has invalid type or value." );
239
+ return ;
240
+ }
241
+
242
+ ReleaseMode release_mode_enum;
243
+ if (release_mode == " ReleaseMode.RELEASE" ) {
244
+ release_mode_enum = ReleaseMode::kRelease ;
245
+ } else if (release_mode == " ReleaseMode.LOOP" ) {
246
+ release_mode_enum = ReleaseMode::kLoop ;
247
+ } else if (release_mode == " ReleaseMode.STOP" ) {
248
+ release_mode_enum = ReleaseMode::kStop ;
196
249
} else {
197
- result->NotImplemented ();
250
+ result->Error (kInvalidArgument , " Invalid release mode." );
251
+ return ;
198
252
}
199
- } catch (const std::invalid_argument &error) {
200
- result->Error (kInvalidArgument , error.what ());
201
- } catch (const TizenResult &error) {
202
- result->Error (error.Message (), error.TizenMessage ());
253
+
254
+ auto tizen_result = player->SetReleaseMode (release_mode_enum);
255
+ if (!tizen_result) {
256
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
257
+ return ;
258
+ }
259
+
260
+ result->Success (flutter::EncodableValue (1 ));
261
+ } else if (method_name == " getDuration" ) {
262
+ int32_t duration;
263
+ auto tizen_result = player->GetDuration (duration);
264
+ if (!tizen_result) {
265
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
266
+ return ;
267
+ }
268
+
269
+ result->Success (flutter::EncodableValue (duration));
270
+ } else if (method_name == " getCurrentPosition" ) {
271
+ int32_t position;
272
+ auto tizen_result = player->GetCurrentPosition (position);
273
+ if (!tizen_result) {
274
+ result->Error (tizen_result.Message (), tizen_result.TizenMessage ());
275
+ return ;
276
+ }
277
+
278
+ result->Success (flutter::EncodableValue (position));
279
+ } else {
280
+ result->NotImplemented ();
203
281
}
204
282
}
205
283
0 commit comments