Polydrive an experimental open source alternative to Google Drive

Overview

Polydrive

Polydrive is an experimental open source alternative to Google Drive. It allows users to synchronize their files on multiple devices.

The project is experimental and should not be used in any production systems.

Polydrive is written in Scala for the file manager, and Rust for the client. It makes use of an external database, MongoDB to store data about the files, and those files are uploaded to an object storage system, MinIO.

Development

Run the docker-compose.yml at the root of the project in order to run development services :

$ docker-compose up -d

Mongo URL : mongodb://localhost:27017,localhost:27018/?replicaSet=polydrive-rs

Minio access key : polydrive

Minio secret key : polydrive

Minio console : http://localhost:9001

Minio API : http://localhost:9000

Add the following entry to your /etc/hosts file :

127.0.0.1 mongo-rs-1 mongo-rs-2 mongo-rs-3

In a terminal, run the server :

$ cd server && sbt
$ sbt:polydrive> ~run

In another terminal, run a client as a daemon:

$ cd client
$ cargo run -- --daemon --verbose --watch /tmp
You might also like...
 Libreddit - An alternative private front-end to Reddit
Libreddit - An alternative private front-end to Reddit

Libreddit - An alternative private front-end to Reddit

Alternative basic focus movement for the sway and i3 window managers.
Alternative basic focus movement for the sway and i3 window managers.

sway-overfocus Alternative basic focus movement for the sway and i3 window managers. The primary goal of this program is to create one set of keybinds

Rust macro to use a match-like syntax as a elegant alternative to nesting if-else statement

cond Rust macro to use a match-like syntax as an elegant alternative to many if-else statements. I got the idea from empty Go switch statements. I tho

Swayidle alternative to handle wayland idle notifications, sleep and lock events in Rust with Lua scripting based configuration language

swayidle-rs This is intended as a replacement of sway's idle management daemon. I use it as a tool to understand rust message passing and state manage

An experimental logical language

Last Order Logic An experimental logical language. Based on paper Last Order Logic. Motivation In First Order Logic, the truth values of quantified ex

An experimental Discord bot using Serenity.

VoidBot An experimental Discord bot using Serenity. Environment Variables Can be set with a .env file. DISCORD_TOKEN: The token for your bot. (require

Deser: an experimental serialization and deserialization library for Rust

deser: an experimental serialization and deserialization library for Rust Deser is an experimental serialization system for Rust. It wants to explore

An experimental implementation of gitbom in Rust

gitbom-rs "An experimental implementation of GitBOM in Rust" NOTICE: This project is still a work in progress and is not ready for any use beyond expe

Compiler & Interpreter for the (rather new and very experimental) Y programming language.

Y Lang Why would anyone build a new (and rather experimental) language with no real world use case. Design Y (pronounced as why) is based on the idea

Comments
  • [MongoDB] Implement file versioning

    [MongoDB] Implement file versioning

    When #14 is done, we must be able to store every single version of files into mongoDB.

    When an update is down / deletion, describe a way to create several versions of the same file.

    Questions:

    • Will APIs be impacted by this change ?
    • What data is needed from client for each version in addition to currently held data ?
    • What happens when a file is deleted ? Is it a version or the data is deleted ?
    enhancement server 
    opened by AlexandreBrg 1
  • client: add synchronizer component

    client: add synchronizer component

    This PR adds the synchronizer component to the client, responsible for subscribing to server notifications and handling events. At the moment, it simply logs the event when it is received.

    enhancement client 
    opened by thomasgouveia 0
  • add API to watch file

    add API to watch file

    This PR adds the watch behavior when we run the client in server mode.

    To test : cargo run -- --server --verbose --watch "/tmp"

    The command above will watch every changes in the /tmp folder. Adapt the command to your needs.

    enhancement client 
    opened by thomasgouveia 0
  • Limit bandwidth for upload/download

    Limit bandwidth for upload/download

    • [ ] Implement file upload multipart
    • [ ] Download by chunks
    • [ ] Think about a solution to limit the number of request per seconds.

    See https://github.com/seanmonstar/reqwest/issues/491

    enhancement client 
    opened by hugoamalric 0
Releases(v1.0.0)
Owner
null
A simple and fast FRC autonomous path planner (designed for swerve drive)! (Desktop/Laptop only)

This is a website developed for planning autonomous paths for FRC robots. It is intended to be a simple and fast tool to create autos, which works offline at competitions.

Weaver Goldman 2 Jan 6, 2023
MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine

MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. Both searching and indexing are highly customizable. Features such as typo-tolerance, filters, and synonyms are provided out-of-the-box. For more information about features go to our documentation.

MeiliSearch 31.6k Dec 30, 2022
An open source virtual tabletop that is currently purely a concept.

An open source virtual tabletop that is currently purely a concept.

null 6 Oct 15, 2022
Download Apple's open source code from opensource.apple.com

Apple Open Source Downloader This repository defines a Rust crate and CLI program to automate the downloading of Apple's open source code from https:/

Gregory Szorc 6 Aug 19, 2022
Turbo Resin: open-source firmware for resin printers

Turbo Resin: open-source firmware for resin printers Turbo Resin is an open-source firmware for chitu based controller board printers. It currently su

Nicolas Viennot 139 Dec 22, 2022
A modern and open source twist to classic pastebin sites.

Turbine A modern and open-source twist to classic pastebin sites. What is this? Turbine originally started out as a simple pastebin idea so I could ha

Jay3332 4 Oct 1, 2022
Open Source Application Stack & PaaS

mycelia Open Source Application Stack & PaaS Installation cargo xtask build NOTE: We opted for cargo-xtask because Cargo build.rs is not supported for

Mycelia 3 Sep 6, 2023
The simplest way to de-Google your life and business: Inbox, Calendar, Files, Contacts & much more

Bloom The all-in-one private workspace Try it for free! You no longer trust tech monopolies with your data? You are done with your privacy invaded by

Sylvain Kerkour 1.6k Dec 26, 2022
HTTP microservice using Axum and Reqwest to request the Google Translate TTS endpoint without rate limits

HTTP microservice using Axum and Reqwest to request the Google Translate TTS endpoint without rate limits

Gnome! 5 Oct 5, 2022
馃悁 Building a federated alternative to reddit in rust

Lemmy A link aggregator / Reddit clone for the fediverse. Join Lemmy 路 Documentation 路 Report Bug 路 Request Feature 路 Releases 路 Code of Conduct About

LemmyNet 7.2k Jan 3, 2023