diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.cpp | 73 | ||||
-rw-r--r-- | src/mainwindow.h | 10 | ||||
-rw-r--r-- | src/utils.cpp | 11 | ||||
-rw-r--r-- | src/utils.h | 6 |
4 files changed, 52 insertions, 48 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a37e558..cd28707 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -15,12 +15,12 @@ extern bool defaultAppAutoLock; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), notificationsTitleRegExp("^\\([1-9]\\d*\\).*"), - trayIconRead(":/icons/app/icon-32.png"), - trayIconUnread(":/icons/app/whatsapp-message-32.png") { + trayIconNormal(":/icons/app/notification/whatsie-notify.png"), + unreadMessageCountRegExp("\\([^\\d]*(\\d+)[^\\d]*\\)") { setObjectName("MainWindow"); setWindowTitle(QApplication::applicationName()); - setWindowIcon(QIcon(":/icons/app/icon-128.png")); + setWindowIcon(QIcon(":/icons/app/icon-64.png")); setMinimumWidth(525); setMinimumHeight(448); restoreMainWindow(); @@ -523,20 +523,19 @@ void MainWindow::notify(QString title, QString message) { if (settings.value("notificationCombo", 1).toInt() == 0 && trayIcon != nullptr) { - trayIcon->showMessage(title, message, QIcon(":/icons/app/icon-64.png"), + trayIcon->showMessage(title, message, + QIcon(":/icons/app/notification/whatsie-notify.png"), settings.value("notificationTimeOut", 9000).toInt()); trayIcon->disconnect(trayIcon, SIGNAL(messageClicked())); connect(trayIcon, &QSystemTrayIcon::messageClicked, trayIcon, [=]() { if (windowState().testFlag(Qt::WindowMinimized) || !windowState().testFlag(Qt::WindowActive)) { activateWindow(); - // raise(); this->show(); } }); } else { auto popup = new NotificationPopup(webEngine); - popup->setAttribute(Qt::WA_DeleteOnClose, true); connect(popup, &NotificationPopup::notification_clicked, popup, [=]() { if (windowState().testFlag(Qt::WindowMinimized) || !windowState().testFlag(Qt::WindowActive) || this->isHidden()) { @@ -550,7 +549,7 @@ void MainWindow::notify(QString title, QString message) { popup->adjustSize(); int screenNumber = qApp->desktop()->screenNumber(this); popup->present(screenNumber < 0 ? 0 : screenNumber, title, message, - QPixmap(":/icons/app/icon-64.png")); + QPixmap(":/icons/app/notification/whatsie-notify.png")); } } @@ -634,7 +633,7 @@ void MainWindow::createTrayIcon() { trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); - trayIcon = new QSystemTrayIcon(trayIconRead, this); + trayIcon = new QSystemTrayIcon(trayIconNormal, this); trayIcon->setContextMenu(trayIconMenu); connect(trayIconMenu, SIGNAL(aboutToShow()), this, SLOT(checkWindowState())); @@ -813,6 +812,17 @@ void MainWindow::createWebEngine() { createWebPage(false); } +const QIcon MainWindow::getTrayIcon(const int ¬ificationCount) const { + if (notificationCount == 0) { + return QIcon(":/icons/app/notification/whatsie-notify.png"); + } else if (notificationCount >= 10) { + return QIcon(":/icons/app/notification/whatsie-notify-10.png"); + } else { + return QIcon(":/icons/app/notification/whatsie-notify-" + + QString::number(notificationCount) + ".png"); + } +} + void MainWindow::createWebPage(bool offTheRecord) { if (offTheRecord && !m_otrProfile) { m_otrProfile.reset(new QWebEngineProfile); @@ -829,8 +839,6 @@ void MainWindow::createWebPage(bool offTheRecord) { settings.value("useragent", defaultUserAgentStr).toString()); setNotificationPresenter(profile); - //profile->setHttpCacheMaximumSize(209715200/2); - //profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache); QWebEnginePage *page = new WebEnginePage(profile, webEngine); if (settings.value("windowTheme", "light").toString() == "dark") { @@ -865,7 +873,6 @@ void MainWindow::setNotificationPresenter(QWebEngineProfile *profile) { } auto popup = new NotificationPopup(webEngine); - popup->setAttribute(Qt::WA_DeleteOnClose, true); popup->setObjectName("engineNotifier"); connect(popup, &NotificationPopup::notification_clicked, popup, [=]() { if (windowState().testFlag(Qt::WindowMinimized) || @@ -921,25 +928,25 @@ void MainWindow::handleWebViewTitleChanged(QString title) { setWindowTitle(QApplication::applicationName() + ": " + title); if (notificationsTitleRegExp.exactMatch(title)) { - if (notificationsTitleRegExp.isEmpty() == false && - notificationsTitleRegExp.capturedTexts().isEmpty() == false) { + if (notificationsTitleRegExp.capturedTexts().isEmpty() == false) { QString capturedTitle = notificationsTitleRegExp.capturedTexts().constFirst(); - QRegExp rgex("\\([^\\d]*(\\d+)[^\\d]*\\)"); - rgex.setMinimal(true); - if (rgex.indexIn(capturedTitle) != -1) { - QString unreadMessageCount = rgex.capturedTexts().constLast(); - QString suffix = - unreadMessageCount.toInt() > 1 ? tr("messages") : tr("message"); - restoreAction->setText(tr("Restore") + " | " + unreadMessageCount + - " " + suffix); + unreadMessageCountRegExp.setMinimal(true); + if (unreadMessageCountRegExp.indexIn(capturedTitle) != -1) { + QString unreadMessageCountStr = + unreadMessageCountRegExp.capturedTexts().constLast(); + int unreadMessageCount = unreadMessageCountStr.toInt(); + + restoreAction->setText( + tr("Restore") + " | " + unreadMessageCountStr + " " + + (unreadMessageCount > 1 ? tr("messages") : tr("message"))); + trayIcon->setIcon(getTrayIcon(unreadMessageCount)); + setWindowIcon(getTrayIcon(unreadMessageCount)); } } - trayIcon->setIcon(trayIconUnread); - setWindowIcon(trayIconUnread); } else { - trayIcon->setIcon(trayIconRead); - setWindowIcon(trayIconRead); + trayIcon->setIcon(trayIconNormal); + setWindowIcon(trayIconNormal); } } @@ -1144,12 +1151,7 @@ void MainWindow::newChat() { tr("Enter a valid WhatsApp number with country code (ex- +91XXXXXXXXXX)"), QLineEdit::Normal, "", &ok); if (ok) { - if (isPhoneNumber(phoneNumber)) - triggerNewChat(phoneNumber, ""); - else - QMessageBox::information(this, - QApplication::applicationName() + "| Error", - tr("Invalid Phone Number")); + triggerNewChat(phoneNumber, ""); } } @@ -1173,17 +1175,10 @@ void MainWindow::triggerNewChat(QString phone, QString text) { }); } -bool MainWindow::isPhoneNumber(const QString &phoneNumber) { - const QString phone = "^\\+(((\\d{2}))\\s?)?((\\d{2})|(\\((\\d{2})\\))\\s?)?(" - "\\d{3,15})(\\-(\\d{3,15}))?$"; - static QRegularExpression reg(phone); - return reg.match(phoneNumber).hasMatch(); -} - void MainWindow::doReload(bool byPassCache, bool isAskedByCLI, bool byLoadingQuirk) { if (byLoadingQuirk) { - this->webEngine->triggerPageAction(QWebEnginePage::ReloadAndBypassCache, + this->webEngine->triggerPageAction(QWebEnginePage::ReloadAndBypassCache, byPassCache); } else { if (lockWidget && !lockWidget->getIsLocked()) { diff --git a/src/mainwindow.h b/src/mainwindow.h index 76abe86..970458b 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -41,6 +41,7 @@ class MainWindow : public QMainWindow { public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); + public slots: void updateWindowTheme(); void updatePageTheme(); @@ -55,7 +56,8 @@ public slots: void alreadyRunning(bool notify = false); void notify(QString title, QString message); void toggleTheme(); - void doReload(bool byPassCache = false, bool isAskedByCLI = false, bool byLoadingQuirk = false); + void doReload(bool byPassCache = false, bool isAskedByCLI = false, + bool byLoadingQuirk = false); void newChat(); protected slots: void closeEvent(QCloseEvent *event) override; @@ -63,6 +65,7 @@ protected slots: void changeEvent(QEvent *e) override; private: + const QIcon getTrayIcon(const int ¬ificationCount) const; QPalette lightPalette, darkPalette; void createActions(); void createTrayIcon(); @@ -70,8 +73,8 @@ private: QSettings settings; QRegExp notificationsTitleRegExp; - QIcon trayIconRead; - QIcon trayIconUnread; + QIcon trayIconNormal; + QRegExp unreadMessageCountRegExp; QAction *reloadAction; QAction *minimizeAction; @@ -115,7 +118,6 @@ private slots: void checkLoadedCorrectly(); void loadingQuirk(QString test); void setNotificationPresenter(QWebEngineProfile *profile); - bool isPhoneNumber(const QString &phoneNumber); void quitApp(); void initRateWidget(); void initThemes(); diff --git a/src/utils.cpp b/src/utils.cpp index b231882..da8d2a2 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -175,7 +175,7 @@ QString utils::DecodeXML(const QString &decodeMe) { return temp; } -QString utils::htmlToPlainText(QString str) { +QString utils::htmlToPlainText(const QString &str) { QString out; QTextDocument text; text.setHtml(str); @@ -264,7 +264,7 @@ QString utils::GetEnvironmentVar(const QString &variable_name) { #endif } -void utils::desktopOpenUrl(const QString str) { +void utils::desktopOpenUrl(const QString &str) { QProcess *xdg_open = new QProcess(0); xdg_open->start("xdg-open", QStringList() << str); if (xdg_open->waitForStarted(1000) == false) { @@ -284,3 +284,10 @@ void utils::desktopOpenUrl(const QString str) { xdg_open->deleteLater(); }); } + +bool utils::isPhoneNumber(const QString &phoneNumber) { + const QString phone = "^\\+(((\\d{2}))\\s?)?((\\d{2})|(\\((\\d{2})\\))\\s?)?(" + "\\d{3,15})(\\-(\\d{3,15}))?$"; + static QRegularExpression reg(phone); + return reg.match(phoneNumber).hasMatch(); +} diff --git a/src/utils.h b/src/utils.h index 363dbe9..d5b9765 100644 --- a/src/utils.h +++ b/src/utils.h @@ -33,13 +33,13 @@ public slots: static QString returnPath(QString pathname, QString standardLocation); static QString EncodeXML(const QString &encodeMe); static QString DecodeXML(const QString &decodeMe); - static QString htmlToPlainText(QString str); + static QString htmlToPlainText(const QString &str); static QString GetEnvironmentVar(const QString &variable_name); static float RoundToOneDecimal(float number); static void DisplayExceptionErrorDialog(const QString &error_info); static QString appDebugInfo(); - static void desktopOpenUrl(const QString str); - + static void desktopOpenUrl(const QString &str); + static bool isPhoneNumber(const QString &phoneNumber); private slots: // use refreshCacheSize static quint64 dir_size(const QString &directory); |