diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fba1262..27514e0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,18 @@ -# Contributing guidelines +# Priorities +- PairDrop should be extremely simple, clean, and easy to use. +- The main user flow should never be obstructed! +- New features must be tested thoroughly before we are able to merge them. +- Stability always comes first! +# Agenda +PairDrop is a study in radical simplicity. The user interface is insanely simple. Features are chosen very carefully because complexity grows quadratically since every feature potentially interferes with each other feature. We focus very narrowly on a single use case: instant file transfer. +We are not trying to optimize for some edge-cases. We are optimizing the user flow of the average users. Don't be sad if we decline your feature request for the sake of simplicity. + +If you want to learn more about simplicity you can read [Insanely Simple: The Obsession that Drives Apple's Success](https://www.amazon.com/Insanely-Simple-Ken-Segall-audiobook/dp/B007Z9686O) or [Thinking, Fast and Slow](https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555). + +# Contributing guidelines Make sure to follow these guidelines before opening an [issue](https://github.com/schlagmichdoch/pairdrop/issues/new/choose) or a [pull request](https://github.com/schlagmichdoch/pairdrop/pulls): -- An issue is for a bug or a feature request, if you have any question or something similar, please use [Discussions](https://github.com/schlagmichdoch/pairdrop/discussions). - Before opening an issue of a pull request, please check if the issue or the pull request already exists. - Pull requests for packages updates are not allowed since there is [Dependabot](https://github.com/schlagmichdoch/pairdrop/blob/master/.github/dependabot.yml) that checks them automatically. -- If you don't know how to contribute, also if you don't know JavaScript or Node.js, you can always help others on [Discussions](https://github.com/schlagmichdoch/pairdrop/discussions), debug the application, share your awesome ideas with a new issue (feature request) and check the whole project for misspellings, too. +- If you don't know how to contribute, also if you don't know JavaScript or Node.js, you can still share your awesome ideas with a new issue (feature request) and check the whole project for misspellings, too. diff --git a/README.md b/README.md index 3c5c509..4c74ce9 100644 --- a/README.md +++ b/README.md @@ -13,24 +13,38 @@ Developed based on [Snapdrop](https://github.com/RobinLinus/snapdrop) * You will always discover devices on your local network. Paired devices are shown additionally. * Paired devices outside your local network that are behind a NAT are connected automatically via [Open Relay: Free WebRTC TURN Server](https://www.metered.ca/tools/openrelay/) -[//]: # (Todo: add File Handler API Doku) +### [Improved UI for sending/receiving files](https://github.com/RobinLinus/snapdrop/issues/560) +* The receiving peer must accept the request of files **before** they are transferred and downloaded automatically afterwords if possible +* Multiple files are downloaded as ZIP file +* On iOS and Android the devices share menu is opened instead of downloading the files +* Multiple files are transferred at one archive which shows the overall progress correctly +* The integrity of the files is checked on receive +* By zipping the files before sending, all metadata is preserved + +### Share Files Directly From Share / Context Menu +* [Share files directly form context menu on Windows](/docs/how-to.md#share-files-directly-form-context-menu-on-windows) +* [Share directly from share menu on iOS](/docs/how-to.md#share-directly-from-share-menu-on-ios) +* [Share directly from share menu on Android](/docs/how-to.md#share-directly-from-share-menu-on-android) + ### Other changes +* [Paste Mode](https://github.com/RobinLinus/snapdrop/pull/534) +* [Video and Audio preview](https://github.com/RobinLinus/snapdrop/pull/455) (thanks [@victorwads](https://github.com/victorwads)) +* [Prevent device from sleeping on file transfer](https://github.com/RobinLinus/snapdrop/pull/413) * node-only implementation (thanks [@Bellisario](https://github.com/Bellisario)) * automatic restart on error (thanks [@KaKi87](https://github.com/KaKi87)) * lots of stability fixes (thanks [@MWY001](https://github.com/MWY001) [@skiby7](https://github.com/skiby7) [@willstott101](https://github.com/willstott101)) -* [Paste Mode](https://github.com/RobinLinus/snapdrop/pull/534) -* [Video and Audio preview](https://github.com/RobinLinus/snapdrop/pull/455) (thanks [@victorwads](https://github.com/victorwads)) +* To host PairDrop on your local network (e.g. on Raspberry Pi): [All peers connected with private IPs are discoverable by each other](https://github.com/RobinLinus/snapdrop/pull/558) -## Screenshot -![test](/docs/pairdrop_screenshot_desktop.png) +## Screenshots +![Pairdrop Preview](/docs/pairdrop_screenshot_mobile.gif) - -## Snapdrop and PairDrop are built with the following awesome technologies: +## PairDrop is built with the following awesome technologies: * Vanilla HTML5 / ES6 / CSS3 frontend * [WebRTC](http://webrtc.org/) / [WebSockets](http://www.websocket.org/) * [NodeJS](https://nodejs.org/en/) backend * [Progressive Web App](https://wikipedia.org/wiki/Progressive_Web_App) +* [IndexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) Have any questions? Read our [FAQ](/docs/faq.md). @@ -39,18 +53,16 @@ You can [host your own instance with Docker](/docs/host-your-own.md). ## Support the Community -PairDrop is free and always will be! +PairDrop is free and always will be. Still, we have to pay for the domain. -Do you want to support me?
+To contribute and support me:
Buy Me A Coffee - -To support the original Snapdrop and its creator go to [his GitHub page](https://github.com/RobinLinus/snapdrop). - Thanks a lot for supporting free and open software! +To support the original Snapdrop and its creator go to [his GitHub page](https://github.com/RobinLinus/snapdrop). ## How to contribute diff --git a/docker-compose.yml b/docker-compose.yml index 8a5b4d9..3788105 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: - ./public:/usr/share/nginx/html - ./docker/certs:/etc/ssl/certs - ./docker/openssl:/mnt/openssl - # Use production.conf instead of development.conf to redirect http to https (/ca.crt still available) + # Use production.conf instead of development.conf to redirect http to https (/ca.crt still available via http) - ./docker/nginx/development.conf:/etc/nginx/conf.d/default.conf # - ./docker/nginx/production.conf:/etc/nginx/conf.d/default.conf ports: diff --git a/docs/host-your-own.md b/docs/host-your-own.md index ac6ac88..85bab9a 100644 --- a/docs/host-your-own.md +++ b/docs/host-your-own.md @@ -5,12 +5,10 @@ First, [Install docker with docker-compose.](https://docs.docker.com/compose/ins Then, clone the repository and run docker-compose: ```shell - git clone https://github.com/schlagmichdoch/pairdrop.git -``` -```shell - cd pairdrop -``` -```shell + git clone https://github.com/schlagmichdoch/PairDrop.git + + cd PairDrop + docker-compose up -d ``` Now point your browser to `http://localhost:8080`. @@ -103,7 +101,7 @@ server { expires epoch; location / { - root /var/www/pairdrop/client; + root /var/www/pairdrop/public; index index.html index.htm; } @@ -124,7 +122,7 @@ server { expires epoch; location / { - root /var/www/pairdrop/client; + root /var/www/pairdrop/public; index index.html; } @@ -141,7 +139,7 @@ server { ### Using Apache ``` - DocumentRoot "/var/www/pairdrop/client" + DocumentRoot "/var/www/pairdrop/public" DirectoryIndex index.html RewriteEngine on @@ -150,7 +148,7 @@ server { RewriteRule ^/?(.*) "ws://127.0.0.1:3000/$1" [P,L] - DocumentRoot "/var/www/pairdrop/client" + DocumentRoot "/var/www/pairdrop/public" DirectoryIndex index.html RewriteEngine on @@ -173,7 +171,7 @@ When running PairDrop via Docker, the `X-Forwarded-For` header has to be set by Use nginx or apache to set the header correctly: ### Using nginx -(This differs from the config under `/docker/nginx/default.conf) +(This differs from `/docker/nginx/production.conf`) ``` server { listen 80; @@ -203,12 +201,12 @@ server { location / { proxy_connect_timeout 300; - proxy_pass http://127.0.0.1:443; + proxy_pass http://127.0.0.1:8443; } location /server { proxy_connect_timeout 300; - proxy_pass http://127.0.0.1:443; + proxy_pass http://127.0.0.1:8443; proxy_set_header Connection "upgrade"; proxy_set_header Upgrade $http_upgrade; proxy_set_header X-Forwarded-for $remote_addr; diff --git a/docs/how-to.md b/docs/how-to.md new file mode 100644 index 0000000..1b367f3 --- /dev/null +++ b/docs/how-to.md @@ -0,0 +1,37 @@ +## Share files directly form context menu on Windows +### Registering to open files with PairDrop +The [File Handling API](https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/how-to/handle-files) is implemented + +This is still experimental and must be enabled via a flag **before** the PWA is installed to Windows. +1. [Enabled feature in Edge](https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/how-to/handle-files#enable-the-file-handling-api) +2. Install PairDrop by visiting https://pairdrop.net/ with the Edge browser and install it as described [here](faq.md#help--i-cant-install-the-pwa-). +3. You are done! You can now send most files one at a time via PairDrop: + + _context menu > Open with > PairDrop_ + +[//]: # (Todo: add screenshots) + +### Sending multiple files to PairDrop +Outstandingly, it is also possible to send multiple files to PairDrop via the context menu by adding PairDrop to the `Send to` menu: +1. [Register PairDrop as file handler](#registering-to-open-files-with-pairdrop) +2. Hit Windows Key+R, type: `shell:programs` and hit Enter. +3. Copy the PairDrop shortcut from the directory +4. Hit Windows Key+R, type: `shell:sendto` and hit Enter. +5. Paste the copied shortcut into the directory +6. You are done! You can now send multiple files (but no directories) directly via PairDrop: + + _context menu > Send to > PairDrop_ + +[//]: # (Todo: add screenshots) + +## Share directly from share menu on iOS +implemented but not documented yet + +[//]: # (Todo: add shortcut to routinehub.co and add doku with screenshots) + + +## Share directly from share menu on Android +The [Web Share Target API](https://developer.mozilla.org/en-US/docs/Web/Manifest/share_target) is implemented but not yet tested. +When the PWA is installed, it should register itself to the share-menu of the device automatically. + +Please test this feature and create an issue if it does not work. diff --git a/docs/pairdrop_screenshot_mobile.gif b/docs/pairdrop_screenshot_mobile.gif new file mode 100644 index 0000000..1813720 Binary files /dev/null and b/docs/pairdrop_screenshot_mobile.gif differ diff --git a/docs/pwa-install.png b/docs/pwa-install.png index f53d8a8..4fe8cea 100644 Binary files a/docs/pwa-install.png and b/docs/pwa-install.png differ