mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-19 05:30:06 +08:00
add auto reset assets feature
This commit is contained in:
parent
1e47e7a626
commit
fdffa32191
@ -32,6 +32,7 @@ namespace Configs {
|
||||
namespace GeoAssets {
|
||||
inline QStringList GeoIPURLs = {"https://github.com/SagerNet/sing-geoip/releases/latest/download/geoip.db", "https://raw.githubusercontent.com/Chocolate4U/Iran-sing-box-rules/release/geoip.db"};
|
||||
inline QStringList GeoSiteURLs = {"https://github.com/SagerNet/sing-geosite/releases/latest/download/geosite.db", "https://raw.githubusercontent.com/Chocolate4U/Iran-sing-box-rules/release/geosite.db"};
|
||||
inline QList ResetAssetsOptions = {0, 86400, 259200, 604800};
|
||||
}
|
||||
|
||||
namespace TestConfig
|
||||
|
||||
@ -98,6 +98,8 @@ namespace Configs {
|
||||
// Assets
|
||||
QString geoip_download_url = "";
|
||||
QString geosite_download_url = "";
|
||||
int auto_reset_assets_idx = 0;
|
||||
long long last_asset_reset_epoch_secs = 0;
|
||||
|
||||
// Security
|
||||
bool skip_cert = false;
|
||||
|
||||
@ -86,7 +86,7 @@ public:
|
||||
|
||||
void DownloadAssets(const QString &geoipUrl, const QString &geositeUrl);
|
||||
|
||||
void ResetAssets(QString geoipUrl, QString geositeUrl);
|
||||
void ResetAssets(const QString& geoipUrl, const QString& geositeUrl);
|
||||
|
||||
void UpdateConnectionList(const QMap<QString, Stats::ConnectionMetadata>& toUpdate, const QMap<QString, Stats::ConnectionMetadata>& toAdd);
|
||||
|
||||
@ -198,6 +198,7 @@ private:
|
||||
//
|
||||
QMutex mu_download_assets;
|
||||
QMutex mu_download_update;
|
||||
QMutex mu_reset_assets;
|
||||
//
|
||||
int toolTipID;
|
||||
//
|
||||
|
||||
@ -765,6 +765,41 @@
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="text">
|
||||
<string>Auto Reset Assets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="auto_reset">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Every Day</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Every 3 Days</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Every Week</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||
<item>
|
||||
|
||||
@ -292,6 +292,8 @@ namespace Configs {
|
||||
_add(new configItem("ntp_interval", &ntp_interval, itemType::string));
|
||||
_add(new configItem("geoip_download_url", &geoip_download_url, itemType::string));
|
||||
_add(new configItem("geosite_download_url", &geosite_download_url, itemType::string));
|
||||
_add(new configItem("auto_reset_assets_idx", &auto_reset_assets_idx, itemType::integer));
|
||||
_add(new configItem("last_asset_reset_unix_secs", &last_asset_reset_epoch_secs, itemType::integer64));
|
||||
_add(new configItem("enable_dns_server", &enable_dns_server, itemType::boolean));
|
||||
_add(new configItem("dns_server_listen_lan", &dns_server_listen_lan, itemType::boolean));
|
||||
_add(new configItem("dns_server_listen_port", &dns_server_listen_port, itemType::integer));
|
||||
|
||||
@ -573,7 +573,19 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
TM_auto_update_subsctiption_Reset_Minute(Configs::dataStore->sub_auto_update);
|
||||
|
||||
// asset updater timer
|
||||
|
||||
auto TM_auto_reset_assets = new QTimer(this);
|
||||
connect(TM_auto_reset_assets, &QTimer::timeout, this, [&]()
|
||||
{
|
||||
auto reset_interval = Configs::GeoAssets::ResetAssetsOptions[Configs::dataStore->auto_reset_assets_idx];
|
||||
if (reset_interval > 0 && QDateTime::currentSecsSinceEpoch() - Configs::dataStore->last_asset_reset_epoch_secs > reset_interval)
|
||||
{
|
||||
runOnNewThread([=]
|
||||
{
|
||||
ResetAssets(Configs::dataStore->geoip_download_url, Configs::dataStore->geosite_download_url);
|
||||
});
|
||||
}
|
||||
});
|
||||
TM_auto_reset_assets->start(1000 * 60 * 5); // check every 5 minutes
|
||||
|
||||
if (!Configs::dataStore->flag_tray) show();
|
||||
|
||||
@ -2317,10 +2329,13 @@ void MainWindow::DownloadAssets(const QString &geoipUrl, const QString &geositeU
|
||||
MW_show_log(tr("Geo Asset update completed!"));
|
||||
}
|
||||
|
||||
void MainWindow::ResetAssets(QString geoipUrl, QString geositeUrl)
|
||||
void MainWindow::ResetAssets(const QString& geoipUrl, const QString& geositeUrl)
|
||||
{
|
||||
if (geoipUrl.isEmpty()) geoipUrl = Configs::dataStore->geoip_download_url;
|
||||
if (geositeUrl.isEmpty()) geositeUrl = Configs::dataStore->geosite_download_url;
|
||||
if (!mu_reset_assets.try_lock())
|
||||
{
|
||||
MW_show_log(tr("A reset of assets is already in progress"));
|
||||
return;
|
||||
}
|
||||
DownloadAssets(geoipUrl, geositeUrl);
|
||||
auto entries = QDir(RULE_SETS_DIR).entryList(QDir::Files);
|
||||
for (const auto &item: entries) {
|
||||
@ -2334,6 +2349,8 @@ void MainWindow::ResetAssets(QString geoipUrl, QString geositeUrl)
|
||||
{
|
||||
if (Configs::dataStore->started_id >= 0) profile_start(Configs::dataStore->started_id);
|
||||
});
|
||||
Configs::dataStore->last_asset_reset_epoch_secs = QDateTime::currentSecsSinceEpoch();
|
||||
mu_reset_assets.unlock();
|
||||
}
|
||||
|
||||
// to parse versions of format Throne-1.2.3-beta.2 or Throne-1.2.3
|
||||
|
||||
@ -116,6 +116,7 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent)
|
||||
ui->geosite_url->addItems(Configs::GeoAssets::GeoSiteURLs);
|
||||
ui->geoip_url->setCurrentText(Configs::dataStore->geoip_download_url);
|
||||
ui->geosite_url->setCurrentText(Configs::dataStore->geosite_download_url);
|
||||
ui->auto_reset->setCurrentIndex(Configs::dataStore->auto_reset_assets_idx);
|
||||
|
||||
connect(ui->download_geo_btn, &QPushButton::clicked, this, [=]() {
|
||||
MW_dialog_message(Dialog_DialogBasicSettings, "DownloadAssets;"+ui->geoip_url->currentText()+";"+ui->geosite_url->currentText());
|
||||
@ -214,6 +215,7 @@ void DialogBasicSettings::accept() {
|
||||
// Assets
|
||||
Configs::dataStore->geoip_download_url = ui->geoip_url->currentText();
|
||||
Configs::dataStore->geosite_download_url = ui->geosite_url->currentText();
|
||||
Configs::dataStore->auto_reset_assets_idx = ui->auto_reset->currentIndex();
|
||||
|
||||
// Mux
|
||||
D_SAVE_INT(mux_concurrency)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user