vlc_update.h 5.82 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*****************************************************************************
 * vlc_update.h: VLC update and plugins download
 *****************************************************************************
 * Copyright (C) 2005 the VideoLAN team
 * $Id: $
 *
 * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either release 2 of the License, or
 * (at your option) any later release.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 *****************************************************************************/

zorglub's avatar
zorglub committed
24
25
26
27
#if !defined( __LIBVLC__ )
  #error You are not libvlc or one of its plugins. You cannot include this file
#endif

28
29
30
31
32
#ifndef _VLC_UPDATE_H
#define _VLC_UPDATE_H

#include <vlc/vlc.h>

dionoea's avatar
dionoea committed
33
34
35
36
37
38
/**
 * \defgroup update Update
 *
 * @{
 */

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#define UPDATE_FILE_TYPE_ALL    (~0)
#define UPDATE_FILE_TYPE_NONE   0

#define UPDATE_FILE_TYPE_UNDEF      1
#define UPDATE_FILE_TYPE_INFO       2
#define UPDATE_FILE_TYPE_SOURCE     4
#define UPDATE_FILE_TYPE_BINARY     8
#define UPDATE_FILE_TYPE_PLUGIN     16

#define UPDATE_RELEASE_STATUS_ALL       (~0)
#define UPDATE_RELEASE_STATUS_NONE      0

#define UPDATE_RELEASE_STATUS_OLDER     1
#define UPDATE_RELEASE_STATUS_EQUAL     2
#define UPDATE_RELEASE_STATUS_NEWER     4

#define UPDATE_RELEASE_TYPE_STABLE      1
#define UPDATE_RELEASE_TYPE_TESTING     2
#define UPDATE_RELEASE_TYPE_UNSTABLE    4

#define UPDATE_FAIL     0
#define UPDATE_SUCCESS  1
#define UPDATE_NEXT     0
#define UPDATE_PREV     2
#define UPDATE_MIRROR   4
#define UPDATE_RELEASE  8
#define UPDATE_FILE     16
#define UPDATE_RESET    32

/**
 * Describes an update file
 */
struct update_file_t
{
dionoea's avatar
dionoea committed
73
74
75
76
77
    int i_type;             ///< File type
    char* psz_md5;          ///< MD5 hash
    long int l_size;        ///< File size in bytes
    char* psz_url;          ///< Relative (to a mirror) or absolute url
    char* psz_description;  ///< Plain text description
78
79
80
81
82
83
84
};

/**
 * Describes an update VLC release number
 */
struct update_release_t
{
dionoea's avatar
dionoea committed
85
86
87
88
    char* psz_major;        ///< Version major string
    char* psz_minor;        ///< Version minor string
    char* psz_revision;     ///< Version revision string
    char* psz_extra;        ///< Version extra string
89

dionoea's avatar
dionoea committed
90
    char* psz_svn_revision; ///< SVN revision
91

dionoea's avatar
dionoea committed
92
    int i_type;             ///< Release type
93

dionoea's avatar
dionoea committed
94
    int i_status;           ///< Release status compared to current VLC version
95

dionoea's avatar
dionoea committed
96
97
    struct update_file_t* p_files; ///< Files list
    int i_files;            ///< Number of files in the files list
98
99
100
101
102
103
104
};

/**
 * Describes a mirror
 */
struct update_mirror_t
{
dionoea's avatar
dionoea committed
105
106
107
    char *psz_name;         ///< Mirror name
    char *psz_location;     ///< Mirror geographical location
    char *psz_type;         ///< Mirror type (FTP, HTTP, ...)
108

dionoea's avatar
dionoea committed
109
    char *psz_base_url;     ///< Mirror base url
110
111
112
113
114
115
116
117

};

/**
 * The update object. Stores (and caches) all information relative to updates
 */
struct update_t
{
118
    libvlc_int_t *p_libvlc; 
119
120
121

    vlc_mutex_t lock;

dionoea's avatar
dionoea committed
122
123
124
    struct update_release_t *p_releases;    ///< Releases (version) list
    int i_releases;                         ///< Number of releases
    vlc_bool_t b_releases;                  ///< True if we have a releases list
125

dionoea's avatar
dionoea committed
126
127
128
    struct update_mirror_t *p_mirrors;      ///< Mirrors list
    int i_mirrors;                          ///< Number of mirrors
    vlc_bool_t b_mirrors;                   ///< True if we have a mirrors list
129
130
131
132
133
134
135
};

/**
 * The update iterator structure. Usefull to browse the update object seamlessly
 */
struct update_iterator_t
{
dionoea's avatar
dionoea committed
136
    update_t *p_u;  ///< Pointer to VLC update object
137

dionoea's avatar
dionoea committed
138
139
140
    int i_r;        ///< Position in the releases list
    int i_f;        ///< Position in the release's files list
    int i_m;        ///< Position in the mirrors list
141

dionoea's avatar
dionoea committed
142
143
144
    int i_t;        ///< File type bitmask
    int i_rs;       ///< Release status bitmask
    int i_rt;       ///< Release type bitmask
145
146
147

    struct
    {
dionoea's avatar
dionoea committed
148
149
150
151
152
153
        int i_type;             ///< Type
        char* psz_md5;          ///< MD5 hash
        long int l_size;        ///< Size in bytes
        char* psz_url;          ///< Absolute URL
        char* psz_description;  ///< Description
    } file;         ///< Local 'copy' of the current file's information
154
155
    struct
    {
dionoea's avatar
dionoea committed
156
157
158
159
160
        char *psz_version;      ///< Version string
        char *psz_svn_revision; ///< SVN revision
        int i_status;           ///< Status
        int i_type;             ///< Type
    } release;      ///< Local 'copy' of the current release's information
161
162
    struct
    {
dionoea's avatar
dionoea committed
163
164
165
166
        char *psz_name;         ///< Name
        char *psz_location;     ///< Geographical location
        char *psz_type;         ///< Type (HTTP, FTP, ...)
    } mirror;       ///< Local 'copy' of the current mirror's information
167
168
169
170
171
172
173
174
175
176
177
178
};

#define update_New( a ) __update_New( VLC_OBJECT( a ) )

VLC_EXPORT( update_t *, __update_New, ( vlc_object_t * ) );
VLC_EXPORT( void, update_Delete, (update_t * ) );
VLC_EXPORT( void, update_Check, ( update_t *, vlc_bool_t ) );

VLC_EXPORT( update_iterator_t *, update_iterator_New, ( update_t * ) );
VLC_EXPORT( void, update_iterator_Delete, ( update_iterator_t * ) );
VLC_EXPORT( unsigned int, update_iterator_Action, ( update_iterator_t *, int ) );
VLC_EXPORT( unsigned int, update_iterator_ChooseMirrorAndFile, ( update_iterator_t *, int, int, int ) );
179
VLC_EXPORT( void, update_download, ( update_iterator_t *, const char * ) );
180

dionoea's avatar
dionoea committed
181
182
183
184
/**
 * @}
 */

185
#endif