cmd/watchforlinks.py

81 lines
2 KiB
Python
Raw Normal View History

import argparse
2020-05-15 04:40:50 +00:00
import pyperclip
import re
2020-05-15 04:40:50 +00:00
import sys
import time
2021-11-09 08:34:32 +00:00
from voussoirkit import betterhelp
2020-05-15 04:40:50 +00:00
from voussoirkit import passwordy
from voussoirkit import pathclass
2021-11-09 08:34:32 +00:00
from voussoirkit import pipeable
2020-05-15 04:40:50 +00:00
def loop_once(extension, regex=None):
2020-05-15 04:40:50 +00:00
try:
text = pyperclip.paste()
except Exception:
return
text = text.strip()
if len(text.split(sep=None, maxsplit=1)) > 1:
2020-05-15 04:40:50 +00:00
return
if 'http://' not in text and 'https://' not in text:
return
if regex and not re.search(regex, text):
return
2022-01-10 01:08:56 +00:00
path = pathclass.Path(passwordy.random_hex(12)).add_extension(extension)
pyperclip.copy('')
pipeable.stdout(f'{path.basename} {text}')
2021-10-05 00:21:14 +00:00
path.write('w', text, encoding='utf-8')
2020-05-15 04:40:50 +00:00
def loop_forever(extension, regex):
pyperclip.copy('')
2020-05-15 04:40:50 +00:00
while True:
loop_once(extension=extension, regex=regex)
2020-05-15 04:40:50 +00:00
time.sleep(1)
def watchforlinks_argparse(args):
2021-11-09 08:34:32 +00:00
pipeable.stderr('Watching clipboard... Press Ctrl+C to stop.')
2020-05-15 04:40:50 +00:00
try:
loop_forever(extension=args.extension, regex=args.regex)
2020-05-15 04:40:50 +00:00
except KeyboardInterrupt:
pass
return 0
2020-05-15 04:40:50 +00:00
def main(argv):
2022-02-13 03:50:00 +00:00
parser = argparse.ArgumentParser(
description='''
This program will continuously watch your clipboard for http:// and
https:// URLs and save them to individual files. The files will have
randomly generated names. The current contents of your clipboard will
be erased.
''',
)
parser.add_argument(
'extension',
nargs='?',
type=str,
default='generic',
help='''
The saved files will have this extension.
''',
)
parser.add_argument(
'--regex',
type=str,
default=None,
help='''
A regex pattern. Only URLs that match this pattern will be saved.
''',
)
parser.set_defaults(func=watchforlinks_argparse)
2022-02-13 03:50:00 +00:00
return betterhelp.go(parser, argv)
2020-05-15 04:40:50 +00:00
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))