small playback refactoring

This commit is contained in:
DYefremov
2023-05-13 09:19:35 +03:00
parent 444df51706
commit 1546baab30
7 changed files with 52 additions and 55 deletions

View File

@@ -161,6 +161,15 @@ class PlayStreamsMode(IntEnum):
M3U = 2
class PlaybackMode(IntEnum):
""" Playback mode by double click of mouse in the bouquet (FAV) list. """
DISABLED = 0
STREAM = 1
PLAY = 2
ZAP = 3
ZAP_PLAY = 4
class EpgSource(IntEnum):
HTTP = 0 # HTTP API -> WebIf
DAT = 1 # epg.dat file

View File

@@ -389,7 +389,7 @@ class VlcPlayer(Player):
from app.tools import vlc
from app.tools.vlc import EventType
args = f"--quiet {'' if IS_DARWIN else '--no-xlib'}"
args = f"--quiet {'--no-xlib' if IS_LINUX else ''}"
self._player = vlc.Instance(args).media_player_new()
vlc.libvlc_video_set_key_input(self._player, False)
vlc.libvlc_video_set_mouse_input(self._player, False)

View File

@@ -47,8 +47,8 @@ from app.eparser.ecommons import CAS, Flag, BouquetService
from app.eparser.enigma.bouquets import BqServiceType
from app.eparser.iptv import export_to_m3u, StreamType
from app.eparser.neutrino.bouquets import BqType
from app.settings import (SettingsType, Settings, SettingsException, SettingsReadException,
IS_DARWIN, PlayStreamsMode, IS_LINUX, USE_HEADER_BAR)
from app.settings import (SettingsType, Settings, SettingsException, SettingsReadException, IS_DARWIN, IS_LINUX,
PlayStreamsMode, PlaybackMode, USE_HEADER_BAR)
from app.tools.media import Recorder
from app.ui.control import ControlTool
from app.ui.epg.epg import EpgCache, EpgSettingsPopover, EpgDialog, EpgTool
@@ -69,7 +69,7 @@ from .search import SearchProvider
from .service_details_dialog import ServiceDetailsDialog, Action
from .settings_dialog import SettingsDialog
from .uicommons import (Gtk, Gdk, UI_RESOURCES_PATH, LOCKED_ICON, HIDE_ICON, IPTV_ICON, MOVE_KEYS, KeyboardKey, Column,
FavClickMode, MOD_MASK, APP_FONT, Page, HeaderBar)
MOD_MASK, APP_FONT, Page, HeaderBar)
from .xml.dialogs import ServicesUpdateDialog
from .xml.edit import SatellitesTool
@@ -2058,7 +2058,7 @@ class Application(Gtk.Application):
name, model = get_model_data(view)
self.delete_views_selection(name)
elif event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS and event.button == Gdk.BUTTON_PRIMARY:
if self._settings.main_list_playback and self._fav_click_mode is not FavClickMode.DISABLED:
if self._settings.main_list_playback and self._fav_click_mode is not PlaybackMode.DISABLED:
if view is self._services_view:
self.emit("srv-clicked", self._fav_click_mode)
elif view is self._iptv_services_view:
@@ -2923,9 +2923,9 @@ class Application(Gtk.Application):
view.do_unselect_all(view)
elif ctrl and model_name == self.FAV_MODEL:
if key is KeyboardKey.P:
self.emit("fav-clicked", FavClickMode.STREAM)
self.emit("fav-clicked", PlaybackMode.STREAM)
if key is KeyboardKey.W:
self.emit("fav-clicked", FavClickMode.ZAP_PLAY)
self.emit("fav-clicked", PlaybackMode.ZAP_PLAY)
if key is KeyboardKey.Z:
self.on_zap()
elif key is KeyboardKey.CTRL_L or key is KeyboardKey.CTRL_R:
@@ -3039,10 +3039,10 @@ class Application(Gtk.Application):
def on_fav_press(self, menu, event):
if event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS:
if self._fav_click_mode is FavClickMode.DISABLED:
if self._fav_click_mode is PlaybackMode.DISABLED:
return
if self._fav_click_mode is FavClickMode.ZAP:
if self._fav_click_mode is PlaybackMode.ZAP:
self.on_zap()
else:
self.emit("fav-clicked", self._fav_click_mode)
@@ -3417,7 +3417,7 @@ class Application(Gtk.Application):
# ************************* Streams ***************************** #
def on_play_stream(self, item=None):
self.emit("fav-clicked", FavClickMode.STREAM)
self.emit("fav-clicked", PlaybackMode.STREAM)
def on_play_current(self, item=None):
""" starts playback of the current channel. """
@@ -3483,7 +3483,7 @@ class Application(Gtk.Application):
# ************************ HTTP API **************************** #
def init_http_api(self):
self._fav_click_mode = FavClickMode(self._settings.fav_click_mode)
self._fav_click_mode = PlaybackMode(self._settings.fav_click_mode)
api_enable = self._settings.http_api_support
GLib.idle_add(self._http_status_image.set_visible, api_enable and not self._receiver_info_box.get_visible())

View File

@@ -262,7 +262,7 @@ Author: Dmitriy Yefremov
<object class="GtkImage" id="audio_menu_button_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">audio-volume-high-symbolic</property>
<property name="icon-name">audio-card-symbolic</property>
</object>
</child>
</object>

View File

@@ -34,11 +34,11 @@ from gi.repository import GLib, GObject, Gio
from app.commons import run_idle, run_with_delay
from app.connections import HttpAPI
from app.eparser.ecommons import BqServiceType
from app.settings import PlayStreamsMode, IS_DARWIN, SettingsType, USE_HEADER_BAR
from app.settings import PlayStreamsMode, PlaybackMode, IS_DARWIN, SettingsType, USE_HEADER_BAR
from app.tools.media import Player
from app.ui.dialogs import get_builder, get_message
from app.ui.main_helper import get_iptv_url
from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, FavClickMode, Column, Page
from app.ui.uicommons import Gtk, Gdk, UI_RESOURCES_PATH, Column, Page
class PlayerBox(Gtk.Overlay):
@@ -86,7 +86,7 @@ class PlayerBox(Gtk.Overlay):
"on_full_screen": self.on_full_screen,
"on_close": self.on_close}
builder = get_builder(UI_RESOURCES_PATH + "playback.glade", handlers)
builder = get_builder(f"{UI_RESOURCES_PATH}playback.glade", handlers)
self._stack = builder.get_object("stack")
self._playback_area = builder.get_object("playback_area")
self._playback_area.set_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK)
@@ -117,19 +117,13 @@ class PlayerBox(Gtk.Overlay):
return self._playback_area
def on_fav_clicked(self, app, mode):
if mode is not FavClickMode.STREAM and not self._app.http_api:
if mode is not PlaybackMode.STREAM and not self._app.http_api:
return
if len(self._fav_view.get_model()) == 0:
return
self._stack.set_visible_child_name("load")
if mode is FavClickMode.STREAM:
self.on_play_stream()
elif mode is FavClickMode.ZAP_PLAY:
self._app.on_zap(self.on_watch)
elif mode is FavClickMode.PLAY:
self.on_play_service()
self.start_playback(mode)
def on_srv_clicked(self, app, mode):
if not self._app.http_api:
@@ -197,7 +191,7 @@ class PlayerBox(Gtk.Overlay):
self._player.connect("subtitle-track", self.on_subtitle_track_changed)
self._app.app_window.connect("key-press-event", self.on_key_press)
builder = get_builder(UI_RESOURCES_PATH + "app_menu.ui")
builder = get_builder(f"{UI_RESOURCES_PATH}app_menu.ui")
self._audio_track_menu = builder.get_object("audio_track_menu")
self._subtitle_track_menu = builder.get_object("subtitle_track_menu")
audio_menu = builder.get_object("audio_menu")
@@ -233,6 +227,7 @@ class PlayerBox(Gtk.Overlay):
@run_idle
def on_play(self, action=None, value=None):
self._stack.set_visible_child_name("load")
self.emit("play", self._current_mrl)
def on_pause(self, action=None, value=None):
@@ -244,12 +239,14 @@ class PlayerBox(Gtk.Overlay):
self.emit("stop", None)
def on_next(self, button):
if self._fav_view.do_move_cursor(self._fav_view, Gtk.MovementStep.DISPLAY_LINES, 1):
self.update_buttons()
self.set_player_action()
self.switch_service(1)
def on_previous(self, button):
if self._fav_view.do_move_cursor(self._fav_view, Gtk.MovementStep.DISPLAY_LINES, -1):
self.switch_service(-1)
def switch_service(self, count):
self._fav_view.grab_focus()
if self._fav_view.do_move_cursor(self._fav_view, Gtk.MovementStep.DISPLAY_LINES, count):
self.update_buttons()
self.set_player_action()
@@ -324,14 +321,7 @@ class PlayerBox(Gtk.Overlay):
@run_with_delay(1)
def set_player_action(self):
click_mode = FavClickMode(self._app.app_settings.fav_click_mode)
self._stack.set_visible_child_name("load")
if click_mode is FavClickMode.PLAY:
self.on_play_service()
elif click_mode is FavClickMode.ZAP_PLAY:
self._app.on_zap(self.on_watch)
elif click_mode is FavClickMode.STREAM:
self.on_play_stream()
self.start_playback(PlaybackMode(self._app.app_settings.fav_click_mode))
def update_buttons(self):
if self._player:
@@ -463,9 +453,16 @@ class PlayerBox(Gtk.Overlay):
if self._player:
self.emit("play", url)
self._fav_view.grab_focus()
def start_playback(self, mode):
self._stack.set_visible_child_name("load")
if mode is PlaybackMode.PLAY:
self.on_play_service()
elif mode is PlaybackMode.ZAP_PLAY:
self._app.on_zap(self.on_watch)
elif mode is PlaybackMode.STREAM:
self.on_play_stream()
@run_idle
@run_with_delay(1)
def on_played(self, player, duration):
self._stack.set_visible_child_name("playback")
if not IS_DARWIN:

View File

@@ -32,10 +32,10 @@ from collections import Counter
from app.commons import run_task, run_idle, log
from app.connections import test_telnet, test_ftp, TestException, test_http, HttpApiException
from app.settings import SettingsType, Settings, PlayStreamsMode, IS_LINUX, SEP, IS_WIN
from app.settings import SettingsType, Settings, PlayStreamsMode, PlaybackMode, IS_LINUX, SEP, IS_WIN
from app.ui.dialogs import show_dialog, DialogType, get_message, get_chooser_dialog, get_builder
from .main_helper import update_entry_data, scroll_to, get_picon_pixbuf
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, FavClickMode, DEFAULT_ICON, APP_FONT, HeaderBar
from .uicommons import Gtk, Gdk, UI_RESOURCES_PATH, DEFAULT_ICON, APP_FONT, HeaderBar
class SettingsDialog:
@@ -694,17 +694,17 @@ class SettingsDialog:
if self._main_stack.get_visible_child_name() != "streaming":
return
mode = FavClickMode(int(self._double_click_combo_box.get_active_id()))
if mode is FavClickMode.PLAY:
mode = PlaybackMode(int(self._double_click_combo_box.get_active_id()))
if mode is PlaybackMode.PLAY:
self.show_info_message("Operates in standby mode or current active transponder!", Gtk.MessageType.WARNING)
elif mode is FavClickMode.STREAM:
elif mode is PlaybackMode.STREAM:
self.show_info_message("Playback IPTV streams only!", Gtk.MessageType.WARNING)
elif mode is FavClickMode.DISABLED:
elif mode is PlaybackMode.DISABLED:
self._allow_main_list_playback_switch.set_active(False)
else:
self.on_info_bar_close()
self._allow_main_list_playback_switch.set_sensitive(mode is not FavClickMode.DISABLED)
self._allow_main_list_playback_switch.set_sensitive(mode is not PlaybackMode.DISABLED)
def on_play_mode_changed(self, button):
if self._main_stack.get_visible_child_name() != "streaming":

View File

@@ -37,7 +37,7 @@ gi.require_version("Gtk", "3.0")
gi.require_version("Gdk", "3.0")
from gi.repository import Gtk, Gdk, GLib
from app.settings import Settings, SettingsException, IS_DARWIN, GTK_PATH, IS_LINUX
from app.settings import Settings, SettingsException, IS_DARWIN, IS_LINUX, GTK_PATH
# Setting mod mask for keyboard depending on platform
MOD_MASK = Gdk.ModifierType.MOD2_MASK if IS_DARWIN else Gdk.ModifierType.CONTROL_MASK
@@ -186,15 +186,6 @@ class Page(Enum):
CONTROL = "control"
class FavClickMode(IntEnum):
""" Double click mode on the service in the bouquet(FAV) list. """
DISABLED = 0
STREAM = 1
PLAY = 2
ZAP = 3
ZAP_PLAY = 4
class ViewTarget(Enum):
""" Used for set target view. """
BOUQUET = 0