5
5
import java .io .IOException ;
6
6
import java .net .URLDecoder ;
7
7
import java .nio .charset .StandardCharsets ;
8
- import java .util .Collections ;
9
8
import java .util .List ;
10
- import java .util .Optional ;
11
9
import okhttp3 .RequestBody ;
12
10
import okhttp3 .Response ;
13
11
import org .slf4j .Logger ;
@@ -21,6 +19,7 @@ public class SwitchBotDeviceApi {
21
19
protected SwitchBotDeviceApi (SwitchBotApi provider ) {
22
20
this .provider = provider ;
23
21
}
22
+
24
23
/**
25
24
* @see <a href="https://github.com/OpenWonderLabs/SwitchBotAPI#get-device-list">Get device
26
25
* list</a>
@@ -29,19 +28,7 @@ protected SwitchBotDeviceApi(SwitchBotApi provider) {
29
28
*/
30
29
public List <Device > getDevices () throws IOException {
31
30
try (Response response = OkHttpUtil .getSynchronous (SwitchBotApi .baseUrl + "v1.1/devices" , provider .addAuth ())) {
32
- if (!response .isSuccessful ()) {
33
- throw new IOException (response .message ());
34
- }
35
- ApiResponse apiResponse = provider .getMoshi ()
36
- .adapter (ApiResponse .class )
37
- .fromJson (response .body ().string ());
38
- if (provider .checkForError (apiResponse )) {
39
- return Collections .emptyList ();
40
- }
41
- return Optional .ofNullable (apiResponse )
42
- .map (ApiResponse ::getBody )
43
- .map (ApiResponseBody ::getDeviceList )
44
- .orElse (Collections .emptyList ());
31
+ return parseResponse (response , ApiResponse .class ).getBody ().getDeviceList ();
45
32
}
46
33
}
47
34
@@ -57,22 +44,7 @@ public Device getDeviceStatus(String deviceId) throws IOException {
57
44
}
58
45
try (Response response = OkHttpUtil .getSynchronous (
59
46
SwitchBotApi .baseUrl + "v1.1/devices/" + deviceId + "/status" , provider .addAuth ())) {
60
- if (!response .isSuccessful ()) {
61
- throw new IOException (response .message ());
62
- }
63
- DeviceApiResponse apiResponse = provider .getMoshi ()
64
- .adapter (DeviceApiResponse .class )
65
- .fromJson (response .body ().string ());
66
- if (Optional .ofNullable (apiResponse )
67
- .map (DeviceApiResponse ::getStatusCode )
68
- .orElse (-1 )
69
- != 100 ) {
70
- logger .error ("error code: " + apiResponse .getStatusCode () + " : " + apiResponse .getMessage ());
71
- return null ;
72
- }
73
- return provider .checkForError (apiResponse )
74
- ? null
75
- : Optional .of (apiResponse ).map (DeviceApiResponse ::getBody ).orElse (null );
47
+ return parseResponse (response , DeviceApiResponse .class ).getBody ();
76
48
}
77
49
}
78
50
@@ -89,13 +61,20 @@ public void sendDeviceControlCommands(String deviceId, DeviceCommand command) th
89
61
RequestBody .create (URLDecoder .decode (stringCommand , StandardCharsets .UTF_8 .displayName ())
90
62
.getBytes (StandardCharsets .UTF_8 )),
91
63
provider .addAuth ())) {
92
- if (!response .isSuccessful ()) {
93
- throw new IOException (response .message ());
94
- }
95
- DeviceApiResponse apiResponse = provider .getMoshi ()
96
- .adapter (DeviceApiResponse .class )
97
- .fromJson (response .body ().string ());
98
- provider .checkForError (apiResponse );
64
+ parseResponse (response , DeviceApiResponse .class );
65
+ }
66
+ }
67
+
68
+ private <T extends IApiResponse > T parseResponse (Response response , Class <T > clazz ) throws IOException {
69
+ if (!response .isSuccessful ()) {
70
+ throw new IOException (response .code () + " " + response .message () + " "
71
+ + response .body ().string ());
72
+ }
73
+ String body = response .body ().string ();
74
+ T apiResponse = provider .getMoshi ().adapter (clazz ).fromJson (body );
75
+ if (!provider .checkForError (apiResponse )) {
76
+ throw new IOException (response .code () + " " + response .message () + " " + body );
99
77
}
78
+ return apiResponse ;
100
79
}
101
80
}
0 commit comments