qt/macos: add missing addons intf and meta categories
[vlc.git] / modules / gui / qt4 / managers / addons_manager.cpp
1 /*****************************************************************************
2  * addons_manager.cpp: Addons manager for Qt
3  ****************************************************************************
4  * Copyright (C) 2013 VideoLAN and authors
5  *
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.
10  *
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.
15  *
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  *****************************************************************************/
20
21 #include "addons_manager.hpp"
22 #include <QApplication>
23
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();
30
31 AddonsManager::AddonsManager( intf_thread_t *p_intf )
32 {
33     p_manager = addons_manager_New( VLC_OBJECT(p_intf) );
34     if ( !p_manager ) return;
35
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 );
40 }
41
42 AddonsManager::~AddonsManager()
43 {
44     if ( p_manager )
45         addons_manager_Delete( p_manager );
46 }
47
48 void AddonsManager::findNewAddons()
49 {
50     addons_manager_Gather( p_manager, "repo://" );
51 }
52
53 void AddonsManager::findDesignatedAddon( QString uri )
54 {
55     addons_manager_Gather( p_manager, qtu(uri) );
56 }
57
58 void AddonsManager::findInstalled()
59 {
60     addons_manager_LoadCatalog( p_manager );
61 }
62
63 void AddonsManager::install( QByteArray id )
64 {
65     Q_ASSERT( id.size() == sizeof(addon_uuid_t) );
66     addon_uuid_t addonid;
67     memcpy( &addonid, id.constData(), sizeof(addon_uuid_t) );
68     addons_manager_Install( p_manager, addonid );
69 }
70
71 void AddonsManager::remove( QByteArray id )
72 {
73     Q_ASSERT( id.size() == sizeof(addon_uuid_t) );
74     addon_uuid_t addonid;
75     memcpy( &addonid, id.constData(), sizeof(addon_uuid_t) );
76     addons_manager_Remove( p_manager, addonid );
77 }
78
79 QString AddonsManager::getAddonType( int i_type )
80 {
81     switch ( i_type )
82     {
83     case ADDON_SKIN2:
84         return qtr( "Skins" );
85     case ADDON_PLAYLIST_PARSER:
86         return qtr("Playlist parsers");
87     case ADDON_SERVICE_DISCOVERY:
88         return qtr("Service Discovery");
89     case ADDON_INTERFACE:
90         return qtr("Interfaces");
91     case ADDON_META:
92         return qtr("Art and meta fetchers");
93     case ADDON_EXTENSION:
94         return qtr("Extensions");
95     default:
96         return qtr("Unknown");
97     }
98 }
99
100 void AddonsManager::addonsEventsCallback( const vlc_event_t *event, void *data )
101 {
102     AddonsManager *me = ( AddonsManager * ) data;
103     QEvent *ev = NULL;
104
105     if ( event->type == vlc_AddonFound )
106     {
107         ev = new AddonManagerEvent( AddonManagerEvent::AddedEvent,
108                                     event->u.addon_generic_event.p_entry );
109     }
110     else if ( event->type == vlc_AddonsDiscoveryEnded )
111     {
112         ev = new QEvent( AddonManagerEvent::DiscoveryEndedEvent );
113     }
114     else if ( event->type == vlc_AddonChanged )
115     {
116         ev = new AddonManagerEvent( AddonManagerEvent::ChangedEvent,
117                                     event->u.addon_generic_event.p_entry );
118     }
119
120     if ( ev ) QApplication::postEvent( me, ev );
121 }
122
123 void AddonsManager::customEvent( QEvent *event )
124 {
125     if ( event->type() == AddonManagerEvent::AddedEvent )
126     {
127         AddonManagerEvent *ev = static_cast<AddonManagerEvent *>(event);
128         emit addonAdded( ev->entry() );
129     }
130     else if ( event->type() == AddonManagerEvent::ChangedEvent )
131     {
132         AddonManagerEvent *ev = static_cast<AddonManagerEvent *>(event);
133         emit addonChanged( ev->entry() );
134     }
135     else if ( event->type() == AddonManagerEvent::DiscoveryEndedEvent )
136     {
137         emit discoveryEnded();
138     }
139 }