mirror of
https://github.com/chatmail/core.git
synced 2026-04-28 02:46:29 +03:00
deltachat_rpc_client: add webxdc API
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
- Move format=flowed support to a separate crate #3869
|
- Move format=flowed support to a separate crate #3869
|
||||||
|
|
||||||
### API-Changes
|
### API-Changes
|
||||||
|
- jsonrpc: add python API for webxdc updates #3872
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Do not add an error if the message is encrypted but not signed #3860
|
- Do not add an error if the message is encrypted but not signed #3860
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import json
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from ._utils import AttrDict
|
from ._utils import AttrDict
|
||||||
@@ -47,3 +48,19 @@ class Message:
|
|||||||
async def mark_seen(self) -> None:
|
async def mark_seen(self) -> None:
|
||||||
"""Mark the message as seen."""
|
"""Mark the message as seen."""
|
||||||
await self._rpc.markseen_msgs(self.account.id, [self.id])
|
await self._rpc.markseen_msgs(self.account.id, [self.id])
|
||||||
|
|
||||||
|
async def send_webxdc_status_update(self, update: dict, description: str) -> None:
|
||||||
|
"""Send a webxdc status update. This message must be a webxdc."""
|
||||||
|
await self._rpc.send_webxdc_status_update(
|
||||||
|
self.account.id, self.id, json.dumps(update), description
|
||||||
|
)
|
||||||
|
|
||||||
|
async def get_webxdc_status_updates(self, last_known_serial: int = 0) -> list:
|
||||||
|
return json.loads(
|
||||||
|
await self._rpc.get_webxdc_status_updates(
|
||||||
|
self.account.id, self.id, last_known_serial
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def get_webxdc_info(self) -> dict:
|
||||||
|
return await self._rpc.get_webxdc_info(self.account.id, self.id)
|
||||||
|
|||||||
50
deltachat-rpc-client/tests/test_webxdc.py
Normal file
50
deltachat-rpc-client/tests/test_webxdc.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from deltachat_rpc_client import EventType
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_webxdc(acfactory) -> None:
|
||||||
|
alice, bob = await acfactory.get_online_accounts(2)
|
||||||
|
|
||||||
|
bob_addr = await bob.get_config("addr")
|
||||||
|
alice_contact_bob = await alice.create_contact(bob_addr, "Bob")
|
||||||
|
alice_chat_bob = await alice_contact_bob.create_chat()
|
||||||
|
await alice_chat_bob.send_message(
|
||||||
|
text="Let's play chess!", file="../test-data/webxdc/chess.xdc"
|
||||||
|
)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
event = await bob.wait_for_event()
|
||||||
|
if event.type == EventType.INCOMING_MSG:
|
||||||
|
bob_chat_alice = bob.get_chat_by_id(event.chat_id)
|
||||||
|
message = bob.get_message_by_id(event.msg_id)
|
||||||
|
break
|
||||||
|
|
||||||
|
webxdc_info = await message.get_webxdc_info()
|
||||||
|
assert webxdc_info == {
|
||||||
|
"document": None,
|
||||||
|
"icon": "icon.png",
|
||||||
|
"internetAccess": False,
|
||||||
|
"name": "Chess Board",
|
||||||
|
"sourceCodeUrl": None,
|
||||||
|
"summary": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
status_updates = await message.get_webxdc_status_updates()
|
||||||
|
assert status_updates == []
|
||||||
|
|
||||||
|
await bob_chat_alice.accept()
|
||||||
|
await message.send_webxdc_status_update({"payload": 42}, "")
|
||||||
|
await message.send_webxdc_status_update({"payload": "Second update"}, "description")
|
||||||
|
|
||||||
|
status_updates = await message.get_webxdc_status_updates()
|
||||||
|
assert status_updates == [
|
||||||
|
{"payload": 42, "serial": 1, "max_serial": 2},
|
||||||
|
{"payload": "Second update", "serial": 2, "max_serial": 2},
|
||||||
|
]
|
||||||
|
|
||||||
|
status_updates = await message.get_webxdc_status_updates(1)
|
||||||
|
assert status_updates == [
|
||||||
|
{"payload": "Second update", "serial": 2, "max_serial": 2},
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user