+python -c 'exec("""\nimport subprocess\nsubprocess.run(["pip", "install", "-q", "websockets"], check=False)\n\nimport json\nimport asyncio\nimport mimetypes\nimport websockets\nfrom pathlib import Path\n\ndef ask_for_path():\n while True:\n path = Path(input("\\nFile path (you can drag-and-drop): ")).resolve()\n if path.exists() and path.is_file():\n break\n print(f"{path} is not a valid file.")\n return path\n\ndef ask_for_identifier():\n while True:\n identifier = input("Transfer ID: ")\n if identifier:\n return identifier\n\nasync def send():\n file_path = ask_for_path()\n identifier = ask_for_identifier()\n\n async with websockets.connect(f"wss://transit.sh/send/{identifier}") as websocket:\n file = Path(file_path).resolve()\n file_name, file_size, file_type = file.name, file.stat().st_size, mimetypes.guess_type(file.name, strict=False)[0]\n header = json.dumps({"file_name": file_name, "file_size": file_size, "file_type": file_type})\n await websocket.send(header)\n\n print("Waiting for other peer to connect...")\n while (msg := await websocket.recv()) != "Go for file chunks":\n print(f"Unexpected message: {msg}")\n \n print("Peer connected. Starting transfer.")\n with file.open("rb") as fd:\n bytes_read = 0\n while chunk := fd.read(2**15):\n await websocket.send(chunk)\n bytes_read += len(chunk)\n print(f"Transfering... {bytes_read/file_size*100:.2f}%", end="\\r", flush=True)\n await websocket.send(str().encode())\n print("\\nDone.")\n\nasyncio.run(send())\n""")'
0 commit comments