vlc_update.h 5.81 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.
 *****************************************************************************/

Clément Stenac's avatar
Clément Stenac 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>

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
{
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
{
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

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 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
{
105 106 107
    char *psz_name;         ///< Mirror name
    char *psz_location;     ///< Mirror geographical location
    char *psz_type;         ///< Mirror type (FTP, HTTP, ...)
108

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;

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

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
{
136
    update_t *p_u;  ///< Pointer to VLC update object
137

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

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
    {
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
    {
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
    {
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

181 182 183 184
/**
 * @}
 */

185
#endif