新增:手动重发发送失败的消息 (#80)

This commit is contained in:
Naccl 2022-01-15 20:20:03 +08:00
parent 86f3960300
commit 96d9fa9f1e
6 changed files with 77 additions and 2 deletions

View File

@ -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();
}

View File

@ -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;

View File

@ -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<RuleModel> ruleList = RuleUtil.getRule(null, key, logVo.getType());
if (!ruleList.isEmpty()) {
SenderUtil.init(context);
for (RuleModel ruleModel : ruleList) {
//规则匹配发现需要发送
try {
if (ruleModel.checkMsg(smsVo)) {
List<SenderModel> 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("先新建并选择发送通道");

View File

@ -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());

View File

@ -43,6 +43,7 @@
<string name="delete_log_title">Delete confirmation</string>
<string name="delete_log_tips">Are you sure to delete this log entry?</string>
<string name="delete_log_toast">The log entry is deleted.</string>
<string name="resend_toast">Resending</string>
<string name="details">Details</string>
<string name="clear_logs_tips">Are you sure to clear all forwarding logs?</string>
<string name="pull_tips">Pull to refresh.</string>

View File

@ -43,6 +43,7 @@
<string name="delete_log_title">日志删除确认</string>
<string name="delete_log_tips">确定删除该条日志记录?</string>
<string name="delete_log_toast">该条日志记录已经删除!</string>
<string name="resend_toast">正在重发</string>
<string name="details">详情</string>
<string name="clear_logs_tips">确定要清空转发记录吗?</string>
<string name="pull_tips">下拉可以刷新!</string>