Skip to content

Commit

Permalink
Merge pull request #109 from dnetguru/master
Browse files Browse the repository at this point in the history
Added support for listing/changing art mode mats
  • Loading branch information
xchwarze authored Sep 24, 2022
2 parents a111f21 + d0fa6a6 commit ae5d2b3
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 0 deletions.
43 changes: 43 additions & 0 deletions example/art_remove_mats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import logging
import sys

sys.path.append("../")

from samsungtvws import SamsungTVWS # noqa: E402

# Increase debug level
logging.basicConfig(level=logging.INFO)

# Normal constructor
tv = SamsungTVWS("192.168.xxx.xxx")

# Set all mats to this type
target_matte_type = "none"

# Is art mode supported?
if not tv.art().supported():
logging.error("Art mode not supported")
sys.exit(1)

# List available mats for displaying art
matte_types = [
matte_type for elem in tv.art().get_matte_list() for matte_type in elem.values()
]

if target_matte_type not in matte_types:
logging.error(
"Invalid matte type: {}. Supported matte types are: {}".format(
target_matte_type, matte_types
)
)
sys.exit(1)

# List the art available on the device
available_art = tv.art().available()

for art in available_art:
if art["matte_id"] != target_matte_type:
logging.info(
"Setting matte to {} for {}".format(target_matte_type, art["content_id"])
)
tv.art().change_matte(art["content_id"], target_matte_type)
19 changes: 19 additions & 0 deletions samsungtvws/art.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,22 @@ def set_photo_filter(self, content_id, filter_id):
"filter_id": filter_id,
}
)

def get_matte_list(self):
response = self._send_art_request(
{"request": "get_matte_list"},
wait_for_event=D2D_SERVICE_MESSAGE_EVENT,
)
assert response
data = json.loads(response["data"])

return json.loads(data["matte_type_list"])

def change_matte(self, content_id, matte_id):
self._send_art_request(
{
"request": "change_matte",
"content_id": content_id,
"matte_id": matte_id,
}
)
18 changes: 18 additions & 0 deletions tests/test_art.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,21 @@ def test_set_available(connection: Mock) -> None:
connection.send.assert_called_once_with(
'{"method": "ms.channel.emit", "params": {"event": "art_app_request", "to": "host", "data": "{\\"request\\": \\"get_content_list\\", \\"category\\": null, \\"id\\": \\"07e72228-7110-4655-aaa6-d81b5188c219\\"}"}}'
)


def test_change_matte(connection: Mock) -> None:
with patch(
"samsungtvws.art.uuid.uuid4",
return_value="07e72228-7110-4655-aaa6-d81b5188c219",
):
connection.recv.side_effect = [
MS_CHANNEL_CONNECT_SAMPLE,
MS_CHANNEL_READY_SAMPLE,
D2D_SERVICE_MESSAGE_AVAILABLE_SAMPLE,
]
tv_art = SamsungTVArt("127.0.0.1")
tv_art.change_matte("test", "none")

connection.send.assert_called_once_with(
'{"method": "ms.channel.emit", "params": {"event": "art_app_request", "to": "host", "data": "{\\"request\\": \\"change_matte\\", \\"content_id\\": \\"test\\", \\"matte_id\\": \\"none\\", \\"id\\": \\"07e72228-7110-4655-aaa6-d81b5188c219\\"}"}}'
)

0 comments on commit ae5d2b3

Please sign in to comment.