Source code for bauiv1lib.account.unlink

# Released under the MIT License. See LICENSE for details.
#
"""UI functionality for unlinking accounts."""

from __future__ import annotations

import time
from typing import TYPE_CHECKING

import bauiv1 as bui

if TYPE_CHECKING:
    from typing import Any


[docs] class AccountUnlinkWindow(bui.Window): """A window to kick off account unlinks.""" def __init__(self, origin_widget: bui.Widget | None = None): plus = bui.app.plus assert plus is not None scale_origin: tuple[float, float] | None 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 transition = 'in_right' bg_color = (0.4, 0.4, 0.5) self._width = 540 self._height = 350 self._scroll_width = 400 self._scroll_height = 200 assert bui.app.classic is not None uiscale = bui.app.ui_v1.uiscale base_scale = ( 2.0 if uiscale is bui.UIScale.SMALL else 1.6 if uiscale is bui.UIScale.MEDIUM else 1.1 ) super().__init__( root_widget=bui.containerwidget( size=(self._width, self._height), transition=transition, scale=base_scale, scale_origin_stack_offset=scale_origin, stack_offset=( (0, -10) if uiscale is bui.UIScale.SMALL else (0, 0) ), ) ) self._cancel_button = bui.buttonwidget( parent=self._root_widget, position=(30, self._height - 50), size=(50, 50), scale=0.7, label='', color=bg_color, on_activate_call=self._cancel, autoselect=True, icon=bui.gettexture('crossOut'), iconscale=1.2, ) bui.textwidget( parent=self._root_widget, position=(self._width * 0.5, self._height * 0.88), size=(0, 0), text=bui.Lstr( resource='accountSettingsWindow.unlinkAccountsInstructionsText' ), maxwidth=self._width * 0.7, color=bui.app.ui_v1.infotextcolor, h_align='center', v_align='center', ) bui.containerwidget( edit=self._root_widget, cancel_button=self._cancel_button ) self._scrollwidget = bui.scrollwidget( parent=self._root_widget, highlight=False, position=( (self._width - self._scroll_width) * 0.5, self._height - 85 - self._scroll_height, ), size=(self._scroll_width, self._scroll_height), ) bui.containerwidget(edit=self._scrollwidget, claims_left_right=True) self._columnwidget = bui.columnwidget( parent=self._scrollwidget, border=2, margin=0, left_border=10 ) our_login_id = plus.get_v1_account_public_login_id() if our_login_id is None: entries = [] else: account_infos = plus.get_v1_account_misc_read_val_2( 'linkedAccounts2', [] ) entries = [ {'name': ai['d'], 'id': ai['id']} for ai in account_infos if ai['id'] != our_login_id ] # (avoid getting our selection stuck on an empty column widget) if not entries: bui.containerwidget(edit=self._scrollwidget, selectable=False) for i, entry in enumerate(entries): txt = bui.textwidget( parent=self._columnwidget, selectable=True, text=entry['name'], size=(self._scroll_width - 30, 30), autoselect=True, click_activate=True, on_activate_call=bui.Call(self._on_entry_selected, entry), ) bui.widget(edit=txt, left_widget=self._cancel_button) if i == 0: bui.widget(edit=txt, up_widget=self._cancel_button) def _on_entry_selected(self, entry: dict[str, Any]) -> None: plus = bui.app.plus assert plus is not None bui.screenmessage( bui.Lstr( resource='pleaseWaitText', fallback_resource='requestingText' ), color=(0, 1, 0), ) plus.add_v1_account_transaction( { 'type': 'ACCOUNT_UNLINK_REQUEST', 'accountID': entry['id'], 'expire_time': time.time() + 5, } ) plus.run_v1_account_transactions() bui.containerwidget( edit=self._root_widget, transition=self._transition_out ) def _cancel(self) -> None: bui.containerwidget( edit=self._root_widget, transition=self._transition_out )