diff --git a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java index f0a4f437..d2b1da69 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MyApplication.java @@ -1,5 +1,6 @@ package com.idormy.sms.forwarder; +import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.Application; import android.content.Context; @@ -29,6 +30,7 @@ public class MyApplication extends Application { //是否关闭页面提示 public static boolean showHelpTip = true; SharedPreferencesHelper sharedPreferencesHelper; + @SuppressLint("StaticFieldLeak") private static Context context; @Override diff --git a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java index 6f931d10..14886e6e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -102,15 +102,8 @@ public class SettingActivity extends AppCompatActivity { batterySetting(findViewById(R.id.switch_battery_setting)); //不在最近任务列表中显示 switchExcludeFromRecents(findViewById(R.id.switch_exclude_from_recents)); - - //是否开启失败重试 - switchRetryDelay(findViewById(R.id.switch_retry_delay)); //接口请求失败重试时间间隔 - editRetryDelayTime(findViewById(R.id.et_retry_delay_time1), 1); - editRetryDelayTime(findViewById(R.id.et_retry_delay_time2), 2); - editRetryDelayTime(findViewById(R.id.et_retry_delay_time3), 3); - editRetryDelayTime(findViewById(R.id.et_retry_delay_time4), 4); - editRetryDelayTime(findViewById(R.id.et_retry_delay_time5), 5); + editRetryDelayTime(findViewById(R.id.et_retry_times), findViewById(R.id.et_delay_time)); //设备备注 editAddExtraDeviceMark(findViewById(R.id.et_add_extra_device_mark)); @@ -589,32 +582,31 @@ public class SettingActivity extends AppCompatActivity { }); } - //是否开启失败重试 - @SuppressLint("UseSwitchCompatOrMaterialCode") - private void switchRetryDelay(Switch switch_retry_delay) { - switch_retry_delay.setChecked(SettingUtil.getSwitchRetryDelay()); - - switch_retry_delay.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (isChecked - && SettingUtil.getRetryDelayTime(1) == 0 - && SettingUtil.getRetryDelayTime(2) == 0 - && SettingUtil.getRetryDelayTime(3) == 0 - && SettingUtil.getRetryDelayTime(4) == 0 - && SettingUtil.getRetryDelayTime(5) == 0) { - Toast.makeText(context, "所有间隔时间都为0,无法启用", Toast.LENGTH_SHORT).show(); - SettingUtil.switchRetryDelay(false); - return; + //接口请求失败重试时间间隔 + private void editRetryDelayTime(final EditText et_retry_times, final EditText et_delay_time) { + et_retry_times.setText(String.valueOf(SettingUtil.getRetryTimes())); + et_retry_times.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { } - SettingUtil.switchRetryDelay(isChecked); - Log.d(TAG, "switchRetryDelay:" + isChecked); - }); - } - //接口请求失败重试时间间隔 - private void editRetryDelayTime(final EditText et_retry_delay_time, final int index) { - et_retry_delay_time.setText(String.valueOf(SettingUtil.getRetryDelayTime(index))); + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + String retryTimes = et_retry_times.getText().toString().trim(); + if (!retryTimes.isEmpty()) { + SettingUtil.setRetryTimes(Integer.parseInt(retryTimes)); + } else { + SettingUtil.setRetryTimes(0); + } + } + }); - et_retry_delay_time.addTextChangedListener(new TextWatcher() { + et_delay_time.setText(String.valueOf(SettingUtil.getDelayTime())); + et_delay_time.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -625,20 +617,11 @@ public class SettingActivity extends AppCompatActivity { @Override public void afterTextChanged(Editable s) { - String delayTime = et_retry_delay_time.getText().toString().trim(); + String delayTime = et_delay_time.getText().toString().trim(); if (!delayTime.isEmpty()) { - SettingUtil.setRetryDelayTime(index, Integer.parseInt(delayTime)); + SettingUtil.setDelayTime(Integer.parseInt(delayTime)); } else { - SettingUtil.setRetryDelayTime(index, 0); - } - - if (SettingUtil.getRetryDelayTime(1) == 0 - && SettingUtil.getRetryDelayTime(2) == 0 - && SettingUtil.getRetryDelayTime(3) == 0 - && SettingUtil.getRetryDelayTime(4) == 0 - && SettingUtil.getRetryDelayTime(5) == 0) { - Toast.makeText(context, "所有间隔时间都为0,自动禁用失败重试", Toast.LENGTH_SHORT).show(); - SettingUtil.switchRetryDelay(false); + SettingUtil.setDelayTime(1); } } }); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java index f2a3734d..6e38fbdf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java @@ -40,12 +40,17 @@ import com.idormy.sms.forwarder.model.vo.WebNotifySettingVo; import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.NetUtil; import com.idormy.sms.forwarder.utils.RuleUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.concurrent.TimeUnit; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; public class SendUtil { private static final String TAG = "SendUtil"; @@ -128,7 +133,7 @@ public class SendUtil { for (SenderModel senderModel : senderModels) { String smsTemplate = ruleModel.getSwitchSmsTemplate() ? ruleModel.getSmsTemplate() : ""; String regexReplace = ruleModel.getSwitchRegexReplace() ? ruleModel.getRegexReplace() : ""; - SendUtil.senderSendMsg(handler, smsVo, senderModel, logVo.getId(), smsTemplate, regexReplace); + SendUtil.senderSendMsg(handler, null, smsVo, senderModel, logVo.getId(), smsTemplate, regexReplace); } } } catch (Exception e) { @@ -162,15 +167,47 @@ public class SendUtil { for (SenderModel senderModel : senderModels) { String smsTemplate = ruleModel.getSwitchSmsTemplate() ? ruleModel.getSmsTemplate() : ""; String regexReplace = ruleModel.getSwitchRegexReplace() ? ruleModel.getRegexReplace() : ""; - SendUtil.senderSendMsg(handError, smsVo, senderModel, 0, smsTemplate, regexReplace); + SendUtil.senderSendMsg(handError, null, smsVo, senderModel, 0, smsTemplate, regexReplace); } } + @SuppressWarnings("ResultOfMethodCallIgnored") public static void senderSendMsgNoHandError(SmsVo smsVo, SenderModel senderModel, long logId, String smsTemplate, String regexReplace) { - SendUtil.senderSendMsg(null, smsVo, senderModel, logId, smsTemplate, regexReplace); + //网络请求+重试比较耗时,创建子线程处理 +// new Thread(new Runnable() { +// @Override +// public void run() { + //是否需要失败重试 + int retryTimes = SettingUtil.getRetryTimes(); + if (retryTimes < 1) { + SendUtil.senderSendMsg(null, null, smsVo, senderModel, logId, smsTemplate, regexReplace); + return; + } + + try { + int delayTime = SettingUtil.getDelayTime(); + Observable + .create(emitter -> { + Log.w(TAG, "RxJava 开始请求接口..."); + SendUtil.senderSendMsg(null, emitter, smsVo, senderModel, logId, smsTemplate, regexReplace); + }) + .retryWhen(attempts -> attempts.zipWith(Observable.range(1, retryTimes), (n, i) -> i).flatMap(i -> { + long delay = (long) i * delayTime; + Log.w(TAG, "RxJava 请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + }).concatWith(Observable.error(new RuntimeException("请求接口失败,已重试 " + retryTimes + " 次")))) + .subscribe( + (i) -> System.out.println("onNext with " + i), + (error) -> System.out.println("OnError with " + error) + ); + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + } +// } +// }).start();//启动线程 } - public static void senderSendMsg(Handler handError, SmsVo smsVo, SenderModel senderModel, long logId, String smsTemplate, String regexReplace) { + public static void senderSendMsg(Handler handError, ObservableEmitter emitter, SmsVo smsVo, SenderModel senderModel, long logId, String smsTemplate, String regexReplace) { Log.i(TAG, "senderSendMsg smsVo:" + smsVo.toString() + "senderModel:" + senderModel.toString()); @@ -187,7 +224,7 @@ public class SendUtil { DingDingSettingVo dingDingSettingVo = JSON.parseObject(senderModel.getJsonSetting(), DingDingSettingVo.class); if (dingDingSettingVo != null) { try { - SenderDingdingMsg.sendMsg(logId, handError, dingDingSettingVo.getToken(), dingDingSettingVo.getSecret(), dingDingSettingVo.getAtMobiles(), dingDingSettingVo.getAtAll(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderDingdingMsg.sendMsg(logId, handError, emitter, dingDingSettingVo.getToken(), dingDingSettingVo.getSecret(), dingDingSettingVo.getAtMobiles(), dingDingSettingVo.getAtAll(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: dingding error " + e.getMessage()); @@ -202,7 +239,7 @@ public class SendUtil { EmailSettingVo emailSettingVo = JSON.parseObject(senderModel.getJsonSetting(), EmailSettingVo.class); if (emailSettingVo != null) { try { - SenderMailMsg.sendEmail(logId, handError, emailSettingVo.getProtocol(), emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(), + SenderMailMsg.sendEmail(logId, handError, emitter, emailSettingVo.getProtocol(), emailSettingVo.getHost(), emailSettingVo.getPort(), emailSettingVo.getSsl(), emailSettingVo.getFromEmail(), emailSettingVo.getNickname(), emailSettingVo.getPwd(), emailSettingVo.getToEmail(), smsVo.getTitleForSend(emailSettingVo.getTitle(), regexReplace), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); @@ -218,7 +255,7 @@ public class SendUtil { BarkSettingVo barkSettingVo = JSON.parseObject(senderModel.getJsonSetting(), BarkSettingVo.class); if (barkSettingVo != null) { try { - SenderBarkMsg.sendMsg(logId, handError, barkSettingVo.getServer(), barkSettingVo.getIcon(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace), senderModel.getName()); + SenderBarkMsg.sendMsg(logId, handError, emitter, barkSettingVo.getServer(), barkSettingVo.getIcon(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace), senderModel.getName()); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: SenderBarkMsg error " + e.getMessage()); @@ -233,7 +270,7 @@ public class SendUtil { WebNotifySettingVo webNotifySettingVo = JSON.parseObject(senderModel.getJsonSetting(), WebNotifySettingVo.class); if (webNotifySettingVo != null) { try { - SenderWebNotifyMsg.sendMsg(logId, handError, webNotifySettingVo.getWebServer(), webNotifySettingVo.getWebParams(), webNotifySettingVo.getSecret(), webNotifySettingVo.getMethod(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderWebNotifyMsg.sendMsg(logId, handError, emitter, webNotifySettingVo.getWebServer(), webNotifySettingVo.getWebParams(), webNotifySettingVo.getSecret(), webNotifySettingVo.getMethod(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: SenderWebNotifyMsg error " + e.getMessage()); @@ -248,7 +285,7 @@ public class SendUtil { QYWXGroupRobotSettingVo qywxGroupRobotSettingVo = JSON.parseObject(senderModel.getJsonSetting(), QYWXGroupRobotSettingVo.class); if (qywxGroupRobotSettingVo != null) { try { - SenderQyWxGroupRobotMsg.sendMsg(logId, handError, qywxGroupRobotSettingVo.getWebHook(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderQyWxGroupRobotMsg.sendMsg(logId, handError, emitter, qywxGroupRobotSettingVo.getWebHook(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: SenderQyWxGroupRobotMsg error " + e.getMessage()); @@ -263,7 +300,7 @@ public class SendUtil { QYWXAppSettingVo qYWXAppSettingVo = JSON.parseObject(senderModel.getJsonSetting(), QYWXAppSettingVo.class); if (qYWXAppSettingVo != null) { try { - SenderQyWxAppMsg.sendMsg(logId, handError, senderModel, qYWXAppSettingVo, smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderQyWxAppMsg.sendMsg(logId, handError, emitter, senderModel, qYWXAppSettingVo, smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: qywx_app error " + e.getMessage()); @@ -278,7 +315,7 @@ public class SendUtil { ServerChanSettingVo serverChanSettingVo = JSON.parseObject(senderModel.getJsonSetting(), ServerChanSettingVo.class); if (serverChanSettingVo != null) { try { - SenderServerChanMsg.sendMsg(logId, handError, serverChanSettingVo.getSendKey(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderServerChanMsg.sendMsg(logId, handError, emitter, serverChanSettingVo.getSendKey(), smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: SenderServerChanMsg error " + e.getMessage()); @@ -293,7 +330,7 @@ public class SendUtil { TelegramSettingVo telegramSettingVo = JSON.parseObject(senderModel.getJsonSetting(), TelegramSettingVo.class); if (telegramSettingVo != null) { try { - SenderTelegramMsg.sendMsg(logId, handError, telegramSettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace), telegramSettingVo.getMethod()); + SenderTelegramMsg.sendMsg(logId, handError, emitter, telegramSettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace), telegramSettingVo.getMethod()); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: SenderTelegramMsg error " + e.getMessage()); @@ -335,7 +372,7 @@ public class SendUtil { FeiShuSettingVo feiShuSettingVo = JSON.parseObject(senderModel.getJsonSetting(), FeiShuSettingVo.class); if (feiShuSettingVo != null) { try { - SenderFeishuMsg.sendMsg(logId, handError, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getMobile(), smsVo.getDate(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderFeishuMsg.sendMsg(logId, handError, emitter, feiShuSettingVo.getWebhook(), feiShuSettingVo.getSecret(), smsVo.getMobile(), smsVo.getDate(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: feishu error " + e.getMessage()); @@ -350,7 +387,7 @@ public class SendUtil { PushPlusSettingVo pushPlusSettingVo = JSON.parseObject(senderModel.getJsonSetting(), PushPlusSettingVo.class); if (pushPlusSettingVo != null) { try { - SenderPushPlusMsg.sendMsg(logId, handError, pushPlusSettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderPushPlusMsg.sendMsg(logId, handError, emitter, pushPlusSettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: feishu error " + e.getMessage()); @@ -365,7 +402,7 @@ public class SendUtil { GotifySettingVo gotifySettingVo = JSON.parseObject(senderModel.getJsonSetting(), GotifySettingVo.class); if (gotifySettingVo != null) { try { - SenderGotifyMsg.sendMsg(logId, handError, gotifySettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); + SenderGotifyMsg.sendMsg(logId, handError, emitter, gotifySettingVo, smsVo.getMobile(), smsVo.getSmsVoForSend(smsTemplate, regexReplace)); } catch (Exception e) { LogUtil.updateLog(logId, 0, e.getMessage()); Log.e(TAG, "senderSendMsg: gotify error " + e.getMessage()); diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java index 6b4d0faf..047a34fc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java @@ -6,16 +6,13 @@ import android.util.Log; import androidx.annotation.NonNull; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; import java.util.Objects; -import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -23,12 +20,11 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderBarkMsg extends SenderBaseMsg { static final String TAG = "SenderBarkMsg"; - public static void sendMsg(final long logId, final Handler handError, String barkServer, String barkIcon, String from, String content, String groupName) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, String barkServer, String barkIcon, String from, String content, String groupName) throws Exception { Log.i(TAG, "sendMsg barkServer:" + barkServer + " from:" + from + " content:" + content); if (barkServer == null || barkServer.isEmpty()) { @@ -59,49 +55,31 @@ public class SenderBarkMsg extends SenderBaseMsg { final String requestUrl = barkServer; Log.i(TAG, "requestUrl:" + requestUrl); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient(); - final Request request = new Request.Builder().url(requestUrl).get().build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"message\":\"success\"")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient(); + final Request request = new Request.Builder().url(requestUrl).get().build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"message\":\"success\"")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java index bb843c52..0026c32b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java @@ -20,4 +20,5 @@ public class SenderBaseMsg { handError.sendMessage(msg); } } -} + +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java index e70c7ece..edd592f0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; @@ -19,12 +18,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -34,12 +31,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"ResultOfMethodCallIgnored", "rawtypes", "unchecked", "deprecation"}) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderDingdingMsg extends SenderBaseMsg { static final String TAG = "SenderDingdingMsg"; - public static void sendMsg(final long logId, final Handler handError, String token, String secret, String atMobiles, Boolean atAll, String content) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, String token, String secret, String atMobiles, Boolean atAll, String content) throws Exception { Log.i(TAG, "sendMsg token:" + token + " secret:" + secret + " atMobiles:" + atMobiles + " atAll:" + atAll + " content:" + content); if (token == null || token.isEmpty()) { @@ -91,55 +88,38 @@ public class SenderDingdingMsg extends SenderBaseMsg { final String requestMsg = JSON.toJSONString(textMsgMap); Log.i(TAG, "requestMsg:" + requestMsg); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - - final Request request = new Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java index 08e341e6..a6a449a6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java @@ -18,12 +18,10 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -33,6 +31,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderFeishuMsg extends SenderBaseMsg { static final String TAG = "SenderFeishuMsg"; @@ -90,8 +89,8 @@ public class SenderFeishuMsg extends SenderBaseMsg { " }\n" + "}"; - @SuppressWarnings("rawtypes") - public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String from, Date date, String content) throws Exception { + //@SuppressWarnings("rawtypes") + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, String webhook, String secret, String from, Date date, String content) throws Exception { Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " content:" + content); if (webhook == null || webhook.isEmpty()) { @@ -121,60 +120,42 @@ public class SenderFeishuMsg extends SenderBaseMsg { textMsgMap.put("msg_type", "interactive"); textMsgMap.put("card", "${CARD_BODY}"); - final String requestUrl = webhook; - Log.i(TAG, "requestUrl:" + requestUrl); + Log.i(TAG, "requestUrl:" + webhook); final String requestMsg = JSON.toJSONString(textMsgMap).replace("\"${CARD_BODY}\"", buildMsg(from, date, content)); Log.i(TAG, "requestMsg:" + requestMsg); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient(); - @SuppressWarnings("deprecation") RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - - final Request request = new Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"StatusCode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient(); + @SuppressWarnings("deprecation") RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + + final Request request = new Request.Builder() + .url(webhook) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"StatusCode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + } private static String buildMsg(String from, Date date, String content) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java index ce864c2d..5fad7a85 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java @@ -11,6 +11,7 @@ import com.idormy.sms.forwarder.utils.LogUtil; import java.io.IOException; import java.util.Objects; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; @@ -23,7 +24,7 @@ public class SenderGotifyMsg extends SenderBaseMsg { static final String TAG = "SenderGotifyMsg"; - public static void sendMsg(final long logId, final Handler handError, GotifySettingVo gotifySettingVo, String title, String message) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, GotifySettingVo gotifySettingVo, String title, String message) throws Exception { //具体消息内容 if (message == null || message.isEmpty()) return; @@ -45,6 +46,7 @@ public class SenderGotifyMsg extends SenderBaseMsg { public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new RuntimeException("RxJava 请求接口异常...")); } @Override diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java index e3614e78..499cc341 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java @@ -3,88 +3,69 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import com.idormy.sms.forwarder.MyApplication; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import com.smailnet.emailkit.Draft; import com.smailnet.emailkit.EmailKit; import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; -@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderMailMsg extends SenderBaseMsg { private static final String TAG = "SenderMailMsg"; - public static void sendEmail(final long logId, final Handler handError, final String protocol, final String host, final String port, final boolean ssl, final String fromEmail, final String nickname, final String pwd, final String toAdd, final String title, final String content) { + public static void sendEmail(final long logId, final Handler handError, final ObservableEmitter emitter, final String protocol, final String host, final String port, final boolean ssl, final String fromEmail, final String nickname, final String pwd, final String toAdd, final String title, final String content) { Log.d(TAG, "sendEmail: protocol:" + protocol + " host:" + host + " port:" + port + " ssl:" + ssl + " fromEmail:" + fromEmail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - try { - //初始化框架 - //EmailKit.initialize(this); - - //配置发件人邮件服务器参数 - EmailKit.Config config = new EmailKit.Config() - .setSMTP(host, Integer.parseInt(port), ssl) //设置SMTP服务器主机地址、端口和是否开启ssl - .setAccount(fromEmail) //发件人邮箱 - .setPassword(pwd); //密码或授权码 - - //多个收件人邮箱 - Set toSet = new HashSet<>(Arrays.asList(toAdd.replace(",", ",").split(","))); - - //设置一封草稿邮件 - Draft draft = new Draft() - .setNickname(nickname) //发件人昵称 - .setTo(toSet) //收件人邮箱 - .setSubject(title) //邮件主题 - .setText(content); //邮件正文 - - //使用SMTP服务发送邮件 - EmailKit.useSMTPService(config) - .send(draft, new EmailKit.GetSendCallback() { - @Override - public void onSuccess() { - LogUtil.updateLog(logId, 2, "发送成功"); - Toast(handError, TAG, "发送成功"); - } - - @Override - public void onFailure(String errMsg) { - LogUtil.updateLog(logId, 0, errMsg); - Toast(handError, TAG, "发送失败,错误:" + errMsg); - } - }); - - //销毁框架 - EmailKit.destroy(); - - } catch (Exception e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.e(TAG, e.getMessage(), e); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + try { + //初始化框架 + EmailKit.initialize(MyApplication.getContext()); + + //配置发件人邮件服务器参数 + EmailKit.Config config = new EmailKit.Config() + .setSMTP(host, Integer.parseInt(port), ssl) //设置SMTP服务器主机地址、端口和是否开启ssl + .setAccount(fromEmail) //发件人邮箱 + .setPassword(pwd); //密码或授权码 + + //多个收件人邮箱 + Set toSet = new HashSet<>(Arrays.asList(toAdd.replace(",", ",").split(","))); + + //设置一封草稿邮件 + Draft draft = new Draft() + .setNickname(nickname) //发件人昵称 + .setTo(toSet) //收件人邮箱 + .setSubject(title) //邮件主题 + .setText(content); //邮件正文 + + //使用SMTP服务发送邮件 + EmailKit.useSMTPService(config) + .send(draft, new EmailKit.GetSendCallback() { + @Override + public void onSuccess() { + LogUtil.updateLog(logId, 2, "发送成功"); + Toast(handError, TAG, "发送成功"); + } + + @Override + public void onFailure(String errMsg) { + LogUtil.updateLog(logId, 0, errMsg); + Toast(handError, TAG, "发送失败,错误:" + errMsg); + } + }); + + //销毁框架 + EmailKit.destroy(); + + } catch (Exception e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Log.e(TAG, e.getMessage(), e); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } } } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java index 02e81027..f1b0e7c3 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java @@ -8,15 +8,12 @@ import androidx.annotation.NonNull; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.model.vo.PushPlusSettingVo; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -26,12 +23,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"ResultOfMethodCallIgnored", "rawtypes", "unchecked", "deprecation"}) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderPushPlusMsg extends SenderBaseMsg { static final String TAG = "SenderPushPlusMsg"; - public static void sendMsg(final long logId, final Handler handError, PushPlusSettingVo pushPlusSettingVo, String title, String content) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, PushPlusSettingVo pushPlusSettingVo, String title, String content) throws Exception { //用户令牌 String token = pushPlusSettingVo.getToken(); @@ -77,55 +74,38 @@ public class SenderPushPlusMsg extends SenderBaseMsg { final String requestMsg = JSON.toJSONString(textMsgMap); Log.i(TAG, "requestMsg:" + requestMsg); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - - final Request request = new Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"code\":200")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"code\":200")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java index 7981f223..c4ce6a35 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java @@ -14,15 +14,12 @@ import com.alibaba.fastjson.JSONObject; import com.idormy.sms.forwarder.model.SenderModel; import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -32,12 +29,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderQyWxAppMsg extends SenderBaseMsg { static final String TAG = "SenderQyWxAppMsg"; - public static void sendMsg(final long logId, final Handler handError, final SenderModel senderModel, final QYWXAppSettingVo qYWXAppSettingVo, String content) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, final SenderModel senderModel, final QYWXAppSettingVo qYWXAppSettingVo, String content) throws Exception { if (qYWXAppSettingVo == null) { Toast(handError, TAG, "参数错误"); @@ -56,101 +53,82 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { return; } - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - //TODO:获取有效access_token - String accessToken = qYWXAppSettingVo.getAccessToken(); - if (accessToken == null || accessToken.isEmpty()) { - - String getTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"; - getTokenUrl += "corpid=" + corpID; - getTokenUrl += "&corpsecret=" + secret; - Log.d(TAG, "getTokenUrl:" + getTokenUrl); - - OkHttpClient client = new OkHttpClient(); - final Request request = new Request.Builder().url(getTokenUrl).get().build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - qYWXAppSettingVo.setAccessToken(""); - qYWXAppSettingVo.setExpiresIn(0L); - if (senderModel != null) { - senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); - SenderUtil.updateSender(senderModel); - } - Log.d(TAG, "onFailure:" + e.getMessage()); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "获取access_token失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - - emitter.onError(new RuntimeException("请求接口异常...")); - } - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String json = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Code:" + response.code() + " Response: " + json); - JSONObject jsonObject = JSON.parseObject(json); - int errcode = jsonObject.getInteger("errcode"); - if (errcode == 0) { - String access_token = jsonObject.getString("access_token"); - long expires_in = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000L; //提前2分钟过期 - Log.d(TAG, "access_token:" + access_token); - Log.d(TAG, "expires_in:" + expires_in); - - qYWXAppSettingVo.setAccessToken(access_token); - qYWXAppSettingVo.setExpiresIn(expires_in); - if (senderModel != null) { - senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); - SenderUtil.updateSender(senderModel); - } - - sendTextMsg(emitter, logId, handError, agentID, toUser, content, access_token); - } else { - String errmsg = jsonObject.getString("errmsg"); - LogUtil.updateLog(logId, 0, errmsg); - Log.d(TAG, "onFailure:" + errmsg); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "获取access_token失败:" + errmsg); - msg.setData(bundle); - handError.sendMessage(msg); - } - - emitter.onError(new RuntimeException("请求接口异常...")); - } - } - - }); - } else { - sendTextMsg(emitter, logId, handError, agentID, toUser, content, accessToken); + //TODO:获取有效access_token + String accessToken = qYWXAppSettingVo.getAccessToken(); + if (accessToken == null || accessToken.isEmpty()) { + + String getTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?"; + getTokenUrl += "corpid=" + corpID; + getTokenUrl += "&corpsecret=" + secret; + Log.d(TAG, "getTokenUrl:" + getTokenUrl); + + OkHttpClient client = new OkHttpClient(); + final Request request = new Request.Builder().url(getTokenUrl).get().build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + qYWXAppSettingVo.setAccessToken(""); + qYWXAppSettingVo.setExpiresIn(0L); + if (senderModel != null) { + senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); + SenderUtil.updateSender(senderModel); + } + Log.d(TAG, "onFailure:" + e.getMessage()); + if (handError != null) { + Message msg = new Message(); + msg.what = NOTIFY; + Bundle bundle = new Bundle(); + bundle.putString("DATA", "获取access_token失败:" + e.getMessage()); + msg.setData(bundle); + handError.sendMessage(msg); + + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); } + } + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String json = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Code:" + response.code() + " Response: " + json); + JSONObject jsonObject = JSON.parseObject(json); + int errcode = jsonObject.getInteger("errcode"); + if (errcode == 0) { + String access_token = jsonObject.getString("access_token"); + long expires_in = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000L; //提前2分钟过期 + Log.d(TAG, "access_token:" + access_token); + Log.d(TAG, "expires_in:" + expires_in); + + qYWXAppSettingVo.setAccessToken(access_token); + qYWXAppSettingVo.setExpiresIn(expires_in); + if (senderModel != null) { + senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); + SenderUtil.updateSender(senderModel); + } + + sendTextMsg(emitter, logId, handError, agentID, toUser, content, access_token); + } else { + String errmsg = jsonObject.getString("errmsg"); + LogUtil.updateLog(logId, 0, errmsg); + Log.d(TAG, "onFailure:" + errmsg); + if (handError != null) { + Message msg = new Message(); + msg.what = NOTIFY; + Bundle bundle = new Bundle(); + bundle.putString("DATA", "获取access_token失败:" + errmsg); + msg.setData(bundle); + handError.sendMessage(msg); + } + + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + } - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + }); + } else { + sendTextMsg(emitter, logId, handError, agentID, toUser, content, accessToken); + } } @@ -186,7 +164,7 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { public void onFailure(@NonNull Call call, @NonNull final IOException e) { LogUtil.updateLog(logId, 0, e.getMessage()); Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); } @Override diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java index ccd6468b..2f17bba1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java @@ -7,15 +7,12 @@ import androidx.annotation.NonNull; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -25,12 +22,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { static final String TAG = "SenderQyWxGroupRobotMsg"; - public static void sendMsg(final long logId, final Handler handError, String webHook, String from, String content) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, String webHook, String from, String content) throws Exception { Log.i(TAG, "sendMsg webHook:" + webHook + " from:" + from + " content:" + content); if (webHook == null || webHook.isEmpty()) { @@ -43,60 +40,42 @@ public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { textText.put("content", content); textMsgMap.put("text", textText); - final String requestUrl = webHook; - Log.i(TAG, "requestUrl:" + requestUrl); + Log.i(TAG, "requestUrl:" + webHook); final String requestMsg = JSON.toJSONString(textMsgMap); Log.i(TAG, "requestMsg:" + requestMsg); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - - final Request request = new Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + + final Request request = new Request.Builder() + .url(webHook) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java index ac392213..b71fddbf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java @@ -6,13 +6,10 @@ import android.util.Log; import androidx.annotation.NonNull; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.Objects; -import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -22,12 +19,11 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings("ResultOfMethodCallIgnored") public class SenderServerChanMsg extends SenderBaseMsg { static final String TAG = "SenderServerChanMsg"; - public static void sendMsg(final long logId, final Handler handError, final String sendKey, final String title, final String desp) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, final String sendKey, final String title, final String desp) throws Exception { Log.i(TAG, "sendMsg sendKey:" + sendKey + " title:" + title + " desp:" + desp); if (sendKey == null || sendKey.isEmpty()) { @@ -40,54 +36,37 @@ public class SenderServerChanMsg extends SenderBaseMsg { final String requestMsg = desp.replaceFirst("^" + title + "(.*)", "").trim(); Log.i(TAG, "requestMsg:" + requestMsg); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient().newBuilder().build(); - MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) - .addFormDataPart("title", title) - .addFormDataPart("desp", requestMsg); - - RequestBody body = builder.build(); - Request request = new Request.Builder().url(requestUrl).method("POST", body).build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"code\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + OkHttpClient client = new OkHttpClient().newBuilder().build(); + MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("title", title) + .addFormDataPart("desp", requestMsg); + + RequestBody body = builder.build(); + Request request = new Request.Builder().url(requestUrl).method("POST", body).build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"code\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java index 6753f49b..74b48f5f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.model.vo.TelegramSettingVo; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.InetSocketAddress; @@ -19,7 +18,6 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Authenticator; import okhttp3.Call; @@ -32,12 +30,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"rawtypes", "unchecked", "deprecation", "ResultOfMethodCallIgnored"}) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class SenderTelegramMsg extends SenderBaseMsg { static final String TAG = "SenderTelegramMsg"; - public static void sendMsg(final long logId, final Handler handError, TelegramSettingVo telegramSettingVo, final String from, final String text, final String method) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, TelegramSettingVo telegramSettingVo, final String from, final String text, final String method) throws Exception { Log.i(TAG, "sendMsg telegramSettingVo:" + telegramSettingVo.toString() + " text:" + text); String apiToken = telegramSettingVo.getApiToken(); @@ -64,106 +62,90 @@ public class SenderTelegramMsg extends SenderBaseMsg { final String proxyUsername = telegramSettingVo.getProxyUsername(); final String proxyPassword = telegramSettingVo.getProxyPassword(); - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - try { - Proxy proxy = null; - Authenticator proxyAuthenticator = null; - - if ((proxyType == Proxy.Type.HTTP || proxyType == Proxy.Type.SOCKS) && !TextUtils.isEmpty(proxyHost) && !TextUtils.isEmpty(proxyPort)) { - proxy = new Proxy(proxyType, new InetSocketAddress(proxyHost, Integer.parseInt(proxyPort))); - - if (needProxyAuthenticator && (!TextUtils.isEmpty(proxyUsername) || !TextUtils.isEmpty(proxyPassword))) { - proxyAuthenticator = (route, response) -> { - String credential = Credentials.basic("jesse", "password1"); - return response.request().newBuilder() - .header("Authorization", credential) - .build(); - }; - } - } - - OkHttpClient client; - if (proxy != null && proxyAuthenticator != null) { - client = new OkHttpClient().newBuilder().proxy(proxy).proxyAuthenticator(proxyAuthenticator) - .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) - .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); - } else if (proxy != null) { - client = new OkHttpClient().newBuilder().proxy(proxy) - .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) - .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); - } else { - client = new OkHttpClient().newBuilder() - .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) - .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); - } - - final Request request; - if (method.equals("GET")) { - request = new Request.Builder() - .url(requestUrl + "?chat_id=" + chatId + "&text=" + finalText) - .build(); - } else { - Map bodyMap = new HashMap(); - bodyMap.put("chat_id", chatId); - bodyMap.put("text", finalText); - bodyMap.put("parse_mode", "HTML"); - - String requestMsg = JSON.toJSONString(bodyMap); - Log.i(TAG, "requestMsg:" + requestMsg); - - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - request = new Request.Builder() - .url(requestUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - } - - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"ok\":true")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - } catch (Exception e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.e(TAG, e.getMessage(), e); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); + try { + Proxy proxy = null; + Authenticator proxyAuthenticator = null; + + if ((proxyType == Proxy.Type.HTTP || proxyType == Proxy.Type.SOCKS) && !TextUtils.isEmpty(proxyHost) && !TextUtils.isEmpty(proxyPort)) { + proxy = new Proxy(proxyType, new InetSocketAddress(proxyHost, Integer.parseInt(proxyPort))); + + if (needProxyAuthenticator && (!TextUtils.isEmpty(proxyUsername) || !TextUtils.isEmpty(proxyPassword))) { + proxyAuthenticator = (route, response) -> { + String credential = Credentials.basic("jesse", "password1"); + return response.request().newBuilder() + .header("Authorization", credential) + .build(); + }; + } + } + + OkHttpClient client; + if (proxy != null && proxyAuthenticator != null) { + client = new OkHttpClient().newBuilder().proxy(proxy).proxyAuthenticator(proxyAuthenticator) + .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) + .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); + } else if (proxy != null) { + client = new OkHttpClient().newBuilder().proxy(proxy) + .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) + .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); + } else { + client = new OkHttpClient().newBuilder() + .connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS) + .connectionPool(new ConnectionPool(5, 1, TimeUnit.SECONDS)).build(); + } + + final Request request; + if (method.equals("GET")) { + request = new Request.Builder() + .url(requestUrl + "?chat_id=" + chatId + "&text=" + finalText) + .build(); + } else { + Map bodyMap = new HashMap(); + bodyMap.put("chat_id", chatId); + bodyMap.put("text", finalText); + bodyMap.put("parse_mode", "HTML"); + + String requestMsg = JSON.toJSONString(bodyMap); + Log.i(TAG, "requestMsg:" + requestMsg); + + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); + request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + } + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"ok\":true")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); } - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); + } + }); + + } catch (Exception e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Log.e(TAG, e.getMessage(), e); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java index 4c97d2be..94d394c6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java @@ -8,18 +8,15 @@ import androidx.annotation.NonNull; import com.idormy.sms.forwarder.utils.CertUtils; import com.idormy.sms.forwarder.utils.LogUtil; -import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Objects; -import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; @@ -30,12 +27,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -@SuppressWarnings({"deprecation", "ResultOfMethodCallIgnored"}) +@SuppressWarnings({"deprecation"}) public class SenderWebNotifyMsg extends SenderBaseMsg { static final String TAG = "SenderWebNotifyMsg"; - public static void sendMsg(final long logId, final Handler handError, String webServer, String webParams, String secret, String method, String from, String content) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final ObservableEmitter emitter, String webServer, String webParams, String secret, String method, String from, String content) throws Exception { Log.i(TAG, "sendMsg webServer:" + webServer + " webParams:" + webParams + " from:" + from + " content:" + content); if (webServer == null || webServer.isEmpty()) { @@ -95,53 +92,35 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { request = new Request.Builder().url(webServer).method("POST", body).build(); } - Observable - .create((ObservableEmitter emitter) -> { - Toast(handError, TAG, "开始请求接口..."); - - OkHttpClient client = new OkHttpClient().newBuilder() - //忽略https证书 - .sslSocketFactory(CertUtils.getSSLSocketFactory(), CertUtils.getX509TrustManager()) - .hostnameVerifier(CertUtils.getHostnameVerifier()) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(@NonNull Call call, @NonNull final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Toast(handError, TAG, "发送失败:" + e.getMessage()); - emitter.onError(new RuntimeException("请求接口异常...")); - } - - @Override - public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //返回http状态200即为成功 - if (200 == response.code()) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - } - }); - - }).retryWhen((Observable errorObservable) -> errorObservable - .zipWith(Observable.just( - SettingUtil.getRetryDelayTime(1), - SettingUtil.getRetryDelayTime(2), - SettingUtil.getRetryDelayTime(3), - SettingUtil.getRetryDelayTime(4), - SettingUtil.getRetryDelayTime(5) - ), (Throwable e, Integer time) -> time) - .flatMap((Integer delay) -> { - Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); - return Observable.timer(delay, TimeUnit.SECONDS); - })) - .subscribe(System.out::println); - } + OkHttpClient client = new OkHttpClient().newBuilder() + //忽略https证书 + .sslSocketFactory(CertUtils.getSSLSocketFactory(), CertUtils.getX509TrustManager()) + .hostnameVerifier(CertUtils.getHostnameVerifier()) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + if (emitter != null) emitter.onError(new Exception("RxJava 请求接口异常...")); + } + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //返回http状态200即为成功 + if (200 == response.code()) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + + } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java index c114301a..e1e79dcf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java @@ -21,12 +21,8 @@ public class Define { public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_CURRENT = "tsms_msg_key_string_battery_level_current"; public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM = "tsms_msg_key_string_battery_level_alarm"; public static final String SP_MSG_KEY_STRING_BATTERY_LEVEL_MAX = "tsms_msg_key_string_battery_level_max"; - public static final String SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY = "tsms_msg_key_switch_retry_delay"; - public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME1 = "tsms_msg_key_string_retry_delay_time1"; - public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME2 = "tsms_msg_key_string_retry_delay_time2"; - public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME3 = "tsms_msg_key_string_retry_delay_time3"; - public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME4 = "tsms_msg_key_string_retry_delay_time4"; - public static final String SP_MSG_KEY_STRING_RETRY_DELAY_TIME5 = "tsms_msg_key_string_retry_delay_time5"; + public static final String SP_MSG_KEY_STRING_RETRY_TIMES = "tsms_msg_key_retry_times"; + public static final String SP_MSG_KEY_STRING_DELAY_TIME = "tsms_msg_key_delay_time"; public static final String SP_MSG_KEY_STRING_ENABLE_SMSHUB_API = "tsms_msg_key_string_enable_smshub_api"; public static final String SP_MSG_KEY_STRING_SMSHUB_API_URL = "tsms_msg_key_string_smshub_api_url"; public static final String SP_MSG_KEY_STRING_ENABLE_HTTP_SERVER = "tsms_msg_key_string_enable_http_server"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 1de9c049..5bcc9577 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -178,34 +178,6 @@ public class SettingUtil { return !sp_setting.getBoolean("option_save_history_on", false); } - //接口请求失败重试 - private static String getRetryDelayTimeKey(int index) { - switch (index) { - case 1: - return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME1; - case 2: - return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME2; - case 3: - return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME3; - case 4: - return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME4; - case 5: - default: - return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME5; - } - } - - public static int getRetryDelayTime(int index) { - String key = getRetryDelayTimeKey(index); - return sp_setting.getInt(key, (int) Math.pow(2, (index - 1))); - } - - public static void setRetryDelayTime(int index, int retry_delay_time) { - String key = getRetryDelayTimeKey(index); - Log.d(TAG, "retry_delay_time_" + index + " :" + retry_delay_time); - sp_setting.edit().putInt(key, retry_delay_time).apply(); - } - public static String getPrevNoticeHash(String key) { return sp_setting.getString(key, ""); } @@ -238,14 +210,6 @@ public class SettingUtil { return sp_setting.getString(Define.SP_MSG_KEY_STRING_SMSHUB_API_URL, "http://xxx.com/send_api"); } - public static void switchRetryDelay(Boolean switchSmsTemplate) { - sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY, switchSmsTemplate).apply(); - } - - public static boolean getSwitchRetryDelay() { - return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_RETRY_DELAY, false); - } - public static void switchCallType1(Boolean switchCallType) { sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_1, switchCallType).apply(); } @@ -270,6 +234,22 @@ public class SettingUtil { return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_ENABLE_CALL_TYPE_3, true); } + public static int getRetryTimes() { + return sp_setting.getInt(Define.SP_MSG_KEY_STRING_RETRY_TIMES, 0); + } + + public static void setRetryTimes(int retry_times) { + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_RETRY_TIMES, retry_times).apply(); + } + + public static int getDelayTime() { + return sp_setting.getInt(Define.SP_MSG_KEY_STRING_DELAY_TIME, 1); + } + + public static void setDelayTime(int delay_time) { + sp_setting.edit().putInt(Define.SP_MSG_KEY_STRING_DELAY_TIME, delay_time).apply(); + } + //获取当前版本名称 public static String getVersionName() { // 获取PackageManager的实例 diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 8fac9226..acffd33c 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -657,95 +657,56 @@ tools:ignore="SmallSp" /> - + android:layout_marginStart="20dp" + android:text="@string/retry" + android:textStyle="bold" /> - - - - - - - - - - + - + android:text="@string/times" + android:textStyle="bold" /> + + + + + + + PushPlus Settings Gotify Settings 19999999999 - Test content @ - 【JD】code 387481, ihelp.jd.com Test Group Name Failed to fwd: Sender name cannot be blank @@ -174,7 +172,7 @@ Low power alarm threshold Value range: 0–100. Left blank or 0 is disabled Retry interval (seconds) - Retry five times after it fails + Disabled when times = 0, the interval is incremented Forward sms Main switch, requires permissions to read and sned SMS messages, especially verification SMS texts. Forward calls log @@ -302,6 +300,7 @@ FeiShu Bot PushPlus Gotify + 0 1 2 3 @@ -329,4 +328,10 @@ It is recommended to open each authorization or setting, do not disable the notification bar, to avoid the APP service being killed Custom settings If the automatic acquisition fails, please fill in the remarks manually; after clearing, it will be automatically acquired again! + times + Interval + seconds + Retry + [Test Channel] Congratulations, the sending channel test is successful, please continue to add forwarding rules! + SIM1_TestOperator_18888888888 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 21c47c4e..fdd5b61c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -100,8 +100,6 @@ 设置PushPlus 设置Gotify 19999999999 - 测试内容(content)@ - 【京东】验证码为387481(切勿将验证码告知他人),请在页面中输入完成验证,如有问题请点击 ihelp.jd.com 联系京东客服 测试分组 发送失败: 通道名称不能为空 @@ -173,8 +171,8 @@ 运营商_手机号 电量预警阈值(%) 取值范围:0–100,0禁用 - 失败重试间隔(秒) - 接口请求失败后将重试5次 + 请求接口失败重试 + 次数=0时禁用,间隔逐次递增 转发短信广播 总开关,请授予读取短信、通知类短信、发送短信等权限 转发通话记录 @@ -301,6 +299,7 @@ 飞书机器人 PushPlus Gotify + 0 1 2 3 @@ -328,4 +327,10 @@ 建议开启每一项授权或设置,不要禁用通知栏,避免APP服务被杀 个性设置 如果自动获取失败,请手动填写备注信息;清空后将再次自动获取! + + 间隔 + + 重试 + 【测试通道】恭喜您,该发送通道测试成功,请继续添加转发规则! + SIM1_测试运营商_18888888888