From a6eb9d04259b5eba5cec6cc97f66742aae73caa5 Mon Sep 17 00:00:00 2001 From: xcentaurix Date: Wed, 27 May 2026 11:33:05 +0000 Subject: [PATCH] fix duplicate service ids --- src/PlutoDownload.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/PlutoDownload.py b/src/PlutoDownload.py index e00387e..17b9bd4 100644 --- a/src/PlutoDownload.py +++ b/src/PlutoDownload.py @@ -46,6 +46,7 @@ import shutil import time import uuid +import zlib import threading # for fetching picons from twisted.internet import threads # for updating GUI widgets @@ -643,6 +644,7 @@ def downloadBouquet(self, cc): self.bouquet = [] self.bouquetCC = cc self.tsid = TSIDS.get(cc, "0") + self.usedServiceIds = set() self.stop() self.channelsList.clear() self.guideList.clear() @@ -773,9 +775,22 @@ def buildM3U(self, channel): self.categories.append(group) if int(channel["number"]) == 0: - number = _id[-4:].upper() + sid = int(_id[-4:], 16) if len(_id) >= 4 else 0 else: - number = "%X" % channel["number"] + sid = int(channel["number"]) + + if sid <= 0: + sid = (zlib.crc32(_id.encode("utf-8")) & 0xFFFF) or 1 + + if sid in self.usedServiceIds: + sid = (zlib.crc32(_id.encode("utf-8")) & 0xFFFF) or 1 + while sid in self.usedServiceIds: + sid = (sid + 1) & 0xFFFF + if sid == 0: + sid = 1 + + self.usedServiceIds.add(sid) + number = "%X" % sid self.channelsList[group].append((str(number), _id, channel["name"], logo, _id)) return True