From ac2013bcca545fb538886ab1f89a9658e23a16f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=D0=BE=D0=B2=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= Date: Tue, 17 Feb 2026 17:58:17 +0300 Subject: [PATCH] Add logging for chat load and bump version to 2.2.4 --- app_version.py | 2 +- main.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/app_version.py b/app_version.py index 2f64503..0638b41 100644 --- a/app_version.py +++ b/app_version.py @@ -1 +1 @@ -APP_VERSION = "2.2.3" +APP_VERSION = "2.2.4" diff --git a/main.py b/main.py index c828416..c247ef7 100644 --- a/main.py +++ b/main.py @@ -705,6 +705,10 @@ class VkChatManager(QMainWindow): self._bulk_action_context = "set_user_admin" if action_type == "admin" else "execute_user_action" self._bulk_action_success_message_title = success_message_title self._bulk_clear_inputs_on_success = clear_inputs_on_success + self._log_event( + "bulk_action", + f"start action={action_type} chats={len(selected_chats)} users={len(user_infos)}", + ) self._set_busy(True, f"Статус: выполняется {action_label} (0/{total})...") self._start_operation_progress(total, action_label, action_button=action_button) @@ -739,6 +743,10 @@ class VkChatManager(QMainWindow): def _on_bulk_action_finished(self, payload): results = payload.get("results", []) if isinstance(payload, dict) else [] + processed = payload.get("processed") if isinstance(payload, dict) else None + total = payload.get("total") if isinstance(payload, dict) else None + if processed is not None and total is not None: + self._log_event("bulk_action", f"done processed={processed} total={total}") QMessageBox.information(self, self._bulk_action_success_message_title, "\n".join(results)) if self._bulk_clear_inputs_on_success: self.vk_url_input.clear() @@ -949,6 +957,7 @@ class VkChatManager(QMainWindow): self._log_event("auth_process", "Авторизация уже запущена, повторный запуск пропущен.") return + self._log_event("auth_process", "start") if keep_status_text and hasattr(self, "_relogin_status_text"): status_text = self._relogin_status_text self._relogin_status_text = None @@ -990,6 +999,7 @@ class VkChatManager(QMainWindow): self._auth_relogin_in_progress = False return + self._log_event("auth_process", f"success expires_in={expires_in}") self.token = token # Сохраняем и получаем корректный expiration_time (0 или будущее время) try: @@ -1265,6 +1275,7 @@ class VkChatManager(QMainWindow): QMessageBox.warning(self, "Ошибка", "Сначала авторизуйтесь.") return + self._log_event("resolve_ids", f"start count={len(links_list)}") self.user_ids_to_process.clear() resolved_ids = [] failed_links = [] @@ -1288,6 +1299,10 @@ class VkChatManager(QMainWindow): self.user_ids_to_process = resolved_ids status_message = f"Статус: Готово к работе с {len(resolved_ids)} пользователем(ем/ями)." + self._log_event( + "resolve_ids", + f"done resolved={len(resolved_ids)} failed={len(failed_links)}", + ) if len(links_list) > 1: self._set_vk_url_input_text(f"Загружено {len(resolved_ids)}/{len(links_list)} из списка") @@ -1314,17 +1329,40 @@ class VkChatManager(QMainWindow): try: self._set_busy(True, "Статус: загрузка чатов...") + self._log_event("load_chats", "start") conversations = load_chat_conversations(self._vk_call_with_retry, self.vk) + type_counts = {} + non_chat_samples = [] + missing_title_count = 0 for conv in conversations: - if conv["conversation"]["peer"]["type"] != "chat": + conv_info = conv.get("conversation", {}) + peer = conv_info.get("peer", {}) + peer_type = peer.get("type", "unknown") + type_counts[peer_type] = type_counts.get(peer_type, 0) + 1 + if peer_type != "chat": + if len(non_chat_samples) < 30: + non_chat_samples.append( + { + "type": peer_type, + "peer_id": peer.get("id"), + "local_id": peer.get("local_id"), + "title": (conv_info.get("chat_settings") or {}).get("title", ""), + } + ) continue - chat_id = conv["conversation"]["peer"]["local_id"] - title = conv["conversation"]["chat_settings"]["title"] + chat_id = peer.get("local_id") + chat_settings = conv_info.get("chat_settings") or {} + title = chat_settings.get("title", "") + if not title: + missing_title_count += 1 self.chats.append({"id": chat_id, "title": title}) checkbox = QCheckBox(f"{title} (id: {chat_id})") checkbox.setProperty("chat_id", chat_id) + if "группа магазинов" in title.casefold(): + self._log_event("load_chats", f"chat_match title='{title}' id={chat_id}") + if "AG офис" in title: layouts[0].insertWidget(layouts[0].count() - 1, checkbox) self.office_chat_checkboxes.append(checkbox) @@ -1346,6 +1384,17 @@ class VkChatManager(QMainWindow): self.chat_tabs.setTabText(2, f"AG Склад ({len(self.warehouse_chat_checkboxes)})") self.chat_tabs.setTabText(3, f"AG Кофейни ({len(self.coffee_chat_checkboxes)})") self.chat_tabs.setTabText(4, f"Прочие ({len(self.other_chat_checkboxes)})") + self._log_event( + "load_chats", + ( + f"done total={len(conversations)} " + f"chats={len(self.chats)} " + f"type_counts={type_counts} " + f"missing_titles={missing_title_count}" + ), + ) + if non_chat_samples: + self._log_event("load_chats", f"non_chat_samples={non_chat_samples}") except VkApiError as e: if self._handle_vk_api_error("load_chats", e, action_name="загрузки чатов"): return