VLC 4.0.0-dev
vlc_addons.h
Go to the documentation of this file.
1/*****************************************************************************
2 * vlc_addons.h : addons handling and describing
3 *****************************************************************************
4 * Copyright (C) 2013 VideoLAN and authors
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19 *****************************************************************************/
20
21#ifndef VLC_ADDONS_H
22#define VLC_ADDONS_H 1
23
24#include <vlc_arrays.h>
25#include <vlc_threads.h>
26
27# ifdef __cplusplus
28extern "C" {
29# endif
30
31typedef enum addon_type_t
33 ADDON_UNKNOWN = 0,
44typedef enum addon_state_t
52typedef enum addon_flags_t
54 ADDON_BROKEN = 1, /* Have install inconsistency */
55 ADDON_MANAGEABLE = 1 << 1, /* Have manifest, can install or uninstall files */
59#define ADDON_MAX_SCORE (5 * 100)
60#define ADDON_UUID_SIZE 16
61#define ADDON_UUID_PSZ_SIZE (ADDON_UUID_SIZE * 2 + 4)
64typedef struct addon_file_t
71struct addon_entry_t
79 /* data describing addon */
81 char *psz_name;
85 char *psz_source_uri; /* webpage, ... */
87 char *psz_image_data; /* base64, png */
90 /* stats */
91 long int i_downloads;
92 int i_score; /* score 0..5 in hundredth */
94 /* Lister */
97 /* files list */
98 char *psz_archive_uri; /* Archive */
101 /* custom data storage (if needed by module/source) */
102 void * p_custom;
104
105typedef struct addons_finder_t addons_finder_t;
109 struct vlc_object_t obj;
111 int ( * pf_find )( addons_finder_t * );
114 char *psz_uri;
118
123 struct vlc_object_t obj;
125 int ( * pf_install )( addons_storage_t *, addon_entry_t * );
127 int ( * pf_catalog ) ( addons_storage_t *, addon_entry_t **, int );
131
136 void *sys;
137 void (*addon_found)(struct addons_manager_t *, struct addon_entry_t *);
139 void (*addon_changed)(struct addons_manager_t *, struct addon_entry_t *);
141
148
149/**
150 * addon entry lifecycle
151 */
155
156/**
157 * addons manager lifecycle
158 */
160 const struct addons_manager_owner * );
162
163/**
164 * Charge currently installed, usable and manageable addons
165 * (default "addons storage" module)
166 */
168
169/**
170 * Gather addons info from repository (default "addons finder" module)
171 * If psz_uri is not NULL, only gather info from the pointed package.
172 */
173VLC_API void addons_manager_Gather( addons_manager_t *, const char *psz_uri );
174
175/**
176 * Install or Remove the addon identified by its uuid
177 */
178VLC_API int addons_manager_Install( addons_manager_t *p_manager, const addon_uuid_t uuid );
179VLC_API int addons_manager_Remove( addons_manager_t *p_manager, const addon_uuid_t uuid );
180
181/**
182 * String uuid to binary uuid helpers
183 */
184static inline bool addons_uuid_read( const char *psz_uuid, addon_uuid_t *p_uuid )
186 if ( !psz_uuid ) return false;
187 if ( strlen( psz_uuid ) < ADDON_UUID_PSZ_SIZE ) return false;
188
189 int i = 0, j = 0;
190 while ( i<ADDON_UUID_PSZ_SIZE )
191 {
192 if ( *( psz_uuid + i ) == '-' )
193 i++;
194 int v;
195 sscanf( psz_uuid + i, "%02x", &v );
196 (*p_uuid)[j++] = v & 0xFF;
197 i+=2;
198 }
199
200 return true;
201}
202
203static inline char * addons_uuid_to_psz( const addon_uuid_t * p_uuid )
205 char *psz = (char*) calloc( ADDON_UUID_PSZ_SIZE + 1 , sizeof(char) );
206 if ( psz )
207 {
208 int i=0;
209 char *p = psz;
210 while ( i < ADDON_UUID_SIZE )
211 {
212 if ( i == 4 || i== 7 || i== 9 || i== 11 )
213 *p++ = '-';
214 int v = 0xFF & (*p_uuid)[i];
215 sprintf( p, "%02x", v );
216 p += 2;
217 i++;
218 }
219 }
220 return psz;
221}
222
223# ifdef __cplusplus
224}
225# endif
226
227#endif
#define VLC_API
Definition: fourcc_gen.c:31
#define p(t)
Definition: vlc_addons.h:73
char * psz_version
Definition: vlc_addons.h:89
addon_state_t e_state
Definition: vlc_addons.h:77
struct addon_entry_t::@185 files
char * psz_image_data
Definition: vlc_addons.h:88
void * p_custom
Definition: vlc_addons.h:103
char * psz_archive_uri
Definition: vlc_addons.h:99
addon_uuid_t uuid
Definition: vlc_addons.h:81
char * psz_author
Definition: vlc_addons.h:85
char * psz_image_uri
Definition: vlc_addons.h:87
vlc_mutex_t lock
Definition: vlc_addons.h:74
int i_score
Definition: vlc_addons.h:93
long int i_downloads
Definition: vlc_addons.h:92
char * psz_description
Definition: vlc_addons.h:84
char * psz_source_module
Definition: vlc_addons.h:96
addon_flags_t e_flags
Definition: vlc_addons.h:78
char * psz_summary
Definition: vlc_addons.h:83
char * psz_source_uri
Definition: vlc_addons.h:86
char * psz_name
Definition: vlc_addons.h:82
addon_type_t e_type
Definition: vlc_addons.h:76
Definition: vlc_addons.h:66
char * psz_filename
Definition: vlc_addons.h:69
addon_type_t e_filetype
Definition: vlc_addons.h:67
char * psz_download_uri
Definition: vlc_addons.h:68
Definition: vlc_addons.h:109
int(* pf_find)(addons_finder_t *)
Definition: vlc_addons.h:112
char * psz_uri
Definition: vlc_addons.h:115
struct vlc_object_t obj
Definition: vlc_addons.h:110
struct addons_finder_t::@186 entries
int(* pf_retrieve)(addons_finder_t *, addon_entry_t *)
Definition: vlc_addons.h:113
addons_finder_sys_t * p_sys
Definition: vlc_addons.h:117
Definition: vlc_addons.h:136
void(* addon_changed)(struct addons_manager_t *, struct addon_entry_t *)
Definition: vlc_addons.h:140
void(* discovery_ended)(struct addons_manager_t *)
Definition: vlc_addons.h:139
void * sys
Definition: vlc_addons.h:137
void(* addon_found)(struct addons_manager_t *, struct addon_entry_t *)
Definition: vlc_addons.h:138
Definition: addons.c:46
Definition: vlc_addons.h:145
addons_manager_private_t * p_priv
Definition: vlc_addons.h:147
struct addons_manager_owner owner
Definition: vlc_addons.h:146
Definition: vlc_addons.h:123
int(* pf_install)(addons_storage_t *, addon_entry_t *)
Definition: vlc_addons.h:126
struct vlc_object_t obj
Definition: vlc_addons.h:124
int(* pf_catalog)(addons_storage_t *, addon_entry_t **, int)
Definition: vlc_addons.h:128
addons_storage_sys_t * p_sys
Definition: vlc_addons.h:130
int(* pf_remove)(addons_storage_t *, addon_entry_t *)
Definition: vlc_addons.h:127
Mutex.
Definition: vlc_threads.h:195
VLC object common members.
Definition: vlc_objects.h:45
uint8_t addon_uuid_t[16]
Definition: vlc_addons.h:63
void addon_entry_Release(addon_entry_t *)
Definition: addons.c:100
void addons_manager_Delete(addons_manager_t *)
Definition: addons.c:174
addon_type_t
Definition: vlc_addons.h:33
@ ADDON_PLAYLIST_PARSER
Definition: vlc_addons.h:36
@ ADDON_UNKNOWN
Definition: vlc_addons.h:34
@ ADDON_INTERFACE
Definition: vlc_addons.h:40
@ ADDON_META
Definition: vlc_addons.h:41
@ ADDON_SKIN2
Definition: vlc_addons.h:38
@ ADDON_PLUGIN
Definition: vlc_addons.h:39
@ ADDON_OTHER
Definition: vlc_addons.h:42
@ ADDON_SERVICE_DISCOVERY
Definition: vlc_addons.h:37
@ ADDON_EXTENSION
Definition: vlc_addons.h:35
struct addons_finder_sys_t addons_finder_sys_t
Definition: vlc_addons.h:107
#define ADDON_UUID_SIZE
Definition: vlc_addons.h:61
addons_manager_t * addons_manager_New(vlc_object_t *, const struct addons_manager_owner *)
addons manager lifecycle
int addons_manager_Install(addons_manager_t *p_manager, const addon_uuid_t uuid)
Install or Remove the addon identified by its uuid.
Definition: addons.c:561
addon_entry_t * addon_entry_Hold(addon_entry_t *)
Definition: addons.c:92
void addons_manager_Gather(addons_manager_t *, const char *psz_uri)
Gather addons info from repository (default "addons finder" module) If psz_uri is not NULL,...
Definition: addons.c:216
addon_entry_t * addon_entry_New(void)
addon entry lifecycle
Definition: addons.c:78
static bool addons_uuid_read(const char *psz_uuid, addon_uuid_t *p_uuid)
String uuid to binary uuid helpers.
Definition: vlc_addons.h:185
#define ADDON_UUID_PSZ_SIZE
Definition: vlc_addons.h:62
addon_flags_t
Definition: vlc_addons.h:54
@ ADDON_MANAGEABLE
Definition: vlc_addons.h:56
@ ADDON_BROKEN
Definition: vlc_addons.h:55
@ ADDON_UPDATABLE
Definition: vlc_addons.h:57
addon_state_t
Definition: vlc_addons.h:46
@ ADDON_INSTALLING
Definition: vlc_addons.h:48
@ ADDON_UNINSTALLING
Definition: vlc_addons.h:50
@ ADDON_INSTALLED
Definition: vlc_addons.h:49
@ ADDON_NOTINSTALLED
Definition: vlc_addons.h:47
struct addon_file_t addon_file_t
static char * addons_uuid_to_psz(const addon_uuid_t *p_uuid)
Definition: vlc_addons.h:204
int addons_manager_LoadCatalog(addons_manager_t *)
Charge currently installed, usable and manageable addons (default "addons storage" module)
Definition: addons.c:414
struct addons_storage_sys_t addons_storage_sys_t
Definition: vlc_addons.h:121
int addons_manager_Remove(addons_manager_t *p_manager, const addon_uuid_t uuid)
Definition: addons.c:570
This file defines functions, structures and macros for handling arrays in vlc.
#define DECL_ARRAY(type)
Definition: vlc_arrays.h:179
This file is a collection of common definitions and types.
Thread primitive declarations.