From 96d9fa9f1e56db24ca985e23ba785f0c83ad1c57 Mon Sep 17 00:00:00 2001 From: Naccl Date: Sat, 15 Jan 2022 20:20:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E9=87=8D=E5=8F=91=E5=8F=91=E9=80=81=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AF=20(#80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idormy/sms/forwarder/MainActivity.java | 16 ++++++ .../idormy/sms/forwarder/model/vo/LogVo.java | 4 +- .../idormy/sms/forwarder/sender/SendUtil.java | 55 +++++++++++++++++++ .../idormy/sms/forwarder/utils/LogUtil.java | 2 +- app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 77 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java index 708047e7..4636c494 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -25,6 +25,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.idormy.sms.forwarder.adapter.LogAdapter; import com.idormy.sms.forwarder.model.vo.LogVo; import com.idormy.sms.forwarder.sender.HttpServer; +import com.idormy.sms.forwarder.sender.SendUtil; import com.idormy.sms.forwarder.sender.SmsHubApiTask; import com.idormy.sms.forwarder.service.BatteryService; import com.idormy.sms.forwarder.service.FrontService; @@ -304,6 +305,21 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I Toast.makeText(MainActivity.this, R.string.delete_log_toast, Toast.LENGTH_SHORT).show(); dialog.dismiss(); }); + + //重发消息回调,重发失败也会触发 + Handler handler = new Handler(Looper.myLooper(), msg -> { + initTLogs(); + showList(logVos); + return true; + }); + //对于发送失败的消息添加重发按钮 + if (logVo.getForwardStatus() == 0) { + builder.setPositiveButton("重发消息", (dialog, which) -> { + Toast.makeText(MainActivity.this, R.string.resend_toast, Toast.LENGTH_SHORT).show(); + SendUtil.resendMsgByLog(MainActivity.this, handler, logVo); + dialog.dismiss(); + }); + } builder.show(); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java index ec3746d0..061aef44 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java +++ b/app/src/main/java/com/idormy/sms/forwarder/model/vo/LogVo.java @@ -7,6 +7,7 @@ import lombok.Data; @Data public class LogVo { private Long id; + private String type; private String from; private String content; private String simInfo; @@ -19,8 +20,9 @@ public class LogVo { public LogVo() { } - public LogVo(Long id, String from, String content, String simInfo, String time, String rule, int senderImageId, int forwardStatus, String forwardResponse) { + public LogVo(Long id, String type, String from, String content, String simInfo, String time, String rule, int senderImageId, int forwardStatus, String forwardResponse) { this.id = id; + this.type = type; this.from = from; this.content = content; this.simInfo = simInfo; 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 db4658c8..e7cc7724 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 @@ -24,6 +24,7 @@ import com.idormy.sms.forwarder.model.vo.BarkSettingVo; import com.idormy.sms.forwarder.model.vo.DingDingSettingVo; import com.idormy.sms.forwarder.model.vo.EmailSettingVo; import com.idormy.sms.forwarder.model.vo.FeiShuSettingVo; +import com.idormy.sms.forwarder.model.vo.LogVo; import com.idormy.sms.forwarder.model.vo.PushPlusSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXAppSettingVo; import com.idormy.sms.forwarder.model.vo.QYWXGroupRobotSettingVo; @@ -36,6 +37,9 @@ import com.idormy.sms.forwarder.utils.LogUtil; import com.idormy.sms.forwarder.utils.NetUtil; import com.idormy.sms.forwarder.utils.RuleUtil; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; public class SendUtil { @@ -77,6 +81,57 @@ public class SendUtil { } } + /** + * 从日志获取消息内容并尝试重发 + * 根据当前rule和sender来重发,而不是失败时设置的规则 + * + * @param context + * @param handler 回调,用于刷新日志列表 + * @param logVo 日志 + */ + public static void resendMsgByLog(Context context, Handler handler, LogVo logVo) { + Log.d(TAG, logVo.toString()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + try { + date = sdf.parse(logVo.getTime()); + } catch (ParseException e) { + Log.e(TAG, "SimpleDateFormat parse error", e); + } + SmsVo smsVo = new SmsVo(logVo.getFrom(), logVo.getContent(), date, logVo.getSimInfo()); + Log.d(TAG, "resendMsgByLog smsVo:" + smsVo); + + //从simInfo判断接收的是SIM1还是SIM2,获取不到时默认走ALL + String simInfo = smsVo.getSimInfo(); + String key = null; + if (simInfo.startsWith("SIM1")) { + key = "SIM1"; + } else if (simInfo.startsWith("SIM2")) { + key = "SIM2"; + } + + RuleUtil.init(context); + List ruleList = RuleUtil.getRule(null, key, logVo.getType()); + if (!ruleList.isEmpty()) { + SenderUtil.init(context); + for (RuleModel ruleModel : ruleList) { + //规则匹配发现需要发送 + try { + if (ruleModel.checkMsg(smsVo)) { + List senderModels = SenderUtil.getSender(ruleModel.getSenderId(), null); + 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); + } + } + } catch (Exception e) { + Log.e(TAG, "resendMsgByLog: fail checkMsg:", e); + } + } + } + } + public static void sendMsgByRuleModelSenderId(final Handler handError, RuleModel ruleModel, SmsVo smsVo, Long senderId) throws Exception { if (senderId == null) { throw new Exception("先新建并选择发送通道"); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java index 0929838d..fb3c9bec 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java @@ -198,7 +198,7 @@ public class LogUtil { if (senderName != null) rule += senderName.trim(); int senderImageId = SenderModel.getImageId(senderType); - LogVo logVo = new LogVo(itemId, itemFrom, content, simInfo, time, rule, senderImageId, forwardStatus, forwardResponse); + LogVo logVo = new LogVo(itemId, type, itemFrom, content, simInfo, time, rule, senderImageId, forwardStatus, forwardResponse); LogVos.add(logVo); } catch (Exception e) { Log.e(TAG, "getLog e:" + e.getMessage()); diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 78a3dc38..60e2f2f5 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -43,6 +43,7 @@ Delete confirmation Are you sure to delete this log entry? The log entry is deleted. + Resending Details Are you sure to clear all forwarding logs? Pull to refresh. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index be2fa008..8451b1b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ 日志删除确认 确定删除该条日志记录? 该条日志记录已经删除! + 正在重发 详情 确定要清空转发记录吗? 下拉可以刷新!