def _purchase(self, item: str) -> None: from bastd.ui import account from bastd.ui import appinvite from ba.internal import serverget if item == 'app_invite': if _ba.get_account_state() != 'signed_in': account.show_sign_in_prompt() return appinvite.handle_app_invites_press() return # here we ping the server to ask if it's valid for us to # purchase this.. (better to fail now than after we've paid locally) app = ba.app serverget('bsAccountPurchaseCheck', { 'item': item, 'platform': app.platform, 'subplatform': app.subplatform, 'version': app.version, 'buildNumber': app.build_number }, callback=ba.WeakCall(self._purchase_check_result, item))
def _do_purchase_check(self, item: str, is_ticket_purchase: bool = False) -> None: from ba.internal import serverget # Here we ping the server to ask if it's valid for us to # purchase this. Better to fail now than after we've # paid locally. app = ba.app serverget( 'bsAccountPurchaseCheck', { 'item': item, 'platform': app.platform, 'subplatform': app.subplatform, 'version': app.version, 'buildNumber': app.build_number, 'purchaseType': 'ticket' if is_ticket_purchase else 'real' }, callback=ba.WeakCall(self._purchase_check_result, item, is_ticket_purchase), )
def __init__(self, transition: str = 'in_right', origin_widget: ba.Widget = None): # pylint: disable=too-many-statements from ba.internal import serverget app = ba.app # If they provided an origin-widget, scale up from that. scale_origin: Optional[Tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() transition = 'in_scale' else: self._transition_out = 'out_right' scale_origin = None self._width = 870.0 if app.small_ui else 670.0 x_inset = 100 if app.small_ui else 0 self._height = (390.0 if app.small_ui else 450.0 if app.med_ui else 520.0) self._spacing = 32 self._menu_open = False top_extra = 10 if app.small_ui else 0 super().__init__(root_widget=ba.containerwidget( size=(self._width, self._height + top_extra), transition=transition, toolbar_visibility='menu_minimal', scale_origin_stack_offset=scale_origin, scale=2.06 if app.small_ui else 1.4 if app.med_ui else 1.0, stack_offset=(0, -25) if app.small_ui else (0, 0))) self._prev_lang = "" self._prev_lang_list: List[str] = [] self._complete_langs_list: Optional[List] = None self._complete_langs_error = False self._language_popup: Optional[popup_ui.PopupMenu] = None # In vr-mode, the internal keyboard is currently the *only* option, # so no need to show this. self._show_always_use_internal_keyboard = (not app.vr_mode) self._scroll_width = self._width - (100 + 2 * x_inset) self._scroll_height = self._height - 115.0 self._sub_width = self._scroll_width * 0.95 self._sub_height = 740.0 if self._show_always_use_internal_keyboard: self._sub_height += 62 self._do_vr_test_button = app.vr_mode self._do_net_test_button = True self._extra_button_spacing = self._spacing * 2.5 if self._do_vr_test_button: self._sub_height += self._extra_button_spacing if self._do_net_test_button: self._sub_height += self._extra_button_spacing self._r = 'settingsWindowAdvanced' if app.toolbars and app.small_ui: ba.containerwidget(edit=self._root_widget, on_cancel_call=self._do_back) self._back_button = None else: self._back_button = ba.buttonwidget( parent=self._root_widget, position=(53 + x_inset, self._height - 60), size=(140, 60), scale=0.8, autoselect=True, label=ba.Lstr(resource='backText'), button_type='back', on_activate_call=self._do_back) ba.containerwidget(edit=self._root_widget, cancel_button=self._back_button) self._title_text = ba.textwidget(parent=self._root_widget, position=(0, self._height - 52), size=(self._width, 25), text=ba.Lstr(resource=self._r + '.titleText'), color=app.title_color, h_align="center", v_align="top") if self._back_button is not None: ba.buttonwidget(edit=self._back_button, button_type='backSmall', size=(60, 60), label=ba.charstr(ba.SpecialChar.BACK)) self._scrollwidget = ba.scrollwidget(parent=self._root_widget, position=(50 + x_inset, 50), simple_culling_v=20.0, highlight=False, size=(self._scroll_width, self._scroll_height)) ba.containerwidget(edit=self._scrollwidget, selection_loop_to_parent=True) self._subcontainer = ba.containerwidget(parent=self._scrollwidget, size=(self._sub_width, self._sub_height), background=False, selection_loop_to_parent=True) self._rebuild() # Rebuild periodically to pick up language changes/additions/etc. self._rebuild_timer = ba.Timer(1.0, ba.WeakCall(self._rebuild), repeat=True, timetype=ba.TimeType.REAL) # Fetch the list of completed languages. serverget('bsLangGetCompleted', {'b': app.build_number}, callback=ba.WeakCall(self._completed_langs_cb))
def __init__(self, edit_profile_window: EditProfileWindow, transition: str = 'in_right'): from ba.internal import serverget self._r = 'editProfileWindow' self._width = 680 self._height = 350 self._base_scale = (2.05 if ba.app.small_ui else 1.5 if ba.app.med_ui else 1.2) self._upgrade_start_time: Optional[float] = None self._name = edit_profile_window.get_name() self._edit_profile_window = weakref.ref(edit_profile_window) top_extra = 15 if ba.app.small_ui else 15 super().__init__(root_widget=ba.containerwidget( size=(self._width, self._height + top_extra), toolbar_visibility='menu_currency', transition=transition, scale=self._base_scale, stack_offset=(0, 15) if ba.app.small_ui else (0, 0))) cancel_button = ba.buttonwidget(parent=self._root_widget, position=(52, 30), size=(155, 60), scale=0.8, autoselect=True, label=ba.Lstr(resource='cancelText'), on_activate_call=self._cancel) self._upgrade_button = ba.buttonwidget( parent=self._root_widget, position=(self._width - 190, 30), size=(155, 60), scale=0.8, autoselect=True, label=ba.Lstr(resource='upgradeText'), on_activate_call=self._on_upgrade_press) ba.containerwidget(edit=self._root_widget, cancel_button=cancel_button, start_button=self._upgrade_button, selected_child=self._upgrade_button) ba.textwidget(parent=self._root_widget, position=(self._width * 0.5, self._height - 38), size=(0, 0), text=ba.Lstr(resource=self._r + '.upgradeToGlobalProfileText'), color=ba.app.title_color, maxwidth=self._width * 0.45, scale=1.0, h_align='center', v_align='center') ba.textwidget(parent=self._root_widget, position=(self._width * 0.5, self._height - 100), size=(0, 0), text=ba.Lstr(resource=self._r + '.upgradeProfileInfoText'), color=ba.app.infotextcolor, maxwidth=self._width * 0.8, scale=0.7, h_align='center', v_align='center') self._status_text = ba.textwidget( parent=self._root_widget, position=(self._width * 0.5, self._height - 160), size=(0, 0), text=ba.Lstr(resource=self._r + '.checkingAvailabilityText', subs=[('${NAME}', self._name)]), color=(0.8, 0.4, 0.0), maxwidth=self._width * 0.8, scale=0.65, h_align='center', v_align='center') self._price_text = ba.textwidget(parent=self._root_widget, position=(self._width * 0.5, self._height - 230), size=(0, 0), text='', color=(0.2, 1, 0.2), maxwidth=self._width * 0.8, scale=1.5, h_align='center', v_align='center') self._tickets_text: Optional[ba.Widget] if not ba.app.toolbars: self._tickets_text = ba.textwidget( parent=self._root_widget, position=(self._width * 0.9 - 5, self._height - 30), size=(0, 0), text=ba.charstr(ba.SpecialChar.TICKET) + '123', color=(0.2, 1, 0.2), maxwidth=100, scale=0.5, h_align='right', v_align='center') else: self._tickets_text = None serverget('bsGlobalProfileCheck', { 'name': self._name, 'b': ba.app.build_number }, callback=ba.WeakCall(self._profile_check_result)) self._cost = _ba.get_account_misc_read_val('price.global_profile', 500) self._status: Optional[str] = 'waiting' self._update_timer = ba.Timer(1.0, ba.WeakCall(self._update), timetype=ba.TimeType.REAL, repeat=True) self._update()
def __init__(self, account_id: str, profile_id: str = None, position: Tuple[float, float] = (0.0, 0.0), scale: float = None, offset: Tuple[float, float] = (0.0, 0.0)): from ba.internal import is_browser_likely_available, serverget self._account_id = account_id self._profile_id = profile_id if scale is None: scale = (2.6 if ba.app.small_ui else 1.8 if ba.app.med_ui else 1.4) self._transitioning_out = False self._width = 400 self._height = (300 if ba.app.small_ui else 400 if ba.app.med_ui else 450) self._subcontainer: Optional[ba.Widget] = None bg_color = (0.5, 0.4, 0.6) # Creates our _root_widget. popup.PopupWindow.__init__(self, position=position, size=(self._width, self._height), scale=scale, bg_color=bg_color, offset=offset) self._cancel_button = ba.buttonwidget( parent=self.root_widget, position=(50, self._height - 30), size=(50, 50), scale=0.5, label='', color=bg_color, on_activate_call=self._on_cancel_press, autoselect=True, icon=ba.gettexture('crossOut'), iconscale=1.2) self._title_text = ba.textwidget( parent=self.root_widget, position=(self._width * 0.5, self._height - 20), size=(0, 0), h_align='center', v_align='center', scale=0.6, text=ba.Lstr(resource='playerInfoText'), maxwidth=200, color=(0.7, 0.7, 0.7, 0.7)) self._scrollwidget = ba.scrollwidget(parent=self.root_widget, size=(self._width - 60, self._height - 70), position=(30, 30), capture_arrows=True, simple_culling_v=10) ba.widget(edit=self._scrollwidget, autoselect=True) self._loading_text = ba.textwidget( parent=self._scrollwidget, scale=0.5, text=ba.Lstr(value='${A}...', subs=[('${A}', ba.Lstr(resource='loadingText'))]), size=(self._width - 60, 100), h_align='center', v_align='center') # In cases where the user most likely has a browser/email, lets # offer a 'report this user' button. if (is_browser_likely_available() and _ba.get_account_misc_read_val( 'showAccountExtrasMenu', False)): self._extras_menu_button = ba.buttonwidget( parent=self.root_widget, size=(20, 20), position=(self._width - 60, self._height - 30), autoselect=True, label='...', button_type='square', color=(0.64, 0.52, 0.69), textcolor=(0.57, 0.47, 0.57), on_activate_call=self._on_extras_menu_press) ba.containerwidget(edit=self.root_widget, cancel_button=self._cancel_button) serverget('bsAccountInfo', { 'buildNumber': ba.app.build_number, 'accountID': self._account_id, 'profileID': self._profile_id }, callback=ba.WeakCall(self._on_query_response))