Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tail-tray for openSUSE:Factory checked in at 2025-11-08 16:36:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tail-tray (Old) and /work/SRC/openSUSE:Factory/.tail-tray.new.1980 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tail-tray" Sat Nov 8 16:36:30 2025 rev:20 rq:1316468 version:0.2.27 Changes: -------- --- /work/SRC/openSUSE:Factory/tail-tray/tail-tray.changes 2025-11-04 18:41:21.886920719 +0100 +++ /work/SRC/openSUSE:Factory/.tail-tray.new.1980/tail-tray.changes 2025-11-08 16:36:48.185918169 +0100 @@ -1,0 +2,13 @@ +Fri Nov 07 15:48:29 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 0.2.27: + This release finalizes the tail net notifications for when a new + device is added and when a device is removed. It als contains + some more minor fixes in general. + * Bump version to 0.2.27 + * Minor correctness fixes + * KDE Notification integrations for issue #90 + * And more CMake + * Minor fix for CMake file + +------------------------------------------------------------------- Old: ---- tail-tray-0.2.26.obscpio New: ---- tail-tray-0.2.27.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tail-tray.spec ++++++ --- /var/tmp/diff_new_pack.cXUCAn/_old 2025-11-08 16:36:48.981951496 +0100 +++ /var/tmp/diff_new_pack.cXUCAn/_new 2025-11-08 16:36:48.981951496 +0100 @@ -17,7 +17,7 @@ Name: tail-tray -Version: 0.2.26 +Version: 0.2.27 Release: 0 Summary: Tailscale tray menu and UI for the KDE Plasma Desktop License: GPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.cXUCAn/_old 2025-11-08 16:36:49.049954344 +0100 +++ /var/tmp/diff_new_pack.cXUCAn/_new 2025-11-08 16:36:49.053954511 +0100 @@ -2,8 +2,8 @@ <service name="obs_scm" mode="manual"> <param name="url">https://github.com/SneWs/tail-tray</param> <param name="scm">git</param> - <param name="revision">refs/tags/v0.2.26</param> - <param name="match-tag">v0.2.26</param> + <param name="revision">refs/tags/v0.2.27</param> + <param name="match-tag">v0.2.27</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.cXUCAn/_old 2025-11-08 16:36:49.093956186 +0100 +++ /var/tmp/diff_new_pack.cXUCAn/_new 2025-11-08 16:36:49.101956521 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/SneWs/tail-tray</param> - <param name="changesrevision">767e2ab02dc1ed0b2e306c577daa6d235323b4bd</param></service></servicedata> + <param name="changesrevision">451ec3d969ca76eb473ebcc6e82e413b0ae8f712</param></service></servicedata> (No newline at EOF) ++++++ tail-tray-0.2.26.obscpio -> tail-tray-0.2.27.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/.vscode/settings.json new/tail-tray-0.2.27/.vscode/settings.json --- old/tail-tray-0.2.26/.vscode/settings.json 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/.vscode/settings.json 2025-11-07 15:34:16.000000000 +0100 @@ -3,6 +3,11 @@ "*.nginx": "NGINX", "filesystem": "cpp", "xstring": "cpp", - "qjsonobject": "cpp" - } + "qjsonobject": "cpp", + "system_error": "cpp" + }, + "cmake.configureArgs": [ + "-DKNOTIFICATIONS_ENABLED=ON", + "-DDAVFS_ENABLED=OFF" + ] } \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/CMakeLists.txt new/tail-tray-0.2.27/CMakeLists.txt --- old/tail-tray-0.2.26/CMakeLists.txt 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/CMakeLists.txt 2025-11-07 15:34:16.000000000 +0100 @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.21) -project(tail-tray VERSION 0.2.26 LANGUAGES CXX) +project(tail-tray VERSION 0.2.27 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) @@ -32,11 +32,11 @@ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network LinguistTools) option(BUILD_TESTS "Build tests" ON) +option(KNOTIFICATIONS_ENABLED "Enable KNotifications" OFF) if (UNIX AND NOT APPLE) - # Use KNotifications - option(KNOTIFICATIONS_ENABLED "Enable KNotifications" OFF) if (KNOTIFICATIONS_ENABLED) + # Use KNotifications message("KNotifications has been enabled! This requires Plasma 6") find_package(ECM REQUIRED NO_MODULE) @@ -49,7 +49,7 @@ else () message("KNotifications has not been enabled!") endif (KNOTIFICATIONS_ENABLED) -endif (!WIN32) +endif (UNIX AND NOT APPLE) set(PROJECT_SOURCES src/main.cpp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/debian/changelog new/tail-tray-0.2.27/debian/changelog --- old/tail-tray-0.2.26/debian/changelog 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/debian/changelog 2025-11-07 15:34:16.000000000 +0100 @@ -1,5 +1,5 @@ -tail-tray (0.2.26) UNRELEASED; urgency=medium +tail-tray (0.2.27) UNRELEASED; urgency=medium * New upstream release. - -- Marcus Grenängen <[email protected]> Mon, 3 Nov 2025 07:20:00 +0100 + -- Marcus Grenängen <[email protected]> Mon, 7 Nov 2025 15:29:00 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/src/MainWindow.cpp new/tail-tray-0.2.27/src/MainWindow.cpp --- old/tail-tray-0.2.26/src/MainWindow.cpp 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/src/MainWindow.cpp 2025-11-07 15:34:16.000000000 +0100 @@ -396,15 +396,11 @@ } void MainWindow::onNewPeerDiscovered(const TailDeviceInfo& peer) const { - pNotificationsManager->showNotification(tr("Tailnet Devices"), - tr("A new device have been discovered on your tailnet!\n\nDevice: %1 (%2)") - .arg(peer.getShortDnsName(), peer.os)); + pNotificationsManager->showNodeConnectedNotification(peer.getShortDnsName(), peer.tailscaleIPs.join(", "), peer.os); } void MainWindow::onPeerRemoved(const TailDeviceInfo& peer) const { - pNotificationsManager->showNotification(tr("Tailnet Devices"), - tr("A device have been removed from your tailnet!\n\nDevice: %1 (%2)") - .arg(peer.getShortDnsName(), peer.os)); + pNotificationsManager->showNodeDisconnectedNotification(peer.getShortDnsName(), peer.tailscaleIPs.join(", "), peer.os); } #if defined(DAVFS_ENABLED) @@ -772,7 +768,9 @@ } accountsTabUi->onTailStatusChanged(pTailStatus); +#if defined(DAVFS_ENABLED) pTailDriveUiManager->stateChangedTo(eCurrentState, pTailStatus); +#endif } bool MainWindow::shallowCheckForNetworkAvailable() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/src/MainWindow.ui new/tail-tray-0.2.27/src/MainWindow.ui --- old/tail-tray-0.2.26/src/MainWindow.ui 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/src/MainWindow.ui 2025-11-07 15:34:16.000000000 +0100 @@ -3,14 +3,14 @@ <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="windowModality"> - <enum>Qt::NonModal</enum> + <enum>Qt::WindowModality::NonModal</enum> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>588</width> - <height>710</height> + <height>729</height> </rect> </property> <property name="sizePolicy"> @@ -55,10 +55,10 @@ </size> </property> <property name="tabPosition"> - <enum>QTabWidget::North</enum> + <enum>QTabWidget::TabPosition::North</enum> </property> <property name="currentIndex"> - <number>0</number> + <number>1</number> </property> <property name="iconSize"> <size> @@ -67,7 +67,7 @@ </size> </property> <property name="elideMode"> - <enum>Qt::ElideLeft</enum> + <enum>Qt::TextElideMode::ElideLeft</enum> </property> <property name="usesScrollButtons"> <bool>false</bool> @@ -127,10 +127,10 @@ <item> <spacer name="horizontalSpacer"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeType"> - <enum>QSizePolicy::Expanding</enum> + <enum>QSizePolicy::Policy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -154,7 +154,7 @@ <item> <spacer name="horizontalSpacer_11"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -198,7 +198,7 @@ <item> <spacer name="horizontalSpacer_12"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -368,7 +368,7 @@ <item> <spacer name="horizontalSpacer_7"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -407,7 +407,7 @@ <item> <spacer name="horizontalSpacer_8"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -470,7 +470,7 @@ <item> <spacer name="horizontalSpacer_9"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -496,7 +496,7 @@ <item> <spacer name="horizontalSpacer_10"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -511,7 +511,7 @@ <item> <spacer name="verticalSpacer_4"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -538,7 +538,7 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="sizeConstraint"> - <enum>QLayout::SetNoConstraint</enum> + <enum>QLayout::SizeConstraint::SetNoConstraint</enum> </property> <item> <layout class="QVBoxLayout" name="verticalLayout_3"> @@ -571,7 +571,7 @@ <string>General</string> </property> <property name="textFormat"> - <enum>Qt::PlainText</enum> + <enum>Qt::TextFormat::PlainText</enum> </property> </widget> </item> @@ -580,7 +580,7 @@ <item> <widget class="QWidget" name="generalGroup" native="true"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> <verstretch>1</verstretch> </sizepolicy> @@ -615,41 +615,76 @@ </widget> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QCheckBox" name="chkUseTailscaleDns"> - <property name="text"> - <string>Use Tailscale DNS settings</string> - </property> - <property name="checked"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_5"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="btnTailscaleDnsSettings"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="text"> - <string>Manage...</string> - </property> - </widget> - </item> - </layout> + <widget class="QWidget" name="dnsSettingsLayout" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding"> + <horstretch>1</horstretch> + <verstretch>1</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>32</height> + </size> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>2</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> + <item> + <widget class="QCheckBox" name="chkUseTailscaleDns"> + <property name="text"> + <string>Use Tailscale DNS settings</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="btnTailscaleDnsSettings"> + <property name="enabled"> + <bool>true</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Manage...</string> + </property> + </widget> + </item> + </layout> + </widget> </item> <item> <widget class="QCheckBox" name="chkAcceptRoutes"> @@ -740,7 +775,7 @@ <item> <spacer name="horizontalSpacer_2"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -824,7 +859,7 @@ <item> <spacer name="horizontalSpacer_15"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -906,7 +941,7 @@ <item> <spacer name="horizontalSpacer_3"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1004,7 +1039,7 @@ <item> <spacer name="horizontalSpacer_4"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1096,7 +1131,7 @@ <item> <spacer name="horizontalSpacer_23"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1280,10 +1315,10 @@ <item> <spacer name="verticalSpacer"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeType"> - <enum>QSizePolicy::MinimumExpanding</enum> + <enum>QSizePolicy::Policy::MinimumExpanding</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1355,10 +1390,10 @@ <bool>false</bool> </property> <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> + <enum>QAbstractItemView::SelectionMode::NoSelection</enum> </property> <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectItems</enum> + <enum>QAbstractItemView::SelectionBehavior::SelectItems</enum> </property> <property name="iconSize"> <size> @@ -1370,7 +1405,7 @@ <bool>false</bool> </property> <property name="gridStyle"> - <enum>Qt::NoPen</enum> + <enum>Qt::PenStyle::NoPen</enum> </property> <property name="wordWrap"> <bool>false</bool> @@ -1400,7 +1435,7 @@ <item> <spacer name="horizontalSpacer_24"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1490,7 +1525,7 @@ <string><html><head/><body><p><span style=" font-weight:700;">Important information<br/></span>On Linux, to be able to mount shares from other machines you will need to do some setup first:</p><p>Make sure to add http://100.100.100.100:8080 to your ~/.davfs2/secrets file</p><p>The file itself contains documentation on how to define this. For username you can enter Guest and leave password empty. Read more over at <a href="https://wiki.archlinux.org/title/Davfs2"><span style=" text-decoration: underline; color:#7636dd;">https://wiki.archlinux.org/title/Davfs2</span></a> and at Tailscale <a href="https://tailscale.com/kb/1369/taildrive?tab=linux"><span style=" text-decoration: underline; color:#7636dd;">https://tailscale.com/kb/1369/taildrive?tab=linux</span></a></p></body></html></string> </property> <property name="textFormat"> - <enum>Qt::PlainText</enum> + <enum>Qt::TextFormat::PlainText</enum> </property> <property name="wordWrap"> <bool>true</bool> @@ -1505,7 +1540,7 @@ <item> <spacer name="horizontalSpacer_25"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1537,7 +1572,7 @@ <item> <widget class="QTableWidget" name="twNetworkStatus"> <property name="editTriggers"> - <set>QAbstractItemView::NoEditTriggers</set> + <set>QAbstractItemView::EditTrigger::NoEditTriggers</set> </property> <property name="showDropIndicator" stdset="0"> <bool>false</bool> @@ -1546,10 +1581,10 @@ <bool>true</bool> </property> <property name="selectionMode"> - <enum>QAbstractItemView::NoSelection</enum> + <enum>QAbstractItemView::SelectionMode::NoSelection</enum> </property> <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectItems</enum> + <enum>QAbstractItemView::SelectionBehavior::SelectItems</enum> </property> <property name="rowCount"> <number>0</number> @@ -1588,7 +1623,7 @@ <item> <spacer name="horizontalSpacer_13"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1636,10 +1671,10 @@ <item> <spacer name="verticalSpacer_12"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> + <enum>QSizePolicy::Policy::Fixed</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1671,10 +1706,10 @@ <item> <spacer name="verticalSpacer_13"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeType"> - <enum>QSizePolicy::Fixed</enum> + <enum>QSizePolicy::Policy::Fixed</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1689,7 +1724,7 @@ <item> <spacer name="horizontalSpacer_14"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1796,7 +1831,7 @@ <item> <spacer name="verticalSpacer_14"> <property name="orientation"> - <enum>Qt::Vertical</enum> + <enum>Qt::Orientation::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -1815,7 +1850,7 @@ <item> <spacer name="horizontalSpacer_6"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/src/NotificationsManager.cpp new/tail-tray-0.2.27/src/NotificationsManager.cpp --- old/tail-tray-0.2.26/src/NotificationsManager.cpp 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/src/NotificationsManager.cpp 2025-11-07 15:34:16.000000000 +0100 @@ -34,7 +34,7 @@ const QString& iconName) { #if defined(KNOTIFICATIONS_ENABLED) - auto* notification = new KNotification("FileTransfer", KNotification::NotificationFlag::CloseOnTimeout, this); + auto* notification = new KNotification("FileTransfer", KNotification::NotificationFlag::Persistent, this); notification->setTitle(title); notification->setText(message); @@ -96,3 +96,36 @@ m_pTrayMgr->trayIcon()->showMessage(title, message, QSystemTrayIcon::Critical, 5000); #endif } + +void NotificationsManager::showNodeConnectedNotification(const QString& nodeName, const QString& ipAddress, const QString& os) +{ +#if defined(KNOTIFICATIONS_ENABLED) + auto* notification = new KNotification("NodeConnected", KNotification::NotificationFlag::Persistent, this); + notification->setTitle(tr("Tailnet Devices")); + notification->setText(tr("A new device have been discovered on your tailnet!\n\nDevice: %1 (%2) - %3") + .arg(nodeName, ipAddress, os)); + + notification->setIconName("online"); + notification->sendEvent(); +#else + m_pTrayMgr->trayIcon()->showMessage(tr("Tailnet Devices"), + tr("A new device have been discovered on your tailnet!\n\nDevice: %1 (%2) - %3") + .arg(nodeName, ipAddress, os), QSystemTrayIcon::Information, 8000); +#endif +} +void NotificationsManager::showNodeDisconnectedNotification(const QString& nodeName, const QString& ipAddress, const QString& os) +{ +#if defined(KNOTIFICATIONS_ENABLED) + auto* notification = new KNotification("NodeDisconnected", KNotification::NotificationFlag::Persistent, this); + notification->setTitle(tr("Tailnet Devices")); + notification->setText(tr("A device have been removed from your tailnet!\n\nDevice: %1 (%2) - %3") + .arg(nodeName, ipAddress, os)); + + notification->setIconName("offline"); + notification->sendEvent(); +#else + m_pTrayMgr->trayIcon()->showMessage(tr("Tailnet Devices"), + tr("A device have been removed from your tailnet!\n\nDevice: %1 (%2) - %3") + .arg(nodeName, ipAddress, os), QSystemTrayIcon::Information, 8000); +#endif +} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/src/NotificationsManager.h new/tail-tray-0.2.27/src/NotificationsManager.h --- old/tail-tray-0.2.26/src/NotificationsManager.h 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/src/NotificationsManager.h 2025-11-07 15:34:16.000000000 +0100 @@ -23,6 +23,9 @@ void showWarningNotification(const QString& title, const QString& message, const QString& iconName = QString("dialog-warning")); void showErrorNotification(const QString& title, const QString& message, const QString& iconName = QString("dialog-error")); + void showNodeConnectedNotification(const QString& nodeName, const QString& ipAddress, const QString& os); + void showNodeDisconnectedNotification(const QString& nodeName, const QString& ipAddress, const QString& os); + private: TrayMenuManager const* m_pTrayMgr; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/tail-tray.notifyrc new/tail-tray-0.2.27/tail-tray.notifyrc --- old/tail-tray-0.2.26/tail-tray.notifyrc 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/tail-tray.notifyrc 2025-11-07 15:34:16.000000000 +0100 @@ -14,4 +14,16 @@ Name=FileTransfer Comment=A file have been sent or received on this machine over Tailscale/Wireguard Action=Sound|Popup - Urgency=Normal \ No newline at end of file + Urgency=Normal + +[Event/NodeConnected] + Name=NodeConnected + Comment=A new node has been detected on the tailscale network + Action=Sound|Popup + Urgency=Normal + +[Event/NodeDisconnected] + Name=NodeDisconnected + Comment=A node has been removed from the tailscale network + Action=Sound|Popup + Urgency=Normal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tail-tray-0.2.26/tests/src/test-tail-status.cpp new/tail-tray-0.2.27/tests/src/test-tail-status.cpp --- old/tail-tray-0.2.26/tests/src/test-tail-status.cpp 2025-11-03 07:21:00.000000000 +0100 +++ new/tail-tray-0.2.27/tests/src/test-tail-status.cpp 2025-11-07 15:34:16.000000000 +0100 @@ -16,7 +16,9 @@ private slots: void testParsingSucceeds() { QFile file("./data/tail-status-mullvad.json"); - file.open(QIODevice::ReadOnly); + auto success = file.open(QIODevice::ReadOnly); + QVERIFY(success); + auto json = QJsonDocument::fromJson(file.readAll()); file.close(); @@ -28,7 +30,9 @@ void testParsingMullvadExtras() { QFile file("./data/tail-status-mullvad.json"); - file.open(QIODevice::ReadOnly); + auto success = file.open(QIODevice::ReadOnly); + QVERIFY(success); + auto json = QJsonDocument::fromJson(file.readAll()); file.close(); @@ -45,7 +49,9 @@ void testSortingMullvadPeersByCountry() { QFile file("./data/tail-status-mullvad.json"); - file.open(QIODevice::ReadOnly); + auto success = file.open(QIODevice::ReadOnly); + QVERIFY(success); + auto json = QJsonDocument::fromJson(file.readAll()); file.close(); @@ -77,7 +83,9 @@ void testSortingMullvadPeersByDnsName() { QFile file("./data/tail-status-mullvad.json"); - file.open(QIODevice::ReadOnly); + auto success = file.open(QIODevice::ReadOnly); + QVERIFY(success); + auto json = QJsonDocument::fromJson(file.readAll()); file.close(); ++++++ tail-tray.obsinfo ++++++ --- /var/tmp/diff_new_pack.cXUCAn/_old 2025-11-08 16:36:49.493972934 +0100 +++ /var/tmp/diff_new_pack.cXUCAn/_new 2025-11-08 16:36:49.497973102 +0100 @@ -1,5 +1,5 @@ name: tail-tray -version: 0.2.26 -mtime: 1762150860 -commit: 767e2ab02dc1ed0b2e306c577daa6d235323b4bd +version: 0.2.27 +mtime: 1762526056 +commit: 451ec3d969ca76eb473ebcc6e82e413b0ae8f712
