/* Copyright (C) 2025 Rohith Namboothiri This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "QsoLiveActivityBridgeWrapper.h" #include #include // Initialize static member QsoLiveActivityBridge* QsoLiveActivityBridge::m_instance = nullptr; // Forward declarations of the C interface functions extern "C" { QsoLiveActivityBridge_t* qso_live_activity_bridge_create(void); void qso_live_activity_bridge_release(QsoLiveActivityBridge_t* bridge); void qso_live_activity_bridge_start_or_update(QsoLiveActivityBridge_t* bridge, const char* callsign, const char* handle, const char* country); void qso_live_activity_bridge_end(QsoLiveActivityBridge_t* bridge); bool qso_live_activity_bridge_is_dynamic_island_available(void); void qso_live_activity_bridge_update_qso_details(QsoLiveActivityBridge_t* bridge, const char* callsign, const char* handle, const char* country); } QsoLiveActivityBridge::QsoLiveActivityBridge(QObject *parent) : QObject(parent) , m_bridge(qso_live_activity_bridge_create()) { } QsoLiveActivityBridge::~QsoLiveActivityBridge() { if (m_bridge) { qso_live_activity_bridge_release(m_bridge); m_bridge = nullptr; } } QsoLiveActivityBridge* QsoLiveActivityBridge::instance() { if (!m_instance) { m_instance = new QsoLiveActivityBridge(); } return m_instance; } void QsoLiveActivityBridge::startOrUpdateLiveActivity(const QString &callsign, const QString &handle, const QString &country) { if (m_bridge) { qso_live_activity_bridge_start_or_update(m_bridge, callsign.toUtf8().constData(), handle.toUtf8().constData(), country.toUtf8().constData()); } } void QsoLiveActivityBridge::endLiveActivity() { if (m_bridge) { qso_live_activity_bridge_end(m_bridge); } } bool QsoLiveActivityBridge::isDynamicIslandAvailable() const { return qso_live_activity_bridge_is_dynamic_island_available(); } void QsoLiveActivityBridge::updateQsoDetails(const QString &callsign, const QString &handle, const QString &country) { if (m_bridge) { qso_live_activity_bridge_update_qso_details(m_bridge, callsign.toUtf8().constData(), handle.toUtf8().constData(), country.toUtf8().constData()); } } QsoLiveActivityBridge* QsoLiveActivityBridge::instance() { if (!m_instance) { m_instance = new QsoLiveActivityBridge(); } return m_instance; } void QsoLiveActivityBridge::startOrUpdateLiveActivity(const QString &callsign, const QString &handle, const QString &country) { if (m_bridge) { qso_live_activity_bridge_start_or_update_live_activity( m_bridge, callsign.toUtf8().constData(), handle.toUtf8().constData(), country.toUtf8().constData() ); } } void QsoLiveActivityBridge::endLiveActivity() { if (m_bridge) { qso_live_activity_bridge_end_live_activity(m_bridge); } } bool QsoLiveActivityBridge::isDynamicIslandAvailable() const { return m_bridge ? qso_live_activity_bridge_is_dynamic_island_available() : false; } void QsoLiveActivityBridge::updateQsoDetails(const QString &callsign, const QString &handle, const QString &country) { if (m_bridge) { qso_live_activity_bridge_update_qso_details( m_bridge, callsign.toUtf8().constData(), handle.toUtf8().constData(), country.toUtf8().constData() ); } }