From 709d99f729f65e13dfbfd2574c2f8a783c54f8e1 Mon Sep 17 00:00:00 2001 From: Gnarwhal Date: Thu, 1 Aug 2024 00:19:00 +0000 Subject: [PATCH] Reworked arguments and then actually implemented them --- src/sshare/cli.py | 106 ++++++++++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/src/sshare/cli.py b/src/sshare/cli.py index f96f8b5..4994850 100644 --- a/src/sshare/cli.py +++ b/src/sshare/cli.py @@ -29,27 +29,51 @@ def main(): config = Config() - file = _latest("/home/gnarwhal/Pictures/Screenshots") - print(f"=> Selected file '{file}'") + contents = b'' + target_file_extension = "" + if arguments.latest or arguments.file != None: + file_path = "" + if arguments.latest: + file_path = _latest(config.source_directory) + else: + file_path = arguments.file + print(f"=> Uploading file '{file_path}'") - id = time.time_ns() - (_, extension) = os.path.splitext(file) - target_file_name = f"{id}{extension}" - target_destination = f"{config.ssh_user}@{config.ssh_target}:{config.ssh_dir}/{target_file_name}" - print(f"=> Uploading to '{target_destination}'") + with open(file_path, mode="rb") as file: + contents = file.read() + + (_, target_file_extension) = os.path.splitext(file_path) + elif arguments.paste: + print("=> Uploading contents of clipboard") + contents = pyclip.paste() + target_file_extension = ".txt" + else: + print("=> Error: must specify one of -f FILE, -l, -p") + sys.exit(1) + + target_id = time.time_ns() + target_file_name = f"{target_id}{target_file_extension}" + target_file = f"{config.ssh_dir}/{target_file_name}" + target_destination = f"{config.ssh_user}@{config.ssh_target}" + print(f"=> Uploading to '{target_destination}:{target_file}'") process = subprocess.run([ - "scp", - f"-P {config.ssh_port}", - file, - target_destination, - ]) + "ssh", + f"-p {config.ssh_port}", + target_destination, + "-T", + f"cat - > {target_file}" + ], + input = contents, + ) if process.returncode != 0: print("=> Error: failed to upload file") sys.exit(1) target_url = f"https://{config.ssh_target}/sshare/{target_file_name}" - pyclip.copy(target_url) print(f"=> File available at '{target_url}'") + if arguments.copy: + pyclip.copy(target_url) + print("=> URL copied to clipboard") sys.exit(0) @@ -58,19 +82,6 @@ def parse_arguments(): parser = argparse.ArgumentParser( prog = "SSHare", description = "Upload files to a server via ssh", - formatter_class = argparse.RawDescriptionHelpFormatter, - epilog = -""" -Configuration Files: - - Configuration files will be looked for in - '$XDG_CONFIG_DIR/sshare/'. If XDG_DATA_DIR is not set, - SSHare will fallback to '$HOME/.config/sshare/'. - - If it exists, `default.py' will be considered as config[0]. - Otherwise, all other configuration files will be ordered - alphabetically. -""" ) parser.add_argument( @@ -81,27 +92,29 @@ Configuration Files: ) parser.add_argument( "-l", - "--list", + "--latest", action="store_const", - help="List available configuration files", + const=True, + help="Upload the latest image from the source directory", + ) + parser.add_argument( + "-p", + "--paste", + action="store_const", + const=True, + help="Upload the contents of the clipboard as a txt", + ) + parser.add_argument( + "-f", + "--file", + help="Upload a file", ) parser.add_argument( "-c", - "--config", - help="Use the config at location CONFIG", - ) - parser.add_argument( - "-n", - "--number", - type=int, - default=0, - help="Use config number n (Default: 0)", - ) - parser.add_argument( - "-i", - "--interactive", + "--copy", action="store_const", - help="Run interactively", + const=True, + help="Copy the resultant url to the clipboard", ) arguments = parser.parse_args() @@ -122,7 +135,8 @@ def _latest(directory, key=os.path.getmtime): class Config: def __init__(self): - self.ssh_port = 2222 - self.ssh_user = getpass.getuser() - self.ssh_target = "monodon.me" - self.ssh_dir = "/srv/gnarwhal/sshare" + self.source_directory = "/home/gnarwhal/Pictures/Screenshots" + self.ssh_port = 2222 + self.ssh_user = getpass.getuser() + self.ssh_target = "monodon.me" + self.ssh_dir = "/srv/gnarwhal/sshare"