1 /*****************************************************************************
2 * vlc_addons.h : addons handling and describing
3 *****************************************************************************
4 * Copyright (C) 2013 VideoLAN and authors
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.
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.
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 *****************************************************************************/
22 #define VLC_ADDONS_H 1
24 #include <vlc_arrays.h>
30 typedef enum addon_type_t
34 ADDON_PLAYLIST_PARSER
,
35 ADDON_SERVICE_DISCOVERY
,
43 typedef enum addon_state_t
45 ADDON_NOTINSTALLED
= 0,
51 typedef enum addon_flags_t
53 ADDON_BROKEN
= 1, /* Have install inconsistency */
54 ADDON_MANAGEABLE
= 1 << 1, /* Have manifest, can install or uninstall files */
55 ADDON_UPDATABLE
= 1 << 2,
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
];
63 typedef struct addon_file_t
65 addon_type_t e_filetype
;
66 char *psz_download_uri
;
75 addon_state_t e_state
;
76 addon_flags_t e_flags
;
78 /* data describing addon */
82 char *psz_description
;
84 char *psz_source_uri
; /* webpage, ... */
86 char *psz_image_data
; /* base64, png */
91 int i_score
; /* score 0..5 in hundredth */
94 char *psz_source_module
;
97 char *psz_archive_uri
; /* Archive */
98 DECL_ARRAY(addon_file_t
*) files
;
100 /* custom data storage (if needed by module/source) */
104 typedef struct addons_finder_t addons_finder_t
;
105 typedef struct addons_finder_sys_t addons_finder_sys_t
;
106 struct addons_finder_t
108 struct vlc_object_t obj
;
110 int ( * pf_find
)( addons_finder_t
* );
111 int ( * pf_retrieve
)( addons_finder_t
*, addon_entry_t
* );
112 DECL_ARRAY( addon_entry_t
* ) entries
;
115 addons_finder_sys_t
*p_sys
;
118 typedef struct addons_storage_t addons_storage_t
;
119 typedef struct addons_storage_sys_t addons_storage_sys_t
;
120 struct addons_storage_t
122 struct vlc_object_t obj
;
124 int ( * pf_install
)( addons_storage_t
*, addon_entry_t
* );
125 int ( * pf_remove
)( addons_storage_t
*, addon_entry_t
* );
126 int ( * pf_catalog
) ( addons_storage_t
*, addon_entry_t
**, int );
128 addons_storage_sys_t
*p_sys
;
131 typedef struct addons_manager_t addons_manager_t
;
133 struct addons_manager_owner
136 void (*addon_found
)(struct addons_manager_t
*, struct addon_entry_t
*);
137 void (*discovery_ended
)(struct addons_manager_t
*);
138 void (*addon_changed
)(struct addons_manager_t
*, struct addon_entry_t
*);
141 typedef struct addons_manager_private_t addons_manager_private_t
;
142 struct addons_manager_t
144 struct addons_manager_owner owner
;
145 addons_manager_private_t
*p_priv
;
149 * addon entry lifecycle
151 VLC_API addon_entry_t
*addon_entry_New( void );
152 VLC_API addon_entry_t
*addon_entry_Hold(addon_entry_t
*);
153 VLC_API
void addon_entry_Release(addon_entry_t
*);
156 * addons manager lifecycle
158 VLC_API addons_manager_t
*addons_manager_New( vlc_object_t
*,
159 const struct addons_manager_owner
* );
160 VLC_API
void addons_manager_Delete( addons_manager_t
* );
163 * Charge currently installed, usable and manageable addons
164 * (default "addons storage" module)
166 VLC_API
int addons_manager_LoadCatalog( addons_manager_t
* );
169 * Gather addons info from repository (default "addons finder" module)
170 * If psz_uri is not NULL, only gather info from the pointed package.
172 VLC_API
void addons_manager_Gather( addons_manager_t
*, const char *psz_uri
);
175 * Install or Remove the addon identified by its uuid
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
);
181 * String uuid to binary uuid helpers
183 static inline bool addons_uuid_read( const char *psz_uuid
, addon_uuid_t
*p_uuid
)
185 if ( !psz_uuid
) return false;
186 if ( strlen( psz_uuid
) < ADDON_UUID_PSZ_SIZE
) return false;
189 while ( i
<ADDON_UUID_PSZ_SIZE
)
191 if ( *( psz_uuid
+ i
) == '-' )
194 sscanf( psz_uuid
+ i
, "%02x", &v
);
195 (*p_uuid
)[j
++] = v
& 0xFF;
202 static inline char * addons_uuid_to_psz( const addon_uuid_t
* p_uuid
)
204 char *psz
= (char*) calloc( ADDON_UUID_PSZ_SIZE
+ 1 , sizeof(char) );
209 while ( i
< ADDON_UUID_SIZE
)
211 if ( i
== 4 || i
== 7 || i
== 9 || i
== 11 )
213 int v
= 0xFF & (*p_uuid
)[i
];
214 sprintf( p
, "%02x", v
);