Skip to content

Commit 9718749

Browse files
committed
fix: retry failed torrent downloads
1 parent 15d8ab4 commit 9718749

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

backend/src/module/database/torrent.py

+24-6
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,27 @@ def __init__(self, session: Session):
1111
self.session = session
1212

1313
def add(self, data: Torrent):
14-
self.session.add(data)
14+
result = self.session.exec(
15+
select(Torrent).where(Torrent.hash == data.hash)
16+
).first()
17+
if result is None:
18+
result = data
19+
for key, value in data.model_dump(exclude_unset=True).items():
20+
setattr(result, key, value)
21+
self.session.add(result)
1522
self.session.commit()
16-
self.session.refresh(data)
17-
logger.debug(f"Insert {data.name} in database.")
23+
self.session.refresh(result)
24+
logger.debug(f"Insert {result.name} in database.")
1825

1926
def add_all(self, datas: list[Torrent]):
27+
for index, data in enumerate(datas):
28+
result = self.session.exec(
29+
select(Torrent).where(Torrent.hash == data.hash)
30+
).first()
31+
if result:
32+
for key, value in data.model_dump(exclude_unset=True).items():
33+
setattr(result, key, value)
34+
datas[index] = result
2035
self.session.add_all(datas)
2136
self.session.commit()
2237
logger.debug(f"Insert {len(datas)} torrents in database.")
@@ -43,6 +58,9 @@ def search(self, _id: int) -> Torrent:
4358
def search_all(self) -> list[Torrent]:
4459
return self.session.exec(select(Torrent)).all()
4560

61+
def search_all_downloaded(self) -> list[Torrent]:
62+
return self.session.exec(select(Torrent).where(Torrent.downloaded)).all()
63+
4664
def search_rss(self, rss_id: int) -> list[Torrent]:
4765
return self.session.exec(select(Torrent).where(Torrent.rss_id == rss_id)).all()
4866

@@ -53,10 +71,10 @@ def search_bangumi(self, bangumi_id: int) -> list[Torrent]:
5371

5472
def check_new(self, torrents_list: list[Torrent]) -> list[Torrent]:
5573
new_torrents = []
56-
old_torrents = self.search_all()
57-
old_urls = [t.url for t in old_torrents]
74+
downloaded_torrents = self.search_all_downloaded()
75+
downloaded_url = [t.url for t in downloaded_torrents]
5876
for torrent in torrents_list:
59-
if torrent.url not in old_urls:
77+
if torrent.url not in downloaded_url:
6078
new_torrents.append(torrent)
6179
return new_torrents
6280

backend/src/module/downloader/download_client.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ def add_torrent(self, torrent: Torrent | list, bangumi: Bangumi) -> bool:
123123
with RequestContent() as req:
124124
for t in torrent:
125125
t.bangumi_id = bangumi.id
126-
t.downloaded = True
127126
if "magnet" in t.url:
128127
torrent_urls.append(t.url)
129128
t.hash = torrent_hash.from_magnet(t.url)
@@ -147,6 +146,8 @@ def add_torrent(self, torrent: Torrent | list, bangumi: Bangumi) -> bool:
147146
category="Bangumi",
148147
):
149148
logger.debug(f"[Downloader] Add torrent: {bangumi.official_title}")
149+
for t in torrent:
150+
t.downloaded = True
150151
return True
151152
else:
152153
logger.debug(f"[Downloader] Torrent added before: {bangumi.official_title}")

0 commit comments

Comments
 (0)