### Eclipse Workspace Patch 1.0
#P org.sophie2.main.media.natlib
|
|
|
5 | 5 | import org.sophie2.base.commons.util.ImmImage; |
6 | 6 | import org.sophie2.base.media.AudioChunk; |
7 | 7 | import org.sophie2.base.natlib.Command; |
| 8 | import org.sophie2.base.natlib.ErrorResponse; |
8 | 9 | import org.sophie2.base.natlib.NativeBridge; |
9 | 10 | import org.sophie2.base.natlib.OkResponse; |
10 | 11 | import org.sophie2.base.natlib.Response; |
… |
… |
|
49 | 50 | @Override |
50 | 51 | public void start() { |
51 | 52 | super.start(); |
52 | | sendCommand(MediaMessages.createOpen(this.fileData.getSize()), OkResponse.class); |
| 53 | sendCommand(MediaMessages.createOpen(this.fileData.getSize()), |
| 54 | OkResponse.class); |
53 | 55 | } |
54 | 56 | |
55 | 57 | /** |
… |
… |
|
76 | 78 | public AudioChunk getAudio(int millis) { |
77 | 79 | assert millis % AudioChunk.MILLIS_LEN == 0; |
78 | 80 | Command cmd = MediaMessages.createGetAudio(millis); |
79 | | AudioResponse res = sendCommand(cmd, AudioResponse.class); |
80 | | assert res.getPosMillis() == millis; |
81 | | return res.getChunk(); |
| 81 | try { |
| 82 | AudioResponse res = sendCommand(cmd, AudioResponse.class); |
| 83 | assert res.getPosMillis() == millis; |
| 84 | return res.getChunk(); |
| 85 | } catch (RuntimeException e) { |
| 86 | return AudioChunk.SILENCE; |
| 87 | } |
82 | 88 | } |
83 | 89 | |
84 | 90 | @Override |
… |
… |
|
103 | 109 | } |
104 | 110 | |
105 | 111 | @Override |
106 | | public final <T extends Response> T sendCommand(Command command, Class<T> expectedClass) { |
| 112 | public final <T extends Response> T sendCommand(Command command, |
| 113 | Class<T> expectedClass) { |
107 | 114 | Response res = super.sendCommand(command, Response.class); |
108 | 115 | while (res instanceof RequestBytesResponse) { |
109 | 116 | res = sendBytes((RequestBytesResponse) res); |
110 | 117 | } |
111 | | assert expectedClass.isInstance(res) : res + " is not " + expectedClass.getSimpleName(); |
| 118 | if (ErrorResponse.class.isInstance(res)) { |
| 119 | throw new RuntimeException(ErrorResponse.class.cast(res) |
| 120 | .getErrorMessage()); |
| 121 | } |
112 | 122 | return expectedClass.cast(res); |
113 | 123 | } |
114 | 124 | |
… |
… |
|
116 | 126 | int size = requestBytesResponse.getBufferSize(); |
117 | 127 | int pos = requestBytesResponse.getPosition(); |
118 | 128 | BinData subData = this.fileData.getSub(pos, pos + size); |
119 | | Response res = super.sendCommand(MediaMessages.createSendBytes(pos, subData), |
120 | | Response.class); |
| 129 | Response res = super.sendCommand(MediaMessages.createSendBytes(pos, |
| 130 | subData), Response.class); |
121 | 131 | return res; |
122 | 132 | } |
123 | 133 | |