Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions haphilipsjs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,7 @@ async def update(self):
await self.getAmbilightPower()
await self.getAmbilightCurrentConfiguration()
await self.getHueLampPower()
await self.getRecordings()
self.on = True
return True
except ConnectionFailure as err:
Expand Down Expand Up @@ -1286,16 +1287,18 @@ async def setAmbilightCurrentConfiguration(
return True

async def getRecordings(self):
if self.json_feature_supported("recordings", "List"):
r = cast(
Optional[RecordingsListed],
await self.getReq("recordings/list"),
)
if r:
self.recordings_list = r
else:
self.recordings_list = None
return r
#Just known working with API level 6 currently
if self.api_version == 6:
if self.json_feature_supported("recordings", "List"):
r = cast(
Optional[RecordingsListed],
await self.getReq("recordings/list"),
)
if r:
self.recordings_list = r
else:
self.recordings_list = None
return r

async def openURL(self, url: str):
if self.json_feature_supported("activities", "browser"):
Expand Down
127 changes: 127 additions & 0 deletions haphilipsjs/data/v6.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
MenuItemsSettingsStructure,
MenuItemsSettingsUpdate,
SystemType,
RecordingsListed,
)


Expand Down Expand Up @@ -9908,4 +9909,130 @@
"nodeid": 420
}
]
}

RECORDINGS_LIST: RecordingsListed = {
"version": "253.91",
"recordings": [
{
"RecordingId": 36,
"RecordingType": "RECORDING_ONGOING",
"IsIpEpgRec": False,
"ccid": 2091,
"StartTime": 1676833531,
"Duration": 569,
"MarginStart": 0,
"MarginEnd": 0,
"EventId": 47369,
"EITVersion": 0,
"RetentionInfo": 0,
"EventInfo": "Eisige Welten II - Planet der Extreme\nDeutschland 2023\nIm Fokus dieser Folge stehen die besonderen Anpassungsstrategien der Bewohner an die Veränderungen in den klimatisch herausfordernden Lebensräumen.\n\nDie Reise beginnt auf dem gefrorenen Kontinent der Antarktis im äußersten Süden, dem lebensfeindlichsten Ort der Erde. Nachdem sie im Winter auf dem Eis aufgewachsen sind, werden die Kaiserpinguinküken im Frühjahr von ihren Eltern verlassen.\nHD-Produktion",
"EventExtendedInfo": "",
"EventGenre": "8",
"RecName": "Terra X",
"SeriesID": "None",
"SeasonNo": 0,
"EpisodeNo": 0,
"EpisodeCount": 72300,
"ProgramNumber": 11110,
"EventRating": 0,
"hasDot": True,
"isFTARecording": False,
"LastPinChangedTime": 0,
"Version": 344,
"HasCicamPin": False,
"HasLicenseFile": False,
"Size": 0,
"ResumeInfo": 0,
"IsPartial": False,
"AutoMarginStart": 0,
"AutoMarginEnd": 0,
"ServerRecordingId": -1,
"ActualStartTime": 1676833531,
"ProgramDuration": 0,
"IsRadio": False,
"EITSource": "EIT_SOURCE_PF",
"RecError": "REC_ERROR_NONE"
},
{
"RecordingId": 35,
"RecordingType": "RECORDING_NEW",
"IsIpEpgRec": False,
"ccid": 2091,
"StartTime": 1676832212,
"Duration": 22,
"MarginStart": 0,
"MarginEnd": 0,
"EventId": 47369,
"EITVersion": 0,
"RetentionInfo": -1,
"EventInfo": "Eisige Welten II - Planet der Extreme\nDeutschland 2023\nIm Fokus dieser Folge stehen die besonderen Anpassungsstrategien der Bewohner an die Veränderungen in den klimatisch herausfordernden Lebensräumen.\n\nDie Reise beginnt auf dem gefrorenen Kontinent der Antarktis im äußersten Süden, dem lebensfeindlichsten Ort der Erde. Nachdem sie im Winter auf dem Eis aufgewachsen sind, werden die Kaiserpinguinküken im Frühjahr von ihren Eltern verlassen.\nHD-Produktion",
"EventExtendedInfo": "",
"EventGenre": "8",
"RecName": "Terra X",
"SeriesID": "None",
"SeasonNo": 0,
"EpisodeNo": 0,
"EpisodeCount": 70980,
"ProgramNumber": 11110,
"EventRating": 0,
"hasDot": True,
"isFTARecording": False,
"LastPinChangedTime": 0,
"Version": 339,
"HasCicamPin": False,
"HasLicenseFile": False,
"Size": 0,
"ResumeInfo": 0,
"IsPartial": False,
"AutoMarginStart": 0,
"AutoMarginEnd": 0,
"ServerRecordingId": -1,
"ActualStartTime": 1676832212,
"ProgramDuration": 0,
"IsRadio": False,
"EITSource": "EIT_SOURCE_PF",
"RecError": "REC_ERROR_NONE"
},
{
"RecordingId": 34,
"RecordingType": "RECORDING_PARTIALLY_VIEWED",
"IsIpEpgRec": False,
"ccid": 2091,
"StartTime": 1676677580,
"Duration": 484,
"MarginStart": 0,
"MarginEnd": 0,
"EventId": -1,
"EITVersion": 0,
"RetentionInfo": -1,
"EventInfo": "\n\nAlpine Ski-WM: Parallel-Event, Übertragung aus Méribel/Frankreich\n\n14:10: Biathlon-WM (AD): 20 km Einzel Männer, Übertragung aus Oberhof\nHD-Produktion",
"EventExtendedInfo": "",
"EventGenre": "4",
"RecName": "ZDF HD 2023-02-18 00:46",
"SeriesID": "None",
"SeasonNo": 0,
"EpisodeNo": 0,
"EpisodeCount": 2760,
"ProgramNumber": 11110,
"EventRating": 0,
"hasDot": True,
"isFTARecording": False,
"LastPinChangedTime": 0,
"Version": 328,
"HasCicamPin": False,
"HasLicenseFile": False,
"Size": 0,
"ResumeInfo": 56,
"IsPartial": False,
"AutoMarginStart": 0,
"AutoMarginEnd": 0,
"ServerRecordingId": -1,
"ActualStartTime": 1676677581,
"ProgramDuration": 0,
"IsRadio": False,
"EITSource": "EIT_SOURCE_PF",
"RecError": "REC_ERROR_NONE"
}
]
}
32 changes: 32 additions & 0 deletions tests/test_v6.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
VOLUME,
SCREENSTATE,
HUELAMPPOWER,
RECORDINGS_LIST,
)
from haphilipsjs.typing import StringsRequest, Strings

Expand Down Expand Up @@ -143,6 +144,9 @@ async def client_mock(param: Param):
)
else:
raise Exception
respx.get(f"{param.base}/recordings/list").respond(
json=RECORDINGS_LIST
)

yield client
await client.aclose()
Expand Down Expand Up @@ -567,3 +571,31 @@ async def test_buggy_json():
assert haphilipsjs.decode_xtv_json('{,"a":{}}') == {"a": {}}
assert haphilipsjs.decode_xtv_json('{"a":{},}') == {"a": {}}
assert haphilipsjs.decode_xtv_json('{"a":{},,,"b":{}}') == {"a": {}, "b": {}}

async def test_get_recordings(client_mock):
"""Verify that we can read back selected recording values"""
await client_mock.update()

recording_ongoing = False
recording_new = 0

assert client_mock.recordings_list["version"] == "253.91"

for rec in client_mock.recordings_list["recordings"]:
if rec["RecordingId"] == 36:
rec_time_planned = rec["StartTime"]
rec_margin_start = rec["MarginStart"]
rec_time = rec_time_planned - rec_margin_start
assert rec_time == 1676833531
assert rec["RecordingType"] == "RECORDING_ONGOING"
assert rec["RecError"] == "REC_ERROR_NONE"

if rec["RecordingType"] == "RECORDING_ONGOING":
recording_ongoing = True

if rec["RecordingType"] == "RECORDING_NEW":
recording_new += 1

assert recording_ongoing == True
assert recording_new == 1