|
7 | 7 | from Source.Core import Exceptions |
8 | 8 |
|
9 | 9 | from dublib.Methods.Data import RemoveRecurringSubstrings, Zerotify |
10 | | -from dublib.Methods.Filesystem import WriteJSON |
| 10 | +from dublib.Methods.Filesystem import ReadJSON, WriteJSON |
11 | 11 |
|
12 | 12 | from typing import Any, Iterable, TYPE_CHECKING |
13 | 13 | from pathlib import Path |
14 | 14 | from os import PathLike |
15 | 15 | from time import sleep |
| 16 | +import hashlib |
16 | 17 | import os |
17 | 18 |
|
18 | 19 | import validators |
@@ -946,6 +947,21 @@ def _FindChapterByID(self, chapter_id: int) -> ChapterSearchResult | None: |
946 | 947 |
|
947 | 948 | return Result |
948 | 949 |
|
| 950 | + def _IsLocalFileEqual(self) -> bool: |
| 951 | + """ |
| 952 | + Проверяет, идентичны ли данные тайтла локальным данным. |
| 953 | +
|
| 954 | + :return: Возвращает `True`, если данные идентичны, или `False` в противном случа и при отсутствии локального файла. |
| 955 | + :rtype: bool |
| 956 | + """ |
| 957 | + |
| 958 | + if not os.path.exists(self._TitlePath): return False |
| 959 | + |
| 960 | + LocalHasher = hashlib.sha256(str(ReadJSON(self._TitlePath)).encode()) |
| 961 | + MemoryHasher = hashlib.sha256(str(self._Title).encode()) |
| 962 | + |
| 963 | + return LocalHasher.hexdigest() == MemoryHasher.hexdigest() |
| 964 | + |
949 | 965 | def _SearchFileInDirectory(self, directory: PathLike, identificator: str, type: By) -> dict | None: |
950 | 966 | """ |
951 | 967 | Находит файл JSON в директории по идентификатору определённого типа. |
@@ -1050,7 +1066,9 @@ def merge(self): |
1050 | 1066 | def __init__(self, system_objects: "SystemObjects"): |
1051 | 1067 | """ |
1052 | 1068 | Базовый тайтл. |
1053 | | - system_objects – коллекция системных объектов. |
| 1069 | +
|
| 1070 | + :param system_objects: Коллекция системных объектов. |
| 1071 | + :type system_objects: SystemObjects |
1054 | 1072 | """ |
1055 | 1073 |
|
1056 | 1074 | self._SystemObjects = system_objects |
@@ -1246,10 +1264,14 @@ def save(self, sorting: bool = False): |
1246 | 1264 | self._UpdatePersons() |
1247 | 1265 | self._UpdateBranchesInfo() |
1248 | 1266 | self._UpdateContent(sorting = sorting) |
1249 | | - WriteJSON(self._TitlePath, self._Title) |
| 1267 | + |
| 1268 | + if not self._IsLocalFileEqual(): |
| 1269 | + WriteJSON(self._TitlePath, self._Title) |
| 1270 | + self._SystemObjects.logger.info("Saved.") |
| 1271 | + |
| 1272 | + else: self._SystemObjects.logger.info("No changes. Saving skipped.") |
1250 | 1273 |
|
1251 | 1274 | if self._SystemObjects.CACHING and all((self.id, self.slug)): self._SystemObjects.temper.shared_data.journal.update(self.id, self.slug) |
1252 | | - self._SystemObjects.logger.info("Saved.") |
1253 | 1275 |
|
1254 | 1276 | def set_parser(self, parser: "BaseParser"): |
1255 | 1277 | """ |
|
0 commit comments