diff --git a/src/ui/i18n/i18n_ru.qm b/src/ui/i18n/i18n_ru.qm index 87803ac5..18d2c8be 100644 Binary files a/src/ui/i18n/i18n_ru.qm and b/src/ui/i18n/i18n_ru.qm differ diff --git a/src/ui/i18n/i18n_ru.ts b/src/ui/i18n/i18n_ru.ts index e9a0d147..9dc6fb3b 100644 --- a/src/ui/i18n/i18n_ru.ts +++ b/src/ui/i18n/i18n_ru.ts @@ -4,17 +4,17 @@ ConfUtil - + Bad Include IP address: %1 Некорректный IP адрес для включения: %1 - + Bad Exclude IP address: %1 Некорректный IP адрес для исключения: %1 - + Too many IP addresses Слишком много IP адресов @@ -24,17 +24,17 @@ Слишком много путей приложений - + Number of Application Groups must be < %1 Количество групп приложений должно быть < %1 - + Length of Application Group's Name must be < %1 Длина наименования группы приложения должна быть < %1 - + Length of Application's Path must be < %1 Длина пути приложения должна быть < %1 @@ -50,42 +50,42 @@ FortManager - + Password input Ввод пароля - + Please enter the password Наберите пароль пожалуйста - + Options Опции - + Traffic Graph График трафика - + Filter Enabled Фильтр включен - + Stop Traffic Остановить трафик - + Stop Internet Traffic Остановить Интернет трафик - + Quit Выйти @@ -93,17 +93,17 @@ FortSettings - + Can't write .ini file Не удалось записать .ini файл - + Can't create .conf file Не удалось создать .conf файл - + Can't create backup .conf file Не удалось создать бэкап .conf файла @@ -212,45 +212,50 @@ Выделить всё - - + + Clear… Очистить… - - + + Remove Application Удалить приложение - - + + Clear All Очистить всё - + Copy… Копировать… - + Application Path Путь приложения - + IP Address IP Адрес - - Resolve Addresses - Преобразовать адреса + + Host name + Имя хоста - + + Show host names + Показ имён хостов + + + Show Blocked Applications Показ блокированных приложений @@ -361,32 +366,32 @@ - + Statistics Статистика - + Password: Пароль: - + OK OK - + Apply Применить - + Cancel Отмена - + Quit Выйти @@ -401,57 +406,57 @@ Остановить трафик, когда Fort Firewall не запущен - + Filter Enabled Фильтр включен - + Filter Local Addresses Фильтр локальных адресов - + Stop Traffic Остановить трафик - + Stop Internet Traffic Остановить Интернет трафик - + Hot Keys Горячие клавиши - + Installed Установлен - + Not Installed Не установлен - + Language: Язык: - + Logs Логи - + Profile Профиль - + Releases Релизы @@ -607,103 +612,103 @@ Успешный запуск - + Adaptive Адаптивный - + Bytes Байты - + KiB KiB - + MiB MiB - + GiB GiB - + TiB TiB - + Refresh Обновить - + Units: Единицы: - + Reset Total Сбросить общую - + Collect Traffic Statistics Собирать статистику трафика - + All Все - + Hourly Stat Почасовая - + Daily Stat Ежедневная - + Monthly Stat Ежемесячная - + Total Stat Общая - + Date Дата - + Download Загрузка - + Upload Выгрузка - + Sum Сумма diff --git a/src/ui/log/model/stringlistmodel.cpp b/src/ui/log/model/stringlistmodel.cpp index aba3e189..4cb903ad 100644 --- a/src/ui/log/model/stringlistmodel.cpp +++ b/src/ui/log/model/stringlistmodel.cpp @@ -70,3 +70,8 @@ int StringListModel::adjustRow(int row) const { return (row < 0) ? (m_list.size() + 1 + row) : row; } + +void StringListModel::triggerUpdate() +{ + emit dataChanged(QModelIndex(), QModelIndex()); +} diff --git a/src/ui/log/model/stringlistmodel.h b/src/ui/log/model/stringlistmodel.h index 346d833d..c8850b86 100644 --- a/src/ui/log/model/stringlistmodel.h +++ b/src/ui/log/model/stringlistmodel.h @@ -26,6 +26,8 @@ public slots: virtual void remove(int row = -1); virtual void replace(const QString &text, int row = -1); + void triggerUpdate(); + protected: void removeRow(int row); diff --git a/src/ui/qml/controls/ListViewControl.qml b/src/ui/qml/controls/ListViewControl.qml index ac7f880b..6b9c2001 100644 --- a/src/ui/qml/controls/ListViewControl.qml +++ b/src/ui/qml/controls/ListViewControl.qml @@ -6,6 +6,9 @@ ListView { signal clicked(int index) + readonly property bool hasCurrentItem: + currentIndex >= 0 && currentIndex < count && !!currentItem + readonly property string currentItemText: (currentIndex >= 0 && currentIndex < count && currentItem) ? currentItem.displayText : "" diff --git a/src/ui/qml/pages/BlockedPage.qml b/src/ui/qml/pages/BlockedPage.qml index 9d83b842..3e147772 100644 --- a/src/ui/qml/pages/BlockedPage.qml +++ b/src/ui/qml/pages/BlockedPage.qml @@ -12,12 +12,21 @@ BasePage { readonly property IpListModel ipListModel: appBlockedModel.ipListModel(currentAppPath) - readonly property string currentAppPath: appListView.currentItemText + readonly property Item currentAppItem: + appListView.hasCurrentItem ? appListView.currentItem : null + readonly property string currentAppPath: + (currentAppItem && currentAppItem.displayText) || "" - readonly property string currentIpText: ipListView.currentItemText + readonly property Item currentIpItem: + ipListView.hasCurrentItem ? ipListView.currentItem : null + readonly property string currentIpText: + (currentIpItem && currentIpItem.displayText) || "" + readonly property string currentHostName: + (currentIpItem && currentIpItem.hostName) || "" HostInfoCache { id: hostInfoCache + onCacheChanged: ipListView.update() } ColumnLayout { @@ -67,11 +76,17 @@ BasePage { && qsTranslate("qml", "IP Address") onTriggered: guiUtil.setClipboardData(currentIpText) } + MenuItem { + enabled: !!currentHostName + text: translationManager.trTrigger + && qsTranslate("qml", "Host name") + onTriggered: guiUtil.setClipboardData(currentHostName) + } } CheckBox { text: translationManager.trTrigger - && qsTranslate("qml", "Resolve Addresses") + && qsTranslate("qml", "Show host names") checked: firewallConf.resolveAddress onToggled: { if (firewallConf.resolveAddress === checked) @@ -81,7 +96,7 @@ BasePage { fortManager.applyConfImmediateFlags(); - hostInfoCache.cacheChanged(); // refresh ipListView + ipListView.update(); } } @@ -128,6 +143,10 @@ BasePage { Layout.fillHeight: true model: ipListModel + + function update() { + ipListModel.triggerUpdate(); + } } } } diff --git a/src/ui/qml/pages/StatisticsPage.qml b/src/ui/qml/pages/StatisticsPage.qml index 10df1a32..7682225b 100644 --- a/src/ui/qml/pages/StatisticsPage.qml +++ b/src/ui/qml/pages/StatisticsPage.qml @@ -15,7 +15,10 @@ BasePage { appListView.currentIndex, currentAppPath) - readonly property string currentAppPath: appListView.currentItemText + readonly property Item currentAppItem: + appListView.hasCurrentItem ? appListView.currentItem : null + readonly property string currentAppPath: + (currentAppItem && currentAppItem.displayText) || "" readonly property var trafCellWidths: [ trafsContainer.width * 0.34, diff --git a/src/ui/qml/pages/log/IpListView.qml b/src/ui/qml/pages/log/IpListView.qml index 2a4801b8..2474b58c 100644 --- a/src/ui/qml/pages/log/IpListView.qml +++ b/src/ui/qml/pages/log/IpListView.qml @@ -16,7 +16,6 @@ ListViewControl { readonly property string hostName: (firewallConf.resolveAddress - && hostInfoCache.hostTrigger && hostInfoCache.hostName(displayText)) || "" readonly property string displayText: display diff --git a/src/ui/util/net/hostinfocache.cpp b/src/ui/util/net/hostinfocache.cpp index 0a88f35d..f8efbb47 100644 --- a/src/ui/util/net/hostinfocache.cpp +++ b/src/ui/util/net/hostinfocache.cpp @@ -8,6 +8,10 @@ HostInfoCache::HostInfoCache(QObject *parent) : { connect(m_manager, &HostInfoManager::lookupFinished, this, &HostInfoCache::handleFinishedLookup); + + m_timer.setInterval(300); + connect(&m_timer, &QTimer::timeout, + this, &HostInfoCache::cacheChanged); } QString HostInfoCache::hostName(const QString &address) @@ -39,5 +43,7 @@ void HostInfoCache::handleFinishedLookup(const QString &address, void HostInfoCache::emitCacheChanged() { - emit cacheChanged(); + if (!m_timer.isActive()) { + m_timer.start(); + } } diff --git a/src/ui/util/net/hostinfocache.h b/src/ui/util/net/hostinfocache.h index 8db9e518..26b20e40 100644 --- a/src/ui/util/net/hostinfocache.h +++ b/src/ui/util/net/hostinfocache.h @@ -3,6 +3,7 @@ #include #include +#include QT_FORWARD_DECLARE_CLASS(HostInfoManager) @@ -35,6 +36,8 @@ private: HostInfoManager *m_manager; QHash m_cache; + + QTimer m_timer; }; #endif // HOSTINFOCACHE_H