summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/interfaces/Filesystem.h
blob: 55e90ce95febdf7f3909410d502388a39c2483ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 *  Copyright (C) 2005-2018 Team Kodi
 *  This file is part of Kodi - https://kodi.tv
 *
 *  SPDX-License-Identifier: GPL-2.0-or-later
 *  See LICENSES/README.md for more information.
 */

#pragma once

#include "addons/kodi-dev-kit/include/kodi/Filesystem.h"

extern "C"
{

struct VFSDirEntry;
struct AddonGlobalInterface;

namespace ADDON
{

struct Interface_Filesystem
{
  static void Init(AddonGlobalInterface* addonInterface);
  static void DeInit(AddonGlobalInterface* addonInterface);

  static unsigned int TranslateFileReadBitsToKodi(unsigned int addonFlags);

  /*!
   * @brief callback functions from add-on to kodi
   *
   * @note For add of new functions use the "_" style to identify direct a
   * add-on callback function. Everything with CamelCase is only for the
   * usage in Kodi only.
   *
   * The parameter `kodiBase` is used to become the pointer for a `CAddonDll`
   * class.
   */
  ///@{
  static bool can_open_directory(void* kodiBase, const char* url);
  static bool create_directory(void* kodiBase, const char* path);
  static bool directory_exists(void* kodiBase, const char* path);
  static bool remove_directory(void* kodiBase, const char* path);
  static bool remove_directory_recursive(void* kodiBase, const char* path);
  static bool get_directory(void* kodiBase,
                            const char* path,
                            const char* mask,
                            struct VFSDirEntry** items,
                            unsigned int* num_items);
  static void free_directory(void* kodiBase, struct VFSDirEntry* items, unsigned int num_items);

  static bool file_exists(void* kodiBase, const char* filename, bool useCache);
  static bool stat_file(void* kodiBase, const char* filename, struct STAT_STRUCTURE* buffer);
  static bool delete_file(void* kodiBase, const char* filename);
  static bool rename_file(void* kodiBase, const char* filename, const char* newFileName);
  static bool copy_file(void* kodiBase, const char* filename, const char* dest);
  static char* get_file_md5(void* kodiBase, const char* filename);
  static char* get_cache_thumb_name(void* kodiBase, const char* filename);
  static char* make_legal_filename(void* kodiBase, const char* filename);
  static char* make_legal_path(void* kodiBase, const char* path);
  static char* translate_special_protocol(void* kodiBase, const char* strSource);
  static bool get_disk_space(
      void* kodiBase, const char* path, uint64_t* capacity, uint64_t* free, uint64_t* available);
  static bool is_internet_stream(void* kodiBase, const char* path, bool strictCheck);
  static bool is_on_lan(void* kodiBase, const char* path);
  static bool is_remote(void* kodiBase, const char* path);
  static bool is_local(void* kodiBase, const char* path);
  static bool is_url(void* kodiBase, const char* path);

  static bool get_http_header(void* kodiBase, const char* url, struct KODI_HTTP_HEADER* headers);
  static bool get_mime_type(void* kodiBase, const char* url, char** content, const char* useragent);
  static bool get_content_type(void* kodiBase,
                               const char* url,
                               char** content,
                               const char* useragent);
  static bool get_cookies(void* kodiBase, const char* url, char** cookies);

  /*!
   * @brief Callback functions addon class kodi::vfs::CFile
   */
  ///@{
  static bool http_header_create(void* kodiBase, struct KODI_HTTP_HEADER* headers);
  static void http_header_free(void* kodiBase, struct KODI_HTTP_HEADER* headers);

  static char* http_header_get_value(void* kodiBase, void* handle, const char* param);
  static char** http_header_get_values(void* kodiBase,
                                       void* handle,
                                       const char* param,
                                       int* length);
  static char* http_header_get_header(void* kodiBase, void* handle);
  static char* http_header_get_mime_type(void* kodiBase, void* handle);
  static char* http_header_get_charset(void* kodiBase, void* handle);
  static char* http_header_get_proto_line(void* kodiBase, void* handle);
  ///@}

  /*!
   * @brief Callback functions addon class kodi::vfs::CFile
   */
  ///@{
  static void* open_file(void* kodiBase, const char* filename, unsigned int flags);
  static void* open_file_for_write(void* kodiBase, const char* filename, bool overwrite);
  static ssize_t read_file(void* kodiBase, void* file, void* ptr, size_t size);
  static bool read_file_string(void* kodiBase, void* file, char* szLine, int lineLength);
  static ssize_t write_file(void* kodiBase, void* file, const void* ptr, size_t size);
  static void flush_file(void* kodiBase, void* file);
  static int64_t seek_file(void* kodiBase, void* file, int64_t position, int whence);
  static int truncate_file(void* kodiBase, void* file, int64_t size);
  static int64_t get_file_position(void* kodiBase, void* file);
  static int64_t get_file_length(void* kodiBase, void* file);
  static double get_file_download_speed(void* kodiBase, void* file);
  static void close_file(void* kodiBase, void* file);
  static int get_file_chunk_size(void* kodiBase, void* file);
  static bool io_control_get_seek_possible(void* kodiBase, void* file);
  static bool io_control_get_cache_status(void* kodiBase,
                                          void* file,
                                          struct VFS_CACHE_STATUS_DATA* status);
  static bool io_control_set_cache_rate(void* kodiBase, void* file, uint32_t rate);
  static bool io_control_set_retry(void* kodiBase, void* file, bool retry);
  static char** get_property_values(
      void* kodiBase, void* file, int type, const char* name, int* numValues);

  static void* curl_create(void* kodiBase, const char* url);
  static bool curl_add_option(
      void* kodiBase, void* file, int type, const char* name, const char* value);
  static bool curl_open(void* kodiBase, void* file, unsigned int flags);
  ///@}
  ///@}
};

} /* namespace ADDON */
} /* extern "C" */