diff --git a/lang/en_US.ts b/lang/en_US.ts
index 1ad0d32..b0a328f 100644
--- a/lang/en_US.ts
+++ b/lang/en_US.ts
@@ -10,13 +10,13 @@
-
+
-
+
@@ -76,87 +76,87 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -164,32 +164,32 @@
SubscribeDialog
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/lang/zh_CN.ts b/lang/zh_CN.ts
index e6873dd..38017fb 100644
--- a/lang/zh_CN.ts
+++ b/lang/zh_CN.ts
@@ -10,13 +10,13 @@
-
+
-
+
@@ -76,87 +76,87 @@
-
+
显示主窗口
-
+
&退出
-
+
全局连接
-
+
规则判断
-
+
直接连接
-
+
设置为系统代理
-
+
复制终端代理命令
-
+
开机启动
-
+
允许局域网连接
-
+
管理
-
+
更新
-
+
自动更新
-
+
关于
-
+
检查更新
-
+
代理模式
-
+
配置
-
+
帮助
@@ -164,32 +164,32 @@
SubscribeDialog
-
+
新建
-
+
删除
-
+
更新
-
+
名称
-
+
链接
-
+
时间
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 70d7be5..cebd78a 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1,8 +1,10 @@
#include "mainwindow.h"
+#include "BuildConfig.h"
#include "./ui_mainwindow.h"
#include "./core/configurator.h"
#include "./core/clashApi.h"
#include "./utils/iconsForkAwesome.h"
+#include "./utils/utility.h"
#include
#include
@@ -43,11 +45,11 @@ MainWindow::MainWindow(QWidget *parent)
ui->logoLabel->setPixmap(logo);
ui->overviewButton->setFont(font);
- QString overviewStr = QString("%1 %2").arg(QChar(0xf0e4)).arg(tr("Overview"));
+ QString overviewStr = QString("%1 %2").arg(ICON_FK_TACHOMETER).arg(tr("Overview"));
ui->overviewButton->setText(overviewStr);
pageButtons->addButton(ui->overviewButton);
ui->proxiesButton->setFont(font);
- QString proxiesStr = QString("%1 %2").arg(QChar(0xf1d8)).arg(tr("Proxies"));
+ QString proxiesStr = QString("%1 %2").arg(ICON_FK_PAPER_PLANE).arg(tr("Proxies"));
ui->proxiesButton->setText(proxiesStr);
pageButtons->addButton(ui->proxiesButton);
@@ -179,8 +181,10 @@ void MainWindow::createActions()
connect(autoUpdateSubConfig, &QAction::triggered, this, &MainWindow::autoUpdateSubConfigChange);
about = new QAction(tr("About"), this);
- checkUpdate = new QAction(tr("Check Update"), this);
connect(about, &QAction::triggered, this, &MainWindow::showAboutDialog);
+
+ checkUpdate = new QAction(tr("Check Update"), this);
+ connect(checkUpdate, &QAction::triggered, this, &MainWindow::checkLatestRelease);
}
void MainWindow::proxyGroupMenusChange()
@@ -429,6 +433,16 @@ void MainWindow::showAboutDialog()
}
}
+void MainWindow::checkLatestRelease()
+{
+ QString version = Utility::getLatestVersion();
+ if (Utility::isVersionNewer(QCLASH_VERSION, version)) {
+ QMessageBox::information(this, "Latest Version", QString("Found newer version %1").arg(version));
+ } else {
+ qDebug() << "You use the latest version, enjoy youself!";
+ }
+}
+
void MainWindow::showSubscribeDialog()
{
if (subscribeDialog)
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 56f2a6e..410a296 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -37,6 +37,8 @@ private slots:
void showMainWindow();
void showAboutDialog();
+ void checkLatestRelease();
+
void showSubscribeDialog();
void updateSubActions();
diff --git a/src/utils/utility.cpp b/src/utils/utility.cpp
new file mode 100644
index 0000000..d558cf0
--- /dev/null
+++ b/src/utils/utility.cpp
@@ -0,0 +1,51 @@
+#include "utility.h"
+
+#include
+#include
+#include
+
+HttpUtil &Utility::http = HttpUtil::instance();
+
+const QString Utility::getLatestVersion()
+{
+ QString url("https://api.github.com/repos/josephpei/qClash/releases");
+ QByteArray releaseJsonStr = http.get(url);
+ if (releaseJsonStr.isEmpty())
+ return QString();
+ QJsonObject latestRelease;
+ QJsonDocument releaseJsonDoc = QJsonDocument::fromJson(releaseJsonStr);
+ QJsonArray releases = releaseJsonDoc.array();
+ for (int i = 0; i < releases.size(); ++i) {
+ QJsonObject release = releases[i].toObject();
+ latestRelease = release;
+ break;
+ }
+ return latestRelease.empty() ? "" : latestRelease["name"].toString();
+}
+
+bool Utility::isVersionNewer(const QString& currentVersion, const QString& version)
+{
+ QList _currentVersion = getVersion(currentVersion);
+ QList _version = getVersion(version);
+
+ for (int i = 0; i < _version.size() && i < _currentVersion.size(); ++i) {
+ if (_version.at(i) > _currentVersion.at(i)) {
+ return true;
+ } else if (_version.at(i) < _currentVersion.at(i)) {
+ return false;
+ }
+ }
+ return false;
+}
+
+QList Utility::getVersion(QString version)
+{
+ QList _version;
+ if (version.startsWith('v') || version.startsWith('v')) {
+ version = version.mid(1);
+ }
+ for (QString v : version.split('.')) {
+ _version.append(v.toInt());
+ }
+ return _version;
+}
diff --git a/src/utils/utility.h b/src/utils/utility.h
new file mode 100644
index 0000000..77e3002
--- /dev/null
+++ b/src/utils/utility.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "httputil.h"
+
+class Utility {
+private:
+ static HttpUtil &http;
+
+private:
+ static QList getVersion(QString version);
+
+public:
+ static const QString getLatestVersion();
+ static bool isVersionNewer(const QString& currentVersion, const QString& version);
+};
\ No newline at end of file