def _set_active_players(self): """ Set the active players and available media files """ saved_players = get_media_players()[0] for player in list(self.media_players.keys()): self.media_players[player].is_active = player in saved_players
def add_end_header_bar(self): """ Adds buttons to the end of the header bar. """ # Replace backgrounds do not work at present so remove functionality. self.replace_action = self.toolbar.add_toolbar_action( 'replace_action', icon=':/slides/slide_blank.png', triggers=self.on_replace_click) if 'webkit' not in get_media_players()[0]: self.replace_action.setDisabled(True) self.reset_action = self.toolbar.add_toolbar_action( 'reset_action', icon=':/system/system_close.png', visible=False, triggers=self.on_reset_click) self.media_widget = QtGui.QWidget(self) self.media_widget.setObjectName('media_widget') self.display_layout = QtGui.QFormLayout(self.media_widget) self.display_layout.setMargin(self.display_layout.spacing()) self.display_layout.setObjectName('display_layout') self.display_type_label = QtGui.QLabel(self.media_widget) self.display_type_label.setObjectName('display_type_label') self.display_type_combo_box = create_horizontal_adjusting_combo_box( self.media_widget, 'display_type_combo_box') self.display_type_label.setBuddy(self.display_type_combo_box) self.display_layout.addRow(self.display_type_label, self.display_type_combo_box) # Add the Media widget to the page layout. self.page_layout.addWidget(self.media_widget) self.display_type_combo_box.currentIndexChanged.connect( self.override_player_changed)
def media_length(self, service_item): """ Loads and starts a media item to obtain the media length :param service_item: The ServiceItem containing the details to be played. """ media_info = MediaInfo() media_info.volume = 0 media_info.file_info = QtCore.QFileInfo(service_item.get_frame_path()) # display = controller.preview_display suffix = '*.%s' % media_info.file_info.suffix().lower() used_players = get_media_players()[0] player = self.media_players[used_players[0]] if suffix not in player.video_extensions_list and suffix not in player.audio_extensions_list: # Media could not be loaded correctly critical_error_message_box( translate('MediaPlugin.MediaItem', 'Unsupported Media File'), translate('MediaPlugin.MediaItem', 'File %s not supported using player %s') % (service_item.get_frame_path(), used_players[0])) return False media_data = MediaInfoWrapper.parse(service_item.get_frame_path()) # duration returns in milli seconds service_item.set_media_length(media_data.tracks[0].duration) return True
def populateDisplayTypes(self): """ Load the combobox with the enabled media players, allowing user to select a specific player if settings allow """ # block signals to avoid unnecessary overridePlayerChanged Signals # while combo box creation self.displayTypeComboBox.blockSignals(True) self.displayTypeComboBox.clear() usedPlayers, overridePlayer = get_media_players() mediaPlayers = self.media_controller.mediaPlayers currentIndex = 0 for player in usedPlayers: # load the drop down selection self.displayTypeComboBox.addItem(mediaPlayers[player].original_name) if overridePlayer == player: currentIndex = len(self.displayTypeComboBox) if self.displayTypeComboBox.count() > 1: self.displayTypeComboBox.insertItem(0, self.automatic) self.displayTypeComboBox.setCurrentIndex(currentIndex) if overridePlayer: self.mediaWidget.show() else: self.mediaWidget.hide() self.displayTypeComboBox.blockSignals(False)
def bootstrap_initialise(self): """ Check to see if we have any media Player's available. """ log.debug('_check_available_media_players') controller_dir = os.path.join(AppLocation.get_directory(AppLocation.AppDir), 'core', 'ui', 'media') for filename in os.listdir(controller_dir): if filename.endswith('player.py') and not filename == 'mediaplayer.py': path = os.path.join(controller_dir, filename) if os.path.isfile(path): module_name = 'openlp.core.ui.media.' + os.path.splitext(filename)[0] log.debug('Importing controller %s', module_name) try: __import__(module_name, globals(), locals(), []) # On some platforms importing vlc.py might cause # also OSError exceptions. (e.g. Mac OS X) except (ImportError, OSError): log.warning('Failed to import %s on path %s', module_name, path) player_classes = MediaPlayer.__subclasses__() for player_class in player_classes: player = player_class(self) self.register_players(player) if not self.media_players: return False saved_players, overridden_player = get_media_players() invalid_media_players = \ [media_player for media_player in saved_players if media_player not in self.media_players or not self.media_players[media_player].check_available()] if invalid_media_players: for invalidPlayer in invalid_media_players: saved_players.remove(invalidPlayer) set_media_players(saved_players, overridden_player) self._set_active_players() self._generate_extensions_lists() return True
def add_end_header_bar(self): """ Adds buttons to the end of the header bar. """ # Replace backgrounds do not work at present so remove functionality. self.replace_action = self.toolbar.add_toolbar_action('replace_action', icon=':/slides/slide_blank.png', triggers=self.on_replace_click) if 'webkit' not in get_media_players()[0]: self.replace_action.setDisabled(True) self.reset_action = self.toolbar.add_toolbar_action('reset_action', icon=':/system/system_close.png', visible=False, triggers=self.on_reset_click) self.media_widget = QtGui.QWidget(self) self.media_widget.setObjectName('media_widget') self.display_layout = QtGui.QFormLayout(self.media_widget) self.display_layout.setMargin(self.display_layout.spacing()) self.display_layout.setObjectName('display_layout') self.display_type_label = QtGui.QLabel(self.media_widget) self.display_type_label.setObjectName('display_type_label') self.display_type_combo_box = create_horizontal_adjusting_combo_box( self.media_widget, 'display_type_combo_box') self.display_type_label.setBuddy(self.display_type_combo_box) self.display_layout.addRow(self.display_type_label, self.display_type_combo_box) # Add the Media widget to the page layout. self.page_layout.addWidget(self.media_widget) self.display_type_combo_box.currentIndexChanged.connect(self.override_player_changed)
def add_start_header_bar(self): """ Adds buttons to the start of the header bar. """ if 'vlc' in get_media_players()[0]: disable_optical_button_text = False optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD') optical_button_tooltip = translate('MediaPlugin.MediaItem', 'Load CD/DVD') else: disable_optical_button_text = True optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD') optical_button_tooltip = translate( 'MediaPlugin.MediaItem', 'CD/DVD playback is only supported if VLC is installed and enabled.' ) self.load_optical = self.toolbar.add_toolbar_action( 'load_optical', icon=UiIcons().optical, text=optical_button_text, tooltip=optical_button_tooltip, triggers=self.on_load_optical) if disable_optical_button_text: self.load_optical.setDisabled(True)
def media_setup_optical(self, filename, title, audio_track, subtitle_track, start, end, display, controller): """ Setup playback of optical media :param filename: Path of the optical device/drive. :param title: The main/title track to play. :param audio_track: The audio track to play. :param subtitle_track: The subtitle track to play. :param start: Start position in miliseconds. :param end: End position in miliseconds. :param display: The display to play the media. :param controller: The media contraoller. :return: True if setup succeded else False. """ log.debug('media_setup_optical') if controller is None: controller = self.display_controllers[DisplayControllerType.Plugin] # stop running videos self.media_reset(controller) # Setup media info controller.media_info = MediaInfo() controller.media_info.file_info = QtCore.QFileInfo(filename) if audio_track == -1 and subtitle_track == -1: controller.media_info.media_type = MediaType.CD else: controller.media_info.media_type = MediaType.DVD controller.media_info.start_time = start / 1000 controller.media_info.end_time = end / 1000 controller.media_info.length = (end - start) / 1000 controller.media_info.title_track = title controller.media_info.audio_track = audio_track controller.media_info.subtitle_track = subtitle_track # When called from mediaitem display is None if display is None: display = controller.preview_display # Find vlc player used_players = get_media_players()[0] vlc_player = None for title in used_players: player = self.media_players[title] if player.name == 'vlc': vlc_player = player if vlc_player is None: critical_error_message_box( translate('MediaPlugin.MediaItem', 'VLC player required'), translate( 'MediaPlugin.MediaItem', 'VLC player required for playback of optical devices')) return False vlc_player.load(display) self.resize(display, vlc_player) self.current_media_players[controller.controller_type] = vlc_player if audio_track == -1 and subtitle_track == -1: controller.media_info.media_type = MediaType.CD else: controller.media_info.media_type = MediaType.DVD return True
def media_setup_optical(self, filename, title, audio_track, subtitle_track, start, end, display, controller): """ Setup playback of optical media :param filename: Path of the optical device/drive. :param title: The main/title track to play. :param audio_track: The audio track to play. :param subtitle_track: The subtitle track to play. :param start: Start position in miliseconds. :param end: End position in miliseconds. :param display: The display to play the media. :param controller: The media contraoller. :return: True if setup succeded else False. """ log.debug('media_setup_optical') if controller is None: controller = self.display_controllers[DisplayControllerType.Plugin] # stop running videos self.media_reset(controller) # Setup media info controller.media_info = MediaInfo() controller.media_info.file_info = QtCore.QFileInfo(filename) if audio_track == -1 and subtitle_track == -1: controller.media_info.media_type = MediaType.CD else: controller.media_info.media_type = MediaType.DVD controller.media_info.start_time = start/1000 controller.media_info.end_time = end/1000 controller.media_info.length = (end - start)/1000 controller.media_info.title_track = title controller.media_info.audio_track = audio_track controller.media_info.subtitle_track = subtitle_track # When called from mediaitem display is None if display is None: display = controller.preview_display # Find vlc player used_players = get_media_players()[0] vlc_player = None for title in used_players: player = self.media_players[title] if player.name == 'vlc': vlc_player = player if vlc_player is None: critical_error_message_box(translate('MediaPlugin.MediaItem', 'VLC player required'), translate('MediaPlugin.MediaItem', 'VLC player required for playback of optical devices')) return False vlc_player.load(display) self.resize(display, vlc_player) self.current_media_players[controller.controller_type] = vlc_player if audio_track == -1 and subtitle_track == -1: controller.media_info.media_type = MediaType.CD else: controller.media_info.media_type = MediaType.DVD return True
def override_player_changed(index): """ The Player has been overridden :param index: Index """ player = get_media_players()[0] if index == 0: set_media_players(player) else: set_media_players(player, player[index - 1])
def override_player_changed(self, index): """ The Player has been overridden :param index: Index """ player = get_media_players()[0] if index == 0: set_media_players(player) else: set_media_players(player, player[index - 1])
def save(self): """ Save the settings """ settings = Settings() settings.beginGroup(self.settings_section) settings.setValue('background color', self.background_color) settings.endGroup() old_players, override_player = get_media_players() if self.used_players != old_players: # clean old Media stuff set_media_players(self.used_players, override_player) self.settings_form.register_post_process('mediaitem_suffix_reset') self.settings_form.register_post_process('mediaitem_media_rebuild') self.settings_form.register_post_process('config_screen_changed')
def load(self): """ Load the settings """ if self.saved_used_players: self.used_players = self.saved_used_players self.used_players = get_media_players()[0] self.saved_used_players = self.used_players settings = Settings() settings.beginGroup(self.settings_section) self.update_player_list() self.background_color = settings.value('background color') self.initial_color = self.background_color settings.endGroup() self.background_color_button.color = self.background_color
def retranslateUi(self): """ This method is called automatically to provide OpenLP with the opportunity to translate the ``MediaManagerItem`` to another language. """ self.on_new_prompt = translate('MediaPlugin.MediaItem', 'Select Media') self.replace_action.setText(UiStrings().ReplaceBG) if 'webkit' in get_media_players()[0]: self.replace_action.setToolTip(UiStrings().ReplaceLiveBG) else: self.replace_action.setToolTip(UiStrings().ReplaceLiveBGDisabled) self.reset_action.setText(UiStrings().ResetBG) self.reset_action.setToolTip(UiStrings().ResetLiveBG) self.automatic = UiStrings().Automatic self.display_type_label.setText(translate('MediaPlugin.MediaItem', 'Use Player:'))
def load(self): """ Load the settings """ if self.savedUsedPlayers: self.usedPlayers = self.savedUsedPlayers self.usedPlayers = get_media_players()[0] self.savedUsedPlayers = self.usedPlayers settings = Settings() settings.beginGroup(self.settingsSection) self.updatePlayerList() self.bg_color = settings.value(u'background color') self.initial_color = self.bg_color settings.endGroup() self.backgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)
def _check_file_type(self, controller, display, service_item): """ Select the correct media Player type from the prioritized Player list :param controller: First element is the controller which should be used :param display: Which display to use :param service_item: The ServiceItem containing the details to be played. """ used_players = get_media_players()[0] if service_item.processor and service_item.processor != UiStrings( ).Automatic: used_players = [service_item.processor.lower()] # If no player, we can't play if not used_players: return False if controller.media_info.file_info.isFile(): suffix = '*.%s' % controller.media_info.file_info.suffix().lower() for title in used_players: if not title: continue player = self.media_players[title] if suffix in player.video_extensions_list: if not controller.media_info.is_background or controller.media_info.is_background and \ player.can_background: self.resize(display, player) if player.load(display): self.current_media_players[ controller.controller_type] = player controller.media_info.media_type = MediaType.Video return True if suffix in player.audio_extensions_list: if player.load(display): self.current_media_players[ controller.controller_type] = player controller.media_info.media_type = MediaType.Audio return True else: for title in used_players: player = self.media_players[title] if player.can_folder: self.resize(display, player) if player.load(display): self.current_media_players[ controller.controller_type] = player controller.media_info.media_type = MediaType.Video return True # no valid player found return False
def retranslateUi(self): """ This method is called automatically to provide OpenLP with the opportunity to translate the ``MediaManagerItem`` to another language. """ self.on_new_prompt = translate('MediaPlugin.MediaItem', 'Select Media') self.replace_action.setText(UiStrings().ReplaceBG) if 'webkit' in get_media_players()[0]: self.replace_action.setToolTip(UiStrings().ReplaceLiveBG) else: self.replace_action.setToolTip(UiStrings().ReplaceLiveBGDisabled) self.reset_action.setText(UiStrings().ResetBG) self.reset_action.setToolTip(UiStrings().ResetLiveBG) self.automatic = UiStrings().Automatic self.display_type_label.setText( translate('MediaPlugin.MediaItem', 'Use Player:'))
def add_start_header_bar(self): """ Adds buttons to the start of the header bar. """ if 'vlc' in get_media_players()[0]: disable_optical_button_text = False optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD') optical_button_tooltip = translate('MediaPlugin.MediaItem', 'Load CD/DVD') else: disable_optical_button_text = True optical_button_text = translate('MediaPlugin.MediaItem', 'Load CD/DVD') optical_button_tooltip = translate('MediaPlugin.MediaItem', 'Load CD/DVD - only supported when VLC is installed and enabled') self.load_optical = self.toolbar.add_toolbar_action('load_optical', icon=OPTICAL_ICON, text=optical_button_text, tooltip=optical_button_tooltip, triggers=self.on_load_optical) if disable_optical_button_text: self.load_optical.setDisabled(True)
def save(self): """ Save the settings """ player_string_changed = False settings = Settings() settings.beginGroup(self.settingsSection) settings.setValue(u'background color', self.bg_color) settings.endGroup() old_players, override_player = get_media_players() if self.usedPlayers != old_players: # clean old Media stuff set_media_players(self.usedPlayers, override_player) player_string_changed = True if player_string_changed: self.service_manager.reset_supported_suffixes() Receiver.send_message(u'mediaitem_media_rebuild') Receiver.send_message(u'config_screen_changed')
def _check_file_type(self, controller, display, service_item): """ Select the correct media Player type from the prioritized Player list :param controller: First element is the controller which should be used :param display: Which display to use :param service_item: The ServiceItem containing the details to be played. """ used_players = get_media_players()[0] if service_item.processor and service_item.processor != UiStrings().Automatic: used_players = [service_item.processor.lower()] # If no player, we can't play if not used_players: return False if controller.media_info.file_info.isFile(): suffix = '*.%s' % controller.media_info.file_info.suffix().lower() for title in used_players: if not title: continue player = self.media_players[title] if suffix in player.video_extensions_list: if not controller.media_info.is_background or controller.media_info.is_background and \ player.can_background: self.resize(display, player) if player.load(display): self.current_media_players[controller.controller_type] = player controller.media_info.media_type = MediaType.Video return True if suffix in player.audio_extensions_list: if player.load(display): self.current_media_players[controller.controller_type] = player controller.media_info.media_type = MediaType.Audio return True else: for title in used_players: player = self.media_players[title] if player.can_folder: self.resize(display, player) if player.load(display): self.current_media_players[controller.controller_type] = player controller.media_info.media_type = MediaType.Video return True # no valid player found return False
def _get_used_players(service_item): """ Find the player for a given service item :param service_item: where the information is about the media and required player :return: player description """ used_players = get_media_players()[0] # If no player, we can't play if not used_players: return False default_player = [used_players[0]] if service_item.processor and service_item.processor != UiStrings().Automatic: # check to see if the player is usable else use the default one. if service_item.processor.lower() not in used_players: used_players = default_player else: used_players = [service_item.processor.lower()] return used_players
def test_get_media_players_no_players(self): """ Test that when there's no players but overridden player is set, get_media_players() returns 'auto' """ def value_results(key): if key == 'media/override player': return QtCore.Qt.Checked else: return '' # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string self.assertEqual([], used_players, 'Used players should be an empty list') self.assertEqual('auto', overridden_player, 'Overridden player should be "auto"')
def test_get_media_players_with_valid_list(self): """ Test that when get_media_players() is called the string list is interpreted correctly """ def value_results(key): if key == 'media/players': return '[vlc,webkit,system]' else: return False # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string self.assertEqual(['vlc', 'webkit', 'system'], used_players, 'Used players should be correct') self.assertEqual('', overridden_player, 'Overridden player should be an empty string')
def test_get_media_players_no_config(self): """ Test that when there's no config, get_media_players() returns an empty list of players (not a string) """ def value_results(key): if key == 'media/players': return '' else: return False # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string self.assertEqual([], used_players, 'Used players should be an empty list') self.assertEqual('', overridden_player, 'Overridden player should be an empty string')
def test_get_media_players_with_overridden_player(self): """ Test that when get_media_players() is called the overridden player is correctly set """ def value_results(key): if key == 'media/players': return '[vlc,webkit,phonon]' else: return QtCore.Qt.Checked # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string self.assertEqual(['vlc', 'webkit', 'phonon'], used_players, 'Used players should be correct') self.assertEqual('vlc,webkit,phonon', overridden_player, 'Overridden player should be a string of players')
def _get_used_players(service_item): """ Find the player for a given service item :param service_item: where the information is about the media and required player :return: player description """ used_players = get_media_players()[0] # If no player, we can't play if not used_players: return False default_player = [used_players[0]] if service_item.processor and service_item.processor != UiStrings( ).Automatic: # check to see if the player is usable else use the default one. if service_item.processor.lower() not in used_players: used_players = default_player else: used_players = [service_item.processor.lower()] return used_players
def test_get_media_players_with_overridden_player(self): """ Test that when get_media_players() is called the overridden player is correctly set """ def value_results(key): if key == 'media/players': return '[vlc,webkit,system]' else: return QtCore.Qt.Checked # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string self.assertEqual(['vlc', 'webkit', 'system'], used_players, 'Used players should be correct') self.assertEqual('vlc,webkit,system', overridden_player, 'Overridden player should be a string of players')
def _check_file_type(self, controller, display, serviceItem): """ Select the correct media Player type from the prioritized Player list ``controller`` First element is the controller which should be used ``serviceItem`` The ServiceItem containing the details to be played. """ usedPlayers = get_media_players()[0] if serviceItem.title != UiStrings().Automatic: usedPlayers = [serviceItem.title.lower()] if controller.media_info.file_info.isFile(): suffix = u'*.%s' % controller.media_info.file_info.suffix().lower() for title in usedPlayers: player = self.mediaPlayers[title] if suffix in player.video_extensions_list: if not controller.media_info.is_background or controller.media_info.is_background and \ player.canBackground: self.resize(display, player) if player.load(display): self.currentMediaPlayer[controller.controllerType] = player controller.media_info.media_type = MediaType.Video return True if suffix in player.audio_extensions_list: if player.load(display): self.currentMediaPlayer[controller.controllerType] = player controller.media_info.media_type = MediaType.Audio return True else: for title in usedPlayers: player = self.mediaPlayers[title] if player.canFolder: self.resize(display, player) if player.load(display): self.currentMediaPlayer[controller.controllerType] = player controller.media_info.media_type = MediaType.Video return True # no valid player found return False
def test_get_media_players_with_valid_list(self): """ Test that when get_media_players() is called the string list is interpreted correctly """ def value_results(key): if key == 'media/players': return '[vlc,webkit,system]' else: return False # GIVEN: A mocked out Settings() object with patch('openlp.core.ui.media.Settings.value') as mocked_value: mocked_value.side_effect = value_results # WHEN: get_media_players() is called used_players, overridden_player = get_media_players() # THEN: the used_players should be an empty list, and the overridden player should be an empty string assert ['vlc', 'webkit', 'system'] == used_players, 'Used players should be correct' assert '' == overridden_player, 'Overridden player should be an empty string'
def bootstrap_initialise(self): """ Check to see if we have any media Player's available. """ log.debug('_check_available_media_players') controller_dir = os.path.join( AppLocation.get_directory(AppLocation.AppDir), 'core', 'ui', 'media') for filename in os.listdir(controller_dir): if filename.endswith( 'player.py') and not filename == 'mediaplayer.py': path = os.path.join(controller_dir, filename) if os.path.isfile(path): module_name = 'openlp.core.ui.media.' + os.path.splitext( filename)[0] log.debug('Importing controller %s', module_name) try: __import__(module_name, globals(), locals(), []) # On some platforms importing vlc.py might cause # also OSError exceptions. (e.g. Mac OS X) except (ImportError, OSError): log.warning('Failed to import %s on path %s', module_name, path) player_classes = MediaPlayer.__subclasses__() for player_class in player_classes: player = player_class(self) self.register_players(player) if not self.media_players: return False saved_players, overridden_player = get_media_players() invalid_media_players = \ [media_player for media_player in saved_players if media_player not in self.media_players or not self.media_players[media_player].check_available()] if invalid_media_players: for invalidPlayer in invalid_media_players: saved_players.remove(invalidPlayer) set_media_players(saved_players, overridden_player) self._set_active_players() self._generate_extensions_lists() return True
def media_length(self, service_item): """ Loads and starts a media item to obtain the media length :param service_item: The ServiceItem containing the details to be played. """ media_info = MediaInfo() media_info.volume = 0 media_info.file_info = QtCore.QFileInfo(service_item.get_frame_path()) # display = controller.preview_display suffix = '*.%s' % media_info.file_info.suffix().lower() used_players = get_media_players()[0] player = self.media_players[used_players[0]] if suffix not in player.video_extensions_list and suffix not in player.audio_extensions_list: # Media could not be loaded correctly critical_error_message_box(translate('MediaPlugin.MediaItem', 'Unsupported Media File'), translate('MediaPlugin.MediaItem', 'File %s not supported using player %s') % (service_item.get_frame_path(), used_players[0])) return False media_data = MediaInfoWrapper.parse(service_item.get_frame_path()) # duration returns in milli seconds service_item.set_media_length(media_data.tracks[0].duration) return True
def populate_display_types(self): """ Load the combobox with the enabled media players, allowing user to select a specific player if settings allow. """ # block signals to avoid unnecessary override_player_changed Signals while combo box creation self.display_type_combo_box.blockSignals(True) self.display_type_combo_box.clear() used_players, override_player = get_media_players() media_players = self.media_controller.media_players current_index = 0 for player in used_players: # load the drop down selection self.display_type_combo_box.addItem( media_players[player].original_name) if override_player == player: current_index = len(self.display_type_combo_box) if self.display_type_combo_box.count() > 1: self.display_type_combo_box.insertItem(0, self.automatic) self.display_type_combo_box.setCurrentIndex(current_index) if override_player: self.media_widget.show() else: self.media_widget.hide() self.display_type_combo_box.blockSignals(False)
def bootstrap_initialise(self): """ Check to see if we have any media Player's available. """ controller_dir = os.path.join('core', 'ui', 'media') # Find all files that do not begin with '.' (lp:#1738047) and end with player.py glob_pattern = os.path.join(controller_dir, '[!.]*player.py') extension_loader(glob_pattern, ['mediaplayer.py']) player_classes = MediaPlayer.__subclasses__() for player_class in player_classes: self.register_players(player_class(self)) if not self.media_players: return False saved_players, overridden_player = get_media_players() invalid_media_players = \ [media_player for media_player in saved_players if media_player not in self.media_players or not self.media_players[media_player].check_available()] if invalid_media_players: for invalidPlayer in invalid_media_players: saved_players.remove(invalidPlayer) set_media_players(saved_players, overridden_player) self._set_active_players() self._generate_extensions_lists() return True
def overridePlayerChanged(self, index): player = get_media_players()[0] if index == 0: set_media_players(player) else: set_media_players(player, player[index-1])