README.md 5.64 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
* `Google Photos` (partial)
Paweł Wegner committed
26
* `YouTube` (partial)
Paweł Wegner committed
27 28 29 30

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

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 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 committed
50 51 52 53

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

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

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

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

The generic way to build and install it is:

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 committed
97

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

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 committed
129
Cloud Browser:
Paweł Wegner committed
130
==============
Paweł Wegner committed
131

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 committed
137
Cloud Browser dependencies:
138

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

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

Paweł Wegner committed
143
* `Qt5WebView`
144

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

Paweł Wegner committed
147
* `libffmpegthumbnailer` 
148

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

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 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 committed
162 163 164 165 166

TODO:
=====

Implement following cloud providers:
Jean-Baptiste Kempf committed
167
* `Apple ICloud`
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 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 committed
192 193

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

Implement chunked uploads.