fix: 修复多设备获取对话记录的问题
This commit is contained in:
parent
9ea7935cfb
commit
86f158532a
@ -52,7 +52,7 @@ class XiaoMusic:
|
|||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
self.mi_token_home = Path.home() / ".mi.token"
|
self.mi_token_home = Path.home() / ".mi.token"
|
||||||
self.last_timestamp = int(time.time() * 1000) # timestamp last call mi speaker
|
self.last_timestamp = {} # timestamp last call mi speaker
|
||||||
self.last_record = None
|
self.last_record = None
|
||||||
self.cookie_jar = None
|
self.cookie_jar = None
|
||||||
self.mina_service = None
|
self.mina_service = None
|
||||||
@ -152,19 +152,22 @@ class XiaoMusic:
|
|||||||
async def poll_latest_ask(self):
|
async def poll_latest_ask(self):
|
||||||
async with ClientSession() as session:
|
async with ClientSession() as session:
|
||||||
while True:
|
while True:
|
||||||
self.log.debug(
|
self.log.debug(f"Listening new message, timestamp: self.last_timestamp")
|
||||||
"Listening new message, timestamp: %s", self.last_timestamp
|
|
||||||
)
|
|
||||||
session._cookie_jar = self.cookie_jar
|
session._cookie_jar = self.cookie_jar
|
||||||
|
|
||||||
# 拉取所有音箱的对话记录
|
# 拉取所有音箱的对话记录
|
||||||
for device_id in self.device2hardware:
|
tasks = [
|
||||||
await self.get_latest_ask_from_xiaoai(session, device_id)
|
self.get_latest_ask_from_xiaoai(session, device_id)
|
||||||
|
for device_id in self.device2hardware
|
||||||
|
]
|
||||||
|
await asyncio.gather(*tasks)
|
||||||
|
|
||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
self.log.debug("Polling_event, timestamp: %s", self.last_timestamp)
|
self.log.debug(f"Polling_event, timestamp: {self.last_timestamp}")
|
||||||
await self.polling_event.wait()
|
await self.polling_event.wait()
|
||||||
if (d := time.perf_counter() - start) < 1:
|
if (d := time.perf_counter() - start) < 1:
|
||||||
# sleep to avoid too many request
|
# sleep to avoid too many request
|
||||||
self.log.debug("Sleep %f, timestamp: %s", d, self.last_timestamp)
|
self.log.debug(f"Sleep {d}, timestamp: {self.last_timestamp}")
|
||||||
await asyncio.sleep(1 - d)
|
await asyncio.sleep(1 - d)
|
||||||
|
|
||||||
async def init_all_data(self, session):
|
async def init_all_data(self, session):
|
||||||
@ -251,18 +254,21 @@ class XiaoMusic:
|
|||||||
self.log.info("Maybe outof date trying to re init it")
|
self.log.info("Maybe outof date trying to re init it")
|
||||||
await self.init_all_data(self.session)
|
await self.init_all_data(self.session)
|
||||||
else:
|
else:
|
||||||
return self._get_last_query(data)
|
return self._get_last_query(device_id, data)
|
||||||
|
|
||||||
def _get_last_query(self, data):
|
def _get_last_query(self, device_id, data):
|
||||||
self.log.debug(f"_get_last_query:{data}")
|
self.log.debug(f"_get_last_query device_id:{device_id} data:{data}")
|
||||||
if d := data.get("data"):
|
if d := data.get("data"):
|
||||||
records = json.loads(d).get("records")
|
records = json.loads(d).get("records")
|
||||||
if not records:
|
if not records:
|
||||||
return
|
return
|
||||||
last_record = records[0]
|
last_record = records[0]
|
||||||
timestamp = last_record.get("time")
|
timestamp = last_record.get("time")
|
||||||
if timestamp > self.last_timestamp:
|
# 首次用当前时间初始化
|
||||||
self.last_timestamp = timestamp
|
if device_id not in self.last_timestamp:
|
||||||
|
self.last_timestamp[device_id] = int(time.time() * 1000)
|
||||||
|
if timestamp > self.last_timestamp[device_id]:
|
||||||
|
self.last_timestamp[device_id] = timestamp
|
||||||
self.last_record = last_record
|
self.last_record = last_record
|
||||||
self.new_record_event.set()
|
self.new_record_event.set()
|
||||||
|
|
||||||
@ -466,7 +472,7 @@ class XiaoMusic:
|
|||||||
self.log.debug("get_music_url web music. name:%s, url:%s", name, url)
|
self.log.debug("get_music_url web music. name:%s, url:%s", name, url)
|
||||||
return url
|
return url
|
||||||
|
|
||||||
filename = self.get_filename(name).replace('\\','/')
|
filename = self.get_filename(name).replace("\\", "/")
|
||||||
self.log.debug(
|
self.log.debug(
|
||||||
"get_music_url local music. name:%s, filename:%s", name, filename
|
"get_music_url local music. name:%s, filename:%s", name, filename
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user