Layout的部份新增一个EditText以及ImageView,目前画面如下:
首先点击按纽时先取得目前输入的内容并做前置的判断
val word = searchTitleInput.text.toString()
if (word.isEmpty()) return@setOnClickListener
searchTitleInput.setText("")
之所以会把EditText清空是因为Ptt有增加搜寻条件。
接着是判断目前画面状态
private val inBoardPattern = arrayOf(
"【主功能表】",
"请按任意键继续", // 进板画面
"文章选读", // 看板内
)
when (PttClient.getInstance().expect(inBoardPattern)) {
0 -> {
// first go into the board
val board = searchBoardInput.text.toString().trim()
if (board.isEmpty()) return@setOnClickListener
PttClient.getInstance().send("s${board}\r\n")
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
delay(200L)
var ret = PttClient.getInstance().expect(inBoardPattern)
while (ret == 1) {
if (ret == 1) {
PttClient.getInstance().send("q")
delay(200L)
ret = PttClient.getInstance().expect(inBoardPattern)
}
}
when (ret) {
0 -> { // "【主功能表】" -> 在看板外,无法搜寻文章
Log.e(mTag, "Out of board.\n${PttClient.getInstance().getScreen()}")
return@launch
}
2 -> { // "文章选读" -> 在看板内
searchTitle(word)
}
}
}
}
2 -> {
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
searchTitle(word)
}
}
else -> {
Log.e(mTag, "Wrong screen: \n${PttClient.getInstance().getScreen()}")
PttClient.getInstance().send("\r\nqqqqqqqqqqqq")
//TODO show alert
}
}
要是目前画面在主功能表的话,需要先进入看板再开始查询,进入看板相关的条件请见Day08及Day10,最後结果要是还是在主功能表的话代表找不到看板,那就不继续了。反之则进入searchTitle方法:要是目前画面已经在看板内的话,直接进入searchTitle方法即可。
会用到的Pattern
private val searchTitlePattern = arrayOf(
"抱歉,已达搜寻条件上限。",
"文章选读"
)
private suspend fun searchTitle(word: String) {
delay(200L)
PttClient.getInstance().send("/$word\r\n")
delay(200L)
when (PttClient.getInstance().expect(searchTitlePattern)) {
0 -> {
//TODO show Alert
Log.d(mTag, "Up to limit")
}
1 -> {
parseBoardArticle(PttClient.getInstance().getScreen())
}
else -> {
Log.e(
mTag,
"Wrong screen: \n${PttClient.getInstance().getScreen()}"
)
PttClient.getInstance().send("\r\nqqqqqqqqqqqq")
//TODO show alert
}
}
}
搜寻文章标题需使用"/",接着输入搜寻内容以及Enter即可。结果会有里面的两种情况,
目前进度就先到这边,parseBoardArticle是在解析搜寻的画面结果,我打算放在搜寻作者之後再做说明。
<<: Kotlin Android 第21天,从 0 到 ML - Retrofit and Repository
>>: Day 26 - Rancher Fleet Kubernetes 应用程序部署
Day35 Golang - Google Sheet 试算表应用 (Spreadsheet) Go...
终於到了最後一天了,感觉这阵子打了好多好多的靶机哦,希望过去的这些文章可以对大家有一些帮助。非常感谢...
出於书本 Chapter 2. Cracking the Hacker Mindset 如果我是恶意...
https://edm.bnext.com.tw/2021cpx/?utm_source=%E3%8...
知道什麽是自动测试之後,我们来看看怎麽进行和资料库互动的自动测试。 测试目标 假设我们现有的资料关联...