feat: Complete RSS engine.

This commit is contained in:
EstrellaXD
2023-08-04 19:02:29 +08:00
parent 472a5093e9
commit 80ea9ec657
7 changed files with 68 additions and 79 deletions

View File

@@ -1,6 +1,6 @@
import logging
from sqlmodel import Session, select, delete, or_
from sqlmodel import Session, select, delete, or_, and_
from sqlalchemy.sql import func
from typing import Optional
@@ -87,7 +87,9 @@ class BangumiDatabase:
def match_poster(self, bangumi_name: str) -> str:
# Use like to match
statement = select(Bangumi).where(func.instr(bangumi_name, Bangumi.title_raw) > 0)
statement = select(Bangumi).where(
func.instr(bangumi_name, Bangumi.title_raw) > 0
)
data = self.session.exec(statement).first()
if data:
return data.poster_link
@@ -115,6 +117,12 @@ class BangumiDatabase:
i += 1
return torrent_list
def match_torrent(self, torrent_name: str) -> Optional[Bangumi]:
statement = select(Bangumi).where(
and_(func.instr(torrent_name, Bangumi.title_raw) > 0, not Bangumi.deleted)
)
return self.session.exec(statement).first()
def not_complete(self) -> list[Bangumi]:
# Find eps_complete = False
condition = select(Bangumi).where(Bangumi.eps_collect == 0)
@@ -140,7 +148,5 @@ class BangumiDatabase:
logger.debug(f"[Database] Disable rule {bangumi.title_raw}.")
def search_rss(self, rss_link: str) -> list[Bangumi]:
statement = select(Bangumi).where(
func.instr(rss_link, Bangumi.rss_link) > 0
)
return self.session.exec(statement).all()
statement = select(Bangumi).where(func.instr(rss_link, Bangumi.rss_link) > 0)
return self.session.exec(statement).all()

View File

@@ -1,4 +1,4 @@
from sqlmodel import Session,SQLModel
from sqlmodel import Session, SQLModel
from .engine import engine
from .rss import RSSDatabase
@@ -15,4 +15,4 @@ class Database(Session):
@staticmethod
def create_table():
SQLModel.metadata.create_all(engine)
SQLModel.metadata.create_all(engine)

View File

@@ -12,7 +12,20 @@ class RSSDatabase:
def __init__(self, session: Session):
self.session = session
def insert_one(self, data: RSSItem):
def add(self, data: RSSItem):
# Check if exists
statement = select(RSSItem).where(RSSItem.url == data.url)
db_data = self.session.exec(statement).first()
if db_data:
logger.debug(f"RSS Item {data.url} already exists.")
return
else:
logger.debug(f"RSS Item {data.url} not exists, adding...")
self.session.add(data)
self.session.commit()
self.session.refresh(data)
def update(self, data: RSSItem):
self.session.add(data)
self.session.commit()
self.session.refresh(data)
@@ -20,7 +33,10 @@ class RSSDatabase:
def search_all(self) -> list[RSSItem]:
return self.session.exec(select(RSSItem)).all()
def delete_one(self, _id: int):
def search_active(self) -> list[RSSItem]:
return self.session.exec(select(RSSItem).where(RSSItem.enabled)).all()
def delete(self, _id: int):
condition = delete(RSSItem).where(RSSItem.id == _id)
self.session.exec(condition)
self.session.commit()
@@ -29,5 +45,3 @@ class RSSDatabase:
condition = delete(RSSItem)
self.session.exec(condition)
self.session.commit()

View File

@@ -11,13 +11,13 @@ class TorrentDatabase:
def __init__(self, session: Session):
self.session = session
def insert_one(self, data: Torrent):
def add(self, data: Torrent):
self.session.add(data)
self.session.commit()
self.session.refresh(data)
logger.debug(f"Insert {data.name} in database.")
def insert_many(self, datas: list[Torrent]):
def add_all(self, datas: list[Torrent]):
self.session.add_all(datas)
self.session.commit()
logger.debug(f"Insert {len(datas)} torrents in database.")
@@ -46,9 +46,9 @@ class TorrentDatabase:
def check_new(self, torrents_list: list[Torrent]) -> list[Torrent]:
new_torrents = []
old_torrents = self.search_all()
old_urls = [t.url for t in old_torrents]
for torrent in torrents_list:
statement = select(Torrent).where(Torrent.name == torrent.name)
db_torrent = self.session.exec(statement).first()
if not db_torrent:
if torrent.url not in old_urls:
new_torrents.append(torrent)
return new_torrents