Github repo: https://github.com/jaeha-choi/Hackathon-2021
- Share files between devices easily.
- Sends the clipboard content. (Only in LAN unless using heartbeat packets. Mobile devices may not support heartbeat too well)
- End-to-end encryption setting for enhanced security.
- Optional: Support all functionalities in WAN
- Optional: Tcp hole punching or uses central server if user desires (for enhancing privacy)
Desired User Experience:
Desired user experience is to have a cross platform application to send files and clipboard data to the user's various devices.
Supported Operating Systems
- Desktop: Windows/macOS/Linux
- Mobile: Android/iOS
Python: Base language for server / desktop clients
Flutter: Used for android/iOS apps
PyQt==5.15.4: Used for client GUI
pyperclip==1.8.2: Used for clipboard
qdarkstyle==3.0.2: Used for dark mode on desktop client
xrange: Used for cycling through list widget
- "Clipboard send" button: Clicking the button will broadcast the clipboard content to all devices
- "File picker" button: Picks a file. Should support multiple file selection
- "Send" button: Sends the file.
- "Host" field: A text field to enter host (or unique ID)
- "Host" label: A distinctive label that shows current device's host (or unique ID)
A. Optional: Support dark mode + button to trigger it
- A. Optional: Drag and drop support
- B. Optional: Key binding (aka shortcut) support
- "Select Images" button: Picks images and videos by opening the gallery.
- When the app opens, initial packet will be sent to the server for hole punching
- If hole punching is successful (need to decide how to determine successful state), standby and send heartbeat every few min
- If hole punching is unsuccessful, notify user that central server is going to be used for transferring data.
- Relay Server: Stores basic information about the host including the following:
- UUID (some portion will be used by the peer to connect)
- Public IP
- Private IP (could be unnecessary)
- Central Server: Transfer data via central server if hole punching was unsuccessful.
- Fix mobile application
- Add a connection box for Desktop
- Fix button layout for Desktop