speedtest current selected

This commit is contained in:
arm64v8a
2023-01-29 15:11:52 +09:00
parent c59f6b9042
commit 686ebea22f
6 changed files with 117 additions and 36 deletions

View File

@@ -1163,7 +1163,7 @@
<translation>کد QR یافت نشد</translation> <translation>کد QR یافت نشد</translation>
</message> </message>
<message> <message>
<source>Resolving current group domain to IP, if support.</source> <source>Resolving domain to IP, if support.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1244,6 +1244,10 @@ End: %2</source>
<source>Stopping profile %1</source> <source>Stopping profile %1</source>
<translation>متوقف کردن پروفایل %1</translation> <translation>متوقف کردن پروفایل %1</translation>
</message> </message>
<message>
<source>Current Select</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ProxyItem</name> <name>ProxyItem</name>

View File

@@ -1202,8 +1202,8 @@ End: %2</source>
<translation> IP</translation> <translation> IP</translation>
</message> </message>
<message> <message>
<source>Resolving current group domain to IP, if support.</source> <source>Resolving domain to IP, if support.</source>
<translation> IP</translation> <translation> IP</translation>
</message> </message>
<message> <message>
<source>Export %1 config</source> <source>Export %1 config</source>
@@ -1255,6 +1255,10 @@ Split by line.</source>
<source>Edit</source> <source>Edit</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Current Select</source>
<translation></translation>
</message>
</context> </context>
<context> <context>
<name>ProxyItem</name> <name>ProxyItem</name>

View File

@@ -341,6 +341,42 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
connect(ui->menu_url_test, &QAction::triggered, this, [=]() { speedtest_current_group(1); }); connect(ui->menu_url_test, &QAction::triggered, this, [=]() { speedtest_current_group(1); });
connect(ui->menu_full_test, &QAction::triggered, this, [=]() { speedtest_current_group(2); }); connect(ui->menu_full_test, &QAction::triggered, this, [=]() { speedtest_current_group(2); });
// //
auto set_selected_or_group = [=](int mode) {
// 0=group 1=select 2=unknown(menu is hide)
ui->menu_server->setProperty("selected_or_group", mode);
};
auto move_tests_to_menu = [=](bool menuCurrent_Select) {
return [=] {
if (menuCurrent_Select) {
ui->menuCurrent_Select->insertAction(ui->actionfake_4, ui->menu_tcp_ping);
ui->menuCurrent_Select->insertAction(ui->actionfake_4, ui->menu_url_test);
ui->menuCurrent_Select->insertAction(ui->actionfake_4, ui->menu_full_test);
ui->menuCurrent_Select->insertAction(ui->actionfake_4, ui->menu_clear_test_result);
ui->menuCurrent_Select->insertAction(ui->actionfake_4, ui->menu_resolve_domain);
} else {
ui->menuCurrent_Group->insertAction(ui->actionfake_5, ui->menu_tcp_ping);
ui->menuCurrent_Group->insertAction(ui->actionfake_5, ui->menu_url_test);
ui->menuCurrent_Group->insertAction(ui->actionfake_5, ui->menu_full_test);
ui->menuCurrent_Group->insertAction(ui->actionfake_5, ui->menu_clear_test_result);
ui->menuCurrent_Group->insertAction(ui->actionfake_5, ui->menu_resolve_domain);
}
ui->menu_full_test->setVisible(!IS_NEKO_BOX);
set_selected_or_group(menuCurrent_Select ? 1 : 0);
};
};
connect(ui->menuCurrent_Select, &QMenu::aboutToShow, this, move_tests_to_menu(true));
connect(ui->menuCurrent_Group, &QMenu::aboutToShow, this, move_tests_to_menu(false));
connect(ui->menu_server, &QMenu::aboutToHide, this, [=] {
auto timer = new QTimer(this);
timer->setInterval(100);
connect(timer, &QTimer::timeout, this, [=] {
set_selected_or_group(2);
timer->deleteLater();
});
timer->start();
});
set_selected_or_group(2);
//
connect(ui->menu_share_item, &QMenu::aboutToShow, this, [=] { connect(ui->menu_share_item, &QMenu::aboutToShow, this, [=] {
QString name; QString name;
auto selected = get_now_selected(); auto selected = get_now_selected();
@@ -351,9 +387,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
ui->menu_export_config->setVisible(name == software_core_name); ui->menu_export_config->setVisible(name == software_core_name);
ui->menu_export_config->setText(tr("Export %1 config").arg(name)); ui->menu_export_config->setText(tr("Export %1 config").arg(name));
}); });
connect(ui->menugroup, &QMenu::aboutToShow, this, [=] {
ui->menu_full_test->setVisible(!IS_NEKO_BOX);
});
refresh_status(); refresh_status();
// Prepare core // Prepare core
@@ -1166,8 +1199,7 @@ void MainWindow::on_menu_scan_qr_triggered() {
} }
void MainWindow::on_menu_clear_test_result_triggered() { void MainWindow::on_menu_clear_test_result_triggered() {
for (const auto &profile: NekoRay::profileManager->profiles) { for (const auto &profile: get_selected_or_group()) {
if (NekoRay::dataStore->current_group != profile->gid) continue;
profile->latency = 0; profile->latency = 0;
profile->full_test_report = ""; profile->full_test_report = "";
profile->Save(); profile->Save();
@@ -1241,20 +1273,17 @@ void MainWindow::on_menu_remove_unavailable_triggered() {
} }
void MainWindow::on_menu_resolve_domain_triggered() { void MainWindow::on_menu_resolve_domain_triggered() {
auto profiles = get_selected_or_group();
if (profiles.isEmpty()) return;
if (QMessageBox::question(this, if (QMessageBox::question(this,
tr("Confirmation"), tr("Confirmation"),
tr("Resolving current group domain to IP, if support.")) != QMessageBox::StandardButton::Yes) { tr("Resolving domain to IP, if support.")) != QMessageBox::StandardButton::Yes) {
return; return;
} }
if (mw_sub_updating) return; if (mw_sub_updating) return;
mw_sub_updating = true; mw_sub_updating = true;
auto group = NekoRay::profileManager->CurrentGroup();
if (group == nullptr) return;
auto profiles = group->ProfilesWithOrder();
NekoRay::dataStore->resolve_count = profiles.length();
for (const auto &profile: profiles) { for (const auto &profile: profiles) {
profile->bean->ResolveDomainToIP([=] { profile->bean->ResolveDomainToIP([=] {
profile->Save(); profile->Save();
@@ -1280,6 +1309,29 @@ QMap<int, QSharedPointer<NekoRay::ProxyEntity>> MainWindow::get_now_selected() {
return map; return map;
} }
QList<QSharedPointer<NekoRay::ProxyEntity>> MainWindow::get_now_selected_list() {
auto items = ui->proxyListTable->selectedItems();
QList<QSharedPointer<NekoRay::ProxyEntity>> list;
for (auto item: items) {
auto id = item->data(114514).toInt();
auto ent = NekoRay::profileManager->GetProfile(id);
if (ent != nullptr && !list.contains(ent)) list += ent;
}
return list;
}
QList<QSharedPointer<NekoRay::ProxyEntity>> MainWindow::get_selected_or_group() {
auto selected_or_group = ui->menu_server->property("selected_or_group").toInt();
QList<QSharedPointer<NekoRay::ProxyEntity>> profiles;
if (selected_or_group > 0) {
profiles = get_now_selected_list();
if (profiles.isEmpty() && selected_or_group == 2) profiles = NekoRay::profileManager->CurrentGroup()->ProfilesWithOrder();
} else {
profiles = NekoRay::profileManager->CurrentGroup()->ProfilesWithOrder();
}
return profiles;
}
void MainWindow::keyPressEvent(QKeyEvent *event) { void MainWindow::keyPressEvent(QKeyEvent *event) {
switch (event->key()) { switch (event->key()) {
case Qt::Key_Escape: case Qt::Key_Escape:

View File

@@ -153,6 +153,10 @@ private:
QMap<int, QSharedPointer<NekoRay::ProxyEntity>> get_now_selected(); QMap<int, QSharedPointer<NekoRay::ProxyEntity>> get_now_selected();
QList<QSharedPointer<NekoRay::ProxyEntity>> get_now_selected_list();
QList<QSharedPointer<NekoRay::ProxyEntity>> get_selected_or_group();
void dialog_message_impl(const QString &sender, const QString &info); void dialog_message_impl(const QString &sender, const QString &info);
void refresh_proxy_list_impl(const int &id = -1, NekoRay::GroupSortAction groupSortAction = {}); void refresh_proxy_list_impl(const int &id = -1, NekoRay::GroupSortAction groupSortAction = {});

View File

@@ -523,21 +523,28 @@
<addaction name="menu_copy_links"/> <addaction name="menu_copy_links"/>
<addaction name="menu_copy_links_nkr"/> <addaction name="menu_copy_links_nkr"/>
</widget> </widget>
<widget class="QMenu" name="menugroup"> <widget class="QMenu" name="menuCurrent_Group">
<property name="title"> <property name="title">
<string>Current Group</string> <string>Current Group</string>
</property> </property>
<addaction name="actionfake_5"/>
<addaction name="menu_tcp_ping"/> <addaction name="menu_tcp_ping"/>
<addaction name="menu_url_test"/> <addaction name="menu_url_test"/>
<addaction name="menu_full_test"/> <addaction name="menu_full_test"/>
<addaction name="menu_remove_unavailable"/>
<addaction name="menu_clear_test_result"/> <addaction name="menu_clear_test_result"/>
<addaction name="separator"/>
<addaction name="menu_delete_repeat"/>
<addaction name="menu_resolve_domain"/> <addaction name="menu_resolve_domain"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="menu_remove_unavailable"/>
<addaction name="menu_delete_repeat"/>
<addaction name="separator"/>
<addaction name="menu_update_subscription"/> <addaction name="menu_update_subscription"/>
</widget> </widget>
<widget class="QMenu" name="menuCurrent_Select">
<property name="title">
<string>Current Select</string>
</property>
<addaction name="actionfake_4"/>
</widget>
<addaction name="menu_add_from_input"/> <addaction name="menu_add_from_input"/>
<addaction name="menu_add_from_clipboard"/> <addaction name="menu_add_from_clipboard"/>
<addaction name="separator"/> <addaction name="separator"/>
@@ -552,7 +559,8 @@
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="menu_share_item"/> <addaction name="menu_share_item"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="menugroup"/> <addaction name="menuCurrent_Select"/>
<addaction name="menuCurrent_Group"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="menu_profile_debug_info"/> <addaction name="menu_profile_debug_info"/>
<addaction name="separator"/> <addaction name="separator"/>
@@ -846,6 +854,22 @@
<string>Open Config Folder</string> <string>Open Config Folder</string>
</property> </property>
</action> </action>
<action name="actionfake_4">
<property name="text">
<string notr="true">fake</string>
</property>
<property name="visible">
<bool>false</bool>
</property>
</action>
<action name="actionfake_5">
<property name="text">
<string notr="true">fake</string>
</property>
<property name="visible">
<bool>false</bool>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@@ -41,8 +41,11 @@ void MainWindow::setup_grpc() {
inline bool speedtesting = false; inline bool speedtesting = false;
void MainWindow::speedtest_current_group(int mode) { void MainWindow::speedtest_current_group(int mode) {
#ifndef NKR_NO_GRPC
if (speedtesting) return; if (speedtesting) return;
auto profiles = get_selected_or_group();
if (profiles.isEmpty()) return;
auto group = NekoRay::profileManager->CurrentGroup();
if (group->archive) return;
QStringList full_test_flags; QStringList full_test_flags;
if (mode == libcore::FullTest) { if (mode == libcore::FullTest) {
@@ -59,23 +62,13 @@ void MainWindow::speedtest_current_group(int mode) {
} }
speedtesting = true; speedtesting = true;
#ifndef NKR_NO_GRPC
runOnNewThread([=]() { runOnNewThread([this, profiles, mode, full_test_flags]() {
auto group = NekoRay::profileManager->CurrentGroup();
if (group->archive) return;
auto order = ui->proxyListTable->order; // copy
QMutex lock_write; QMutex lock_write;
QMutex lock_return; QMutex lock_return;
QList<QSharedPointer<NekoRay::ProxyEntity>> profiles;
int threadN = mode == libcore::FullTest ? 1 : NekoRay::dataStore->test_concurrent; int threadN = mode == libcore::FullTest ? 1 : NekoRay::dataStore->test_concurrent;
int threadN_finished = 0; int threadN_finished = 0;
auto profiles_test = profiles; // copy
// 这个是按照显示的顺序
for (auto id: order) {
auto profile = NekoRay::profileManager->GetProfile(id);
if (profile != nullptr) profiles += profile;
}
// Threads // Threads
lock_return.lock(); lock_return.lock();
@@ -84,13 +77,13 @@ void MainWindow::speedtest_current_group(int mode) {
forever { forever {
// //
lock_write.lock(); lock_write.lock();
if (profiles.isEmpty()) { if (profiles_test.isEmpty()) {
threadN_finished++; threadN_finished++;
if (threadN == threadN_finished) lock_return.unlock(); if (threadN == threadN_finished) lock_return.unlock();
lock_write.unlock(); lock_write.unlock();
return; return;
} }
auto profile = profiles.takeFirst(); auto profile = profiles_test.takeFirst();
lock_write.unlock(); lock_write.unlock();
// //