FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

[Refactor]: App by G4PLS · Pull Request #408 · StreamController/StreamController · GitHub

Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
c87a390
Refactored globals.py
G4PLS May 28, 2025
55c0d7e
Added some extra type hints and fixed plugins not loading
G4PLS May 28, 2025
4e6cfe6
Converted most things to singleton patterns where appropriate
G4PLS May 28, 2025
4a01df2
Ran Codecleanup
G4PLS May 28, 2025
de7c393
Added Release Notes file back
G4PLS May 28, 2025
1fd9af6
Updated argparser
G4PLS May 28, 2025
72d23af
Made argparser not parse every single time a value is needed but only…
G4PLS May 28, 2025
42513de
Small changes in main file
G4PLS May 28, 2025
223a2e7
Added tick delay argument
G4PLS May 28, 2025
da71b1c
Smaller changes to deckController regarding inputs and cli
G4PLS May 28, 2025
58e2fb3
Refactored load_background method
G4PLS May 28, 2025
b4f69fc
Refactored init_inputs
G4PLS May 28, 2025
06aa626
Refactored load_background in DeckController.py
G4PLS May 28, 2025
eecf357
Refactored load_brightness in DeckController.py
G4PLS May 28, 2025
d3cb432
Refactored load_screensaver in DeckController.py
G4PLS May 28, 2025
4e9b8ed
Refactored load_all_inputs in DeckController.py
G4PLS May 28, 2025
e50ecc9
Refactored close_image_resources in DeckController.py
G4PLS May 28, 2025
51ed14f
Refactored load_page in DeckController.py
G4PLS May 28, 2025
3a0cad5
Refactored tick_actions in DeckController.py
G4PLS May 28, 2025
fbc8f2c
Refactored get_own_deck_stack_child and get_own_key_grid in DeckContr…
G4PLS May 28, 2025
2cadbfd
Refactored delete, get_alive and set_from_path in DeckController.py
G4PLS May 28, 2025
91d014f
Refactored inject_defaults in DeckController.py
G4PLS May 28, 2025
ecdac73
Refactored get_next_tiles and get_next_frame in DeckController.py
G4PLS May 28, 2025
844e0ca
Refactored update_tiles in DeckController.py
G4PLS May 28, 2025
bf509f6
Fix background image not being reset when directly toggling page over…
G4PLS May 28, 2025
dc0e846
Simplified the if statement to figure out what settings should be used
G4PLS May 28, 2025
ebc1f41
Refactored load_from_input_dict in DeckController.py
G4PLS May 29, 2025
1527cbc
Refactored event_callbacks in DeckController.py
G4PLS May 29, 2025
881fd0f
Refactored smaller dict accesses to use get in DeckController.py
G4PLS May 29, 2025
5644d32
Refactored load_from_input_dict(2) in DeckController.py
G4PLS May 29, 2025
0b34526
Refactored some code of ControllerInput in DeckController.py
G4PLS May 29, 2025
33a6933
Refactored globals.py
G4PLS May 28, 2025
c87991d
Added some extra type hints and fixed plugins not loading
G4PLS May 28, 2025
1a0bf88
Converted most things to singleton patterns where appropriate
G4PLS May 28, 2025
231daa7
Ran Codecleanup
G4PLS May 28, 2025
f1d037b
Added Release Notes file back
G4PLS May 28, 2025
8f4c340
Updated argparser
G4PLS May 28, 2025
2a4733f
Made argparser not parse every single time a value is needed but only…
G4PLS May 28, 2025
4a6902e
Small changes in main file
G4PLS May 28, 2025
2ecb682
Added tick delay argument
G4PLS May 28, 2025
c1ac13a
Smaller changes to deckController regarding inputs and cli
G4PLS May 28, 2025
10aad7b
Refactored load_background method
G4PLS May 28, 2025
6c82a45
Refactored init_inputs
G4PLS May 28, 2025
843e33d
Refactored load_background in DeckController.py
G4PLS May 28, 2025
9579b30
Refactored load_brightness in DeckController.py
G4PLS May 28, 2025
058c596
Refactored load_screensaver in DeckController.py
G4PLS May 28, 2025
477ad4c
Refactored load_all_inputs in DeckController.py
G4PLS May 28, 2025
caef98b
Refactored close_image_resources in DeckController.py
G4PLS May 28, 2025
fce3863
Refactored load_page in DeckController.py
G4PLS May 28, 2025
60c589f
Refactored tick_actions in DeckController.py
G4PLS May 28, 2025
362f1f3
Refactored get_own_deck_stack_child and get_own_key_grid in DeckContr…
G4PLS May 28, 2025
584948c
Refactored delete, get_alive and set_from_path in DeckController.py
G4PLS May 28, 2025
8b008fd
Refactored inject_defaults in DeckController.py
G4PLS May 28, 2025
564bc95
Refactored get_next_tiles and get_next_frame in DeckController.py
G4PLS May 28, 2025
b392f97
Refactored update_tiles in DeckController.py
G4PLS May 28, 2025
8117348
Fix background image not being reset when directly toggling page over…
G4PLS May 28, 2025
b3cbdfd
Simplified the if statement to figure out what settings should be used
G4PLS May 28, 2025
ba9751b
Refactored load_from_input_dict in DeckController.py
G4PLS May 29, 2025
e245fa6
Refactored event_callbacks in DeckController.py
G4PLS May 29, 2025
635eb6b
Refactored smaller dict accesses to use get in DeckController.py
G4PLS May 29, 2025
454a63a
Refactored load_from_input_dict(2) in DeckController.py
G4PLS May 29, 2025
8433d38
Refactored some code of ControllerInput in DeckController.py
G4PLS May 29, 2025
9a4621f
Merge remote-tracking branch 'origin/general-rework' into general-rework
G4PLS May 29, 2025
8a446d4
Merge branch 'refs/heads/main' into general-rework
G4PLS May 29, 2025
d5fc6ab
Update "Failed to create data path" log in globals
Core447 May 29, 2025
a88a6cb
Updated Comments and added stargazers
G4PLS May 29, 2025
8991735
Refactored some formatting and made some code cleaner to read
G4PLS May 29, 2025
06f0aed
Refactored prepare-plugin/icon/wallpaper methods
G4PLS May 29, 2025
0c7246c
Merge remote-tracking branch 'origin/general-rework' into general-rework
G4PLS May 29, 2025
f0c169c
Added stargazers into the Pages
G4PLS May 29, 2025
3e1b011
Refactored whole DeckManager and updated all cases where old values w…
G4PLS Jun 22, 2025
313022d
Some method names were missed and some small logic when loading virtu…
G4PLS Jun 22, 2025
5f5512e
Added Todo
G4PLS Jun 22, 2025
cae2751
Added some more smaller helper methods
G4PLS Jun 22, 2025
a89743d
Updated all docstrings
G4PLS Jun 22, 2025
File filter

Filter by extension

Filter by extension .py  (40) No extension  (1) All 2 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
7 changes: 7 additions & 0 deletions Assets/RELEASE_NOTES
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<p>Features:</p>
<p>Fixes:</p>
<ul>
<li>Wrong input mapping when deck is rotated 90 or 270 degrees</li>
<li>Excessive startup times for some users</li>
<li>Weird behaviour of GenerativeUI in some cases</li>
</ul>
233 changes: 159 additions & 74 deletions globals.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -1,30 +1,129 @@
import argparse
import json
import Pyro5.api
import os
from typing import TYPE_CHECKING
import argparse
import sys
from loguru import logger as log
from typing import TYPE_CHECKING

import Pyro5.api
from loguru import logger as log
from src.backend.DeckManagement.HelperMethods import find_fallback_font

if TYPE_CHECKING:
from src.app import App
from locales.LocaleManager import LocaleManager
from src.backend.AssetManagerBackend import AssetManagerBackend
from src.windows.AssetManager.AssetManager import AssetManager
from src.backend.MediaManager import MediaManager
from src.backend.PageManagement.PageManagerBackend import PageManagerBackend
from src.backend.SettingsManager import SettingsManager
from src.backend.DeckManagement.DeckManager import DeckManager
from src.backend.PluginManager.PluginManager import PluginManager
from src.backend.IconPackManagement.IconPackManager import IconPackManager
from src.backend.WallpaperPackManagement.WallpaperPackManager import WallpaperPackManager
from src.backend.Store.StoreBackend import StoreBackend
from src.Signals.SignalManager import SignalManager
from src.backend.WindowGrabber.WindowGrabber import WindowGrabber
from src.backend.GnomeExtensions import GnomeExtensions
from src.windows.Store.Store import Store
from src.backend.PermissionManagement.FlatpakPermissionManager import FlatpakPermissionManager
from src.windows.PageManager.PageManager import PageManager
from src.tray import TrayIcon
from src.backend.Logger import Logger

# ─────────────────────────────────────────────────────────────
# ARGUMENT PARSING
# ─────────────────────────────────────────────────────────────
argparser = argparse.ArgumentParser()
argparser.add_argument("-b", help="Open in background", action="store_true")
argparser.add_argument("--devel", help="Developer mode (disables auto update)", action="store_true")
argparser.add_argument("--skip-load-hardware-decks", help="Skips initilization/use of hardware decks", action="store_true")
argparser.add_argument("--close-running", help="Close running", action="store_true")
argparser.add_argument("--data", help="Data path", type=str)
argparser.add_argument("--change-page", action="append", nargs=2, help="Change the page for a device", metavar=("SERIAL_NUMBER", "PAGE_NAME"))
argparser.add_argument("app_args", nargs="*")

# Static Values

argparser.add_argument(
"-b", "--background",
action="store_true",
help="Opens the app in the background"
)

argparser.add_argument(
"-d", "--devel",
action="store_true",
help="Enable developer mode"
)

argparser.add_argument(
"-u", "--auto-update",
type=str,
default="1",
choices=["0", "1"],
action="store",
help="Enable or disable automatic updates. Default is 1."
)

argparser.add_argument(
"-s", "--skip-hardware-decks",
action="store_true",
help="Skips initialization/use of hardware decks"
)

argparser.add_argument(
"-c", "--close-running",
action="store_true",
help="Close running"
)

argparser.add_argument(
"-D", "--data",
type=str,
help="Data path"
)

argparser.add_argument(
"-T", "--tick-delay",
type=int,
default=1,
action="store",
help="The delay between tick actions",
)

# Api Calls
api_call_group = argparser.add_argument_group("Deck Calls")

api_call_group.add_argument(
"--change-page",
action="append",
nargs=2,
metavar=("SERIAL_NUMBER", "PAGE_NAME"),
help="Change the page for a device"
)

api_call_group.add_argument(
"--change-button-state",
action="append",
nargs=3,
metavar=("SERIAL_NUMBER", "COORDINATE", "STATE"),
help="Change the state of a button (NOT IMPLEMENTED)"
)

# General App Args
argparser.add_argument(
"app_args",
nargs="*"
)

# ─────────────────────────────────────────────────────────────
# PATHS AND STATIC CONFIGURATION
# ─────────────────────────────────────────────────────────────
MAIN_PATH: str
VAR_APP_PATH = os.path.join(os.path.expanduser("~"), ".var", "app", "com.core447.StreamController")
STATIC_SETTINGS_FILE_PATH = os.path.join(VAR_APP_PATH, "static", "settings.json")
VAR_APP_PATH: str = os.path.join(os.path.expanduser("~"), ".var", "app", "com.core447.StreamController")
STATIC_SETTINGS_FILE_PATH: str = os.path.join(VAR_APP_PATH, "static", "settings.json")
DATA_PATH: str = os.path.join(VAR_APP_PATH, "data") # Maybe use XDG_DATA_HOME instead
PLUGIN_DIR: str = os.path.join(DATA_PATH, "plugins")
TOP_LEVEL_DIR: str = os.path.dirname(__file__)

cli_args = argparser.parse_args()

DATA_PATH = os.path.join(VAR_APP_PATH, "data") # Maybe use XDG_DATA_HOME instead
if argparser.parse_args().data:
DATA_PATH = argparser.parse_args().data
elif not argparser.parse_args().devel:
if cli_args.data:
DATA_PATH = cli_args.data
elif not cli_args.devel:
# Check static settings
if os.path.exists(STATIC_SETTINGS_FILE_PATH):
try:
Expand All @@ -41,91 +140,77 @@
try:
os.makedirs(DATA_PATH)
except Exception as e:
log.error(f"Failed to create data path: {e}\nPlease change the data path manually in the config file under {STATIC_SETTINGS_FILE_PATH}")
log.error(f"Failed to create data path: {e}")
sys.exit(1)

PLUGIN_DIR = os.path.join(DATA_PATH, "plugins")

# Used for nix packaging
if os.getenv("PLUGIN_DIR") is not None:
PLUGIN_DIR = os.getenv("PLUGIN_DIR")
top_level_folder = os.path.dirname(PLUGIN_DIR)
sys.path.append(top_level_folder)

if os.path.exists(os.path.join(DATA_PATH, "plugins")):
log.warning(f"You're using a plugin dir path outside of your data dir, but also have a plugin dir in the data dir. This may cause problems.")
log.warning(
f"You're using a plugin dir path outside of your data dir, but also have a plugin dir in the data dir. This may cause problems.")

os.makedirs(PLUGIN_DIR, exist_ok=True)

# Add data path to sys.path
sys.path.append(DATA_PATH)

if TYPE_CHECKING:
from src.app import App
from locales.LocaleManager import LocaleManager
from src.backend.AssetManagerBackend import AssetManagerBackend
from src.windows.AssetManager.AssetManager import AssetManager
from src.backend.MediaManager import MediaManager
from src.backend.PageManagement.PageManagerBackend import PageManagerBackend
from src.backend.SettingsManager import SettingsManager
from src.backend.DeckManagement.DeckManager import DeckManager
from src.backend.PluginManager.PluginManager import PluginManager
from src.backend.IconPackManagement.IconPackManager import IconPackManager
from src.backend.WallpaperPackManagement.WallpaperPackManager import WallpaperPackManager
from src.backend.Store.StoreBackend import StoreBackend
from src.Signals.SignalManager import SignalManager
from src.backend.WindowGrabber.WindowGrabber import WindowGrabber
from src.backend.GnomeExtensions import GnomeExtensions
from src.windows.Store.Store import Store
from src.backend.PermissionManagement.FlatpakPermissionManager import FlatpakPermissionManager
from src.windows.PageManager.PageManager import PageManager
from src.backend.LockScreenManager.LockScreenManager import LockScreenManager
from src.tray import TrayIcon
from src.backend.Logger import Logger
# ─────────────────────────────────────────────────────────────
# GLOBAL SINGLETONS (WILL BE SET LATER)
# ─────────────────────────────────────────────────────────────


top_level_dir:str = os.path.dirname(__file__)
lm:"LocaleManager" = None
media_manager:"MediaManager" = None #MediaManager
asset_manager_backend:"AssetManagerBackend" = None #AssetManager
asset_manager: "AssetManager" = None
page_manager_window: "PageManager" = None # Only if opened
page_manager:"PageManagerBackend" = None #PageManager #TODO: Rename to page_manager_backend in 2.0.0
gnome_extensions:"GnomeExtensions" = None
settings_manager:"SettingsManager" = None #SettingsManager
app:"App" = None #App
deck_manager:"DeckManager" = None #DeckManager
plugin_manager:"PluginManager" = None #PluginManager
video_extensions = ["mp4", "mov", "MP4", "MOV", "mkv", "MKV", "webm", "WEBM", "gif", "GIF"]
image_extensions = ["png", "jpg", "jpeg"]
svg_extensions = ["svg", "SVG"]
# Singletons
app: "App" = None # App
asset_manager_backend: "AssetManagerBackend" = None # AssetManager
page_manager_window: "PageManager" = None # Only if opened
page_manager: "PageManagerBackend" = None # PageManager #TODO: Rename to page_manager_backend in 2.0.0
gnome_extensions: "GnomeExtensions" = None
icon_pack_manager: "IconPackManager" = None
plugin_manager: "PluginManager" = None # PluginManager
deck_manager: "DeckManager" = None # DeckManager
media_manager: "MediaManager" = None # MediaManager # Rework to use Static methods
wallpaper_pack_manager: "WallpaperPackManager" = None
store_backend: "StoreBackend" = None
pyro_daemon: Pyro5.api.Daemon = None
signal_manager: "SignalManager" = None
window_grabber: "WindowGrabber" = None
lock_screen_detector: "LockScreenDetector" = None
store: "Store" = None # Only if opened
flatpak_permission_manager: "FlatpakPermissionManager" = None
tray_icon: "TrayIcon" = None

# No singleton
lm: "LocaleManager" = None # Used at multiple different locations
asset_manager: "AssetManager" = None
settings_manager: "SettingsManager" = None # SettingsManager
pyro_daemon: Pyro5.api.Daemon = None
lock_screen_detector: "LockScreenDetector" = None
store: "Store" = None # Only if opened

# ─────────────────────────────────────────────────────────────
# GLOBAL STATE VARIABLES
# ─────────────────────────────────────────────────────────────
VIDEO_EXTENSIONS = ["mp4", "mov", "MP4", "MOV", "mkv", "MKV", "webm", "WEBM", "gif", "GIF"]
IMAGE_EXTENSIONS = ["png", "jpg", "jpeg"]
SVG_EXTENSIONS = ["svg", "SVG"]
FALLBACK_FONT: str = find_fallback_font()
APP_VERSION: str = "1.5.0-beta.10" # In breaking.feature.fix-state format

threads_running: bool = True
app_loading_finished_tasks: callable = []
api_page_requests: dict[str, str] = {} # Stores api page requests made my --change-page
tray_icon: "TrayIcon" = None
fallback_font: str = find_fallback_font()
api_page_requests: dict[str, str] = {} # Stores api page requests made my --change-page
showed_donate_window: bool = False
screen_locked: bool = False
loggers: dict[str, "Logger"] = {}

app_version: str = "1.5.0-beta.10" # In breaking.feature.fix-state format
exact_app_version_check: bool = False
logs: list[str] = []

release_notes: str = """
<p>Features:</p>
<p>Fixes:</p>
<ul>
<li>Wrong input mapping when deck is rotated 90 or 270 degrees</li>
<li>Excessive startup times for some users</li>
<li>Weird behaviour of GenerativeUI in some cases</li>
</ul>
"""
# ─────────────────────────────────────────────────────────────
# RELEASE NOTES LOADING
# ─────────────────────────────────────────────────────────────
RELEASE_NOTES: str

with open(os.path.join(TOP_LEVEL_DIR, "Assets", "RELEASE_NOTES"), "r") as f:
RELEASE_NOTES = f.read()
Loading

Back | FazBrowse Home | New Git URL