Fix: Ensure assignment entry loaded

This commit is contained in:
Zebartin 2024-05-20 18:07:39 +08:00 committed by LmeSzinc
parent 43fddd445c
commit a1a77f921e
2 changed files with 29 additions and 4 deletions

View File

@ -35,7 +35,6 @@ class Assignment(AssignmentClaim, SynthesizeUI):
self.has_new_dispatch = False self.has_new_dispatch = False
self.ensure_scroll_top(page_menu) self.ensure_scroll_top(page_menu)
self.ui_ensure(page_assignment) self.ui_ensure(page_assignment)
self._wait_until_group_loaded()
event_ongoing = next(( event_ongoing = next((
g for g in self._iter_groups() g for g in self._iter_groups()
if isinstance(g, AssignmentEventGroup) if isinstance(g, AssignmentEventGroup)
@ -91,12 +90,14 @@ class Assignment(AssignmentClaim, SynthesizeUI):
logger.info( logger.info(
f'User specified assignments: {", ".join([x.name for x in assignments])}') f'User specified assignments: {", ".join([x.name for x in assignments])}')
remain = None remain = None
insight = False
for assignment in assignments: for assignment in assignments:
if assignment in self.dispatched: if assignment in self.dispatched:
continue continue
logger.hr('Assignment inlist', level=2) logger.hr('Assignment inlist', level=2)
logger.info(f'Check assignment inlist: {assignment}') logger.info(f'Check assignment inlist: {assignment}')
self.goto_entry(assignment) self.goto_entry(assignment, insight=insight)
insight = True
if remain is None: if remain is None:
_, remain, _ = self._limit_status _, remain, _ = self._limit_status
status = self._check_assignment_status() status = self._check_assignment_status()
@ -106,6 +107,7 @@ class Assignment(AssignmentClaim, SynthesizeUI):
if status == AssignmentStatus.DISPATCHED: if status == AssignmentStatus.DISPATCHED:
self.dispatched[assignment] = datetime.now() + \ self.dispatched[assignment] = datetime.now() + \
self._get_assignment_time() self._get_assignment_time()
insight = False
continue continue
# General assignments must be dispatchable here # General assignments must be dispatchable here
if remain <= 0: if remain <= 0:

View File

@ -40,7 +40,8 @@ class AssignmentOcr(Ocr):
(KEYWORDS_ASSIGNMENT_ENTRY.Legend_of_the_Puppet_Master, '^师传说'), (KEYWORDS_ASSIGNMENT_ENTRY.Legend_of_the_Puppet_Master, '^师传说'),
(KEYWORDS_ASSIGNMENT_ENTRY.The_Wages_of_Humanity, '[赠]养人类'), (KEYWORDS_ASSIGNMENT_ENTRY.The_Wages_of_Humanity, '[赠]养人类'),
(KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*的偷车贼.*'), (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Car_Thief, '.*的偷车贼.*'),
(KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Synesthesia_Beacon_Function_Iteration, '联觉信标功能[送]代'), (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Synesthesia_Beacon_Function_Iteration,
'联觉信标功能[送]代'),
], ],
'en': [ 'en': [
# (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Food_Improvement_Plan.name, # (KEYWORDS_ASSIGNMENT_EVENT_ENTRY.Food_Improvement_Plan.name,
@ -160,6 +161,7 @@ class AssignmentUI(UI):
logger.hr('Assignment group goto', level=3) logger.hr('Assignment group goto', level=3)
if ASSIGNMENT_GROUP_SWITCH.set(group, self): if ASSIGNMENT_GROUP_SWITCH.set(group, self):
self._wait_until_entry_loaded() self._wait_until_entry_loaded()
self._wait_until_correct_entry_loaded(group)
def goto_entry(self, entry: AssignmentEntry, insight: bool = True): def goto_entry(self, entry: AssignmentEntry, insight: bool = True):
""" """
@ -218,6 +220,27 @@ class AssignmentUI(UI):
logger.info('Entry loaded') logger.info('Entry loaded')
break break
def _wait_until_correct_entry_loaded(self, group: AssignmentGroup):
skip_first_screenshot = True
timeout = Timer(3, count=3).start()
while 1:
if skip_first_screenshot:
skip_first_screenshot = False
else:
self.device.screenshot()
if timeout.reached():
logger.warning('Wait correct entry loaded timeout')
break
ASSIGNMENT_ENTRY_LIST.load_rows(self)
if all(
x.matched_keyword.group == group
for x in ASSIGNMENT_ENTRY_LIST.cur_buttons
):
logger.info('Correct entry loaded')
break
@property @property
def _limit_status(self) -> tuple[int, int, int]: def _limit_status(self) -> tuple[int, int, int]:
self.device.screenshot() self.device.screenshot()
@ -279,7 +302,7 @@ class AssignmentUI(UI):
""" """
Iterate entries from top to bottom Iterate entries from top to bottom
""" """
ASSIGNMENT_ENTRY_LIST.load_rows(main=self) # load_rows is done in _wait_until_correct_entry_loaded already
# Freeze ocr results here # Freeze ocr results here
yield from [ yield from [
button.matched_keyword button.matched_keyword