menuMapper = new QSignalMapper( this );
CONNECT( menuMapper, mapped( int ), this, triggerMenu( int ) );
b_unloading = false;
+ b_failed = false;
}
ExtensionsManager::~ExtensionsManager()
}
}
-void ExtensionsManager::loadExtensions()
+bool ExtensionsManager::loadExtensions()
{
if( !p_extensions_manager )
{
p_extensions_manager = ( extensions_manager_t* )
vlc_object_create( p_intf, sizeof( extensions_manager_t ) );
if( !p_extensions_manager )
- return;
+ {
+ b_failed = true;
+ return false;
+ }
vlc_object_attach( p_extensions_manager, p_intf );
p_extensions_manager->p_module =
if( !p_extensions_manager->p_module )
{
msg_Err( p_intf, "Unable to load extensions module" );
- return;
+ vlc_object_release( p_extensions_manager );
+ p_extensions_manager = NULL;
+ b_failed = true;
+ return false;
}
/* Initialize dialog provider */
if( !p_edp )
{
msg_Err( p_intf, "Unable to create dialogs provider for extensions" );
- return;
+ module_unneed( p_extensions_manager,
+ p_extensions_manager->p_module );
+ vlc_object_release( p_extensions_manager );
+ p_extensions_manager = NULL;
+ b_failed = true;
+ return false;
}
b_unloading = false;
}
+ b_failed = false;
+ return true;
}
void ExtensionsManager::unloadExtensions()
ExtensionsDialogProvider::killInstance();
}
+void ExtensionsManager::reloadExtensions()
+{
+ unloadExtensions();
+ loadExtensions();
+}
+
void ExtensionsManager::menu( QMenu *current )
{
- QAction *action;
assert( current != NULL );
if( !isLoaded() )
{
- // This case should not happen
- action = current->addAction( qtr( "Extensions not loaded" ) );
- action->setEnabled( false );
+ // This case can happen: do nothing
return;
}
- /* Some useless message */
- action = current->addAction( p_extensions_manager->extensions.i_size
- ? qtr( "Extensions found:" )
- : qtr( "No extensions found" ) );
- action->setEnabled( false );
- current->addSeparator();
-
vlc_mutex_lock( &p_extensions_manager->lock );
+ QAction *action;
extension_t *p_ext = NULL;
int i_ext = 0;
FOREACH_ARRAY( p_ext, p_extensions_manager->extensions )
FOREACH_END()
vlc_mutex_unlock( &p_extensions_manager->lock );
-
- /* Possibility to unload the module */
- current->addSeparator();
- current->addAction( QIcon( ":/menu/quit" ), qtr( "Unload extensions" ),
- this, SLOT( unloadExtensions() ) );
}
void ExtensionsManager::triggerMenu( int id )
class ExtensionsManager : public QObject
{
Q_OBJECT
-
-private:
- static ExtensionsManager* instance;
- intf_thread_t *p_intf;
- extensions_manager_t *p_extensions_manager;
- ExtensionsDialogProvider *p_edp;
-
- QSignalMapper *menuMapper;
- bool b_unloading; ///< Work around threads + emit issues, see isUnloading
-
public:
static ExtensionsManager *getInstance( intf_thread_t *_p_intf,
QObject *_parent = 0 )
virtual ~ExtensionsManager();
inline bool isLoaded() { return p_extensions_manager != NULL; }
+ inline bool cannotLoad() { return b_unloading || b_failed; }
inline bool isUnloading() { return b_unloading; }
void menu( QMenu *current );
public slots:
- void loadExtensions();
+ bool loadExtensions();
void unloadExtensions();
+ void reloadExtensions();
private slots:
void triggerMenu( int id );
+
+private:
+ static ExtensionsManager* instance;
+ intf_thread_t *p_intf;
+ extensions_manager_t *p_extensions_manager;
+ ExtensionsDialogProvider *p_edp;
+
+ QSignalMapper *menuMapper;
+ bool b_unloading; ///< Work around threads + emit issues, see isUnloading
+ bool b_failed; ///< Flag set to true if we could not load the module
};
#endif // EXTENSIONS_MANAGER_HPP