diff --git a/mapadroid/account_handler/AccountHandler.py b/mapadroid/account_handler/AccountHandler.py index c4160b42b..a25c4a8bf 100644 --- a/mapadroid/account_handler/AccountHandler.py +++ b/mapadroid/account_handler/AccountHandler.py @@ -48,13 +48,13 @@ async def get_account(self, device_id: int, purpose: AccountPurpose, # TODO: Filter only unassigned or assigned to same device first logins: Dict[int, SettingsPogoauth] = await SettingsPogoauthHelper.get_avail_accounts( session, self._db_wrapper.get_instance_id(), auth_type=None, device_id=device_id) - logger.info("Got {} before filtering for burnt or not fitting the usage.", len(logins)) # Filter all burnt and all which do not match the purpose. E.g., if the purpose is mon scanning. logins_filtered: List[SettingsPogoauth] = [auth_entry for auth_id, auth_entry in logins.items() if not self._is_burnt(auth_entry) and self._is_usable_for_purpose(auth_entry, purpose, location_to_scan)] logins_filtered.sort(key=lambda x: DatetimeWrapper.fromtimestamp(0) if x.last_burn is None else x.last_burn) + logger.info("Got {} before filtering and {} after (burnt, wrong level)", len(logins), len(logins_filtered)) login_to_use: Optional[SettingsPogoauth] = None if not logins_filtered: logger.warning("No auth found for {}", device_id) diff --git a/mapadroid/ocr/screenPath.py b/mapadroid/ocr/screenPath.py index e70146214..88aad679f 100644 --- a/mapadroid/ocr/screenPath.py +++ b/mapadroid/ocr/screenPath.py @@ -277,6 +277,9 @@ async def __handle_screentype(self, screentype: ScreenType, screentype = await self.__handle_adventure_sync_screen(screentype) elif screentype == ScreenType.WILLOWGO: screentype = await self.__handle_tutorial_end() + elif screentype == ScreenType.HARDWARE_UNITY_UNSUPPORTED: + logger.warning('Detected unsupported hardware screen, PD could not handle that?') + screentype = await self.__handle_hardware_unsupported_unity_screen(diff, global_dict) elif screentype == ScreenType.SN: self._nextscreen = ScreenType.UNDEFINED elif screentype == ScreenType.UPDATE: @@ -465,6 +468,10 @@ async def __handle_ptc_login(self) -> ScreenType: exit_keyboard_y: int = 300 for item in xmlroot.iter('node'): + if "android.widget.ProgressBar" in item.attrib["class"]: + logger.warning("PTC page still loading, sleeping for extra 12 seconds") + await asyncio.sleep(12) + return ScreenType.PTC if "Access denied" in item.attrib["text"]: logger.warning("WAF on PTC login attempt detected") # Reload the page 1-3 times @@ -1014,6 +1021,11 @@ async def __handle_login_timeout(self, diff, global_dict) -> None: self._nextscreen = ScreenType.UNDEFINED click_text = 'SIGNOUT,SIGN,ABMELDEN,_DECONNECTER' await self.__click_center_button_text(click_text, diff, global_dict) + + async def __handle_hardware_unsupported_unity_screen(self, diff, global_dict) -> None: + self._nextscreen = ScreenType.UNDEFINED + click_text = 'CONTINUE' # no idea if this gets translated to different lang? + await self.__click_center_button_text(click_text, diff, global_dict) async def _take_and_analyze_screenshot(self, delay_after=0.0, delay_before=0.0, errorscreen: bool = False) -> \ Optional[Tuple[ScreenType, diff --git a/mapadroid/ocr/screen_type.py b/mapadroid/ocr/screen_type.py index a45875c10..9c5878c3f 100644 --- a/mapadroid/ocr/screen_type.py +++ b/mapadroid/ocr/screen_type.py @@ -11,6 +11,7 @@ class ScreenType(Enum): RETRY = 6 # Failed to log in. Green button on top: RETRY - no background button below: TRY A DIFFERENT ACCOUNT WRONG = 7 # incorrect credentials? GAMEDATA = 8 # game data could not be fetched from server + HARDWARE_UNITY_UNSUPPORTED = 9 # Your device does not match hardware requirements for this application CONTINUE GGL = 10 # Google account picker PERMISSION = 11 # permission grant overlay (Android) MARKETING = 12 # marketing notification request (pogo) diff --git a/mapadroid/ocr/utils.py b/mapadroid/ocr/utils.py index a4f145423..5cf8dc525 100644 --- a/mapadroid/ocr/utils.py +++ b/mapadroid/ocr/utils.py @@ -18,9 +18,10 @@ 'AUTRE', 'AUTORISER'], 7: ['incorrect.', 'attempts', 'falsch.', 'gesperrt'], 8: ['Spieldaten', 'abgerufen', 'lecture', 'depuis', 'server', 'data'], + 9: ['hardware', 'requirements'], 12: ['Events,', 'Benachrichtigungen', 'Einstellungen', 'events,', 'offers,', 'notifications', 'évenements,', 'evenements,', 'offres'], - 14: ['kompatibel', 'compatible', 'OS', 'software', 'device', 'Gerät', + 14: ['kompatibel', 'compatible', 'OS', 'software', 'Gerät', 'Betriebssystem', 'logiciel'], 15: ['continuer...', 'aktualisieren?', 'now?', 'Aktualisieren', 'Aktualisieren,', 'aktualisieren', 'update', 'continue...', 'Veux-tu', 'Fais', 'continuer'], diff --git a/mapadroid/worker/strategy/AbstractWorkerStrategy.py b/mapadroid/worker/strategy/AbstractWorkerStrategy.py index 47edf779b..bee73f10d 100644 --- a/mapadroid/worker/strategy/AbstractWorkerStrategy.py +++ b/mapadroid/worker/strategy/AbstractWorkerStrategy.py @@ -257,11 +257,12 @@ async def start_pogo(self) -> bool: if start_result: logger.success("startPogo: Started pogo successfully...") - ip_of_device: Optional[str] = await self._communicator.get_external_ip() - if not ip_of_device: - logger.warning("Cannot retrieve IP of device.") - else: - await self._mapping_manager.login_tracking_set_ip(self._worker_state.origin, ip_of_device) + if MadGlobals.application_args.enable_login_tracking: + ip_of_device: Optional[str] = await self._communicator.get_external_ip() + if not ip_of_device: + logger.warning("Cannot retrieve IP of device.") + else: + await self._mapping_manager.login_tracking_set_ip(self._worker_state.origin, ip_of_device) await self._wait_pogo_start_delay() start_delay: int = await self.get_devicesettings_value(