1 /*****************************************************************************
2 * addons_manager.cpp: Addons manager for Qt
3 ****************************************************************************
4 * Copyright (C) 2013 VideoLAN and authors
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19 *****************************************************************************/
21 #include "addons_manager.hpp"
22 #include <QApplication>
24 const QEvent::Type AddonManagerEvent::AddedEvent =
25 (QEvent::Type)QEvent::registerEventType();
26 const QEvent::Type AddonManagerEvent::ChangedEvent =
27 (QEvent::Type)QEvent::registerEventType();
28 const QEvent::Type AddonManagerEvent::DiscoveryEndedEvent =
29 (QEvent::Type)QEvent::registerEventType();
31 AddonsManager::AddonsManager( intf_thread_t *p_intf )
33 p_manager = addons_manager_New( VLC_OBJECT(p_intf) );
34 if ( !p_manager ) return;
36 vlc_event_manager_t *p_em = p_manager->p_event_manager;
37 vlc_event_attach( p_em, vlc_AddonFound, addonsEventsCallback, this );
38 vlc_event_attach( p_em, vlc_AddonsDiscoveryEnded, addonsEventsCallback, this );
39 vlc_event_attach( p_em, vlc_AddonChanged, addonsEventsCallback, this );
42 AddonsManager::~AddonsManager()
45 addons_manager_Delete( p_manager );
48 void AddonsManager::findNewAddons()
50 addons_manager_Gather( p_manager, "repo://" );
53 void AddonsManager::findDesignatedAddon( QString uri )
55 addons_manager_Gather( p_manager, qtu(uri) );
58 void AddonsManager::findInstalled()
60 addons_manager_LoadCatalog( p_manager );
63 void AddonsManager::install( QByteArray id )
65 Q_ASSERT( id.size() == sizeof(addon_uuid_t) );
67 memcpy( &addonid, id.constData(), sizeof(addon_uuid_t) );
68 addons_manager_Install( p_manager, addonid );
71 void AddonsManager::remove( QByteArray id )
73 Q_ASSERT( id.size() == sizeof(addon_uuid_t) );
75 memcpy( &addonid, id.constData(), sizeof(addon_uuid_t) );
76 addons_manager_Remove( p_manager, addonid );
79 QString AddonsManager::getAddonType( int i_type )
84 return qtr( "Skins" );
85 case ADDON_PLAYLIST_PARSER:
86 return qtr("Playlist parsers");
87 case ADDON_SERVICE_DISCOVERY:
88 return qtr("Service Discovery");
90 return qtr("Extensions");
92 return qtr("Unknown");
96 void AddonsManager::addonsEventsCallback( const vlc_event_t *event, void *data )
98 AddonsManager *me = ( AddonsManager * ) data;
101 if ( event->type == vlc_AddonFound )
103 ev = new AddonManagerEvent( AddonManagerEvent::AddedEvent,
104 event->u.addon_generic_event.p_entry );
106 else if ( event->type == vlc_AddonsDiscoveryEnded )
108 ev = new QEvent( AddonManagerEvent::DiscoveryEndedEvent );
110 else if ( event->type == vlc_AddonChanged )
112 ev = new AddonManagerEvent( AddonManagerEvent::ChangedEvent,
113 event->u.addon_generic_event.p_entry );
116 if ( ev ) QApplication::postEvent( me, ev );
119 void AddonsManager::customEvent( QEvent *event )
121 if ( event->type() == AddonManagerEvent::AddedEvent )
123 AddonManagerEvent *ev = static_cast<AddonManagerEvent *>(event);
124 emit addonAdded( ev->entry() );
126 else if ( event->type() == AddonManagerEvent::ChangedEvent )
128 AddonManagerEvent *ev = static_cast<AddonManagerEvent *>(event);
129 emit addonChanged( ev->entry() );
131 else if ( event->type() == AddonManagerEvent::DiscoveryEndedEvent )
133 emit discoveryEnded();