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 
26 # ifdef __cplusplus
27 extern "C" {
28 # endif
29 
30 typedef enum addon_type_t
31 {
32  ADDON_UNKNOWN = 0,
39  ADDON_META,
41 } addon_type_t;
42 
43 typedef enum addon_state_t
44 {
50 
51 typedef enum addon_flags_t
52 {
53  ADDON_BROKEN = 1, /* Have install inconsistency */
54  ADDON_MANAGEABLE = 1 << 1, /* Have manifest, can install or uninstall files */
55  ADDON_UPDATABLE = 1 << 2,
57 
58 #define ADDON_MAX_SCORE (5 * 100)
59 #define ADDON_UUID_SIZE 16
60 #define ADDON_UUID_PSZ_SIZE (ADDON_UUID_SIZE * 2 + 4)
61 typedef uint8_t addon_uuid_t[ADDON_UUID_SIZE];
62 
63 typedef struct addon_file_t
64 {
67  char *psz_filename;
69 
70 struct addon_entry_t
71 {
73 
77 
78  /* data describing addon */
80  char *psz_name;
81  char *psz_summary;
83  char *psz_author;
84  char *psz_source_uri; /* webpage, ... */
86  char *psz_image_data; /* base64, png */
87  char *psz_version;
88 
89  /* stats */
90  long int i_downloads;
91  int i_score; /* score 0..5 in hundredth */
92 
93  /* Lister */
94  char *psz_source_module;
95 
96  /* files list */
97  char *psz_archive_uri; /* Archive */
99 
100  /* custom data storage (if needed by module/source) */
101  void * p_custom;
102 };
103 
104 typedef struct addons_finder_t addons_finder_t;
107 {
108  struct vlc_object_t obj;
109 
110  int ( * pf_find )( addons_finder_t * );
113  char *psz_uri;
114 
116 };
117 
118 typedef struct addons_storage_t addons_storage_t;
121 {
122  struct vlc_object_t obj;
123 
124  int ( * pf_install )( addons_storage_t *, addon_entry_t * );
126  int ( * pf_catalog ) ( addons_storage_t *, addon_entry_t **, int );
127 
129 };
130 
131 typedef struct addons_manager_t addons_manager_t;
132 
134 {
135  void *sys;
136  void (*addon_found)(struct addons_manager_t *, struct addon_entry_t *);
138  void (*addon_changed)(struct addons_manager_t *, struct addon_entry_t *);
139 };
140 
143 {
146 };
147 
148 /**
149  * addon entry lifecycle
150  */
154 
155 /**
156  * addons manager lifecycle
157  */
159  const struct addons_manager_owner * );
161 
162 /**
163  * Charge currently installed, usable and manageable addons
164  * (default "addons storage" module)
165  */
167 
168 /**
169  * Gather addons info from repository (default "addons finder" module)
170  * If psz_uri is not NULL, only gather info from the pointed package.
171  */
172 VLC_API void addons_manager_Gather( addons_manager_t *, const char *psz_uri );
173 
174 /**
175  * Install or Remove the addon identified by its uuid
176  */
177 VLC_API int addons_manager_Install( addons_manager_t *p_manager, const addon_uuid_t uuid );
178 VLC_API int addons_manager_Remove( addons_manager_t *p_manager, const addon_uuid_t uuid );
179 
180 /**
181  * String uuid to binary uuid helpers
182  */
183 static inline bool addons_uuid_read( const char *psz_uuid, addon_uuid_t *p_uuid )
184 {
185  if ( !psz_uuid ) return false;
186  if ( strlen( psz_uuid ) < ADDON_UUID_PSZ_SIZE ) return false;
187 
188  int i = 0, j = 0;
189  while ( i<ADDON_UUID_PSZ_SIZE )
190  {
191  if ( *( psz_uuid + i ) == '-' )
192  i++;
193  int v;
194  sscanf( psz_uuid + i, "%02x", &v );
195  (*p_uuid)[j++] = v & 0xFF;
196  i+=2;
197  }
198 
199  return true;
200 }
201 
202 static inline char * addons_uuid_to_psz( const addon_uuid_t * p_uuid )
203 {
204  char *psz = (char*) calloc( ADDON_UUID_PSZ_SIZE + 1 , sizeof(char) );
205  if ( psz )
206  {
207  int i=0;
208  char *p = psz;
209  while ( i < ADDON_UUID_SIZE )
210  {
211  if ( i == 4 || i== 7 || i== 9 || i== 11 )
212  *p++ = '-';
213  int v = 0xFF & (*p_uuid)[i];
214  sprintf( p, "%02x", v );
215  p += 2;
216  i++;
217  }
218  }
219  return psz;
220 }
221 
222 # ifdef __cplusplus
223 }
224 # endif
225 
226 #endif
addon_entry_t::psz_description
char * psz_description
Definition: vlc_addons.h:83
ADDON_UUID_PSZ_SIZE
#define ADDON_UUID_PSZ_SIZE
Definition: vlc_addons.h:61
addon_entry_t::psz_summary
char * psz_summary
Definition: vlc_addons.h:82
addons_finder_t::p_sys
addons_finder_sys_t * p_sys
Definition: vlc_addons.h:116
addon_entry_t::psz_source_uri
char * psz_source_uri
Definition: vlc_addons.h:85
addons_finder_t::entries
struct addons_finder_t::@180 entries
VLC_API
#define VLC_API
Definition: fourcc_gen.c:31
addons_finder_t::pf_find
int(* pf_find)(addons_finder_t *)
Definition: vlc_addons.h:111
addons_finder_t
Definition: vlc_addons.h:107
addon_entry_t::psz_image_uri
char * psz_image_uri
Definition: vlc_addons.h:86
addons_manager_Remove
VLC_EXPORT int addons_manager_Remove(addons_manager_t *p_manager, const addon_uuid_t uuid)
Definition: addons.c:565
vlc_common.h
addons_manager_Install
VLC_EXPORT 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
addon_entry_t::lock
vlc_mutex_t lock
Definition: vlc_addons.h:73
addon_entry_t
Definition: vlc_addons.h:71
addon_entry_t::files
struct addon_entry_t::@179 files
ADDON_INSTALLED
@ ADDON_INSTALLED
Definition: vlc_addons.h:48
ADDON_INTERFACE
@ ADDON_INTERFACE
Definition: vlc_addons.h:57
addons_manager_owner::addon_found
void(* addon_found)(struct addons_manager_t *, struct addon_entry_t *)
Definition: vlc_addons.h:137
addons_manager_Gather
VLC_EXPORT 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
addons_storage_sys_t
struct addons_storage_sys_t addons_storage_sys_t
Definition: vlc_addons.h:120
addons_uuid_read
static bool addons_uuid_read(const char *psz_uuid, addon_uuid_t *p_uuid)
String uuid to binary uuid helpers.
Definition: vlc_addons.h:184
addons_manager_owner::sys
void * sys
Definition: vlc_addons.h:136
addon_entry_t::psz_author
char * psz_author
Definition: vlc_addons.h:84
addon_entry_t::e_flags
addon_flags_t e_flags
Definition: vlc_addons.h:77
ADDON_UNKNOWN
@ ADDON_UNKNOWN
Definition: vlc_addons.h:51
addon_file_t
struct addon_file_t addon_file_t
addon_entry_Hold
VLC_EXPORT addon_entry_t * addon_entry_Hold(addon_entry_t *)
Definition: addons.c:91
vlc_mutex_t
Mutex.
Definition: vlc_threads.h:225
ADDON_PLUGIN
@ ADDON_PLUGIN
Definition: vlc_addons.h:56
addons_manager_t::owner
struct addons_manager_owner owner
Definition: vlc_addons.h:145
ADDON_UNINSTALLING
@ ADDON_UNINSTALLING
Definition: vlc_addons.h:49
addons_storage_t::pf_install
int(* pf_install)(addons_storage_t *, addon_entry_t *)
Definition: vlc_addons.h:125
addon_entry_t::i_downloads
long int i_downloads
Definition: vlc_addons.h:91
ADDON_UUID_SIZE
#define ADDON_UUID_SIZE
Definition: vlc_addons.h:60
addon_entry_t::psz_name
char * psz_name
Definition: vlc_addons.h:81
addons_storage_t
Definition: vlc_addons.h:121
addon_entry_t::psz_version
char * psz_version
Definition: vlc_addons.h:88
addon_entry_t::psz_source_module
char * psz_source_module
Definition: vlc_addons.h:95
addon_entry_New
VLC_EXPORT addon_entry_t * addon_entry_New(void)
addon entry lifecycle
Definition: addons.c:77
addons_manager_t::p_priv
addons_manager_private_t * p_priv
Definition: vlc_addons.h:146
addon_entry_t::e_state
addon_state_t e_state
Definition: vlc_addons.h:76
addons_storage_t::pf_catalog
int(* pf_catalog)(addons_storage_t *, addon_entry_t **, int)
Definition: vlc_addons.h:127
ADDON_OTHER
@ ADDON_OTHER
Definition: vlc_addons.h:59
addons_finder_t::psz_uri
char * psz_uri
Definition: vlc_addons.h:114
addon_entry_t::p_custom
void * p_custom
Definition: vlc_addons.h:102
DECL_ARRAY
#define DECL_ARRAY(type)
Definition: vlc_arrays.h:181
ADDON_NOTINSTALLED
@ ADDON_NOTINSTALLED
Definition: vlc_addons.h:46
addon_file_t::e_filetype
addon_type_t e_filetype
Definition: vlc_addons.h:66
addons_manager_t
Definition: vlc_addons.h:143
addon_type_t
addon_type_t
Definition: vlc_addons.h:31
addon_entry_t::e_type
addon_type_t e_type
Definition: vlc_addons.h:75
addons_manager_Delete
VLC_EXPORT void addons_manager_Delete(addons_manager_t *)
Definition: addons.c:173
vlc_object_t
VLC object common members.
Definition: vlc_objects.h:43
addon_file_t
Definition: vlc_addons.h:64
ADDON_MANAGEABLE
@ ADDON_MANAGEABLE
Definition: vlc_addons.h:55
addons_manager_owner
Definition: vlc_addons.h:134
addons_manager_LoadCatalog
VLC_EXPORT int addons_manager_LoadCatalog(addons_manager_t *)
Charge currently installed, usable and manageable addons (default "addons storage" module)
Definition: addons.c:411
addon_uuid_t
uint8_t addon_uuid_t[16]
Definition: vlc_addons.h:62
addons_finder_t::obj
struct vlc_object_t obj
Definition: vlc_addons.h:109
addons_manager_owner::addon_changed
void(* addon_changed)(struct addons_manager_t *, struct addon_entry_t *)
Definition: vlc_addons.h:139
addon_entry_t::uuid
addon_uuid_t uuid
Definition: vlc_addons.h:80
addon_flags_t
addon_flags_t
Definition: vlc_addons.h:52
addon_state_t
addon_state_t
Definition: vlc_addons.h:44
ADDON_PLAYLIST_PARSER
@ ADDON_PLAYLIST_PARSER
Definition: vlc_addons.h:53
ADDON_EXTENSION
@ ADDON_EXTENSION
Definition: vlc_addons.h:52
ADDON_SERVICE_DISCOVERY
@ ADDON_SERVICE_DISCOVERY
Definition: vlc_addons.h:54
addon_file_t::psz_download_uri
char * psz_download_uri
Definition: vlc_addons.h:67
addon_entry_t::psz_image_data
char * psz_image_data
Definition: vlc_addons.h:87
addons_storage_t::p_sys
addons_storage_sys_t * p_sys
Definition: vlc_addons.h:129
ADDON_SKIN2
@ ADDON_SKIN2
Definition: vlc_addons.h:55
ADDON_UPDATABLE
@ ADDON_UPDATABLE
Definition: vlc_addons.h:56
vlc_arrays.h
addons_manager_private_t
Definition: addons.c:44
addons_uuid_to_psz
static char * addons_uuid_to_psz(const addon_uuid_t *p_uuid)
Definition: vlc_addons.h:203
addons_storage_t::pf_remove
int(* pf_remove)(addons_storage_t *, addon_entry_t *)
Definition: vlc_addons.h:126
addons_finder_sys_t
struct addons_finder_sys_t addons_finder_sys_t
Definition: vlc_addons.h:106
addon_entry_Release
VLC_EXPORT void addon_entry_Release(addon_entry_t *)
Definition: addons.c:99
addons_manager_owner::discovery_ended
void(* discovery_ended)(struct addons_manager_t *)
Definition: vlc_addons.h:138
ADDON_INSTALLING
@ ADDON_INSTALLING
Definition: vlc_addons.h:47
addon_entry_t::psz_archive_uri
char * psz_archive_uri
Definition: vlc_addons.h:98
ADDON_META
@ ADDON_META
Definition: vlc_addons.h:58
ADDON_BROKEN
@ ADDON_BROKEN
Definition: vlc_addons.h:54
addon_entry_t::i_score
int i_score
Definition: vlc_addons.h:92
addons_manager_New
VLC_EXPORT addons_manager_t * addons_manager_New(vlc_object_t *, const struct addons_manager_owner *)
addons manager lifecycle
addons_storage_t::obj
struct vlc_object_t obj
Definition: vlc_addons.h:123
addons_finder_t::pf_retrieve
int(* pf_retrieve)(addons_finder_t *, addon_entry_t *)
Definition: vlc_addons.h:112
p
#define p(t)
addon_file_t::psz_filename
char * psz_filename
Definition: vlc_addons.h:68