- исправлении логики определения последней версии

This commit is contained in:
2025-09-30 20:55:43 +03:00
parent a328123f77
commit 6b0c8a05b9
2 changed files with 58 additions and 18 deletions

View File

@@ -171,20 +171,49 @@ class ContentProcessor:
def create_script_content(self, script_ver, next_version, response):
"""Создание контента для обновления скрипта"""
self.logger.debug(f"Создаем контент для версии скрипта {script_ver}")
self.logger.debug(f"Создаем контент для версии скрипта от {script_ver} до {next_version}")
soup = self.make_soup(response)
page_text = str(soup)
page_text = page_text.replace("Вы можете помочь развитию проекта: https://linux-gaming.ru/donate/", '')
last_text = f"###Scripts version {next_version}### / stable"
index_last_text = page_text.find(last_text)
# В changelog версии идут от новых к старым (2444, 2443, 2442...)
# Нужно найти текущую версию (next_version) и предыдущую (script_ver)
# Предыдущая версия находится ПОСЛЕ текущей в файле
current_text = f"###Scripts version {next_version}### / stable"
self.logger.debug(f"Ищем текущую версию: {current_text}")
index_current = page_text.find(current_text)
self.logger.debug(f"Индекс текущей версии: {index_current}")
if index_current != -1:
# Ищем предыдущую версию ПОСЛЕ текущей
text_after_current = page_text[index_current:]
# Попробуем разные варианты формата предыдущей версии
possible_formats = [
f"###Scripts version {script_ver}### / stable",
f"###Scripts version {script_ver}###",
f"Scripts version {script_ver}"
]
index_prev_relative = -1
for prev_text in possible_formats:
self.logger.debug(f"Ищем предыдущую версию (формат): {prev_text}")
index_prev_relative = text_after_current.find(prev_text)
if index_prev_relative != -1:
self.logger.debug(f"Найдено! Относительный индекс: {index_prev_relative}")
break
if index_prev_relative == -1:
self.logger.error(f"Не найдена версия {script_ver} после версии {next_version}")
self.logger.debug(f"Первые 1000 символов после текущей версии: {text_after_current[:1000]}")
return None
# Извлекаем текст от начала текущей версии до начала предыдущей
index_prev = index_current + index_prev_relative
changelog_text = page_text[index_current:index_prev]
self.logger.debug(f"Длина извлеченного текста: {len(changelog_text)} символов")
if index_last_text != -1:
changelog_text_last = page_text[:index_last_text]
prev_text = f"###Scripts version {script_ver}### / stable"
index_script_ver = changelog_text_last.find(prev_text)
changelog_text = changelog_text_last[index_script_ver:]
changelog_text = re.sub(
r'###Scripts version (\d+)### / Дата: (\d{2}\.\d{2}\.\d{4}) / Размер скачиваемого обновления: \d+ \S+',
r'\1 - \2' + ":",
@@ -195,10 +224,13 @@ class ContentProcessor:
r'\1 - \2' + ":",
changelog_text
)
post_text = "-----------------------------\n" + changelog_text
self.logger.debug(f"Возвращаем post_text: {post_text}")
self.logger.debug(f"Возвращаем post_text длиной {len(post_text)} символов")
return post_text
else:
self.logger.error(f"Не найдена версия {next_version} в changelog (конец диапазона)")
return None
return None

View File

@@ -204,16 +204,24 @@ class SiteAPI:
self.logger.info(f"Будем публиковать версии начиная с индекса {start_index}")
# Публикуем только новые версии после последней опубликованной
for i in range(start_index, len(sorted_versions) - 1):
script_ver = int(sorted_versions[i])
next_version = int(sorted_versions[i + 1])
# Идём до последнего элемента включительно
for i in range(start_index, len(sorted_versions)):
current_version = int(sorted_versions[i])
# Для changelog берём предыдущую версию как начало диапазона
prev_version = int(sorted_versions[i - 1]) if i > 0 else None
self.logger.info(f"Найдена новая версия скрипта {script_ver}")
if prev_version is None:
self.logger.warning(f"Нет предыдущей версии для {current_version}, пропускаем")
continue
self.logger.info(f"Публикуем новость о версии {current_version} (changelog от {prev_version} до {current_version})")
post_text, post_data = self.create_script_update_post(
str(script_ver), str(next_version), resp_changelog, content_processor
str(prev_version), str(current_version), resp_changelog, content_processor
)
if post_data:
# Заголовок должен быть с текущей версией
post_data['title'] = f"Кумулятивное обновление скриптов {current_version}"
self.logger.debug(f"Публикуем {post_data}")
self.post_to_site(post_data)