A few changes and fixes

This commit is contained in:
Vishal 2025-01-14 16:49:58 +05:30 committed by GitHub
parent f7240a4b7f
commit 1c7cfc7a58
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,29 +1,30 @@
# ba_meta require api 9
from babase._meta import EXPORT_CLASS_NAME_SHORTCUTS
import babase
import _babase
import bauiv1 as bui
import _bauiv1
import _bascenev1
import bauiv1 as bui
from bauiv1lib import popup, confirm
from babase._meta import EXPORT_CLASS_NAME_SHORTCUTS
from bauiv1lib.settings.allsettings import AllSettingsWindow
import urllib.request
import http.client
import socket
import ssl
import json
import ssl
import re
import os
import sys
import asyncio
import re
import pathlib
import contextlib
import hashlib
import copy
import asyncio
import pathlib
import hashlib
import contextlib
from typing import cast, override
from datetime import datetime
from typing import cast, override
# Modules used for overriding AllSettingsWindow
import logging
@ -616,21 +617,8 @@ class PluginLocal:
for entry_point, plugin_info in babase.app.config["Plugins"].items():
if entry_point.startswith(self._entry_point_initials) and plugin_info["enabled"]:
return True
# XXX: The below logic is more accurate but less efficient, since it actually
# reads the local plugin file and parses entry points from it.
# for entry_point in await self.get_entry_points():
# if babase.app.config["Plugins"][entry_point]["enabled"]:
# return True
return False
# XXX: Commenting this out for now, since `enable` and `disable` currently have their
# own separate logic.
# async def _set_status(self, to_enable=True):
# for entry_point in await self.get_entry_points:
# if entry_point not in babase.app.config["Plugins"]:
# babase.app.config["Plugins"][entry_point] = {}
# babase.app.config["Plugins"][entry_point]["enabled"] = to_enable
async def enable(self):
for entry_point in await self.get_entry_points():
if entry_point not in babase.app.config["Plugins"]:
@ -642,7 +630,6 @@ class PluginLocal:
bui.screenmessage(f"{entry_point} loaded")
if await self.has_minigames():
self.load_minigames()
# await self._set_status(to_enable=True)
self.save()
def load_plugin(self, entry_point):
@ -659,11 +646,7 @@ class PluginLocal:
def disable(self):
for entry_point, plugin_info in babase.app.config["Plugins"].items():
if entry_point.startswith(self._entry_point_initials):
# if plugin_info["enabled"]:
plugin_info["enabled"] = False
# XXX: The below logic is more accurate but less efficient, since it actually
# reads the local plugin file and parses entry points from it.
# await self._set_status(to_enable=False)
self.save()
def set_version(self, version):
@ -671,15 +654,6 @@ class PluginLocal:
app.config["Community Plugin Manager"]["Installed Plugins"][self.name]["version"] = version
return self
# def set_entry_points(self):
# if not "entry_points" in babase.app.config["Community Plugin Manager"]
# ["Installed Plugins"][self.name]:
# babase.app.config["Community Plugin Manager"]["Installed Plugins"]
# [self.name]["entry_points"] = []
# for entry_point in await self.get_entry_points():
# babase.app.config["Community Plugin Manager"]["Installed Plugins"][self.name]
# ["entry_points"].append(entry_point)
async def set_content(self, content):
if not self._content:
@ -894,7 +868,6 @@ class ChangelogWindow(popup.PopupWindow):
size=(60, 60),
scale=0.8,
label=babase.charstr(babase.SpecialChar.BACK),
# autoselect=True,
button_type='backSmall',
on_activate_call=self._back)
@ -974,7 +947,6 @@ class AuthorsWindow(popup.PopupWindow):
size=(60, 60),
scale=0.8,
label=babase.charstr(babase.SpecialChar.BACK),
# autoselect=True,
button_type='backSmall',
on_activate_call=self._back)
@ -1058,8 +1030,6 @@ class PluginWindow(popup.PopupWindow):
transition = 'in_scale'
self._root_widget = bui.containerwidget(size=(width, height),
# parent=_babase.get_special_widget(
# 'overlay_stack'),
on_outside_click_call=self._cancel,
transition=transition,
scale=(2.1 if _uiscale is babase.UIScale.SMALL else 1.5
@ -1096,14 +1066,8 @@ class PluginWindow(popup.PopupWindow):
maxwidth=width * 0.9,
draw_controller=author_text_control_btn,
)
pos -= 35
# status = bui.textwidget(parent=self._root_widget,
# position=(width * 0.49, pos), size=(0, 0),
# h_align='center', v_align='center',
# text=status_text, scale=text_scale * 0.8,
# color=color, maxwidth=width * 0.9)
pos -= 25
# info =
pos -= 60
# Info
bui.textwidget(parent=self._root_widget,
position=(width * 0.49, pos), size=(0, 0),
h_align='center', v_align='center',
@ -1195,7 +1159,6 @@ class PluginWindow(popup.PopupWindow):
size=(40, 40),
button_type="square",
label="",
# color=bui.app.ui_v1.title_color,
color=(0.6, 0.53, 0.63),
on_activate_call=lambda: bui.open_url(self.plugin.view_url))
bui.imagewidget(parent=self._root_widget,
@ -1232,7 +1195,6 @@ class PluginWindow(popup.PopupWindow):
size=(40, 40),
button_type="square",
label="",
# color=bui.app.ui_v1.title_color,
color=(0.6, 0.53, 0.63),
on_activate_call=tutorial_confirm_window)
@ -1274,9 +1236,6 @@ class PluginWindow(popup.PopupWindow):
texture=bui.gettexture("settingsIcon"),
draw_controller=settings_button)
# bui.containerwidget(edit=self._root_widget, selected_child=button3)
# bui.containerwidget(edit=self._root_widget, start_button=button3)
def _ok(self) -> None:
bui.containerwidget(edit=self._root_widget, transition='out_scale')
@ -1512,13 +1471,9 @@ class PluginSourcesWindow(popup.PopupWindow):
self.scale_origin = origin_widget.get_screen_space_center()
b_textcolor = (0.75, 0.7, 0.8)
# s = 1.1 if _uiscale is babase.UIScale.SMALL else 1.27 if babase.UIScale.MEDIUM else 1.57
# text_scale = 0.7 * s
self._transition_out = 'out_scale'
transition = 'in_scale'
self._root_widget = bui.containerwidget(size=(400, 340),
# parent=_babase.get_special_widget(
# 'overlay_stack'),
on_outside_click_call=self._ok,
transition=transition,
scale=(2.1 if _uiscale is babase.UIScale.SMALL else 1.5
@ -1558,21 +1513,15 @@ class PluginSourcesWindow(popup.PopupWindow):
delete_source_button = bui.buttonwidget(parent=self._root_widget,
position=(delete_source_button_position_pos_x,
delete_source_button_position_pos_y),
size=(25, 25),
size=(25, 25), label="",
on_activate_call=self.delete_selected_source,
label="",
# texture=bui.gettexture("crossOut"),
button_type="square",
color=(0.6, 0, 0),
textcolor=b_textcolor,
# autoselect=True,
text_scale=1)
color=(0.6, 0, 0))
bui.imagewidget(parent=self._root_widget,
position=(delete_source_button_position_pos_x + 2,
delete_source_button_position_pos_y),
size=(25, 25),
color=(5, 2, 2),
size=(25, 25), color=(5, 2, 2),
texture=bui.gettexture("crossOut"),
draw_controller=delete_source_button)
@ -1593,7 +1542,6 @@ class PluginSourcesWindow(popup.PopupWindow):
)
self._add_source_widget = bui.textwidget(parent=self._root_widget,
# text="rikkolovescats/sahilp-plugins",
size=(335, 50),
position=(21, 22),
h_align='left',
@ -1601,7 +1549,6 @@ class PluginSourcesWindow(popup.PopupWindow):
editable=True,
scale=0.75,
maxwidth=215,
# autoselect=True,
description="Add Source")
bui.buttonwidget(parent=self._root_widget,
@ -1610,11 +1557,9 @@ class PluginSourcesWindow(popup.PopupWindow):
on_activate_call=lambda: loop.create_task(self.add_source()),
label="",
texture=bui.gettexture("startButton"),
# texture=bui.gettexture("chestOpenIcon"),
button_type="square",
color=(0, 0.9, 0),
textcolor=b_textcolor,
# autoselect=True,
text_scale=1)
self.draw_sources()
@ -1626,12 +1571,9 @@ class PluginSourcesWindow(popup.PopupWindow):
color = (1, 1, 1)
for custom_source in babase.app.config["Community Plugin Manager"]["Custom Sources"]:
bui.textwidget(parent=self._columnwidget,
# size=(410, 30),
selectable=True,
# always_highlight=True,
color=color,
text=custom_source,
# click_activate=True,
on_select_call=lambda: self.select_source(custom_source),
h_align='left',
v_align='center',
@ -1777,7 +1719,6 @@ class PluginManagerWindow(bui.MainWindow):
size=(60, 60),
scale=0.8,
label=babase.charstr(babase.SpecialChar.BACK),
# autoselect=True,
button_type='backSmall',
on_activate_call=self.main_window_back)
@ -1882,9 +1823,7 @@ class PluginManagerWindow(bui.MainWindow):
category_pos_y = self._height - (141 if _uiscale is babase.UIScale.SMALL else
110 if _uiscale is babase.UIScale.MEDIUM else 110)
b_size = (140, 30)
# b_textcolor = (0.75, 0.7, 0.8)
b_textcolor = (0.8, 0.8, 0.85)
# b_color = (0.6, 0.53, 0.63)
if self.alphabet_order_selection_button is None:
self.alphabet_order_selection_button = bui.buttonwidget(parent=self._root_widget,
@ -1916,9 +1855,7 @@ class PluginManagerWindow(bui.MainWindow):
self.show_categories_window),
label=label,
button_type="square",
# color=b_color,
textcolor=b_textcolor,
# autoselect=True,
text_scale=0.6)
else:
self.category_selection_button = bui.buttonwidget(edit=self.category_selection_button,
@ -1997,21 +1934,6 @@ class PluginManagerWindow(bui.MainWindow):
self.selected_category, search_term=filter_text.lower(), order=self.selected_alphabet_order)
except CategoryDoesNotExist:
pass
# XXX: This may be more efficient, but we need a way to get a plugin's textwidget
# attributes like color, position and more.
# for plugin in self._columnwidget.get_children():
# for name, widget in tuple(self.plugins_in_current_view.items()):
# # print(bui.textwidget(query=plugin))
# # plugin.delete()
# print(dir(widget))
# if filter_text in name:
# import random
# if random.random() > 0.9:
# bui.textwidget(edit=widget).delete()
# else:
# bui.textwidget(edit=widget, position=None)
# else:
# bui.textwidget(edit=widget, position=None)
def draw_settings_icon(self):
settings_pos_x = (610 if _uiscale is babase.UIScale.SMALL else
@ -2019,7 +1941,6 @@ class PluginManagerWindow(bui.MainWindow):
settings_pos_y = (130 if _uiscale is babase.UIScale.SMALL else
60 if _uiscale is babase.UIScale.MEDIUM else 70)
controller_button = bui.buttonwidget(parent=self._root_widget,
# autoselect=True,
position=(settings_pos_x, settings_pos_y),
size=(30, 30),
button_type="square",
@ -2041,7 +1962,6 @@ class PluginManagerWindow(bui.MainWindow):
108 if _uiscale is babase.UIScale.MEDIUM else 120)
controller_button = bui.buttonwidget(parent=self._root_widget,
# autoselect=True,
position=(refresh_pos_x, refresh_pos_y),
size=(30, 30),
button_type="square",
@ -2057,24 +1977,16 @@ class PluginManagerWindow(bui.MainWindow):
def search_term_filterer(self, plugin, search_term):
# This helps resolve "plugin name" to "plugin_name".
if search_term in plugin.info["description"].lower():
return True
search_term = search_term.replace(" ", "_")
if search_term in plugin.name:
return True
if search_term in plugin.info["description"].lower():
return True
for author in plugin.info["authors"]:
if search_term in author["name"].lower():
return True
return False
# async def draw_plugin_names(self, category):
# for plugin in self._columnwidget.get_children():
# plugin.delete()
# plugins = await self.plugin_manager.categories[category].get_plugins()
# plugin_names_to_draw = tuple(self.draw_plugin_name(plugin) for plugin in plugins)
# await asyncio.gather(*plugin_names_to_draw)
# XXX: Not sure if this is the best way to handle search filters.
async def draw_plugin_names(self, category, search_term="", refresh=False, order='a_z'):
# Re-draw plugin list UI if either search term or category was switched.
@ -2161,7 +2073,6 @@ class PluginManagerWindow(bui.MainWindow):
selectable=True,
always_highlight=True,
color=color,
# on_select_call=lambda: None,
text=plugin.name.replace('_', ' ').title(),
click_activate=True,
on_activate_call=lambda: self.show_plugin_window(plugin),
@ -2246,8 +2157,6 @@ class PluginManagerSettingsWindow(popup.PopupWindow):
button_size = (32 * s, 32 * s)
# index = await self._plugin_manager.get_index()
self._root_widget = bui.containerwidget(size=(width, height),
# parent=_babase.get_special_widget(
# 'overlay_stack'),
on_outside_click_call=self._ok,
transition=transition,
scale=(2.1 if _uiscale is babase.UIScale.SMALL else 1.5
@ -2361,8 +2270,7 @@ class PluginManagerSettingsWindow(popup.PopupWindow):
color=(1, 1, 1),
draw_controller=self.github_button)
bui.containerwidget(edit=self._root_widget,
on_cancel_call=self._ok)
bui.containerwidget(edit=self._root_widget, on_cancel_call=self._ok)
try:
plugin_manager_update_available = await self._plugin_manager.get_update_details()
@ -2370,7 +2278,6 @@ class PluginManagerSettingsWindow(popup.PopupWindow):
plugin_manager_update_available = False
if plugin_manager_update_available:
text_color = (0.75, 0.2, 0.2)
button_size = (95 * s, 32 * s)
update_button_label = f'Update to v{plugin_manager_update_available[0]}'
self._update_button = bui.buttonwidget(parent=self._root_widget,
@ -2424,14 +2331,10 @@ class PluginManagerSettingsWindow(popup.PopupWindow):
def toggle_setting(self, setting, set_value):
self.settings[setting] = set_value
if self.settings == babase.app.config["Community Plugin Manager"]["Settings"]:
check = self.settings == babase.app.config["Community Plugin Manager"]["Settings"]
bui.buttonwidget(edit=self._save_button,
scale=0,
selectable=False)
else:
bui.buttonwidget(edit=self._save_button,
scale=1,
selectable=True)
scale=0 if check else 1,
selectable=(not check))
def save_settings_button(self):
babase.app.config["Community Plugin Manager"]["Settings"] = self.settings.copy()
@ -2458,7 +2361,7 @@ class PluginManagerSettingsWindow(popup.PopupWindow):
bui.containerwidget(edit=self._root_widget, transition='out_scale')
class NewAllSettingsWindow(bui.MainWindow):
class NewAllSettingsWindow(AllSettingsWindow):
"""Window for selecting a settings category."""
def __init__(
@ -2468,40 +2371,21 @@ class NewAllSettingsWindow(bui.MainWindow):
):
# pylint: disable=too-many-statements
# pylint: disable=too-many-locals
# Preload some modules we use in a background thread so we won't
# have a visual hitch when the user taps them.
bui.app.threadpool.submit_no_wait(self._preload_modules)
bui.set_analytics_screen('Settings Window')
assert bui.app.classic is not None
uiscale = bui.app.ui_v1.uiscale
width = 1000 if uiscale is bui.UIScale.SMALL else 800
x_inset = 125 if uiscale is bui.UIScale.SMALL else 105
height = 490
self._r = 'settingsWindow'
top_extra = 20 if uiscale is bui.UIScale.SMALL else 0
self._plugman_button = None
uiscale = bui.app.ui_v1.uiscale
super().__init__(
root_widget=bui.containerwidget(
size=(width, height + top_extra),
toolbar_visibility=(
'menu_minimal'
if uiscale is bui.UIScale.SMALL
else 'menu_full'
),
scale=(
1.5
if uiscale is bui.UIScale.SMALL
else 1.25 if uiscale is bui.UIScale.MEDIUM else 1.0
),
stack_offset=(
(0, 0) if uiscale is bui.UIScale.SMALL else (0, 0)
),
),
transition=transition,
origin_widget=origin_widget,
super().__init__(transition, origin_widget)
for child in self._root_widget.get_children():
child.delete()
bui.containerwidget(
edit=self._root_widget, size=(width, height + top_extra)
)
if uiscale is bui.UIScale.SMALL:
@ -2542,9 +2426,7 @@ class NewAllSettingsWindow(bui.MainWindow):
label=bui.charstr(bui.SpecialChar.BACK),
)
v = height - 120
v -= 145
v = height - 265
basew = 280 if uiscale is bui.UIScale.SMALL else 230
baseh = 170
x_offs = (
@ -2662,7 +2544,7 @@ class NewAllSettingsWindow(bui.MainWindow):
draw_controller=avb,
)
pmb = self._plugman_button = bui.buttonwidget(
self._plugman_button = pmb = bui.buttonwidget(
parent=self._root_widget,
autoselect=True,
position=(x_offs6, v),
@ -2683,77 +2565,6 @@ class NewAllSettingsWindow(bui.MainWindow):
)
self._restore_state()
@override
def get_main_window_state(self) -> bui.MainWindowState:
# Support recreating our window for back/refresh purposes.
cls = type(self)
return bui.BasicMainWindowState(
create_call=lambda transition, origin_widget: cls(
transition=transition, origin_widget=origin_widget
)
)
@override
def on_main_window_close(self) -> None:
self._save_state()
@staticmethod
def _preload_modules() -> None:
"""Preload modules we use; avoids hitches (called in bg thread)."""
import bauiv1lib.mainmenu as _unused1
import bauiv1lib.settings.controls as _unused2
import bauiv1lib.settings.graphics as _unused3
import bauiv1lib.settings.audio as _unused4
import bauiv1lib.settings.advanced as _unused5
def _do_controllers(self) -> None:
# pylint: disable=cyclic-import
from bauiv1lib.settings.controls import ControlsSettingsWindow
# no-op if we're not in control.
if not self.main_window_has_control():
return
self.main_window_replace(
ControlsSettingsWindow(origin_widget=self._controllers_button)
)
def _do_graphics(self) -> None:
# pylint: disable=cyclic-import
from bauiv1lib.settings.graphics import GraphicsSettingsWindow
# no-op if we're not in control.
if not self.main_window_has_control():
return
self.main_window_replace(
GraphicsSettingsWindow(origin_widget=self._graphics_button)
)
def _do_audio(self) -> None:
# pylint: disable=cyclic-import
from bauiv1lib.settings.audio import AudioSettingsWindow
# no-op if we're not in control.
if not self.main_window_has_control():
return
self.main_window_replace(
AudioSettingsWindow(origin_widget=self._audio_button)
)
def _do_advanced(self) -> None:
# pylint: disable=cyclic-import
from bauiv1lib.settings.advanced import AdvancedSettingsWindow
# no-op if we're not in control.
if not self.main_window_has_control():
return
self.main_window_replace(
AdvancedSettingsWindow(origin_widget=self._advanced_button)
)
def _do_plugman(self) -> None:
# no-op if we're not in control.
if not self.main_window_has_control():