feat(android): collect bounded Pinduoduo candidates
This commit is contained in:
@@ -48,8 +48,13 @@ import kotlinx.coroutines.launch
|
||||
import rikka.shizuku.Shizuku
|
||||
import android.util.Log
|
||||
import com.roubao.autopilot.pinduoduo.AndroidPinduoduoUiDriver
|
||||
import com.roubao.autopilot.pinduoduo.AndroidPinduoduoCandidateDriver
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoCandidateAutomation
|
||||
import com.roubao.autopilot.pinduoduo.CandidateBrowsePhase
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoCandidateEvidence
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoCandidateWorkflow
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoProbeAutomation
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoSearchAutomation
|
||||
import com.roubao.autopilot.pinduoduo.PinduoduoSearchWorkflow
|
||||
import com.roubao.autopilot.workflow.WorkflowReport
|
||||
import com.roubao.autopilot.workflow.WorkflowRunner
|
||||
import com.roubao.autopilot.workflow.WorkflowState
|
||||
@@ -76,6 +81,8 @@ class MainActivity : ComponentActivity() {
|
||||
private val searchProbeState = mutableStateOf(WorkflowState.IDLE)
|
||||
private val searchProbeStepId = mutableStateOf<String?>(null)
|
||||
private val searchProbeReport = mutableStateOf<WorkflowReport?>(null)
|
||||
private val candidateEvidence =
|
||||
mutableStateOf<List<PinduoduoCandidateEvidence>>(emptyList())
|
||||
private var searchProbeRunner: WorkflowRunner? = null
|
||||
private var searchProbeJob: Job? = null
|
||||
|
||||
@@ -198,6 +205,7 @@ class MainActivity : ComponentActivity() {
|
||||
val probeState by remember { searchProbeState }
|
||||
val probeStepId by remember { searchProbeStepId }
|
||||
val probeReport by remember { searchProbeReport }
|
||||
val evidence by remember { candidateEvidence }
|
||||
|
||||
// 监听跳转事件
|
||||
LaunchedEffect(navigateToRecord, recordId) {
|
||||
@@ -286,6 +294,7 @@ class MainActivity : ComponentActivity() {
|
||||
state = probeState,
|
||||
currentStepId = probeStepId,
|
||||
report = probeReport,
|
||||
candidateEvidenceCount = evidence.size,
|
||||
onStart = { startSearchProbe() },
|
||||
onStop = { stopSearchProbe() }
|
||||
)
|
||||
@@ -384,13 +393,23 @@ class MainActivity : ComponentActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
val candidateAutomation = PinduoduoCandidateAutomation(
|
||||
AndroidPinduoduoCandidateDriver(this)
|
||||
)
|
||||
candidateAutomation.reset()
|
||||
val runner = WorkflowRunner(
|
||||
PinduoduoSearchAutomation(AndroidPinduoduoUiDriver(this))
|
||||
PinduoduoProbeAutomation(
|
||||
searchAutomation = PinduoduoSearchAutomation(
|
||||
AndroidPinduoduoUiDriver(this)
|
||||
),
|
||||
candidateAutomation = candidateAutomation
|
||||
)
|
||||
)
|
||||
searchProbeRunner = runner
|
||||
searchProbeReport.value = null
|
||||
searchProbeState.value = WorkflowState.IDLE
|
||||
searchProbeStepId.value = null
|
||||
candidateEvidence.value = emptyList()
|
||||
searchProbeJob = lifecycleScope.launch {
|
||||
val stateCollector = launch {
|
||||
runner.state.collect { state -> searchProbeState.value = state }
|
||||
@@ -398,13 +417,27 @@ class MainActivity : ComponentActivity() {
|
||||
val stepCollector = launch {
|
||||
runner.currentStepId.collect { stepId -> searchProbeStepId.value = stepId }
|
||||
}
|
||||
val evidenceCollector = launch {
|
||||
candidateAutomation.evidence.collect { evidence ->
|
||||
candidateEvidence.value = evidence
|
||||
}
|
||||
}
|
||||
val candidatePhaseCollector = launch {
|
||||
candidateAutomation.phase.collect { phase ->
|
||||
if (phase != CandidateBrowsePhase.IDLE) {
|
||||
Log.d(TAG, "Candidate probe phase: ${phase.name}")
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
val report = runner.run(PinduoduoSearchWorkflow.steps())
|
||||
val report = runner.run(PinduoduoCandidateWorkflow.steps())
|
||||
searchProbeReport.value = report
|
||||
searchProbeState.value = report.state
|
||||
} finally {
|
||||
stateCollector.cancel()
|
||||
stepCollector.cancel()
|
||||
evidenceCollector.cancel()
|
||||
candidatePhaseCollector.cancel()
|
||||
searchProbeRunner = null
|
||||
refreshReadiness()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user