add commit hash check (and fmt)

This commit is contained in:
JJTech0130 2023-08-15 09:05:08 -04:00
parent 21fdfc97a9
commit 8a09a6eecd
No known key found for this signature in database
GPG key ID: 23C92EBCCF8F93D6

121
demo.py
View file

@ -5,6 +5,7 @@ import threading
import time
from base64 import b64decode, b64encode
from getpass import getpass
from subprocess import PIPE, Popen
from rich.logging import RichHandler
@ -30,6 +31,11 @@ logging.getLogger("imessage").setLevel(logging.INFO)
logging.captureWarnings(True)
process = Popen(["git", "rev-parse", "HEAD"], stdout=PIPE)
(commit_hash, err) = process.communicate()
exit_code = process.wait()
commit_hash = commit_hash.decode().strip()
# Try and load config.json
try:
with open("config.json", "r") as f:
@ -37,6 +43,13 @@ try:
except FileNotFoundError:
CONFIG = {}
# Re-register if the commit hash has changed
if CONFIG.get("commit_hash") != commit_hash:
logging.warning("pypush commit is different, forcing re-registration...")
CONFIG["commit_hash"] = commit_hash
if "id" in CONFIG:
del CONFIG["id"]
conn = apns.APNSConnection(
CONFIG.get("push", {}).get("key"), CONFIG.get("push", {}).get("cert")
)
@ -116,39 +129,43 @@ im = imessage.iMessageUser(conn, user)
INPUT_QUEUE = apns.IncomingQueue()
def input_thread():
from prompt_toolkit import prompt
while True:
while True:
try:
msg = prompt('>> ')
msg = prompt(">> ")
except:
msg = 'quit'
msg = "quit"
INPUT_QUEUE.append(msg)
threading.Thread(target=input_thread, daemon=True).start()
print("Type 'help' for help")
def fixup_handle(handle):
if handle.startswith('tel:+'):
if handle.startswith("tel:+"):
return handle
elif handle.startswith('mailto:'):
elif handle.startswith("mailto:"):
return handle
elif handle.startswith('tel:'):
return 'tel:+' + handle[4:]
elif handle.startswith('+'):
return 'tel:' + handle
elif handle.startswith("tel:"):
return "tel:+" + handle[4:]
elif handle.startswith("+"):
return "tel:" + handle
# If the handle starts with a number
elif handle[0].isdigit():
# If the handle is 10 digits, assume it's a US number
if len(handle) == 10:
return 'tel:+1' + handle
return "tel:+1" + handle
# If the handle is 11 digits, assume it's a US number with country code
elif len(handle) == 11:
return 'tel:+' + handle
return "tel:+" + handle
else: # Assume it's an email
return 'mailto:' + handle
return "mailto:" + handle
current_participants = []
current_effect = None
@ -173,65 +190,82 @@ while True:
if len(INPUT_QUEUE) > 0:
msg = INPUT_QUEUE.pop()
if msg == '': continue
if msg == 'help' or msg == 'h':
print('help (h): show this message')
print('quit (q): quit')
if msg == "":
continue
if msg == "help" or msg == "h":
print("help (h): show this message")
print("quit (q): quit")
# print('send (s) [recipient] [message]: send a message')
print('filter (f) [recipient]: set the current chat')
print('effect (e): adds an iMessage effect to the next sent message')
print('note: recipient must start with tel: or mailto: and include the country code')
print('handle <handle>: set the current handle (for sending messages)')
print('\\: escape commands (will be removed from message)')
elif msg == 'quit' or msg == 'q':
print("filter (f) [recipient]: set the current chat")
print("effect (e): adds an iMessage effect to the next sent message")
print(
"note: recipient must start with tel: or mailto: and include the country code"
)
print("handle <handle>: set the current handle (for sending messages)")
print("\\: escape commands (will be removed from message)")
elif msg == "quit" or msg == "q":
break
elif msg == 'effect' or msg == 'e' or msg.startswith("effect ") or msg.startswith("e "):
elif (
msg == "effect"
or msg == "e"
or msg.startswith("effect ")
or msg.startswith("e ")
):
msg = msg.split(" ")
if len(msg) < 2 or msg[1] == "":
print("effect [effect namespace]")
else:
print(f"next message will be sent with [{msg[1]}]")
current_effect = msg[1]
elif msg == 'filter' or msg == 'f' or msg.startswith('filter ') or msg.startswith('f '):
elif (
msg == "filter"
or msg == "f"
or msg.startswith("filter ")
or msg.startswith("f ")
):
# Set the curernt chat
msg = msg.split(' ')
if len(msg) < 2 or msg[1] == '':
print('filter [recipients]')
msg = msg.split(" ")
if len(msg) < 2 or msg[1] == "":
print("filter [recipients]")
else:
print(f'Filtering to {[fixup_handle(h) for h in msg[1:]]}')
print(f"Filtering to {[fixup_handle(h) for h in msg[1:]]}")
current_participants = [fixup_handle(h) for h in msg[1:]]
im._cache_keys(current_participants, "com.apple.madrid") # Just to make things faster, and to make it error on invalid addresses
elif msg == 'handle' or msg.startswith('handle '):
msg = msg.split(' ')
if len(msg) < 2 or msg[1] == '':
print('handle [handle]')
print('Available handles:')
im._cache_keys(
current_participants, "com.apple.madrid"
) # Just to make things faster, and to make it error on invalid addresses
elif msg == "handle" or msg.startswith("handle "):
msg = msg.split(" ")
if len(msg) < 2 or msg[1] == "":
print("handle [handle]")
print("Available handles:")
for h in user.handles:
if h == user.current_handle:
print(f'\t{h} (current)')
print(f"\t{h} (current)")
else:
print(f'\t{h}')
print(f"\t{h}")
else:
h = msg[1]
h = fixup_handle(h)
if h in user.handles:
print(f'Using {h} as handle')
print(f"Using {h} as handle")
user.current_handle = h
else:
print(f'Handle {h} not found')
print(f"Handle {h} not found")
elif current_participants != []:
if msg.startswith('\\'):
if msg.startswith("\\"):
msg = msg[1:]
im.send(imessage.OldiMessage(
im.send(
imessage.OldiMessage(
text=msg,
participants=current_participants,
sender=user.current_handle,
effect=current_effect
))
effect=current_effect,
)
)
current_effect = None
else:
print('No chat selected, use help for help')
print("No chat selected, use help for help")
time.sleep(0.1)
@ -245,4 +279,3 @@ while True:
# participants=[msg[1], user.handles[0]],
# #sender=user.handles[0]
# ))