From 4223de52c68f42f938c88224cd4f885a95cd12dd Mon Sep 17 00:00:00 2001 From: lifegpc Date: Fri, 23 Dec 2022 16:38:57 +0800 Subject: [PATCH] load Hash List only when needed --- RSSEntry.py | 1 + database.py | 19 ++++++++++++++----- rsschecker.py | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/RSSEntry.py b/RSSEntry.py index 69fc6b3..4ea553f 100644 --- a/RSSEntry.py +++ b/RSSEntry.py @@ -191,6 +191,7 @@ class RSSEntry: self._settings = {} self.chatList = [] self.hashList = HashEntries(maxCount) + self.hashListLoaded = False @property def title(self) -> str: diff --git a/database.py b/database.py index b5bc38b..76eb560 100644 --- a/database.py +++ b/database.py @@ -313,10 +313,6 @@ class database: for i2 in cur2: temp2 = ChatEntry(i2, temp._settings) temp.chatList.append(temp2) - cur3 = self._db.execute( - f"SELECT * FROM hashList WHERE id=? ORDER BY time;", (temp.id,)) - for i3 in cur3: - temp.hashList.add(HashEntry(i3)) if len(temp.chatList) == 0: self.__removeRSSEntry(temp.id) else: @@ -367,10 +363,23 @@ class database: return i[0] return None + def getRSSHashList(self, i: RSSEntry): + if i.hashListLoaded: + return True + with self._value_lock: + cur = self._db.execute("SELECT * FROM RSSList WHERE id = ?;", (i.id,)) + if cur.rowcount == 0: + return False + cur = self._db.execute("SELECT * FROM hashList WHERE id = ?;", (i.id,)) + for j in cur: + i.hashList.add(HashEntry(j)) + i.hashListLoaded = True + return True + def getRSSList(self) -> Optional[List[RSSEntry]]: '''返回不带chatList和hashList的RSS列表''' with self._value_lock: - cur = self._db.execute(f'SELECT * FROM RSSList;') + cur = self._db.execute('SELECT * FROM RSSList;') r = [] for i in cur: r.append(RSSEntry(i, self._main._setting.maxCount)) diff --git a/rsschecker.py b/rsschecker.py index a245ba9..2b56811 100644 --- a/rsschecker.py +++ b/rsschecker.py @@ -25,6 +25,8 @@ class RSSCheckerThread(Thread): def __loop(self): for rss in self._main._db.getAllRSSList(): if self.__needUpdate(rss) or self._main._commandLine.rebuildHashlist: + if self._main._db.getRSSHashList(rss) is False: + continue try: p = RSSParser() p.parse(rss.url, self._main._setting.RSSTimeout)