From c2647fa22e3badab4ca2313df7b8e1226d574266 Mon Sep 17 00:00:00 2001 From: cheykrym Date: Mon, 6 Oct 2025 05:51:32 +0300 Subject: [PATCH] add debug update chat list --- yobble/Components/TopBarView.swift | 8 + yobble/Resources/Localizable.xcstrings | 812 ++++++++++--------------- yobble/Views/Tab/ChatsTab.swift | 7 + 3 files changed, 335 insertions(+), 492 deletions(-) diff --git a/yobble/Components/TopBarView.swift b/yobble/Components/TopBarView.swift index e057c84..a5aa161 100644 --- a/yobble/Components/TopBarView.swift +++ b/yobble/Components/TopBarView.swift @@ -94,6 +94,14 @@ struct TopBarView: View { .imageScale(.large) .foregroundColor(.primary) } + + // Кнопка поиска + Button(action: { + NotificationCenter.default.post(name: .debugRefreshChats, object: nil) + }) { + Text(NSLocalizedString("DEBUG UPDATE", comment: "")) + .foregroundColor(.primary) + } } else if isProfileTab { NavigationLink(destination: SettingsView(viewModel: viewModel)) { Image(systemName: "wrench") diff --git a/yobble/Resources/Localizable.xcstrings b/yobble/Resources/Localizable.xcstrings index e75211a..42d2edc 100644 --- a/yobble/Resources/Localizable.xcstrings +++ b/yobble/Resources/Localizable.xcstrings @@ -1,615 +1,443 @@ { - "sourceLanguage" : "ru", - "strings" : { - "@%@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "@%@" + "sourceLanguage": "ru", + "strings": { + "%lld": {}, + "@%@": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "@%@" } } } }, - "%lld" : { - - }, - "🌍" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "🌍" + "Chat ID:": {}, + "Companion ID:": {}, + "DEBUG UPDATE": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "DEBUG UPDATE" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "DEBUG UPDATE" } } } }, - "Chat ID:" : { - - }, - "Companion ID:" : { - - }, - "Fun Fest" : { - "comment" : "Fun Fest", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fun Fest" + "Fun Fest": { + "comment": "Fun Fest", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Fun Fest" } } } }, - "Hello, world!" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hello, world!" + "Hello, world!": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hello, world!" } } } }, - "OK" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" + "OK": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "OK" } } } }, - "profile_down_text_1" : { - - }, - "profile_down_text_2" : { - - }, - "profile_down_text_3" : { - - }, - "Push-уведомления" : { - - }, - "Yobble" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Yobble" + "Push-уведомления": {}, + "Yobble": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Yobble" } } } }, - "Активные сессии" : { - - }, - "Без звука (скоро)" : { - - }, - "Безопасность" : { - - }, - "Ваше предложение" : { - - }, - "Вложение" : { - - }, - "Войти" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Log in" + "profile_down_text_1": {}, + "profile_down_text_2": {}, + "profile_down_text_3": {}, + "Активные сессии": {}, + "Без звука (скоро)": {}, + "Безопасность": {}, + "Ваше предложение": {}, + "Вложение": {}, + "Войти": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Log in" } } } }, - "Вы" : { - + "Вы": {}, + "Вы предложили: %@": {}, + "Выйти из аккаунта": {}, + "Где найти сохранённые черновики?": { + "comment": "FAQ question: drafts" }, - "Вы предложили: %@" : { - - }, - "Выйти из аккаунта" : { - - }, - "Где найти сохранённые черновики?" : { - "comment" : "FAQ question: drafts" - }, - "Данные" : { - - }, - "Двухфакторная аутентификация" : { - - }, - "Добавить друзей" : { - "comment" : "Add friends", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Add friends" + "Данные": {}, + "Двухфакторная аутентификация": {}, + "Добавить друзей": { + "comment": "Add friends", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Add friends" } } } }, - "Другое" : { - - }, - "Заглушка: Push-уведомления" : { - - }, - "Заглушка: Активные сессии" : { - - }, - "Заглушка: Двухфакторная аутентификация" : { - - }, - "Заглушка: Другие настройки" : { - - }, - "Заглушка: Обратная связь" : { - - }, - "Заглушка: Сменить пароль" : { - - }, - "Заглушка: Хранилище данных" : { - - }, - "Загружаем чаты…" : { - - }, - "Загрузка..." : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Loading..." + "Другое": {}, + "Заглушка: Push-уведомления": {}, + "Заглушка: Активные сессии": {}, + "Заглушка: Двухфакторная аутентификация": {}, + "Заглушка: Другие настройки": {}, + "Заглушка: Обратная связь": {}, + "Заглушка: Сменить пароль": {}, + "Заглушка: Хранилище данных": {}, + "Загружаем чаты…": {}, + "Загрузка...": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Loading..." } } } }, - "Заказы" : { - "comment" : "Orders", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Orders" + "Заказы": { + "comment": "Orders", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Orders" } } } }, - "Закрепить (скоро)" : { - - }, - "Закрыть" : { - "comment" : "Закрыть", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Close" + "Закрепить (скоро)": {}, + "Закрыть": { + "comment": "Закрыть", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Close" } } } }, - "Зарегистрироваться" : { - "comment" : "Зарегистрироваться", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Register" + "Зарегистрироваться": { + "comment": "Зарегистрироваться", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Register" } } } }, - "Здесь не будут чаты" : { - - }, - "Идеи" : { - - }, - "Избранные сообщения" : { - - }, - "Инвайт-код (необязательно)" : { - "comment" : "Инвайт-код", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invite code (optional)" + "Здесь не будут чаты": {}, + "Идеи": {}, + "Избранные сообщения": {}, + "Инвайт-код (необязательно)": { + "comment": "Инвайт-код", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Invite code (optional)" } } } }, - "История" : { - "comment" : "History", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "History" + "История": { + "comment": "History", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "History" } } } }, - "Как сбросить пароль?" : { - "comment" : "FAQ question: reset password" + "Как сбросить пароль?": { + "comment": "FAQ question: reset password" }, - "Как связаться с поддержкой?" : { - "comment" : "FAQ question: support" + "Как связаться с поддержкой?": { + "comment": "FAQ question: support" }, - "Какая вкладка вам нужна?" : { - - }, - "Корзина" : { - "comment" : "Cart", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cart" + "Какая вкладка вам нужна?": {}, + "Корзина": { + "comment": "Cart", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cart" } } } }, - "Кошелёк" : { - "comment" : "Wallet", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wallet" + "Кошелёк": { + "comment": "Wallet", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Wallet" } } } }, - "Лента" : { - - }, - "Лицо" : { - - }, - "Логин" : { - "comment" : "Логин", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Login" + "Лента": {}, + "Лицо": {}, + "Логин": { + "comment": "Логин", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Login" } } } }, - "Логин должен быть от 3 до 32 символов (английские буквы, цифры, _)" : { - "comment" : "Логин должен быть от 3 до 32 символов (английские буквы, цифры, _)", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Username must be 3 to 32 characters (letters, digits, or _)" + "Логин должен быть от 3 до 32 символов (английские буквы, цифры, _)": { + "comment": "Логин должен быть от 3 до 32 символов (английские буквы, цифры, _)", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Username must be 3 to 32 characters (letters, digits, or _)" } } } }, - "Логин уже занят." : { - - }, - "Мини-приложения" : { - "comment" : "Applets", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Applets" + "Логин уже занят.": {}, + "Мини-приложения": { + "comment": "Applets", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Applets" } } } }, - "Мои загрузки" : { - "comment" : "My Downloads", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "My Downloads" + "Мои загрузки": { + "comment": "My Downloads", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "My Downloads" } } } }, - "Мои комментарии" : { - "comment" : "My Comments", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "My Comments" + "Мои комментарии": { + "comment": "My Comments", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "My Comments" } } } }, - "Мой профиль" : { - + "Мой профиль": {}, + "Мы планируем заменить вкладку. Поделитесь, что бы вы хотели видеть здесь чаще всего.": {}, + "Напишите нам через форму обратной связи в разделе \"Поддержка\".": { + "comment": "FAQ answer: support" }, - "Мы планируем заменить вкладку. Поделитесь, что бы вы хотели видеть здесь чаще всего." : { - - }, - "Напишите нам через форму обратной связи в разделе \"Поддержка\"." : { - "comment" : "FAQ answer: support" - }, - "Например: закладки, друзья, активность..." : { - - }, - "Настройки" : { - "comment" : "Settings", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Settings" + "Например: закладки, друзья, активность...": {}, + "Настройки": { + "comment": "Settings", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" } } } }, - "Не удалось загрузить список чатов." : { - + "Не удалось загрузить список чатов.": {}, + "Не удалось загрузить чаты.": {}, + "Не удалось обработать данные чатов.": {}, + "Не удалось обработать ответ сервера.": {}, + "Не удалось сериализовать данные запроса.": {}, + "Неверный запрос (400).": {}, + "Неверный код приглашения.": {}, + "Неверный логин": { + "comment": "Неверный логин" }, - "Не удалось загрузить чаты." : { - + "Неверный логин или пароль.": {}, + "Неверный пароль": { + "comment": "Неверный пароль" }, - "Не удалось обработать данные чатов." : { - + "Неизвестная ошибка": {}, + "Неизвестная ошибка.": {}, + "Неизвестная ошибка. Попробуйте позже.": {}, + "Неизвестный": {}, + "Неизвестный пользователь": {}, + "Некорректный ответ от сервера.": {}, + "Нет аккаунта? Регистрация": { + "comment": "Регистрация" }, - "Не удалось обработать ответ сервера." : { - + "Нет сообщений": {}, + "О приложении": {}, + "Обновить": {}, + "Обратная связь": {}, + "Описание": {}, + "Отображаемое имя": {}, + "Отправить предложение": {}, + "Отправляем...": {}, + "Ошибка авторизации": {}, + "Ошибка при деавторизации.": {}, + "Ошибка регистрация": { + "comment": "Ошибка" }, - "Не удалось сериализовать данные запроса." : { - + "Ошибка сервера (%@).": {}, + "Ошибка сервера: %@": {}, + "Ошибка сети: %@": {}, + "Ошибка соединения с сервером.": {}, + "Пароли не совпадают": { + "comment": "Пароли не совпадают" }, - "Неверный запрос (400)." : { - + "Пароль": { + "comment": "Пароль" }, - "Неверный код приглашения." : { - + "Пароль должен быть от 8 до 128 символов": { + "comment": "Пароль должен быть от 6 до 32 символов" }, - "Неверный логин" : { - "comment" : "Неверный логин" + "Перейдите в раздел \"Настройки > Сменить пароль\" и следуйте инструкциям.": { + "comment": "FAQ answer: reset password" }, - "Неверный логин или пароль." : { - + "Повторить": {}, + "Поддержка": {}, + "Подтверждение пароля": { + "comment": "Подтверждение пароля" }, - "Неверный пароль" : { - "comment" : "Неверный пароль" - }, - "Неизвестная ошибка" : { - - }, - "Неизвестная ошибка." : { - - }, - "Неизвестная ошибка. Попробуйте позже." : { - - }, - "Неизвестный" : { - - }, - "Неизвестный пользователь" : { - - }, - "Некорректный ответ от сервера." : { - - }, - "Нет аккаунта? Регистрация" : { - "comment" : "Регистрация" - }, - "Нет сообщений" : { - - }, - "О приложении" : { - - }, - "Обновить" : { - - }, - "Обратная связь" : { - - }, - "Описание" : { - - }, - "Отображаемое имя" : { - - }, - "Отправить предложение" : { - - }, - "Отправляем..." : { - - }, - "Ошибка авторизации" : { - - }, - "Ошибка при деавторизации." : { - - }, - "Ошибка регистрация" : { - "comment" : "Ошибка" - }, - "Ошибка сервера (%@)." : { - - }, - "Ошибка сервера: %@" : { - - }, - "Ошибка сети: %@" : { - - }, - "Ошибка соединения с сервером." : { - - }, - "Пароли не совпадают" : { - "comment" : "Пароли не совпадают" - }, - "Пароль" : { - "comment" : "Пароль" - }, - "Пароль должен быть от 8 до 128 символов" : { - "comment" : "Пароль должен быть от 6 до 32 символов" - }, - "Перейдите в раздел \"Настройки > Сменить пароль\" и следуйте инструкциям." : { - "comment" : "FAQ answer: reset password" - }, - "Повторить" : { - - }, - "Поддержка" : { - - }, - "Подтверждение пароля" : { - "comment" : "Подтверждение пароля" - }, - "Пока что у вас нет чатов" : { - - }, - "Помощь" : { - "comment" : "Help Center", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Help" + "Пока что у вас нет чатов": {}, + "Помощь": { + "comment": "Help Center", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Help" } } } }, - "Приглашение достигло лимита использования." : { - + "Приглашение достигло лимита использования.": {}, + "Приглашение истекло.": {}, + "Приглашение не активно.": {}, + "Приложение": {}, + "Применить": {}, + "Произошла ошибка.": {}, + "Профиль": {}, + "Публичная информация": {}, + "Регистрация": { + "comment": "Регистрация" }, - "Приглашение истекло." : { - - }, - "Приглашение не активно." : { - - }, - "Приложение" : { - - }, - "Применить" : { - - }, - "Произошла ошибка." : { - - }, - "Профиль" : { - - }, - "Публичная информация" : { - - }, - "Регистрация" : { - "comment" : "Регистрация" - }, - "Регистрация временно недоступна." : { - - }, - "Регистрация выполнена, но вход не удался." : { - - }, - "Регистрация запрещена." : { - - }, - "Регистрация и вход выполнены успешно." : { - - }, - "Редактировать профиль" : { - - }, - "Сервер не отвечает. Попробуйте позже." : { - - }, - "Сессия истекла. Войдите снова." : { - - }, - "Скан" : { - "comment" : "Scan", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scan" + "Регистрация временно недоступна.": {}, + "Регистрация выполнена, но вход не удался.": {}, + "Регистрация запрещена.": {}, + "Регистрация и вход выполнены успешно.": {}, + "Редактировать профиль": {}, + "Сервер не отвечает. Попробуйте позже.": {}, + "Сессия истекла. Войдите снова.": {}, + "Скан": { + "comment": "Scan", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Scan" } } } }, - "Слишком много запросов." : { - - }, - "Сменить пароль" : { - - }, - "Сообщение" : { - - }, - "Спасибо!" : { - - }, - "Тёмная тема" : { - - }, - "Уведомления" : { - - }, - "Удалить чат (скоро)" : { - - }, - "Центр авторов" : { - "comment" : "Creator Center", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Creator Center" + "Слишком много запросов.": {}, + "Сменить пароль": {}, + "Сообщение": {}, + "Спасибо!": {}, + "Тёмная тема": {}, + "Уведомления": {}, + "Удалить чат (скоро)": {}, + "Центр авторов": { + "comment": "Creator Center", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Creator Center" } } } }, - "Частые вопросы" : { - "comment" : "FAQ navigation title" + "Частые вопросы": { + "comment": "FAQ navigation title" }, - "Чат" : { - - }, - "Чаты" : { - - }, - "Черновики" : { - "comment" : "Drafts", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Drafts" + "Чат": {}, + "Чаты": {}, + "Черновики": { + "comment": "Drafts", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Drafts" } } } }, - "Черновики доступны в боковом меню в разделе Drafts." : { - "comment" : "FAQ answer: drafts" + "Черновики доступны в боковом меню в разделе Drafts.": { + "comment": "FAQ answer: drafts" }, - "Экран чата в разработке" : { - - }, - "Язык" : { - + "Экран чата в разработке": {}, + "Язык": {}, + "🌍": { + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "🌍" + } + } + } } }, - "version" : "1.0" -} \ No newline at end of file + "version": "1.0" +} diff --git a/yobble/Views/Tab/ChatsTab.swift b/yobble/Views/Tab/ChatsTab.swift index c2f8b3f..e4619c7 100644 --- a/yobble/Views/Tab/ChatsTab.swift +++ b/yobble/Views/Tab/ChatsTab.swift @@ -18,6 +18,9 @@ struct ChatsTab: View { .onAppear { viewModel.loadInitialChats() } + .onReceive(NotificationCenter.default.publisher(for: .debugRefreshChats)) { _ in + viewModel.refresh() + } } @ViewBuilder @@ -526,3 +529,7 @@ private struct ChatPlaceholderView: View { return NSLocalizedString("Чат", comment: "") } } + +extension Notification.Name { + static let debugRefreshChats = Notification.Name("debugRefreshChats") +}