Dev Guide

General

Abstract:

Open Drive is an open source, self hosting alternative to GoogleDrive

Problem:

Many people need a kind of backup system and want data to be synchronized. They don’t want their data to be stored at servers in america or in general any third party.

Solution:

Use your own server and OpenDrive.

Target Group:

People with different devices. People with critical/important data. People who want to make a backup.

Core functionality:
  • Automatically sync your files between multiple devices
  • Define which file/folders to sync
  • No third parties have access to your data
Possible features:
  • Share your files and make them available for other people
  • Access your files from everywhere, where you have internet access
  • Smartphone app

Details:

Software:
  • Core: python (with pynetworking library)
  • GUI: python with Kivy, maybe later on a website?

Project structure:

OpenDrive
|   README.md
|   setup.py
|
|___assets
|       logo.png
|
|___docs
|   |   index.rst
|   |
|   |____build
|   |
|   |___internal
|   |
|   |___external
|
|___src
|   |
|   |___OpenDrive
|   |   |   net_interface.py
|   |   |   start.py ?
|   |   |
|   |   |___client_side
|   |   |
|   |   |___server_side
|   |   |
|   |   |___general
|   |
|   |___tests
|   |   |
|   |   |___client_side
|   |   |
|   |   |___server_side
|   |   |
|   |   |___general

Style-guide:

This guide defines naming conventions:

  • Package: snake_case
  • Python file: snake_case
  • Class: CamelCase
  • Function: snake_case
  • Variables: snake_case
  • rst file snake_case

Milestones

  • Exchange files based on actions: 26.04.19
  • System for storing changes: 03.05.19
  • Merge changes between server and client. Result in actions: 12.05.19
  • Merge two existing folders. (Result in actions?): 19.05.19
  • GUI Layouts: 25.05.19
  • Connection between GUI and backend: 02.06.19
  • (Installable)
  • (Start on system start)

Tasks

  • GUI
    • input validation
    • beautiful design
    • TextInput without tabs (TF basic class)
(- UI
  • Console interface
  • Same interface between console and gui)
  • Backend
    • folders
      • Remove folder synchronization
      • Remove server folder (danger)
      • implement all merge_methods
      • Edit folder privileges
        • Share link
        • Add user
        • Privileges
          • Edit
          • View
          • Full access (edit, view, delete)
    • synchronization
      • test: distribute actions to other changes files

TODO next:

  • Explorer:
    • validate patterns
    • process patterns
    • add sync with: paths, patterns and merge_method
    • hide merge_method, when a new server folder is created
    • option to delete server folder permanently
  • test synchronization with multiple devices