SC2: Fix /received display bugs (#3949)
* SC2: Fix location display in /received command * SC2: Backport broken markup fix in /received output from the dev branch * Cleanup
This commit is contained in:
parent
8f7e0dc441
commit
b982e9ebb4
|
@ -97,12 +97,12 @@ class ConfigurableOptionInfo(typing.NamedTuple):
|
|||
|
||||
|
||||
class ColouredMessage:
|
||||
def __init__(self, text: str = '') -> None:
|
||||
def __init__(self, text: str = '', *, keep_markup: bool = False) -> None:
|
||||
self.parts: typing.List[dict] = []
|
||||
if text:
|
||||
self(text)
|
||||
def __call__(self, text: str) -> 'ColouredMessage':
|
||||
add_json_text(self.parts, text)
|
||||
self(text, keep_markup=keep_markup)
|
||||
def __call__(self, text: str, *, keep_markup: bool = False) -> 'ColouredMessage':
|
||||
add_json_text(self.parts, text, keep_markup=keep_markup)
|
||||
return self
|
||||
def coloured(self, text: str, colour: str) -> 'ColouredMessage':
|
||||
add_json_text(self.parts, text, type="color", color=colour)
|
||||
|
@ -128,7 +128,7 @@ class StarcraftClientProcessor(ClientCommandProcessor):
|
|||
# Note(mm): Bold/underline can help readability, but unfortunately the CommonClient does not filter bold tags from command-line output.
|
||||
# Regardless, using `on_print_json` to get formatted text in the GUI and output in the command-line and in the logs,
|
||||
# without having to branch code from CommonClient
|
||||
self.ctx.on_print_json({"data": [{"text": text}]})
|
||||
self.ctx.on_print_json({"data": [{"text": text, "keep_markup": True}]})
|
||||
|
||||
def _cmd_difficulty(self, difficulty: str = "") -> bool:
|
||||
"""Overrides the current difficulty set for the world. Takes the argument casual, normal, hard, or brutal"""
|
||||
|
@ -257,7 +257,7 @@ class StarcraftClientProcessor(ClientCommandProcessor):
|
|||
print_faction_title()
|
||||
has_printed_faction_title = True
|
||||
(ColouredMessage('* ').item(item.item, self.ctx.slot, flags=item.flags)
|
||||
(" from ").location(item.location, self.ctx.slot)
|
||||
(" from ").location(item.location, item.player)
|
||||
(" by ").player(item.player)
|
||||
).send(self.ctx)
|
||||
|
||||
|
@ -278,7 +278,7 @@ class StarcraftClientProcessor(ClientCommandProcessor):
|
|||
for item in received_items_of_this_type:
|
||||
filter_match_count += len(received_items_of_this_type)
|
||||
(ColouredMessage(' * ').item(item.item, self.ctx.slot, flags=item.flags)
|
||||
(" from ").location(item.location, self.ctx.slot)
|
||||
(" from ").location(item.location, item.player)
|
||||
(" by ").player(item.player)
|
||||
).send(self.ctx)
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from typing import *
|
||||
import asyncio
|
||||
|
||||
from kvui import GameManager, HoverBehavior, ServerToolTip
|
||||
from NetUtils import JSONMessagePart
|
||||
from kvui import GameManager, HoverBehavior, ServerToolTip, KivyJSONtoTextParser
|
||||
from kivy.app import App
|
||||
from kivy.clock import Clock
|
||||
from kivy.uix.tabbedpanel import TabbedPanelItem
|
||||
|
@ -69,6 +70,18 @@ class MissionLayout(GridLayout):
|
|||
class MissionCategory(GridLayout):
|
||||
pass
|
||||
|
||||
|
||||
class SC2JSONtoKivyParser(KivyJSONtoTextParser):
|
||||
def _handle_text(self, node: JSONMessagePart):
|
||||
if node.get("keep_markup", False):
|
||||
for ref in node.get("refs", []):
|
||||
node["text"] = f"[ref={self.ref_count}|{ref}]{node['text']}[/ref]"
|
||||
self.ref_count += 1
|
||||
return super(KivyJSONtoTextParser, self)._handle_text(node)
|
||||
else:
|
||||
return super()._handle_text(node)
|
||||
|
||||
|
||||
class SC2Manager(GameManager):
|
||||
logging_pairs = [
|
||||
("Client", "Archipelago"),
|
||||
|
@ -87,6 +100,7 @@ class SC2Manager(GameManager):
|
|||
|
||||
def __init__(self, ctx) -> None:
|
||||
super().__init__(ctx)
|
||||
self.json_to_kivy_parser = SC2JSONtoKivyParser(ctx)
|
||||
|
||||
def clear_tooltip(self) -> None:
|
||||
if self.ctx.current_tooltip:
|
||||
|
|
Loading…
Reference in New Issue