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_events.h>
26 
27 # ifdef __cplusplus
28 extern "C" {
29 # endif
30 
31 typedef enum addon_type_t
32 {
33  ADDON_UNKNOWN = 0,
43 
44 typedef enum addon_state_t
45 {
51 
52 typedef enum addon_flags_t
53 {
54  ADDON_BROKEN = 1, /* Have install inconsistency */
55  ADDON_MANAGEABLE = 1 << 1, /* Have manifest, can install or uninstall files */
56  ADDON_UPDATABLE = 1 << 2,
58 
59 #define ADDON_MAX_SCORE (5 * 100)
60 #define ADDON_UUID_SIZE 16
61 #define ADDON_UUID_PSZ_SIZE (ADDON_UUID_SIZE * 2 + 4)
62 typedef uint8_t addon_uuid_t[ADDON_UUID_SIZE];
63 
64 typedef struct addon_file_t
65 {
68  char *psz_filename;
70 
71 struct addon_entry_t
72 {
74 
75  addon_type_t e_type;
76  addon_state_t e_state;
77  addon_flags_t e_flags;
78 
79  /* data describing addon */
80  addon_uuid_t uuid;
81  char *psz_name;
82  char *psz_summary;
83  char *psz_description;
84  char *psz_author;
85  char *psz_source_uri; /* webpage, ... */
86  char *psz_image_uri;
87  char *psz_image_data; /* base64, png */
88  char *psz_version;
89 
90  /* stats */
91  long int i_downloads;
92  int i_score; /* score 0..5 in hundredth */
93 
94  /* Lister */
95  char *psz_source_module;
96 
97  /* files list */
98  char *psz_archive_uri; /* Archive */
101  /* custom data storage (if needed by module/source) */
102  void * p_custom;
103 };
104 
105 typedef struct addons_finder_t addons_finder_t;
108 {
109  struct vlc_object_t obj;
111  int ( * pf_find )( addons_finder_t * );
112  int ( * pf_retrieve )( addons_finder_t *, addon_entry_t * );
113  DECL_ARRAY( addon_entry_t * ) entries;
114  char *psz_uri;
116  addons_finder_sys_t *p_sys;
117 };
118 
119 typedef struct addons_storage_t addons_storage_t;
122 {
123  struct vlc_object_t obj;
125  int ( * pf_install )( addons_storage_t *, addon_entry_t * );
126  int ( * pf_remove )( addons_storage_t *, addon_entry_t * );
127  int ( * pf_catalog ) ( addons_storage_t *, addon_entry_t **, int );
129  addons_storage_sys_t *p_sys;
130 };
131 
132 typedef struct addons_manager_t addons_manager_t;
135 {
136  void *sys;
137  void (*addon_found)(struct addons_manager_t *, struct addon_entry_t *);
138  void (*discovery_ended)(struct addons_manager_t *);
139  void (*addon_changed)(struct addons_manager_t *, struct addon_entry_t *);
140 };
141 
144 {
145  struct addons_manager_owner owner;
147 };
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  */
173 VLC_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  */
178 VLC_API int addons_manager_Install( addons_manager_t *p_manager, const addon_uuid_t uuid );
179 VLC_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  */
184 static inline bool addons_uuid_read( const char *psz_uuid, addon_uuid_t *p_uuid )
185 {
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 
203 static inline char * addons_uuid_to_psz( const addon_uuid_t * p_uuid )
204 {
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
addon_entry_t * addon_entry_Hold(addon_entry_t *)
Definition: addons.c:91
Definition: vlc_addons.h:144
Definition: vlc_addons.h:72
Definition: vlc_addons.h:38
void addons_manager_Delete(addons_manager_t *)
Definition: addons.c:173
char * psz_download_uri
Definition: vlc_addons.h:68
static char * addons_uuid_to_psz(const addon_uuid_t *p_uuid)
Definition: vlc_addons.h:204
Definition: vlc_addons.h:56
int addons_manager_Remove(addons_manager_t *p_manager, const addon_uuid_t uuid)
Definition: addons.c:565
Definition: addons.c:44
vlc_mutex_t lock
Definition: rand.c:32
addon_type_t e_filetype
Definition: vlc_addons.h:67
Definition: vlc_addons.h:108
addon_entry_t * addon_entry_New(void)
addon entry lifecycle
Definition: addons.c:77
Definition: vlc_addons.h:35
Definition: vlc_addons.h:40
Definition: vlc_addons.h:34
Definition: vlc_addons.h:122
const char * psz_name
Definition: text_style.c:33
Definition: vlc_addons.h:47
Definition: vlc_addons.h:39
addon_type_t
Definition: vlc_addons.h:32
Definition: vlc_addons.h:41
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:556
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
Definition: vlc_addons.h:37
Mutex.
Definition: vlc_threads.h:266
#define ADDON_UUID_PSZ_SIZE
Definition: vlc_addons.h:62
char * psz_filename
Definition: vlc_addons.h:69
Definition: vlc_addons.h:42
addon_state_t
Definition: vlc_addons.h:45
#define VLC_API
Definition: fourcc_gen.c:31
void addon_entry_Release(addon_entry_t *)
Definition: addons.c:99
#define DECL_ARRAY(type)
Definition: vlc_arrays.h:181
Definition: vlc_addons.h:50
Definition: vlc_addons.h:49
Definition: vlc_addons.h:65
struct addons_finder_sys_t addons_finder_sys_t
Definition: vlc_addons.h:107
Definition: vlc_addons.h:36
addon_flags_t
Definition: vlc_addons.h:53
int addons_manager_LoadCatalog(addons_manager_t *)
Charge currently installed, usable and manageable addons (default "addons storage" module) ...
Definition: addons.c:411
struct addons_storage_sys_t addons_storage_sys_t
Definition: vlc_addons.h:121
Definition: vlc_addons.h:135
#define p(t)
struct addon_file_t addon_file_t
addons_manager_t * addons_manager_New(vlc_object_t *, const struct addons_manager_owner *)
addons manager lifecycle
This file defines functions, structures and macros for handling arrays in vlc.
Definition: vlc_addons.h:48
uint8_t addon_uuid_t[16]
Definition: vlc_addons.h:63
VLC object common members.
Definition: vlc_objects.h:43
Definition: vlc_addons.h:57
Definition: vlc_addons.h:55
#define ADDON_UUID_SIZE
Definition: vlc_addons.h:61
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:215
This file is the interface definition for events (implementation in src/misc/events.c)