mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-04-23 22:54:02 +00:00
Reset GUI when airpods disconnect, show notification
This commit is contained in:
@@ -21,11 +21,17 @@ class Battery : public QObject
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Battery(QObject *parent = nullptr) : QObject(parent)
|
explicit Battery(QObject *parent = nullptr) : QObject(parent)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset()
|
||||||
{
|
{
|
||||||
// Initialize all components to unknown state
|
// Initialize all components to unknown state
|
||||||
states[Component::Left] = {};
|
states[Component::Left] = {};
|
||||||
states[Component::Right] = {};
|
states[Component::Right] = {};
|
||||||
states[Component::Case] = {};
|
states[Component::Case] = {};
|
||||||
|
emit batteryStatusChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enum for AirPods components
|
// Enum for AirPods components
|
||||||
|
|||||||
@@ -366,13 +366,41 @@ private slots:
|
|||||||
LOG_DEBUG("AIRPODS_DISCONNECTED packet written: " << AirPodsPackets::Connection::AIRPODS_DISCONNECTED.toHex());
|
LOG_DEBUG("AIRPODS_DISCONNECTED packet written: " << AirPodsPackets::Connection::AIRPODS_DISCONNECTED.toHex());
|
||||||
}
|
}
|
||||||
|
|
||||||
mediaController->pause();
|
mediaController->pause(); // Since the device is deconnected, we don't know if it was the active output device. Pause to be safe
|
||||||
discoveryAgent->start();
|
discoveryAgent->start();
|
||||||
|
|
||||||
|
// Show system notification
|
||||||
|
trayManager->showNotification(
|
||||||
|
tr("AirPods Disconnected"),
|
||||||
|
tr("Your AirPods have been disconnected"));
|
||||||
}
|
}
|
||||||
void bluezDeviceDisconnected(const QString &address)
|
void bluezDeviceDisconnected(const QString &address)
|
||||||
{
|
{
|
||||||
if (address == connectedDeviceMacAddress.replace("_", ":")) {
|
if (address == connectedDeviceMacAddress.replace("_", ":"))
|
||||||
|
{
|
||||||
onDeviceDisconnected(QBluetoothAddress(address));
|
onDeviceDisconnected(QBluetoothAddress(address));
|
||||||
|
|
||||||
|
// Clear the device name and model
|
||||||
|
m_deviceName.clear();
|
||||||
|
m_model = AirPodsModel::Unknown;
|
||||||
|
emit deviceNameChanged(m_deviceName);
|
||||||
|
emit modelChanged();
|
||||||
|
|
||||||
|
// Reset battery status
|
||||||
|
m_battery->reset();
|
||||||
|
m_batteryStatus.clear();
|
||||||
|
emit batteryStatusChanged(m_batteryStatus);
|
||||||
|
|
||||||
|
// Reset ear detection
|
||||||
|
m_earDetectionStatus.clear();
|
||||||
|
m_primaryInEar = false;
|
||||||
|
m_secoundaryInEar = false;
|
||||||
|
emit earDetectionStatusChanged(m_earDetectionStatus);
|
||||||
|
emit primaryChanged();
|
||||||
|
|
||||||
|
// Reset noise control mode
|
||||||
|
m_noiseControlMode = NoiseControlMode::Off;
|
||||||
|
emit noiseControlModeChanged(m_noiseControlMode);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_WARN("Disconnected device does not match connected device: " << address << " != " << connectedDeviceMacAddress);
|
LOG_WARN("Disconnected device does not match connected device: " << address << " != " << connectedDeviceMacAddress);
|
||||||
|
|||||||
@@ -39,9 +39,14 @@ void MediaController::initializeMprisInterface() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MediaController::handleEarDetection(const QString &status) {
|
void MediaController::handleEarDetection(const QString &status) {
|
||||||
|
bool primaryInEar = false;
|
||||||
|
bool secondaryInEar = false;
|
||||||
|
|
||||||
QStringList parts = status.split(", ");
|
QStringList parts = status.split(", ");
|
||||||
bool primaryInEar = parts[0].contains("In Ear");
|
if (parts.size() == 2) {
|
||||||
bool secondaryInEar = parts[1].contains("In Ear");
|
primaryInEar = parts[0].contains("In Ear");
|
||||||
|
secondaryInEar = parts[1].contains("In Ear");
|
||||||
|
}
|
||||||
|
|
||||||
LOG_DEBUG("Ear detection status: primaryInEar="
|
LOG_DEBUG("Ear detection status: primaryInEar="
|
||||||
<< primaryInEar << ", secondaryInEar=" << secondaryInEar
|
<< primaryInEar << ", secondaryInEar=" << secondaryInEar
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ TrayIconManager::TrayIconManager(QObject *parent) : QObject(parent)
|
|||||||
trayIcon->show();
|
trayIcon->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TrayIconManager::showNotification(const QString &title, const QString &message)
|
||||||
|
{
|
||||||
|
trayIcon->showMessage(title, message, QSystemTrayIcon::Information, 3000);
|
||||||
|
}
|
||||||
|
|
||||||
void TrayIconManager::TrayIconManager::updateBatteryStatus(const QString &status)
|
void TrayIconManager::TrayIconManager::updateBatteryStatus(const QString &status)
|
||||||
{
|
{
|
||||||
trayIcon->setToolTip("Battery Status: " + status);
|
trayIcon->setToolTip("Battery Status: " + status);
|
||||||
@@ -83,10 +88,20 @@ void TrayIconManager::setupMenuActions()
|
|||||||
|
|
||||||
void TrayIconManager::updateIconFromBattery(const QString &status)
|
void TrayIconManager::updateIconFromBattery(const QString &status)
|
||||||
{
|
{
|
||||||
QStringList parts = status.split(", ");
|
int leftLevel = 0;
|
||||||
int leftLevel = parts[0].split(": ")[1].replace("%", "").toInt();
|
int rightLevel = 0;
|
||||||
int rightLevel = parts[1].split(": ")[1].replace("%", "").toInt();
|
|
||||||
|
|
||||||
|
if (!status.isEmpty())
|
||||||
|
{
|
||||||
|
// Parse the battery status string
|
||||||
|
QStringList parts = status.split(", ");
|
||||||
|
if (parts.size() >= 2)
|
||||||
|
{
|
||||||
|
leftLevel = parts[0].split(": ")[1].replace("%", "").toInt();
|
||||||
|
rightLevel = parts[1].split(": ")[1].replace("%", "").toInt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int minLevel = (leftLevel == 0) ? rightLevel : (rightLevel == 0) ? leftLevel
|
int minLevel = (leftLevel == 0) ? rightLevel : (rightLevel == 0) ? leftLevel
|
||||||
: qMin(leftLevel, rightLevel);
|
: qMin(leftLevel, rightLevel);
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ public:
|
|||||||
|
|
||||||
void updateConversationalAwareness(bool enabled);
|
void updateConversationalAwareness(bool enabled);
|
||||||
|
|
||||||
|
void showNotification(const QString &title, const QString &message);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason);
|
void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user