README.md 5.37 KB
Newer Older
Paweł Wegner committed
1
# libcloudstorage
Paweł Wegner committed
2
[![Build Status](https://travis-ci.org/lemourin/libcloudstorage.svg?branch=master)](https://travis-ci.org/lemourin/libcloudstorage)
3
[![Coverity Scan Build Status](https://scan.coverity.com/projects/14018/badge.svg)](https://scan.coverity.com/projects/lemourin-libcloudstorage)
4
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/927fdff765294da3964e92194193d2b4)](https://www.codacy.com/app/lemourin/libcloudstorage?utm_source=github.com&utm_medium=referral&utm_content=lemourin/libcloudstorage&utm_campaign=Badge_Grade)
5
[![Discord](https://img.shields.io/badge/chat-discord-brightgreen.svg)](https://discord.gg/BJajAKZ)
6
[![License: LGPL v2.1](https://img.shields.io/badge/license-LGPL%20v2.1-blue.svg)](https://www.gnu.org/licenses/lgpl-2.1.html)
Paweł Wegner committed
7

8 9 10
A `C++`  library providing access to  files located in various  cloud services  
licensed under `GNU LGPLv2.1`. It is  focused on the basic operations on those  
services.
Paweł Wegner committed
11 12 13 14

Supported cloud providers:
==========================

Paweł Wegner committed
15 16 17 18 19
* `GoogleDrive`
* `OneDrive`
* `Dropbox`
* `box.com`
* `YandexDisk`
20
* `WebDAV`
Paweł Wegner committed
21 22
* `mega.nz`
* `AmazonS3`
23
* `pCloud`
24
* `hubiC`
Paweł Wegner committed
25
* `YouTube` (partial)
Paweł Wegner committed
26 27 28 29

Supported operations on files:
==============================

Paweł Wegner committed
30 31 32 33 34 35 36 37 38
* `list directory`
* `download file`
* `upload file`
* `get thumbnail`
* `delete file`
* `create directory`
* `move file`
* `rename file`
* `fetch direct, preauthenticated url to file`
Paweł Wegner committed
39 40 41 42

Requirements:
=============

43 44 45 46 47 48
* [`jsoncpp`](https://github.com/open-source-parsers/jsoncpp)
* [`tinyxml2`](https://github.com/leethomason/tinyxml2)
* [`libmicrohttpd`](https://www.gnu.org/software/libmicrohttpd/) (optional)
* [`cURL`](https://curl.haxx.se/) (with `OpenSSL`/`c-ares`, optional)
* [`libcryptopp`](https://www.cryptopp.com/) (optional, required for `AmazonS3`)
* [`mega`](https://github.com/meganz/sdk) (optional, required for `mega.nz`)
Paweł Wegner committed
49 50 51 52

Platforms:
==========

53
The library can be  build on any platform which has  a proper `C++11` support.  
Paweł Wegner committed
54
It was tested under the following operating systems:
Paweł Wegner committed
55

Paweł Wegner committed
56 57 58
* `Ubuntu 16.04`
* `Windows 10`
* `Android 5.0.2`
Paweł Wegner committed
59 60

Building:
Paweł Wegner committed
61
=========
Paweł Wegner committed
62 63 64

The generic way to build and install it is:

Paweł Wegner committed
65 66 67 68 69
* `./bootstrap`
* `./configure`
* `make`
* `sudo make install`

70
Optional dependency notes:
71

72
* `libcryptopp`:
73

74 75
  when  not  found,  `ICrypto`  interface  needs to  be  implemented,  can  be  
  explicitly disabled with `--with-cryptopp=no`
76

77
* `libcurl`
78

79 80
  when not found, `IHttp` interface needs to be implemented, can be explicitly  
  disabled with `--with-curl=no`
81

82
* `libmicrohttpd`
83

84 85
  when  not found,  `IHttpServer` interface  needs to  be implemented,  can be  
  explicitly disabled with `--with-microhttpd=no`
86

87
* `mega`
88

89 90
  when  not  found,  `mega`  cloud  provider will  not  be  included,  can  be  
  explicitly disabled with `--with-mega=no`
Paweł Wegner committed
91

92 93 94
FUSE:
=====

95 96
In `bin/fuse`  there is  implemented a  user space  file  system  using `fuse`  
(https://github.com/libfuse/libfuse) library. It will be  build when `fuse` is  
97 98 99 100 101 102 103 104 105 106
found  (unless explicitly  disabled  with `--with-fuse=no`).  The file  system  
is  implemented  using `libfuse`'s  low  level  api;  however high  level  api  
implementation is  also provided. The  file system supports  moving, renaming,  
creating  directories, reading  and writing  new files.  Writing over  already  
present  files in  cloud  provider  is not  supported.  The  file system  uses  
asynchronous  I/O to  its full  potency. It  doesn't cache  files anywhere  by  
itself which implies no local storage  overhead. Most cloud providers are fast  
enough when it comes to watching  videos; with `mega.nz` being the fastest and  
`Google Drive` being the slowest.

107 108 109 110 111
## Windows:

It is possible  to run `libcloudstorage-fuse` under  `Windows` using `Dokan`'s  
(https://github.com/dokan-dev/dokany) `fuse` wrapper.

112 113 114 115 116 117 118 119 120 121 122
## Usage:

To add cloud providers to file system, first the cloud providers need to be  
added. This can be done by calling:

`libcloudstorage-fuse --add=provider_label`

After cloud providers are added, the file system can be mount using:

`libcloudstorage-fuse mountpoint`

Paweł Wegner committed
123
Cloud Browser:
Paweł Wegner committed
124
==============
Paweł Wegner committed
125

Paweł Wegner committed
126 127 128
When `--with-examples`  flag is passed  to `./configure`, Cloud  Browser  will  
be  built. It  provides  easy  graphics user  interface  for  all the features  
implemented in `libcloudstorage`.
129

Paweł Wegner committed
130
Cloud Browser dependencies:
131

Paweł Wegner committed
132
* `Qt5Core`, `Qt5Gui`, `Qt5Quick`
133

Paweł Wegner committed
134
* `kirigami` (https://github.com/KDE/kirigami)
135

Paweł Wegner committed
136
* `Qt5WebView`
137

Paweł Wegner committed
138
  when found, Cloud Browser will use it to present the authorization scheme
139

Paweł Wegner committed
140
* `libffmpegthumbnailer` 
141

Paweł Wegner committed
142 143
  when  found,  Cloud  Browser  will generate  fallback  thumbnails  if  cloud  
  provider doesn't provide any
144

Paweł Wegner committed
145 146 147 148 149
* `vlc-qt` (https://github.com/vlc-qt/vlc-qt)

  when  found, Cloud  Browser  will  use  vlc-based  media  player instead  of  
  QtMultimedia-based one

150 151
Screenshot:

Paweł Wegner committed
152 153
  <a href="https://i.imgur.com/NsbNvfX.png">
    <img src="https://i.imgur.com/NsbNvfX.png" width="640" />
154
  </a>
Paweł Wegner committed
155 156 157 158 159

TODO:
=====

Implement following cloud providers:
Jean-Baptiste Kempf committed
160
* `Apple ICloud`
Paweł Wegner committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
* `Asus WebStorage`
* `Baidu Cloud`
* `CloudMe`
* `FileDropper`
* `Fileserve`
* `Handy Backup`
* `IBM Connections`
* `Jumpshare`
* `MagicVortex`
* `MediaFire`
* `Pogoplug`
* `SpiderOak`
* `SugarSync`
* `Tencent Weiyun`
* `TitanFile`
* `Tresorit`
* `XXL Box`
Jean-Baptiste Kempf committed
178 179

Implement bindings to various languages, notably script languages:
180 181 182
* `Obj-C`
* `python`
* `ruby`
183
* `JavaScript` / `node`
184
* `Java`
Jean-Baptiste Kempf committed
185 186

Integrate in various desktops
187 188 189
* `KIO` slave
* `gvfs` implementation
* `Dokan fuse`
Paweł Wegner committed
190 191

Implement chunked uploads.