@@ -11,12 +11,27 @@ def __init__(self, session: Session):
11
11
self .session = session
12
12
13
13
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 )
15
22
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." )
18
25
19
26
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
20
35
self .session .add_all (datas )
21
36
self .session .commit ()
22
37
logger .debug (f"Insert { len (datas )} torrents in database." )
@@ -43,6 +58,9 @@ def search(self, _id: int) -> Torrent:
43
58
def search_all (self ) -> list [Torrent ]:
44
59
return self .session .exec (select (Torrent )).all ()
45
60
61
+ def search_all_downloaded (self ) -> list [Torrent ]:
62
+ return self .session .exec (select (Torrent ).where (Torrent .downloaded )).all ()
63
+
46
64
def search_rss (self , rss_id : int ) -> list [Torrent ]:
47
65
return self .session .exec (select (Torrent ).where (Torrent .rss_id == rss_id )).all ()
48
66
@@ -53,10 +71,10 @@ def search_bangumi(self, bangumi_id: int) -> list[Torrent]:
53
71
54
72
def check_new (self , torrents_list : list [Torrent ]) -> list [Torrent ]:
55
73
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 ]
58
76
for torrent in torrents_list :
59
- if torrent .url not in old_urls :
77
+ if torrent .url not in downloaded_url :
60
78
new_torrents .append (torrent )
61
79
return new_torrents
62
80
0 commit comments