Moved torrent diffing logic to ChangeMap

This commit is contained in:
strNophix 2022-10-03 21:12:02 +02:00
parent adc9073683
commit ece903d298
2 changed files with 19 additions and 7 deletions

View File

@ -1,5 +1,9 @@
import typing
import qbittorrentapi
Torrent = qbittorrentapi.TorrentDictionary
class ChangeMap:
def __init__(self, changes: typing.Dict[typing.Any, typing.Any]) -> None:
self._changes: typing.Dict[typing.Any, typing.Any] = changes
@ -7,4 +11,18 @@ class ChangeMap:
def __getattr__(self, __name: str) -> typing.Any:
return self._changes.get(__name)
@staticmethod
def diff_torrents(torrent: typing.Optional[Torrent] = None, other_torrent: typing.Optional[Torrent] = None) -> "ChangeMap":
changes: typing.Any = []
if not torrent and other_torrent:
changes = other_torrent.items()
elif torrent and not other_torrent:
changes = torrent.items()
elif torrent and other_torrent:
changes = torrent.items() ^ other_torrent.items()
return ChangeMap({k: v for k, v in changes})
__all__ = ("ChangeMap",)

View File

@ -10,13 +10,7 @@ class TorrentStateStore:
def update(self, torrent: TorrentDictionary) -> ChangeMap:
torrent_name: str = torrent.hash
old_torrent: typing.Optional[TorrentDictionary] = self._torrents.get(torrent_name)
changes: typing.Any
if old_torrent:
changes = old_torrent.items() ^ torrent.items()
else:
changes = torrent.items()
change_map = ChangeMap({k: v for k, v in changes})
change_map = ChangeMap.diff_torrents(torrent, old_torrent)
self._torrents[torrent_name] = torrent
return change_map