1 /*****************************************************************************
2 * vlc_update.h: VLC update and plugins download
3 *****************************************************************************
4 * Copyright (C) 2005 the VideoLAN team
7 * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either release 2 of the License, or
12 * (at your option) any later release.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
22 *****************************************************************************/
24 #if !defined( __LIBVLC__ )
25 #error You are not libvlc or one of its plugins. You cannot include this file
34 * \defgroup update Update
39 #define UPDATE_FILE_TYPE_ALL (~0)
40 #define UPDATE_FILE_TYPE_NONE 0
42 #define UPDATE_FILE_TYPE_UNDEF 1
43 #define UPDATE_FILE_TYPE_INFO 2
44 #define UPDATE_FILE_TYPE_SOURCE 4
45 #define UPDATE_FILE_TYPE_BINARY 8
46 #define UPDATE_FILE_TYPE_PLUGIN 16
48 #define UPDATE_RELEASE_STATUS_ALL (~0)
49 #define UPDATE_RELEASE_STATUS_NONE 0
51 #define UPDATE_RELEASE_STATUS_OLDER 1
52 #define UPDATE_RELEASE_STATUS_EQUAL 2
53 #define UPDATE_RELEASE_STATUS_NEWER 4
55 #define UPDATE_RELEASE_TYPE_STABLE 1
56 #define UPDATE_RELEASE_TYPE_TESTING 2
57 #define UPDATE_RELEASE_TYPE_UNSTABLE 4
60 #define UPDATE_SUCCESS 1
63 #define UPDATE_MIRROR 4
64 #define UPDATE_RELEASE 8
65 #define UPDATE_FILE 16
66 #define UPDATE_RESET 32
69 * Describes an update file
73 int i_type; ///< File type
74 char* psz_md5; ///< MD5 hash
75 long int l_size; ///< File size in bytes
76 char* psz_url; ///< Relative (to a mirror) or absolute url
77 char* psz_description; ///< Plain text description
81 * Describes an update VLC release number
83 struct update_release_t
85 char* psz_major; ///< Version major string
86 char* psz_minor; ///< Version minor string
87 char* psz_revision; ///< Version revision string
88 char* psz_extra; ///< Version extra string
90 char* psz_svn_revision; ///< SVN revision
92 int i_type; ///< Release type
94 int i_status; ///< Release status compared to current VLC version
96 struct update_file_t* p_files; ///< Files list
97 int i_files; ///< Number of files in the files list
103 struct update_mirror_t
105 char *psz_name; ///< Mirror name
106 char *psz_location; ///< Mirror geographical location
107 char *psz_type; ///< Mirror type (FTP, HTTP, ...)
109 char *psz_base_url; ///< Mirror base url
114 * The update object. Stores (and caches) all information relative to updates
118 libvlc_int_t *p_libvlc;
122 struct update_release_t *p_releases; ///< Releases (version) list
123 int i_releases; ///< Number of releases
124 vlc_bool_t b_releases; ///< True if we have a releases list
126 struct update_mirror_t *p_mirrors; ///< Mirrors list
127 int i_mirrors; ///< Number of mirrors
128 vlc_bool_t b_mirrors; ///< True if we have a mirrors list
132 * The update iterator structure. Usefull to browse the update object seamlessly
134 struct update_iterator_t
136 update_t *p_u; ///< Pointer to VLC update object
138 int i_r; ///< Position in the releases list
139 int i_f; ///< Position in the release's files list
140 int i_m; ///< Position in the mirrors list
142 int i_t; ///< File type bitmask
143 int i_rs; ///< Release status bitmask
144 int i_rt; ///< Release type bitmask
148 int i_type; ///< Type
149 char* psz_md5; ///< MD5 hash
150 long int l_size; ///< Size in bytes
151 char* psz_url; ///< Absolute URL
152 char* psz_description; ///< Description
153 } file; ///< Local 'copy' of the current file's information
156 char *psz_version; ///< Version string
157 char *psz_svn_revision; ///< SVN revision
158 int i_status; ///< Status
159 int i_type; ///< Type
160 } release; ///< Local 'copy' of the current release's information
163 char *psz_name; ///< Name
164 char *psz_location; ///< Geographical location
165 char *psz_type; ///< Type (HTTP, FTP, ...)
166 } mirror; ///< Local 'copy' of the current mirror's information
169 #define update_New( a ) __update_New( VLC_OBJECT( a ) )
171 VLC_EXPORT( update_t *, __update_New, ( vlc_object_t * ) );
172 VLC_EXPORT( void, update_Delete, (update_t * ) );
173 VLC_EXPORT( void, update_Check, ( update_t *, vlc_bool_t ) );
175 VLC_EXPORT( update_iterator_t *, update_iterator_New, ( update_t * ) );
176 VLC_EXPORT( void, update_iterator_Delete, ( update_iterator_t * ) );
177 VLC_EXPORT( unsigned int, update_iterator_Action, ( update_iterator_t *, int ) );
178 VLC_EXPORT( unsigned int, update_iterator_ChooseMirrorAndFile, ( update_iterator_t *, int, int, int ) );
179 VLC_EXPORT( void, update_download, ( update_iterator_t *, char * ) );