A bit of vlc/libvlc cleanup:
[vlc.git] / include / vlc_update.h
1 /*****************************************************************************
2  * vlc_update.h: VLC update and plugins download
3  *****************************************************************************
4  * Copyright (C) 2005 the VideoLAN team
5  * $Id: $
6  *
7  * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
8  *
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.
13  *
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.
18  *
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  *****************************************************************************/
23
24 #if !defined( __LIBVLC__ )
25   #error You are not libvlc or one of its plugins. You cannot include this file
26 #endif
27
28 #ifndef _VLC_UPDATE_H
29 #define _VLC_UPDATE_H
30
31 #include <vlc/vlc.h>
32
33 /**
34  * \defgroup update Update
35  *
36  * @{
37  */
38
39 #define UPDATE_FILE_TYPE_ALL    (~0)
40 #define UPDATE_FILE_TYPE_NONE   0
41
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
47
48 #define UPDATE_RELEASE_STATUS_ALL       (~0)
49 #define UPDATE_RELEASE_STATUS_NONE      0
50
51 #define UPDATE_RELEASE_STATUS_OLDER     1
52 #define UPDATE_RELEASE_STATUS_EQUAL     2
53 #define UPDATE_RELEASE_STATUS_NEWER     4
54
55 #define UPDATE_RELEASE_TYPE_STABLE      1
56 #define UPDATE_RELEASE_TYPE_TESTING     2
57 #define UPDATE_RELEASE_TYPE_UNSTABLE    4
58
59 #define UPDATE_FAIL     0
60 #define UPDATE_SUCCESS  1
61 #define UPDATE_NEXT     0
62 #define UPDATE_PREV     2
63 #define UPDATE_MIRROR   4
64 #define UPDATE_RELEASE  8
65 #define UPDATE_FILE     16
66 #define UPDATE_RESET    32
67
68 /**
69  * Describes an update file
70  */
71 struct update_file_t
72 {
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
78 };
79
80 /**
81  * Describes an update VLC release number
82  */
83 struct update_release_t
84 {
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
89
90     char* psz_svn_revision; ///< SVN revision
91
92     int i_type;             ///< Release type
93
94     int i_status;           ///< Release status compared to current VLC version
95
96     struct update_file_t* p_files; ///< Files list
97     int i_files;            ///< Number of files in the files list
98 };
99
100 /**
101  * Describes a mirror
102  */
103 struct update_mirror_t
104 {
105     char *psz_name;         ///< Mirror name
106     char *psz_location;     ///< Mirror geographical location
107     char *psz_type;         ///< Mirror type (FTP, HTTP, ...)
108
109     char *psz_base_url;     ///< Mirror base url
110
111 };
112
113 /**
114  * The update object. Stores (and caches) all information relative to updates
115  */
116 struct update_t
117 {
118     libvlc_int_t *p_libvlc; 
119
120     vlc_mutex_t lock;
121
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
125
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
129 };
130
131 /**
132  * The update iterator structure. Usefull to browse the update object seamlessly
133  */
134 struct update_iterator_t
135 {
136     update_t *p_u;  ///< Pointer to VLC update object
137
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
141
142     int i_t;        ///< File type bitmask
143     int i_rs;       ///< Release status bitmask
144     int i_rt;       ///< Release type bitmask
145
146     struct
147     {
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
154     struct
155     {
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
161     struct
162     {
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
167 };
168
169 #define update_New( a ) __update_New( VLC_OBJECT( a ) )
170
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 ) );
174
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 * ) );
180
181 /**
182  * @}
183  */
184
185 #endif