Skip to content

Commit 212d2b9

Browse files
committed
Removed exception throws completely
1 parent fc31a7c commit 212d2b9

File tree

1 file changed

+197
-119
lines changed

1 file changed

+197
-119
lines changed

packages/audioplayers/tizen/src/audioplayers_tizen_plugin.cc

+197-119
Original file line numberDiff line numberDiff line change
@@ -30,49 +30,6 @@ bool GetValueFromEncodableMap(const flutter::EncodableMap *map, const char *key,
3030
return false;
3131
}
3232

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-
7633
class AudioplayersTizenPlugin : public flutter::Plugin {
7734
public:
7835
static void RegisterWithRegistrar(flutter::PluginRegistrar *registrar) {
@@ -116,90 +73,211 @@ class AudioplayersTizenPlugin : public flutter::Plugin {
11673

11774
AudioPlayer *player = GetAudioPlayer(player_id, mode);
11875

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;
13187
}
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;
13495
}
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;
138109
}
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;
146123
}
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;
149131
}
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;
153145
}
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;
196249
} else {
197-
result->NotImplemented();
250+
result->Error(kInvalidArgument, "Invalid release mode.");
251+
return;
198252
}
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();
203281
}
204282
}
205283

0 commit comments

Comments
 (0)