mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2026-07-12 23:32:34 +02:00
small playback refactoring
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user