Source code for bauiv1lib.store.newstore
# Released under the MIT License. See LICENSE for details.
#
"""Shiny new doc-ui based store."""
from __future__ import annotations
from typing import override, TYPE_CHECKING
from bauiv1lib.docui import DocUIController
import bauiv1 as bui
if TYPE_CHECKING:
from bacommon.docui import DocUIRequest, DocUIResponse
from bauiv1lib.docui import DocUILocalAction
[docs]
class StoreUIController(DocUIController):
"""DocUI setup for store."""
[docs]
@override
def fulfill_request(self, request: DocUIRequest) -> DocUIResponse:
return self.fulfill_request_cloud(request, 'classicstore')
[docs]
@override
def local_action(self, action: DocUILocalAction) -> None:
if action.name == 'get_tokens':
self._get_tokens(action)
elif action.name == 'restore_purchases':
self._restore_purchases()
else:
bui.screenmessage(
f'Invalid local-action "{action.name}".', color=(1, 0, 0)
)
bui.getsound('error').play()
def _restore_purchases(self) -> None:
plus = bui.app.plus
assert plus is not None
# We should always be signed in here. Make noise if not.
if plus.accounts.primary is None:
bui.screenmessage(
bui.Lstr(resource='notSignedInText'), color=(1, 0, 0)
)
bui.getsound('error').play()
return
plus.restore_purchases()
def _get_tokens(self, action: DocUILocalAction) -> None:
from bauiv1lib.gettokens import show_get_tokens_window
bui.getsound('swish').play()
show_get_tokens_window(origin_widget=bui.existing(action.widget))
# Docs-generation hack; import some stuff that we likely only forward-declared
# in our actual source code so that docs tools can find it.
from typing import (Coroutine, Any, Literal, Callable,
Generator, Awaitable, Sequence, Self)
import asyncio
from concurrent.futures import Future
from pathlib import Path
from enum import Enum