README.md 5.64 KB
Newer Older
Paweł Wegner's avatar
Paweł Wegner committed
1
# libcloudstorage
Paweł Wegner's avatar
Paweł Wegner committed
2
[![Build Status](https://travis-ci.org/lemourin/libcloudstorage.svg?branch=master)](https://travis-ci.org/lemourin/libcloudstorage)
Paweł Wegner's avatar
Paweł Wegner committed
3
[![Coverity Scan Build Status](https://scan.coverity.com/projects/14018/badge.svg)](https://scan.coverity.com/projects/lemourin-libcloudstorage)
Paweł Wegner's avatar
Paweł Wegner committed
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's avatar
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's avatar
Paweł Wegner committed
11
12
13
14

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

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

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

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

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

44
45
46
47
48
49
* [`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's avatar
Paweł Wegner committed
50
51
52
53

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

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

Paweł Wegner's avatar
Paweł Wegner committed
57
58
59
* `Ubuntu 16.04`
* `Windows 10`
* `Android 5.0.2`
Paweł Wegner's avatar
Paweł Wegner committed
60
61

Building:
Paweł Wegner's avatar
Paweł Wegner committed
62
=========
Paweł Wegner's avatar
Paweł Wegner committed
63
64
65

The generic way to build and install it is:

Paweł Wegner's avatar
Paweł Wegner committed
66
67
68
69
70
* `./bootstrap`
* `./configure`
* `make`
* `sudo make install`

71
Optional dependency notes:
72

73
* `libcryptopp`:
74

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

78
* `libcurl`
79

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

83
* `libmicrohttpd`
84

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

88
89
90
91
92
* `boost-filesystem`

  when  found,  `LocalDrive` provider  representing  local  directory will  be  
  included, can be explicitly disabled with `--with-filesystem=no`

93
* `mega`
94

95
96
  when  not  found,  `mega`  cloud  provider will  not  be  included,  can  be  
  explicitly disabled with `--with-mega=no`
Paweł Wegner's avatar
Paweł Wegner committed
97

Paweł Wegner's avatar
Paweł Wegner committed
98
99
100
FUSE:
=====

101
102
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  
Paweł Wegner's avatar
Paweł Wegner committed
103
104
105
106
107
108
109
110
111
112
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.

113
114
115
116
117
## Windows:

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

Paweł Wegner's avatar
Paweł Wegner committed
118
119
120
121
122
123
124
125
126
127
128
## 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's avatar
Paweł Wegner committed
129
Cloud Browser:
Paweł Wegner's avatar
Paweł Wegner committed
130
==============
Paweł Wegner's avatar
Paweł Wegner committed
131

Paweł Wegner's avatar
Paweł Wegner committed
132
133
134
135
In `bin/cloudbrowser`  there is  a program which  provides easy  graphics user  
interface for  all the features  implemented in `libcloudstorage`. It  will be  
built  when  its  dependencies  are found,  unless  explicitly  disabled  with  
`--with-cloudbrowser=no`.
136

Paweł Wegner's avatar
Paweł Wegner committed
137
Cloud Browser dependencies:
138

Paweł Wegner's avatar
Paweł Wegner committed
139
* `Qt5Core`, `Qt5Gui`, `Qt5Quick`
140

Paweł Wegner's avatar
Paweł Wegner committed
141
* `kirigami` (https://github.com/KDE/kirigami)
142

Paweł Wegner's avatar
Paweł Wegner committed
143
* `Qt5WebView`
144

Paweł Wegner's avatar
Paweł Wegner committed
145
  when found, Cloud Browser will use it to present the authorization scheme
146

Paweł Wegner's avatar
Paweł Wegner committed
147
* `libffmpegthumbnailer` 
148

Paweł Wegner's avatar
Paweł Wegner committed
149
150
  when  found,  Cloud  Browser  will generate  fallback  thumbnails  if  cloud  
  provider doesn't provide any
151

Paweł Wegner's avatar
Paweł Wegner committed
152
153
154
155
156
* `vlc-qt` (https://github.com/vlc-qt/vlc-qt)

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

157
158
Screenshot:

Paweł Wegner's avatar
Paweł Wegner committed
159
160
  <a href="https://i.imgur.com/NsbNvfX.png">
    <img src="https://i.imgur.com/NsbNvfX.png" width="640" />
161
  </a>
Paweł Wegner's avatar
Paweł Wegner committed
162
163
164
165
166

TODO:
=====

Implement following cloud providers:
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
167
* `Apple ICloud`
Paweł Wegner's avatar
Paweł Wegner committed
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
* `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's avatar
Jean-Baptiste Kempf committed
185
186

Implement bindings to various languages, notably script languages:
187
188
189
* `Obj-C`
* `python`
* `ruby`
190
* `JavaScript` / `node`
191
* `Java`
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
192
193

Integrate in various desktops
194
195
196
* `KIO` slave
* `gvfs` implementation
* `Dokan fuse`
Paweł Wegner's avatar
Paweł Wegner committed
197
198

Implement chunked uploads.