# Released under the MIT License. See LICENSE for details.
#
"""UI related to reporting bad behavior/etc."""
from __future__ import annotations
import bauiv1 as bui
[docs]
class ReportPlayerWindow(bui.Window):
"""Player for reporting naughty players."""
def __init__(self, account_id: str, origin_widget: bui.Widget):
self._width = 550
self._height = 220
self._account_id = account_id
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
overlay_stack = bui.get_special_widget('overlay_stack')
assert bui.app.classic is not None
uiscale = bui.app.ui_v1.uiscale
super().__init__(
root_widget=bui.containerwidget(
size=(self._width, self._height),
parent=overlay_stack,
transition='in_scale',
scale_origin_stack_offset=scale_origin,
scale=(
1.8
if uiscale is bui.UIScale.SMALL
else 1.35 if uiscale is bui.UIScale.MEDIUM else 1.0
),
)
)
self._cancel_button = bui.buttonwidget(
parent=self._root_widget,
scale=0.7,
position=(40, self._height - 50),
size=(50, 50),
label='',
on_activate_call=self.close,
autoselect=True,
color=(0.4, 0.4, 0.5),
icon=bui.gettexture('crossOut'),
iconscale=1.2,
)
bui.containerwidget(
edit=self._root_widget, cancel_button=self._cancel_button
)
bui.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.64),
size=(0, 0),
color=(1, 1, 1, 0.8),
scale=1.2,
h_align='center',
v_align='center',
text=bui.Lstr(resource='reportThisPlayerReasonText'),
maxwidth=self._width * 0.85,
)
bui.buttonwidget(
parent=self._root_widget,
size=(235, 60),
position=(20, 30),
label=bui.Lstr(resource='reportThisPlayerLanguageText'),
on_activate_call=self._on_language_press,
autoselect=True,
)
bui.buttonwidget(
parent=self._root_widget,
size=(235, 60),
position=(self._width - 255, 30),
label=bui.Lstr(resource='reportThisPlayerCheatingText'),
on_activate_call=self._on_cheating_press,
autoselect=True,
)
def _on_language_press(self) -> None:
from urllib import parse
plus = bui.app.plus
assert plus is not None
plus.add_v1_account_transaction(
{
'type': 'REPORT_ACCOUNT',
'reason': 'language',
'account': self._account_id,
}
)
body = bui.Lstr(resource='reportPlayerExplanationText').evaluate()
bui.open_url(
'mailto:support@froemling.net'
f'?subject={bui.appnameupper()} Player Report: '
+ self._account_id
+ '&body='
+ parse.quote(body)
)
self.close()
def _on_cheating_press(self) -> None:
from urllib import parse
plus = bui.app.plus
assert plus is not None
plus.add_v1_account_transaction(
{
'type': 'REPORT_ACCOUNT',
'reason': 'cheating',
'account': self._account_id,
}
)
body = bui.Lstr(resource='reportPlayerExplanationText').evaluate()
bui.open_url(
'mailto:support@froemling.net'
f'?subject={bui.appnameupper()} Player Report: '
+ self._account_id
+ '&body='
+ parse.quote(body)
)
self.close()
[docs]
def close(self) -> None:
"""Close the window."""
bui.containerwidget(edit=self._root_widget, transition='out_scale')
# 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