mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 17:37:40 +08:00
新增:钉钉群机器人支持markdown格式 #311
This commit is contained in:
parent
652a9c68d7
commit
930fa3f7da
@ -1,5 +1,6 @@
|
|||||||
package com.idormy.sms.forwarder.entity.setting
|
package com.idormy.sms.forwarder.entity.setting
|
||||||
|
|
||||||
|
import com.idormy.sms.forwarder.R
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
data class DingtalkGroupRobotSetting(
|
data class DingtalkGroupRobotSetting(
|
||||||
@ -8,4 +9,15 @@ data class DingtalkGroupRobotSetting(
|
|||||||
var atAll: Boolean? = false,
|
var atAll: Boolean? = false,
|
||||||
var atMobiles: String? = "",
|
var atMobiles: String? = "",
|
||||||
var atDingtalkIds: String? = "",
|
var atDingtalkIds: String? = "",
|
||||||
) : Serializable
|
var msgtype: String? = "text",
|
||||||
|
val titleTemplate: String? = "",
|
||||||
|
) : Serializable {
|
||||||
|
|
||||||
|
fun getMsgTypeCheckId(): Int {
|
||||||
|
return if (msgtype == "markdown") {
|
||||||
|
R.id.rb_msg_type_markdown
|
||||||
|
} else {
|
||||||
|
R.id.rb_msg_type_text
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,8 @@ import android.view.LayoutInflater
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.CompoundButton
|
import android.widget.CompoundButton
|
||||||
|
import android.widget.EditText
|
||||||
|
import android.widget.RadioGroup
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.idormy.sms.forwarder.R
|
import com.idormy.sms.forwarder.R
|
||||||
@ -126,16 +128,25 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
|
|||||||
binding!!.sbAtAll.isChecked = settingVo.atAll == true
|
binding!!.sbAtAll.isChecked = settingVo.atAll == true
|
||||||
binding!!.etAtMobiles.setText(settingVo.atMobiles)
|
binding!!.etAtMobiles.setText(settingVo.atMobiles)
|
||||||
binding!!.etAtDingtalkIds.setText(settingVo.atDingtalkIds)
|
binding!!.etAtDingtalkIds.setText(settingVo.atDingtalkIds)
|
||||||
|
binding!!.rgMsgType.check(settingVo.getMsgTypeCheckId())
|
||||||
|
binding!!.etTitleTemplate.setText(settingVo.titleTemplate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initListeners() {
|
override fun initListeners() {
|
||||||
|
binding!!.btInsertSender.setOnClickListener(this)
|
||||||
|
binding!!.btInsertExtra.setOnClickListener(this)
|
||||||
|
binding!!.btInsertTime.setOnClickListener(this)
|
||||||
|
binding!!.btInsertDeviceName.setOnClickListener(this)
|
||||||
binding!!.btnTest.setOnClickListener(this)
|
binding!!.btnTest.setOnClickListener(this)
|
||||||
binding!!.btnDel.setOnClickListener(this)
|
binding!!.btnDel.setOnClickListener(this)
|
||||||
binding!!.btnSave.setOnClickListener(this)
|
binding!!.btnSave.setOnClickListener(this)
|
||||||
binding!!.sbAtAll.setOnCheckedChangeListener(this)
|
binding!!.sbAtAll.setOnCheckedChangeListener(this)
|
||||||
|
binding!!.rgMsgType.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||||
|
binding!!.layoutCustomTemplate.visibility = if (checkedId == R.id.rb_msg_type_markdown) View.VISIBLE else View.GONE
|
||||||
|
}
|
||||||
LiveEventBus.get(KEY_SENDER_TEST, String::class.java).observe(this) { mCountDownHelper?.finish() }
|
LiveEventBus.get(KEY_SENDER_TEST, String::class.java).observe(this) { mCountDownHelper?.finish() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +166,24 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
|
|||||||
@SingleClick
|
@SingleClick
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
try {
|
try {
|
||||||
|
val etTitleTemplate: EditText = binding!!.etTitleTemplate
|
||||||
when (v.id) {
|
when (v.id) {
|
||||||
|
R.id.bt_insert_sender -> {
|
||||||
|
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_from))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
R.id.bt_insert_extra -> {
|
||||||
|
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_card_slot))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
R.id.bt_insert_time -> {
|
||||||
|
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_receive_time))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
R.id.bt_insert_device_name -> {
|
||||||
|
CommonUtils.insertOrReplaceText2Cursor(etTitleTemplate, getString(R.string.tag_device_name))
|
||||||
|
return
|
||||||
|
}
|
||||||
R.id.btn_test -> {
|
R.id.btn_test -> {
|
||||||
mCountDownHelper?.start()
|
mCountDownHelper?.start()
|
||||||
Thread {
|
Thread {
|
||||||
@ -227,8 +255,10 @@ class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobo
|
|||||||
val atAll = binding!!.sbAtAll.isChecked
|
val atAll = binding!!.sbAtAll.isChecked
|
||||||
val atMobiles = binding!!.etAtMobiles.text.toString().trim()
|
val atMobiles = binding!!.etAtMobiles.text.toString().trim()
|
||||||
val atDingtalkIds = binding!!.etAtDingtalkIds.text.toString().trim()
|
val atDingtalkIds = binding!!.etAtDingtalkIds.text.toString().trim()
|
||||||
|
val msgType = if (binding!!.rgMsgType.checkedRadioButtonId == R.id.rb_msg_type_markdown) "markdown" else "text"
|
||||||
|
val titleTemplate = binding!!.etTitleTemplate.text.toString().trim()
|
||||||
|
|
||||||
return DingtalkGroupRobotSetting(token, secret, atAll, atMobiles, atDingtalkIds)
|
return DingtalkGroupRobotSetting(token, secret, atAll, atMobiles, atDingtalkIds, msgType, titleTemplate)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
@ -54,7 +54,7 @@ class DingtalkGroupRobotUtils private constructor() {
|
|||||||
Log.i(TAG, "requestUrl:$requestUrl")
|
Log.i(TAG, "requestUrl:$requestUrl")
|
||||||
|
|
||||||
val msgMap: MutableMap<String, Any> = mutableMapOf()
|
val msgMap: MutableMap<String, Any> = mutableMapOf()
|
||||||
msgMap["msgtype"] = "text"
|
msgMap["msgtype"] = setting.msgtype ?: "text"
|
||||||
|
|
||||||
val atMap: MutableMap<String, Any> = mutableMapOf()
|
val atMap: MutableMap<String, Any> = mutableMapOf()
|
||||||
msgMap["at"] = atMap
|
msgMap["at"] = atMap
|
||||||
@ -86,9 +86,13 @@ class DingtalkGroupRobotUtils private constructor() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val textText: MutableMap<String, Any> = mutableMapOf()
|
if ("markdown" == msgMap["msgtype"]) {
|
||||||
textText["content"] = content
|
val titleTemplate = setting.titleTemplate.toString()
|
||||||
msgMap["text"] = textText
|
val title = rule?.let { msgInfo.getTitleForSend(titleTemplate, it.regexReplace) } ?: msgInfo.getTitleForSend(titleTemplate)
|
||||||
|
msgMap["markdown"] = mutableMapOf<String, Any>("title" to title, "text" to content)
|
||||||
|
} else {
|
||||||
|
msgMap["text"] = mutableMapOf<String, Any>("content" to content)
|
||||||
|
}
|
||||||
|
|
||||||
val requestMsg: String = Gson().toJson(msgMap)
|
val requestMsg: String = Gson().toJson(msgMap)
|
||||||
Log.i(TAG, "requestMsg:$requestMsg")
|
Log.i(TAG, "requestMsg:$requestMsg")
|
||||||
|
@ -184,6 +184,113 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
style="@style/senderBarStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/feishu_msg_type"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<RadioGroup
|
||||||
|
android:id="@+id/rg_msg_type"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/rb_msg_type_text"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="@string/sampleText" />
|
||||||
|
|
||||||
|
<RadioButton
|
||||||
|
android:id="@+id/rb_msg_type_markdown"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/sampleMarkdown" />
|
||||||
|
|
||||||
|
</RadioGroup>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layout_custom_template"
|
||||||
|
style="@style/senderBarStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/title_template"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="@string/custom_template_tips"
|
||||||
|
android:textSize="10sp"
|
||||||
|
tools:ignore="SmallSp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
|
||||||
|
android:id="@+id/et_title_template"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
|
app:met_clearButton="true" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
|
||||||
|
android:id="@+id/bt_insert_sender"
|
||||||
|
style="@style/insertButtonStyle"
|
||||||
|
android:text="@string/insert_sender" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
|
||||||
|
android:id="@+id/bt_insert_extra"
|
||||||
|
style="@style/insertButtonStyle"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="@string/insert_extra" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
|
||||||
|
android:id="@+id/bt_insert_time"
|
||||||
|
style="@style/insertButtonStyle"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="@string/insert_time" />
|
||||||
|
|
||||||
|
<com.xuexiang.xui.widget.button.shadowbutton.RippleShadowShadowButton
|
||||||
|
android:id="@+id/bt_insert_device_name"
|
||||||
|
style="@style/insertButtonStyle"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="@string/insert_device_name" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user