Skip to content

Commit 82049f1

Browse files
authored
Add ErrorHandler to UpdatesListener #168 (#170)
1 parent 131d4ac commit 82049f1

File tree

8 files changed

+225
-128
lines changed

8 files changed

+225
-128
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.pengrad.telegrambot;
2+
3+
/**
4+
* Stas Parshin
5+
* 14 June 2019
6+
*/
7+
public interface ExceptionHandler {
8+
9+
void onException(TelegramException e);
10+
11+
}

library/src/main/java/com/pengrad/telegrambot/TelegramBot.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,15 @@ public void setUpdatesListener(UpdatesListener listener) {
6363
}
6464

6565
public void setUpdatesListener(UpdatesListener listener, GetUpdates request) {
66-
updatesHandler.start(this, listener, request);
66+
setUpdatesListener(listener, null, request);
67+
}
68+
69+
public void setUpdatesListener(UpdatesListener listener, ExceptionHandler exceptionHandler) {
70+
setUpdatesListener(listener, exceptionHandler, new GetUpdates());
71+
}
72+
73+
public void setUpdatesListener(UpdatesListener listener, ExceptionHandler exceptionHandler, GetUpdates request) {
74+
updatesHandler.start(this, listener, exceptionHandler, request);
6775
}
6876

6977
public void removeGetUpdatesListener() {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.pengrad.telegrambot;
2+
3+
import com.pengrad.telegrambot.response.BaseResponse;
4+
5+
/**
6+
* Stas Parshin
7+
* 17 June 2019
8+
*/
9+
public class TelegramException extends Exception {
10+
private BaseResponse response;
11+
12+
public TelegramException(String message, BaseResponse response) {
13+
super(message);
14+
this.response = response;
15+
}
16+
17+
public TelegramException(Exception e) {
18+
super(e);
19+
}
20+
21+
public BaseResponse response() {
22+
return response;
23+
}
24+
}

library/src/main/java/com/pengrad/telegrambot/impl/UpdatesHandler.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.pengrad.telegrambot.impl;
22

3-
import com.pengrad.telegrambot.Callback;
4-
import com.pengrad.telegrambot.TelegramBot;
5-
import com.pengrad.telegrambot.UpdatesListener;
3+
import com.pengrad.telegrambot.*;
64
import com.pengrad.telegrambot.model.Update;
75
import com.pengrad.telegrambot.request.GetUpdates;
86
import com.pengrad.telegrambot.response.GetUpdatesResponse;
@@ -22,22 +20,25 @@ public class UpdatesHandler {
2220

2321
private TelegramBot bot;
2422
private UpdatesListener listener;
23+
private ExceptionHandler exceptionHandler;
2524

2625
private final long sleepTimeout;
2726

2827
public UpdatesHandler(long sleepTimeout) {
2928
this.sleepTimeout = sleepTimeout;
3029
}
3130

32-
public void start(TelegramBot bot, UpdatesListener listener, GetUpdates request) {
31+
public void start(TelegramBot bot, UpdatesListener listener, ExceptionHandler exceptionHandler, GetUpdates request) {
3332
this.bot = bot;
3433
this.listener = listener;
34+
this.exceptionHandler = exceptionHandler;
3535
getUpdates(request);
3636
}
3737

3838
public void stop() {
3939
bot = null;
4040
listener = null;
41+
exceptionHandler = null;
4142
}
4243

4344
private void getUpdates(GetUpdates request) {
@@ -50,9 +51,15 @@ public void onResponse(GetUpdates request, GetUpdatesResponse response) {
5051

5152
if (!response.isOk() || response.updates() == null || response.updates().size() <= 0) {
5253
if (!response.isOk()) {
53-
Platform.get().log(Platform.INFO,
54-
"Update listener error for request " + request.toWebhookResponse() +
55-
" with response " + response.errorCode() + " " + response.description(), null);
54+
if (exceptionHandler != null) {
55+
String message = "GetUpdates failed with error_code " +
56+
response.errorCode() + " " + response.description();
57+
exceptionHandler.onException(new TelegramException(message, response));
58+
} else {
59+
Platform.get().log(Platform.INFO,
60+
"Update listener error for request " + request.toWebhookResponse() +
61+
" with response " + response.errorCode() + " " + response.description(), null);
62+
}
5663
}
5764
sleep();
5865
getUpdates(request);
@@ -73,7 +80,11 @@ public void onResponse(GetUpdates request, GetUpdatesResponse response) {
7380

7481
@Override
7582
public void onFailure(GetUpdates request, IOException e) {
76-
Platform.get().log(Platform.INFO, "Update listener failure", e);
83+
if (exceptionHandler != null) {
84+
exceptionHandler.onException(new TelegramException(e));
85+
} else {
86+
Platform.get().log(Platform.INFO, "Update listener failure", e);
87+
}
7788
sleep();
7889
getUpdates(request);
7990
}

library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ public void onFailure(GetMe request, IOException e) {
13551355
throw new RuntimeException(e);
13561356
}
13571357
});
1358-
latch.await(10, TimeUnit.SECONDS);
1358+
assertTrue(latch.await(5, TimeUnit.SECONDS));
13591359
}
13601360

13611361
@Test
@@ -1372,7 +1372,7 @@ public void onFailure(GetMe request, IOException e) {
13721372
latch.countDown();
13731373
}
13741374
});
1375-
latch.await(10, TimeUnit.SECONDS);
1375+
assertTrue(latch.await(5, TimeUnit.SECONDS));
13761376
}
13771377

13781378
@Test

library/src/test/java/com/pengrad/telegrambot/TestGetUpdatesListener.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

library/src/test/java/com/pengrad/telegrambot/TestLoopGetUpdates.java

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)