Skip to content

Commit c19e0f9

Browse files
committed
Fix bug when enter one product in comp
1 parent da50e7e commit c19e0f9

1 file changed

Lines changed: 60 additions & 18 deletions

File tree

main.py

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -546,42 +546,84 @@ def start_analysis(self):
546546

547547
if mode == "single":
548548
# Анализ одного товара
549-
product_id = self.url_input.get().strip()
550-
if not product_id:
549+
product_id_input = self.url_input.get().strip()
550+
if not product_id_input:
551551
self._hide_loading_overlay() # Скрыть загрузку при ошибке запуска процесса
552-
messagebox.showerror("Ошибка", "Введите ссылку на товар или его артикул.")
552+
messagebox.showerror("Ошибка", "Введите ссылку на товар или его артикул.", parent=self)
553553
return
554554

555555
# Извлекаем ID товара
556-
product_id = self.extract_product_id(product_id)
556+
product_id = self.extract_product_id(product_id_input)
557557

558558
# Запускаем процесс анализа
559+
self._show_loading_overlay(f"Анализируем: {product_id_input[:30]}...") # Обновляем сообщение при старте
559560
process = multiprocessing.Process(
560561
target=self.perform_analysis_process,
561562
args=(product_id, self.result_queue)
562563
)
563564
process.daemon = True
564565
process.start()
565566

566-
else:
567-
# Анализ нескольких товаров
568-
product_ids = []
569-
570-
# Собираем непустые товары из полей ввода
567+
else: # Режим "multi" (сравнение)
568+
product_ids_inputs = [] # Для хранения сырых введенных строк
569+
product_ids_processed = [] # Для хранения обработанных (извлеченных) ID
570+
571571
for entry in self.product_entries:
572-
product_id = entry.get().strip()
573-
if product_id:
574-
product_ids.append(self.extract_product_id(product_id))
572+
product_input_raw = entry.get().strip()
573+
if product_input_raw:
574+
product_ids_inputs.append(product_input_raw)
575+
product_ids_processed.append(self.extract_product_id(product_input_raw))
575576

576-
if len(product_ids) < 2:
577-
self._hide_loading_overlay() # Скрыть загрузку при ошибке запуска процесса
578-
messagebox.showerror("Ошибка", "Введите минимум два товара для сравнения.")
579-
return
577+
if len(product_ids_processed) < 2:
578+
self._hide_loading_overlay() # Сначала скрываем оверлей
579+
# Теперь восстанавливаем главный экран, чтобы он был фоном для диалога
580+
self.main_frame.pack(expand=True, fill="both")
581+
582+
if len(product_ids_processed) == 1:
583+
actual_input_for_dialog = product_ids_inputs[0]
584+
id_to_analyze_single = product_ids_processed[0]
585+
586+
user_choice = messagebox.askyesno(
587+
title="Сравнение товаров",
588+
message=f"Вы указали только один товар: \"{actual_input_for_dialog[:40]}{'...' if len(actual_input_for_dialog)>40 else ''}\" для сравнения.\n\nХотите проанализировать его в режиме 'Один товар'?",
589+
icon=messagebox.QUESTION,
590+
parent=self
591+
)
592+
if user_choice: # Пользователь выбрал "Да"
593+
self.mode_var.set("single")
594+
self.url_input.delete(0, tk.END)
595+
self.url_input.insert(0, id_to_analyze_single)
596+
# Снова показываем оверлей, так как сейчас начнется анализ
597+
self._show_loading_overlay(f"Анализируем: {actual_input_for_dialog[:30]}...")
598+
process = multiprocessing.Process(
599+
target=self.perform_analysis_process,
600+
args=(id_to_analyze_single, self.result_queue)
601+
)
602+
process.daemon = True
603+
process.start()
604+
self.after(100, lambda: self.check_analysis_results())
605+
return
606+
else: # Пользователь выбрал "Нет"
607+
# main_frame уже восстановлен, просто выходим
608+
return
609+
else: # Меньше одного товара (0 валидных вводов)
610+
messagebox.showerror("Ошибка", "Введите минимум два товара для сравнения.", parent=self)
611+
# main_frame уже восстановлен, просто выходим
612+
return
580613

581-
# Запускаем процесс анализа нескольких товаров
614+
# Если товаров 2 или больше, продолжаем как обычно для сравнения
615+
# В этом случае _show_loading_overlay был вызван в самом начале start_analysis
616+
# и не скрывался, так что все корректно.
617+
# Однако, для ясности и если бы мы меняли начальный вызов, можно было бы добавить его здесь:
618+
# self._show_loading_overlay(f"Анализируем {len(product_ids_processed)} товаров для сравнения...")
619+
# Но так как он УЖЕ показан в начале start_analysis и не был скрыт для этого пути,
620+
# можно просто обновить его текст, если нужно, или оставить как есть.
621+
# Обновим текст для ясности, что именно происходит
622+
self.loading_overlay_label.configure(text=f"Анализируем {len(product_ids_processed)} товаров для сравнения...")
623+
582624
process = multiprocessing.Process(
583625
target=self.perform_multiple_analysis_process,
584-
args=(product_ids, self.result_queue)
626+
args=(product_ids_processed, self.result_queue) # Передаем обработанные ID
585627
)
586628
process.daemon = True
587629
process.start()

0 commit comments

Comments
 (0)