Skip to content
Merged
31 changes: 25 additions & 6 deletions flatpak/com.core447.StreamController.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
<categories>
<category>System</category>
<category>Utility</category>
<category>Productivity</category>
</categories>

<keywords>
Expand All @@ -42,6 +41,16 @@
<url type="bugtracker">https://github.com/StreamController/StreamController/issues</url>
<url type="contribute">https://github.com/StreamController/StreamController</url>
<releases>
<release version="1.4.8-beta" date="2024-04-09">
<description translatable="no">
<p>Bugfixes</p>
</description>
</release>
<release version="1.4.7-beta" date="2024-04-08">
<description translatable="no">
<p>Bugfixes</p>
</description>
</release>
<release version="1.4.6-beta" date="2024-04-08">
<description translatable="no">
<p>Bugfixes</p>
Expand Down Expand Up @@ -163,27 +172,37 @@
App Features:
</p>
<ul>
<li>Beautiful GTK4 Interface</li>
<li>Plugin support</li>
<li>Multi deck support</li>
<li>Elegant GTK4 Interface</li>
<li>Plugin support with built-in store</li>
<li>Multi-deck support</li>
<li>Set background images &amp; videos</li>
<li>Set custom icons</li>
<li>Automatic page switching (Gnome &amp; Hyprland)</li>
</ul>
<p>
Official Plugin Features:
</p>
<ul>
<li>Run commands</li>
<li>Execute commands</li>
<li>Press hotkeys (X and Wayland)</li>
<li>Move mouse (X and Wayland)</li>
<li>Control OBS Studio</li>
<li>Control your music</li>
<li>Mix the volume of different apps</li>
<li>Switch between audio outputs</li>
<li>Mute your microphone</li>
<li>Show a clock</li>
<li>Display the current time</li>
<li>Send network requests</li>
</ul>
<p>
Supported devices
</p>
<ul>
<li>Stream Deck Original</li>
<li>Stream Deck Original V2</li>
<li>Stream Deck Mini</li>
<li>Stream Deck XL</li>
</ul>
</description>

<launchable type="desktop-id">launch.desktop</launchable>
Expand Down
3 changes: 1 addition & 2 deletions globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,11 @@
threads_running: bool = True


app_version: str = "1.4.6-beta" # In breaking.feature.fix-state format
app_version: str = "1.4.8-beta" # In breaking.feature.fix-state format
exact_app_version_check: bool = False
argparser: argparse.ArgumentParser = None
logs: list[str] = []

release_notes: str = "<ul> \
<li>Bugfixes</li> \
<li>Memory optimizations</li> \
</ul>"
8 changes: 6 additions & 2 deletions src/backend/DeckManagement/DeckController.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def stop(self) -> None:
time.sleep(0.1)

def add_task(self, method: callable, *args, **kwargs):
self.tasks.put(MediaPlayerTask(
self.task_queue.put(MediaPlayerTask(
deck_controller=self.deck_controller,
page=self.deck_controller.active_page,
_callable=method,
Expand Down Expand Up @@ -299,7 +299,11 @@ def serial_number(self) -> str:

def update_key(self, index: int):
image = self.keys[index].get_current_deck_image()
native_image = PILHelper.to_native_key_format(self.deck, image.convert("RGB"))

rgb_image = image.convert("RGB")
native_image = PILHelper.to_native_key_format(self.deck, rgb_image)
rgb_image.close()
del rgb_image

self.media_player.add_image_task(index, native_image)

Expand Down
4 changes: 2 additions & 2 deletions src/backend/DeckManagement/DeckManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ def add_newly_connected_deck(self, deck:StreamDeck, is_fake: bool = False):
# Add to deck stack
GLib.idle_add(gl.app.main_win.leftArea.deck_stack.add_page, deck_controller)

if recursive_hasattr(gl, "app.main_win.header_bar.page_selector"):
GLib.idle_add(gl.app.main_win.header_bar.page_selector.update)
if recursive_hasattr(gl, "app.main_win.sidebar.page_selector"):
GLib.idle_add(gl.app.main_win.sidebar.page_selector.update)



Expand Down
2 changes: 1 addition & 1 deletion src/windows/MultiDeckSelector/MultiDeckSelector.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def get_n_selected_decks(self) -> int:

class DeckRow(Gtk.CheckButton):
def __init__(self, selector: MultiDeckSelector, deck_name: str, deck_serial_number: str, active: bool = False):
super().__init__(label=deck_name, css_classes=["multi-deck-selector-label"], active=active)
super().__init__(label=deck_name, css_classes=["multi-deck-selector-label"], active=active, margin_bottom=3)
self.deck_name = deck_name
self.selector = selector
self.deck_serial_number = deck_serial_number
Expand Down
12 changes: 11 additions & 1 deletion src/windows/MultiDeckSelector/MultiDeckSelectorRow.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,13 @@ def on_activated(self, widget):
selected_deck_serials=self.selected_deck_serials,
callback=self.change_callback
)
self.multi_deck_selector.connect("close-request", self.on_dialog_close)

self.multi_deck_selector.present()

def on_dialog_close(self, widget):
self.multi_deck_selector = None

def set_label(self, n_selected_decks: int):
self.suffix_label.set_label(f"{n_selected_decks} {gl.lm.get('multi-deck-selector.selected')}")

Expand All @@ -68,4 +72,10 @@ def change_callback(self, serial_number: str, state: bool):
self.set_label(n_selected_decks)

if callable(self.callback):
self.callback(serial_number, state)
self.callback(serial_number, state)

def set_selected_deck_serials(self, selected_deck_serials: list[str]):
if self.multi_deck_selector is not None:
self.multi_deck_selector.close()

self.selected_deck_serials = selected_deck_serials
5 changes: 3 additions & 2 deletions src/windows/PageManager/elements/PageEditor.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def build(self):
self.set_child(self.main_box)

# Header
self.header = Adw.HeaderBar(show_back_button=False, css_classes=["flat"])
self.header = Adw.HeaderBar(show_back_button=False, css_classes=["flat"], show_end_title_buttons=True)
self.main_box.append(self.header)

# Main stack - one page for the normal editor and one for the no page info screen
Expand Down Expand Up @@ -298,4 +298,5 @@ def load_for_page(self, page_path: str) -> None:

def update(self) -> None:
matches = gl.page_manager.get_all_deck_serial_numbers_with_page_as_default(path=self.page_editor.active_page_path)
self.row.set_label(len(matches))
self.row.set_label(len(matches))
self.row.set_selected_deck_serials(matches)
5 changes: 4 additions & 1 deletion src/windows/PageManager/elements/PageSelector.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,12 @@ def build(self):
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True)
self.set_child(self.main_box)

self.header = Adw.HeaderBar(css_classes=["flat"])
self.main_box.append(self.header)

self.search_entry = Gtk.SearchEntry(placeholder_text=gl.lm.get("page-manager.page-selector.search-hint"), hexpand=True, margin_start=7, margin_end=7, margin_top=7, margin_bottom=7)
self.search_entry.connect("changed", self.on_search_changed)
self.main_box.append(self.search_entry)
self.header.set_title_widget(self.search_entry)

self.scrolled_window = Gtk.ScrolledWindow(hexpand=False, vexpand=True)
self.main_box.append(self.scrolled_window)
Expand Down
2 changes: 1 addition & 1 deletion src/windows/mainWindow/elements/DeckStack.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def __init__(self, main_window: "MainWindow", left_area: "LeftArea", deck_manage

def on_switch(self, widget, *args):
# Update page selector
self.main_window.sidebar.key_editor.page_selector.update()
self.main_window.sidebar.page_selector.update()

child: DeckStackChild = self.get_visible_child()
if child.stack.get_visible_child_name() == "page-settings":
Expand Down
6 changes: 3 additions & 3 deletions src/windows/mainWindow/elements/KeyGrid.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,9 +275,9 @@ def set_image(self, image):
del self.pixbuf
self.pixbuf = image2pixbuf(image.convert("RGBA"), force_transparency=True)
self.show_pixbuf(self.pixbuf)
image.close()
image = None
del image
# image.close()
# image = None
# del image

# update righthand side key preview if possible
if recursive_hasattr(gl, "app.main_win.sidebar"):
Expand Down
3 changes: 2 additions & 1 deletion src/windows/mainWindow/elements/PageSettings/DeckGroup.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,14 @@ class Screensaver(Adw.PreferencesRow):
def __init__(self, settings_page: "PageSettings", **kwargs):
super().__init__(css_classes=["no-click"])
self.settings_page = settings_page
self.build()

"""
To save performance and memory, we only load the thumbnail when the user sees the row
"""
self.on_map_tasks: list = []
self.connect("map", self.on_map)

self.build()

def on_map(self, widget):
for f in self.on_map_tasks:
Expand Down
14 changes: 10 additions & 4 deletions src/windows/mainWindow/elements/Sidebar/Sidebar.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,14 @@ def on_map(self, widget):
self.on_map_tasks.clear()

def build(self):
self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True)
self.set_child(self.main_box)

self.header = Adw.HeaderBar(css_classes=["flat"])
self.main_box.append(self.header)

self.main_stack = Gtk.Stack(transition_duration=200, transition_type=Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
self.set_child(self.main_stack)
self.main_box.append(self.main_stack)

self.key_editor = KeyEditor(self)
self.main_stack.add_named(self.key_editor, "key_editor")
Expand All @@ -74,6 +80,9 @@ def build(self):
self.error_page = ErrorPage(self)
self.main_stack.add_named(self.error_page, "error_page")

self.page_selector = PageSelector(self.main_window, gl.page_manager, halign=Gtk.Align.CENTER)
self.header.set_title_widget(self.page_selector)

self.load_for_coords((0, 0))

def let_user_select_action(self, callback_function, *callback_args, **callback_kwargs):
Expand Down Expand Up @@ -153,9 +162,6 @@ def __init__(self, sidebar: Sidebar, **kwargs):
super().__init__(**kwargs)
self.set_orientation(Gtk.Orientation.VERTICAL)

self.page_selector = PageSelector(self.sidebar.main_window, gl.page_manager, margin_top=5, halign=Gtk.Align.CENTER)
self.append(self.page_selector)

self.scrolled_window = Gtk.ScrolledWindow(hexpand=True, vexpand=True)
self.append(self.scrolled_window)

Expand Down
2 changes: 1 addition & 1 deletion src/windows/mainWindow/mainWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ def build(self):
# Add sidebar toggle button to the header bar
self.sidebar_toggle_button = Gtk.ToggleButton(icon_name="sidebar-show-symbolic", active=True)
self.sidebar_toggle_button.connect("toggled", self.on_toggle_sidebar)
self.header.pack_start(self.sidebar_toggle_button)
# self.header.pack_start(self.sidebar_toggle_button)


# Error pages
Expand Down