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 314cfe97..ec3746d0 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 @@ -45,9 +45,17 @@ public class LogVo { public int getStatusImageId() { if (this.forwardStatus == 1) { + return R.drawable.ic_round_warning; + } else if (this.forwardStatus == 2) { return R.drawable.ic_round_check; } return R.drawable.ic_round_cancel; } + + public String getForwardResponse() { + if (this.forwardStatus == 1) return "处理中..."; + + return forwardResponse; + } } 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 80202657..6b4d0faf 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 @@ -82,7 +82,7 @@ public class SenderBarkMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"message\":\"success\"")) { - LogUtil.updateLog(logId, 1, responseStr); + LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); } 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 cb66e92a..e70c7ece 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 @@ -120,7 +120,7 @@ public class SenderDingdingMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); + 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 a393000a..d7f017d3 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 @@ -101,7 +101,7 @@ public class SenderFeishuMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"StatusCode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); + LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); } 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 112a83de..f58f6086 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 @@ -47,7 +47,7 @@ public class SenderMailMsg extends SenderBaseMsg { .send(draft, new EmailKit.GetSendCallback() { @Override public void onSuccess() { - LogUtil.updateLog(logId, 1, "发送成功"); + LogUtil.updateLog(logId, 2, "发送成功"); Toast(handError, TAG, "发送成功"); } 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 d214fcca..02e81027 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 @@ -106,7 +106,7 @@ public class SenderPushPlusMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"code\":200")) { - LogUtil.updateLog(logId, 1, responseStr); + 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 1fcc0dfc..7981f223 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 @@ -197,7 +197,7 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); + LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); } 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 3722cb38..ccd6468b 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 @@ -77,7 +77,7 @@ public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); + 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 debbe51c..ac392213 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 @@ -68,7 +68,7 @@ public class SenderServerChanMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"code\":0")) { - LogUtil.updateLog(logId, 1, responseStr); + LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java index 8092dc57..a9e32678 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java @@ -20,7 +20,7 @@ public class SenderSmsMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (res == null) { - LogUtil.updateLog(logId, 1, "发送成功"); + LogUtil.updateLog(logId, 2, "发送成功"); } else { LogUtil.updateLog(logId, 0, res); Toast(handError, TAG, "短信发送失败"); 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 930ba668..25e7ad85 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 @@ -83,7 +83,7 @@ public class SenderTelegramMsg extends SenderBaseMsg { //TODO:粗略解析是否发送成功 if (responseStr.contains("\"ok\":true")) { - LogUtil.updateLog(logId, 1, responseStr); + LogUtil.updateLog(logId, 2, responseStr); } else { LogUtil.updateLog(logId, 0, responseStr); } 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 337de4b5..4c97d2be 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 @@ -1,147 +1,147 @@ -package com.idormy.sms.forwarder.sender; - -import android.os.Handler; -import android.util.Base64; -import android.util.Log; - -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; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - -@SuppressWarnings({"deprecation", "ResultOfMethodCallIgnored"}) -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 { - Log.i(TAG, "sendMsg webServer:" + webServer + " webParams:" + webParams + " from:" + from + " content:" + content); - - if (webServer == null || webServer.isEmpty()) { - return; - } - - Long timestamp = System.currentTimeMillis(); - String sign = ""; - if (secret != null && !secret.isEmpty()) { - String stringToSign = timestamp + "\n" + secret; - Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); - byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); - sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); - Log.i(TAG, "sign:" + sign); - } - - Request request; - if (method.equals("GET")) { - webServer += (webServer.contains("?") ? "&" : "?") + "from=" + URLEncoder.encode(from, "UTF-8"); - webServer += "&content=" + URLEncoder.encode(content, "UTF-8"); - if (secret != null && !secret.isEmpty()) { - webServer += "×tamp=" + timestamp; - webServer += "&sign=" + sign; - } - - Log.d(TAG, "method = GET, Url = " + webServer); - request = new Request.Builder().url(webServer).get().build(); - } else if (webParams != null && webParams.contains("[msg]")) { - String bodyMsg; - String Content_Type = "application/x-www-form-urlencoded"; - if (webParams.startsWith("{")) { - bodyMsg = content.replace("\n", "\\n"); - bodyMsg = webParams.replace("[msg]", bodyMsg); - Content_Type = "application/json;charset=utf-8"; - } else { - bodyMsg = webParams.replace("[msg]", URLEncoder.encode(content, "UTF-8")); - } - RequestBody body = RequestBody.create(MediaType.parse(Content_Type), bodyMsg); - request = new Request.Builder() - .url(webServer) - .addHeader("Content-Type", Content_Type) - .method("POST", body) - .build(); - Log.d(TAG, "method = POST webParams, Body = " + bodyMsg); - } else { - MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) - .addFormDataPart("from", from) - .addFormDataPart("content", content); - if (secret != null && !secret.isEmpty()) { - builder.addFormDataPart("timestamp", String.valueOf(timestamp)); - builder.addFormDataPart("sign", sign); - } - - RequestBody body = builder.build(); - Log.d(TAG, "method = POST, Body = " + body); - 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, 1, 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); - } - - -} +package com.idormy.sms.forwarder.sender; + +import android.os.Handler; +import android.util.Base64; +import android.util.Log; + +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; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +@SuppressWarnings({"deprecation", "ResultOfMethodCallIgnored"}) +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 { + Log.i(TAG, "sendMsg webServer:" + webServer + " webParams:" + webParams + " from:" + from + " content:" + content); + + if (webServer == null || webServer.isEmpty()) { + return; + } + + Long timestamp = System.currentTimeMillis(); + String sign = ""; + if (secret != null && !secret.isEmpty()) { + String stringToSign = timestamp + "\n" + secret; + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); + byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); + sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); + Log.i(TAG, "sign:" + sign); + } + + Request request; + if (method.equals("GET")) { + webServer += (webServer.contains("?") ? "&" : "?") + "from=" + URLEncoder.encode(from, "UTF-8"); + webServer += "&content=" + URLEncoder.encode(content, "UTF-8"); + if (secret != null && !secret.isEmpty()) { + webServer += "×tamp=" + timestamp; + webServer += "&sign=" + sign; + } + + Log.d(TAG, "method = GET, Url = " + webServer); + request = new Request.Builder().url(webServer).get().build(); + } else if (webParams != null && webParams.contains("[msg]")) { + String bodyMsg; + String Content_Type = "application/x-www-form-urlencoded"; + if (webParams.startsWith("{")) { + bodyMsg = content.replace("\n", "\\n"); + bodyMsg = webParams.replace("[msg]", bodyMsg); + Content_Type = "application/json;charset=utf-8"; + } else { + bodyMsg = webParams.replace("[msg]", URLEncoder.encode(content, "UTF-8")); + } + RequestBody body = RequestBody.create(MediaType.parse(Content_Type), bodyMsg); + request = new Request.Builder() + .url(webServer) + .addHeader("Content-Type", Content_Type) + .method("POST", body) + .build(); + Log.d(TAG, "method = POST webParams, Body = " + bodyMsg); + } else { + MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("from", from) + .addFormDataPart("content", content); + if (secret != null && !secret.isEmpty()) { + builder.addFormDataPart("timestamp", String.valueOf(timestamp)); + builder.addFormDataPart("sign", sign); + } + + RequestBody body = builder.build(); + Log.d(TAG, "method = POST, Body = " + body); + 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); + } + + +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java b/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java index 8f110de3..30f83acc 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/DbHelper.java @@ -16,7 +16,7 @@ import java.util.List; public class DbHelper extends SQLiteOpenHelper { // If you change the database schema, you must increment the database version. public static final String TAG = "DbHelper"; - public static final int DATABASE_VERSION = 7; + public static final int DATABASE_VERSION = 8; public static final String DATABASE_NAME = "sms_forwarder.db"; private static final List SQL_CREATE_ENTRIES = @@ -109,6 +109,10 @@ public class DbHelper extends SQLiteOpenHelper { String sql = "Alter table " + RuleTable.RuleEntry.TABLE_NAME + " add column " + RuleTable.RuleEntry.COLUMN_REGEX_REPLACE + " TEXT NOT NULL DEFAULT '' "; db.execSQL(sql); } + if (oldVersion < 8) { //更新日志表状态:0=失败,1=待处理,2=成功 + String sql = "update " + LogTable.LogEntry.TABLE_NAME + " set " + LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS + " = 2 where " + LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS + " = 1 "; + db.execSQL(sql); + } } public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 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 f2dd75d1..19e7d1a5 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 @@ -86,20 +86,17 @@ public class LogUtil { } - public static int updateLog(Long id, int forward_status, String forward_response) { - if (id == null || id <= 0) return 0; - - String selection = LogTable.LogEntry._ID + " = ? "; - List selectionArgList = new ArrayList<>(); - selectionArgList.add(String.valueOf(id)); - - ContentValues values = new ContentValues(); - values.put(LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS, forward_status); - values.put(LogTable.LogEntry.COLUMN_NAME_FORWARD_RESPONSE, forward_response); - - String[] selectionArgs = selectionArgList.toArray(new String[0]); - return db.update(LogTable.LogEntry.TABLE_NAME, values, selection, selectionArgs); - + public static void updateLog(Long id, int forward_status, String forward_response) { + if (id == null || id <= 0) return; + + String sql = new StringBuilder().append("UPDATE ").append(LogTable.LogEntry.TABLE_NAME) + .append(" SET ").append(LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS).append(" = ? , ") + .append(LogTable.LogEntry.COLUMN_NAME_FORWARD_RESPONSE) + .append(" = CASE WHEN ").append(LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS).append(" = 1 THEN ? ELSE ") + .append(LogTable.LogEntry.COLUMN_NAME_FORWARD_RESPONSE).append(" || '\n ---------- \n' || ? END ") + .append(" WHERE ").append(LogTable.LogEntry._ID).append(" = ? ") + .toString(); + db.execSQL(sql, new Object[]{forward_status, forward_response, forward_response, id}); } public static List getLog(Long id, String key, String type) { diff --git a/app/src/main/res/drawable/ic_round_warning.xml b/app/src/main/res/drawable/ic_round_warning.xml new file mode 100644 index 00000000..09951ec9 --- /dev/null +++ b/app/src/main/res/drawable/ic_round_warning.xml @@ -0,0 +1,5 @@ + + +