Moved torrent diffing logic to ChangeMap
This commit is contained in:
parent
adc9073683
commit
ece903d298
@ -1,5 +1,9 @@
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
|
import qbittorrentapi
|
||||||
|
|
||||||
|
Torrent = qbittorrentapi.TorrentDictionary
|
||||||
|
|
||||||
class ChangeMap:
|
class ChangeMap:
|
||||||
def __init__(self, changes: typing.Dict[typing.Any, typing.Any]) -> None:
|
def __init__(self, changes: typing.Dict[typing.Any, typing.Any]) -> None:
|
||||||
self._changes: typing.Dict[typing.Any, typing.Any] = changes
|
self._changes: typing.Dict[typing.Any, typing.Any] = changes
|
||||||
@ -7,4 +11,18 @@ class ChangeMap:
|
|||||||
def __getattr__(self, __name: str) -> typing.Any:
|
def __getattr__(self, __name: str) -> typing.Any:
|
||||||
return self._changes.get(__name)
|
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",)
|
__all__ = ("ChangeMap",)
|
||||||
|
@ -10,13 +10,7 @@ class TorrentStateStore:
|
|||||||
def update(self, torrent: TorrentDictionary) -> ChangeMap:
|
def update(self, torrent: TorrentDictionary) -> ChangeMap:
|
||||||
torrent_name: str = torrent.hash
|
torrent_name: str = torrent.hash
|
||||||
old_torrent: typing.Optional[TorrentDictionary] = self._torrents.get(torrent_name)
|
old_torrent: typing.Optional[TorrentDictionary] = self._torrents.get(torrent_name)
|
||||||
changes: typing.Any
|
change_map = ChangeMap.diff_torrents(torrent, old_torrent)
|
||||||
if old_torrent:
|
|
||||||
changes = old_torrent.items() ^ torrent.items()
|
|
||||||
else:
|
|
||||||
changes = torrent.items()
|
|
||||||
|
|
||||||
change_map = ChangeMap({k: v for k, v in changes})
|
|
||||||
self._torrents[torrent_name] = torrent
|
self._torrents[torrent_name] = torrent
|
||||||
return change_map
|
return change_map
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user