update log打印减少;响应速度提升;内部群已读数过滤

This commit is contained in:
尹甲仑
2022-06-21 17:19:16 +08:00
parent ac1f8f68f5
commit 5613725ccf
6 changed files with 102 additions and 100 deletions

View File

@@ -8,6 +8,8 @@ object Constant {
const val PACKAGE_NAMES = "com.tencent.wework"
val BASE_URL = WebConfig.HOST.replace("wss", "https").replace("ws", "http")
val URL_CHECK_UPDATE = "$BASE_URL/appUpdate/checkUpdate"
const val CHANGE_PAGE_INTERVAL = 1000L
const val POP_WINDOW_INTERVAL = 500L
var key = "9876543210abcdef".toByteArray()
var iv = "0123456789abcdef".toByteArray()

View File

@@ -1,6 +1,7 @@
package org.yameida.worktool.service
import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.utils.AccessibilityUtil
import org.yameida.worktool.utils.Views
@@ -47,10 +48,10 @@ object WeworkGetImpl {
if (!goHomeTab("")) {
LogUtils.d("未找到我的信息")
goHomeTab("消息")
val firstTv = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView, root = true)
val firstTv = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView)
.firstOrNull { it.text == null }
AccessibilityUtil.performClick(firstTv)
sleep(1000)
sleep(Constant.CHANGE_PAGE_INTERVAL)
val newFirstTv = AccessibilityUtil.findOneByClazz(getRoot(), Views.TextView)
val nickname = newFirstTv?.text?.toString()
AccessibilityUtil.performClick(firstTv)
@@ -67,7 +68,7 @@ object WeworkGetImpl {
}
}
AccessibilityUtil.performClick(AccessibilityUtil.findOneByClazz(getRoot(), Views.ImageView))
sleep(1000)
sleep(Constant.CHANGE_PAGE_INTERVAL)
val relativeLayoutList = AccessibilityUtil.findAllByClazz(getRoot(), Views.RelativeLayout, minSize = 50)
val myInfo = WeworkMessageBean.MyInfo()
for (relativeLayout in relativeLayoutList.filter { it.childCount >= 2 }) {

View File

@@ -4,6 +4,7 @@ import android.os.Message
import android.view.accessibility.AccessibilityNodeInfo
import androidx.core.text.isDigitsOnly
import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.service.WeworkController.mainLoopRunning
import org.yameida.worktool.utils.*
@@ -40,7 +41,7 @@ object WeworkLoopImpl {
mainLoopRunning = true
try {
while (mainLoopRunning) {
if (WeworkRoomUtil.getRoomType(getRoot()) != WeworkMessageBean.ROOM_TYPE_UNKNOWN
if (WeworkRoomUtil.getRoomType(getRoot(), false) != WeworkMessageBean.ROOM_TYPE_UNKNOWN
&& getChatMessageList()) {
}
goHomeTab("消息")
@@ -72,22 +73,22 @@ object WeworkLoopImpl {
AccessibilityUtil.performClick(item)
val addButton = AccessibilityUtil.findOneByText(getRoot(), "添加客户")
val backNode = AccessibilityUtil.findBackNode(addButton)
LogUtils.d(backNode?.className)
if (backNode?.className == Views.TextView) {
LogUtils.d("有待添加客户")
AccessibilityUtil.performClick(backNode)
sleep(2000)
AccessibilityUtil.findTextAndClick(getRoot(), "新的客户")
sleep(500)
var retry = 5
while (retry-- > 0) {
if (!AccessibilityUtil.findTextAndClick(getRoot(), "查看"))
val checkButton = AccessibilityUtil.findOneByText(getRoot(), "查看", timeout = 2000)
if (checkButton == null) {
break
sleep(2000)
val nameList = passFriendRequest()
if (nameList.isEmpty())
break
//TODO nameList 通过的好友加入演示脚本
} else {
sleep(Constant.CHANGE_PAGE_INTERVAL)
val nameList = passFriendRequest()
if (nameList.isEmpty())
break
//TODO nameList 通过的好友加入演示脚本
}
}
return true
} else {
@@ -115,11 +116,11 @@ object WeworkLoopImpl {
}
if (titleList.size > 0) {
val title = titleList.joinToString()
LogUtils.i("聊天: $title")
LogUtils.v("聊天: $title")
log("聊天: $title")
val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView)
if (list != null) {
LogUtils.d("消息条数: " + list.childCount)
LogUtils.v("消息条数: " + list.childCount)
val messageList = arrayListOf<WeworkMessageBean.SubMessageBean>()
for (i in 0 until list.childCount) {
val item = list.getChild(i)
@@ -162,11 +163,8 @@ object WeworkLoopImpl {
val tvNick = filter[0]
LogUtils.d("好友请求: " + tvNick.text)
AccessibilityUtil.findTextAndClick(getRoot(), "通过验证")
sleep(1000)
AccessibilityUtil.findTextAndClick(getRoot(), "完成")
sleep(5000)
if (AccessibilityUtil.findTextAndClick(getRoot(), "确定")) {
sleep(500)
LogUtils.d("添加好友失败")
} else {
val weworkMessageBean = WeworkMessageBean()
@@ -192,6 +190,7 @@ object WeworkLoopImpl {
* 读取聊天列表
*/
private fun getChatroomList(): Boolean {
if (!isAtHome()) return true
if (logIndex % 3 == 0) {
AccessibilityUtil.performScrollUp(getRoot(), 0)
AccessibilityUtil.performScrollUp(getRoot(), 0)
@@ -199,6 +198,7 @@ object WeworkLoopImpl {
} else if (logIndex % 120 < 3) {
AccessibilityUtil.performScrollDown(getRoot(), 0)
}
if (!isAtHome()) return true
if (logIndex++ % 15 == 0) {
LogUtils.i("读取首页聊天列表")
log("读取首页聊天列表")
@@ -267,7 +267,7 @@ object WeworkLoopImpl {
val message: WeworkMessageBean.SubMessageBean
val nameList = arrayListOf<String>()
val itemMessageList = arrayListOf<WeworkMessageBean.ItemMessageBean>()
LogUtils.d("开始解析一条消息...")
LogUtils.v("开始解析一条消息...")
//消息头(在消息主体上方 如时间信息)
val linearLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.LinearLayout, 1)
if (linearLayoutItem != null) {
@@ -279,7 +279,7 @@ object WeworkLoopImpl {
sb.append(text).append("\t")
itemMessageList.add(itemMessage)
}
LogUtils.d(sb.toString())
LogUtils.v(sb.toString())
}
//消息主体
val relativeLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.RelativeLayout, 1)
@@ -297,7 +297,7 @@ object WeworkLoopImpl {
AccessibilityUtil.findAllOnceByClazz(relativeLayoutContent, Views.TextView)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString()
LogUtils.d(text)
LogUtils.v(text)
if (text !in stopWords) {
val itemMessage = WeworkMessageBean.ItemMessageBean(2, text)
itemMessageList.add(itemMessage)
@@ -307,13 +307,19 @@ object WeworkLoopImpl {
message = WeworkMessageBean.SubMessageBean(0, textType, itemMessageList, nameList)
} else if (Views.ImageView.equals(relativeLayoutItem.getChild(1).className)) {
LogUtils.v("头像在右边 本条消息发送者为自己")
val tvList = AccessibilityUtil.findAllOnceByClazz(relativeLayoutItem, Views.TextView)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString()
LogUtils.d(text)
if (text !in stopWords) {
val itemMessage = WeworkMessageBean.ItemMessageBean(2, text)
itemMessageList.add(itemMessage)
val subLayout = relativeLayoutItem.getChild(0)
if (subLayout.childCount > 0) {
val tvList = AccessibilityUtil.findAllOnceByClazz(
subLayout.getChild(subLayout.childCount - 1),
Views.TextView
)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString()
LogUtils.v(text)
if (text !in stopWords) {
val itemMessage = WeworkMessageBean.ItemMessageBean(2, text)
itemMessageList.add(itemMessage)
}
}
}
message = WeworkMessageBean.SubMessageBean(1, 0, itemMessageList, nameList)
@@ -322,7 +328,7 @@ object WeworkLoopImpl {
val tvList = AccessibilityUtil.findAllOnceByClazz(node, Views.TextView)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString()
LogUtils.d(text)
LogUtils.v(text)
val itemMessage = WeworkMessageBean.ItemMessageBean(1, text)
itemMessageList.add(itemMessage)
}
@@ -341,7 +347,7 @@ object WeworkLoopImpl {
itemMessageList.add(itemMessage)
}
}
LogUtils.d(sb.toString())
LogUtils.v(sb.toString())
message = WeworkMessageBean.SubMessageBean(2, 0, itemMessageList, nameList)
}
return message

View File

@@ -2,6 +2,7 @@ package org.yameida.worktool.service
import android.view.accessibility.AccessibilityNodeInfo
import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.utils.AccessibilityUtil
import org.yameida.worktool.utils.Views
@@ -58,7 +59,7 @@ object WeworkOperationImpl {
"回复"
)
) {
LogUtils.d("开始回复")
LogUtils.v("开始回复")
sendChatMessage(receivedContent, "[自动回复]")
LogUtils.d("$title: 回复成功")
WeworkLoopImpl.getChatMessageList()
@@ -203,11 +204,11 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘")
if (node != null) {
AccessibilityUtil.performClick(node)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "以原文件分享")
@@ -245,11 +246,11 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘")
if (node != null) {
AccessibilityUtil.performClick(node)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发")
@@ -283,7 +284,7 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "用过的小程序")
if (node != null) {
AccessibilityUtil.performClick(node)
val textViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView, root = true)
val textViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView)
if (textViewList.size > 3) {
AccessibilityUtil.performClick(textViewList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName)
@@ -325,11 +326,11 @@ object WeworkOperationImpl {
return false
}
AccessibilityUtil.performClick(myFileButton)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[3])
AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发")
@@ -362,26 +363,21 @@ object WeworkOperationImpl {
val searchButton: AccessibilityNodeInfo = textViewList[textViewList.size - 2]
val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1]
AccessibilityUtil.performClick(multiButton)
sleep(500)
val listViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ListView, root = true)
sleep(Constant.POP_WINDOW_INTERVAL)
val listViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ListView)
if (!listViewList.isNullOrEmpty()) {
if (AccessibilityUtil.findTextAndClick(listViewList.last(), "添加客户")) {
AccessibilityUtil.findTextAndClick(getRoot(), "搜索手机号添加")
AccessibilityUtil.findTextInput(getRoot(), friend.phone.trim())
if (AccessibilityUtil.findTextAndClick(getRoot(), "网络查找手机")) {
val bothUsedTv = AccessibilityUtil.findOneByText(getRoot(), "对方同时使用")
val bothUsedTv = AccessibilityUtil.findOneByText(getRoot(), "对方同时使用", timeout = 2000)
if (bothUsedTv != null) {
if (AccessibilityUtil.performClick(
AccessibilityUtil.findOnceByClazz(
AccessibilityUtil.findBackNode(bothUsedTv),
Views.ImageView
)
AccessibilityUtil.performClick(
AccessibilityUtil.findOnceByClazz(
AccessibilityUtil.findBackNode(bothUsedTv),
Views.ImageView
)
) {
sleep(2000)
} else {
LogUtils.e("未找到可点击图标")
}
)
}
} else {
LogUtils.e("未找到查找手机选项")
@@ -400,7 +396,7 @@ object WeworkOperationImpl {
) {
AccessibilityUtil.performClick(markTv)
val etList =
AccessibilityUtil.findAllByClazz(getRoot(), Views.EditText, root = true, minSize = 5)
AccessibilityUtil.findAllByClazz(getRoot(), Views.EditText, minSize = 5)
if (etList.size >= 5) {
if (friend.markName != null) {
AccessibilityUtil.editTextInput(etList[0], friend.markName)
@@ -413,14 +409,11 @@ object WeworkOperationImpl {
}
}
AccessibilityUtil.findTextAndClick(getRoot(), "保存")
sleep(2000)
}
//设置标签
if (!friend.tagList.isNullOrEmpty()) {
if (AccessibilityUtil.findTextAndClick(getRoot(), "标签")) {
sleep(1000)
setFriendTags(friend.tagList)
sleep(1000)
}
}
//添加联系人
@@ -440,7 +433,6 @@ object WeworkOperationImpl {
}
if (AccessibilityUtil.findTextAndClick(getRoot(), "添加为联系人")) {
LogUtils.d("添加好友成功: " + friend.phone)
sleep(2000)
if (AccessibilityUtil.findTextAndClick(getRoot(), "发送添加邀请")) {
LogUtils.d("发送添加邀请成功: " + friend.phone)
}
@@ -787,51 +779,51 @@ object WeworkOperationImpl {
private fun setFriendTags(tagList: List<String>): Boolean {
val tagList = if (tagList.size > 5) tagList.subList(0, 5) else tagList
val tvTag = AccessibilityUtil.findAllByText(getRoot(), "个人标签").lastOrNull()
if (tvTag != null) {
val list = AccessibilityUtil.findBackNode(tvTag)
if (list != null && list.childCount > 0) {
LogUtils.v("list.childCount: " + list.childCount)
val tvAdd = list.getChild(0)
val oldTagList = arrayListOf<String>()
for (i in 0 until list.childCount) {
val child = list.getChild(i)
if (child.className.equals(Views.TextView) && child.text != null) {
oldTagList.add(child.text.toString())
}
val oldTagList = arrayListOf<String>()
val list = AccessibilityUtil.findBackNode(tvTag)
if (list != null && list.childCount > 0) {
for (i in 0 until list.childCount) {
val child = list.getChild(i)
if (child.className.equals(Views.TextView) && child.text != null) {
oldTagList.add(child.text.toString())
}
//不存在的标签先添加
for (tag in tagList) {
if (!oldTagList.contains(tag)) {
AccessibilityUtil.performClick(tvAdd)
sleep(500)
}
//不存在的标签先添加
for (tag in tagList) {
if (!oldTagList.contains(tag)) {
AccessibilityUtil.findOneByText(getRoot(), "个人标签")
sleep(Constant.POP_WINDOW_INTERVAL)
val tempList = AccessibilityUtil.findBackNode(
AccessibilityUtil.findAllByText(getRoot(), "个人标签").lastOrNull())
if (tempList != null && tempList.childCount > 0) {
AccessibilityUtil.performClick(tempList.getChild(0))
AccessibilityUtil.findTextInput(getRoot(), tag)
AccessibilityUtil.findTextAndClick(getRoot(), "确定")
sleep(1000)
}
}
//确认只选择列表里的标签
val count = list.childCount
for (i in 0 until count) {
val child = list.getChild(i)
if (child != null) {
val text = child.text
val selected = child.isSelected
LogUtils.v("text: $text selected: $selected")
if (tagList.count { it == text } > 0) {
if (!selected) {
AccessibilityUtil.performClick(child)
}
} else {
if (selected) {
AccessibilityUtil.performClick(child)
}
}
//确认只选择列表里的标签
val count = list.childCount
for (i in 0 until count) {
val child = list.getChild(i)
if (child != null) {
val text = child.text
val selected = child.isSelected
LogUtils.v("text: $text selected: $selected")
if (tagList.count { it == text } > 0) {
if (!selected) {
AccessibilityUtil.performClick(child)
}
} else {
if (selected) {
AccessibilityUtil.performClick(child)
}
}
list.refresh()
}
if (AccessibilityUtil.findTextAndClick(getRoot(), "确定")) {
return true
}
list.refresh()
}
if (AccessibilityUtil.findTextAndClick(getRoot(), "确定")) {
return true
}
}
LogUtils.e("未找到个人标签")

View File

@@ -5,6 +5,7 @@ import org.yameida.worktool.utils.AccessibilityUtil.findOneByClazz
import org.yameida.worktool.utils.AccessibilityUtil.findFrontNode
import org.yameida.worktool.model.WeworkMessageBean
import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.service.backPress
import org.yameida.worktool.service.getRoot
import org.yameida.worktool.service.goHome
@@ -20,7 +21,7 @@ object WeworkRoomUtil {
* 房间类型 ROOM_TYPE
* @see WeworkMessageBean.ROOM_TYPE
*/
fun getRoomType(root: AccessibilityNodeInfo): Int {
fun getRoomType(root: AccessibilityNodeInfo, print: Boolean = true): Int {
when {
isExternalSingleChat(root) -> {
LogUtils.d("ROOM_TYPE: ROOM_TYPE_EXTERNAL_CONTACT")
@@ -40,7 +41,7 @@ object WeworkRoomUtil {
return WeworkMessageBean.ROOM_TYPE_INTERNAL_CONTACT
}
else -> {
LogUtils.d("ROOM_TYPE: ROOM_TYPE_UNKNOWN")
if (print) LogUtils.d("ROOM_TYPE: ROOM_TYPE_UNKNOWN")
return WeworkMessageBean.ROOM_TYPE_UNKNOWN
}
}
@@ -66,7 +67,7 @@ object WeworkRoomUtil {
}
}
}
LogUtils.d("getRoomTitle: ", titleList)
LogUtils.v("getRoomTitle: ", titleList)
return titleList
}
@@ -96,11 +97,11 @@ object WeworkRoomUtil {
val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1]
AccessibilityUtil.performClick(searchButton)
AccessibilityUtil.findTextInput(getRoot(), title.replace("", ""))
sleep(1000)
sleep(Constant.CHANGE_PAGE_INTERVAL)
val selectListView = findOneByClazz(getRoot(), Views.ListView)
val imageView = AccessibilityUtil.findOnceByClazz(selectListView, Views.ImageView)
AccessibilityUtil.performClick(imageView)
sleep(1000)
sleep(Constant.CHANGE_PAGE_INTERVAL)
return true
} else {
LogUtils.e("未找到搜索按钮")
@@ -192,7 +193,7 @@ object WeworkRoomUtil {
val buttonList = findAllOnceByClazz(textViewList.last().parent.parent, Views.TextView)
return buttonList.size == 2
} else {
LogUtils.d("未找到群管理按钮")
LogUtils.v("未找到群管理按钮")
}
} else {
LogUtils.d("未找到消息列表")

View File

@@ -309,7 +309,7 @@ object WeworkTextUtil {
private fun longClickMessageItem(item: AccessibilityNodeInfo, key: String): Boolean {
val backNode = getMessageListNode(item)
AccessibilityUtil.performLongClickWithSon(backNode)
val optionRvList = findAllByClazz(getRoot(), Views.RecyclerView, root = true)
val optionRvList = findAllByClazz(getRoot(), Views.RecyclerView)
for (optionRv in optionRvList) {
val optionTvList = findAllOnceByClazz(optionRv, Views.TextView)
for (optionTv in optionTvList) {