mirror of
https://github.com/meshcore-dev/meshcore-cli.git
synced 2026-04-20 22:13:48 +00:00
manage anims in mccli
This commit is contained in:
parent
302e437ec5
commit
3f7fe47aa9
2 changed files with 60 additions and 5 deletions
|
|
@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "meshcore-cli"
|
name = "meshcore-cli"
|
||||||
version = "1.1.34"
|
version = "1.1.35"
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
{ name="Florent de Lamotte", email="florent@frizoncorrea.fr" },
|
||||||
]
|
]
|
||||||
|
|
@ -17,7 +17,7 @@ classifiers = [
|
||||||
]
|
]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
license-files = ["LICEN[CS]E*"]
|
license-files = ["LICEN[CS]E*"]
|
||||||
dependencies = [ "meshcore >= 2.1.15", "prompt_toolkit >= 3.0.50", "requests >= 2.28.0" ]
|
dependencies = [ "meshcore >= 2.1.16", "prompt_toolkit >= 3.0.50", "requests >= 2.28.0" ]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/fdlamotte/meshcore-cli"
|
Homepage = "https://github.com/fdlamotte/meshcore-cli"
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ from prompt_toolkit.shortcuts import radiolist_dialog
|
||||||
from meshcore import MeshCore, EventType, logger
|
from meshcore import MeshCore, EventType, logger
|
||||||
|
|
||||||
# Version
|
# Version
|
||||||
VERSION = "v1.1.34"
|
VERSION = "v1.1.35"
|
||||||
|
|
||||||
# default ble address is stored in a config file
|
# default ble address is stored in a config file
|
||||||
MCCLI_CONFIG_DIR = str(Path.home()) + "/.config/meshcore/"
|
MCCLI_CONFIG_DIR = str(Path.home()) + "/.config/meshcore/"
|
||||||
|
|
@ -563,7 +563,8 @@ Line starting with \"$\" or \".\" will issue a meshcli command.
|
||||||
contact = to
|
contact = to
|
||||||
prev_contact = None
|
prev_contact = None
|
||||||
|
|
||||||
await mc.commands.get_contacts(anim=True)
|
# await get_contacts(mc, anim=True)
|
||||||
|
await get_contacts(mc, anim=True)
|
||||||
await get_channels(mc, anim=True)
|
await get_channels(mc, anim=True)
|
||||||
await subscribe_to_msgs(mc, above=True)
|
await subscribe_to_msgs(mc, above=True)
|
||||||
|
|
||||||
|
|
@ -978,6 +979,60 @@ async def get_channel_by_name (mc, name):
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
async def get_contacts (mc, anim=False, lastomod=0, timeout=5) :
|
||||||
|
if anim:
|
||||||
|
print("Fetching contacts ", end="", flush=True)
|
||||||
|
|
||||||
|
await mc.commands.get_contacts_async()
|
||||||
|
|
||||||
|
futures = []
|
||||||
|
contact_nb = 0
|
||||||
|
for event_type in [EventType.ERROR, EventType.NEXT_CONTACT, EventType.CONTACTS] :
|
||||||
|
future = asyncio.create_task(
|
||||||
|
mc.wait_for_event(event_type, {}, timeout=timeout)
|
||||||
|
)
|
||||||
|
futures.append(future)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
# Wait for the first event to complete or all to timeout
|
||||||
|
done, pending = await asyncio.wait(
|
||||||
|
futures, timeout=timeout, return_when=asyncio.FIRST_COMPLETED
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if any future completed successfully
|
||||||
|
if len(done) == 0:
|
||||||
|
logger.debug("Timeout while getting contacts")
|
||||||
|
for future in pending: # cancel all futures
|
||||||
|
future.cancel()
|
||||||
|
return None
|
||||||
|
|
||||||
|
for future in done:
|
||||||
|
event = await future
|
||||||
|
|
||||||
|
if event:
|
||||||
|
if event.type == EventType.NEXT_CONTACT:
|
||||||
|
if anim:
|
||||||
|
contact_nb = contact_nb+1
|
||||||
|
print(".", end="", flush=True)
|
||||||
|
else: # Done or Error ... cancel pending and return
|
||||||
|
if anim:
|
||||||
|
if event.type == EventType.CONTACTS:
|
||||||
|
print ((len(event.payload)-contact_nb)*"." + " Done")
|
||||||
|
else :
|
||||||
|
print(" Error")
|
||||||
|
for future in pending:
|
||||||
|
future.cancel()
|
||||||
|
return event
|
||||||
|
|
||||||
|
futures = []
|
||||||
|
for future in pending: # put back pending
|
||||||
|
futures.append(future)
|
||||||
|
|
||||||
|
future = asyncio.create_task( # and recreate NEXT_CONTACT
|
||||||
|
mc.wait_for_event(EventType.NEXT_CONTACT, {}, timeout)
|
||||||
|
)
|
||||||
|
futures.append(future)
|
||||||
|
|
||||||
async def get_channels (mc, anim=False) :
|
async def get_channels (mc, anim=False) :
|
||||||
if hasattr(mc, 'channels') :
|
if hasattr(mc, 'channels') :
|
||||||
return mc.channels
|
return mc.channels
|
||||||
|
|
@ -1021,7 +1076,7 @@ async def next_cmd(mc, cmds, json_output=False):
|
||||||
elif json_output :
|
elif json_output :
|
||||||
print(json.dumps(res.payload, indent=4))
|
print(json.dumps(res.payload, indent=4))
|
||||||
else :
|
else :
|
||||||
print("Devince info :")
|
print("Device info :")
|
||||||
if res.payload["fw ver"] >= 3:
|
if res.payload["fw ver"] >= 3:
|
||||||
print(f" Model: {res.payload['model']}")
|
print(f" Model: {res.payload['model']}")
|
||||||
print(f" Version: {res.payload['ver']}")
|
print(f" Version: {res.payload['ver']}")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue