Browse Source

Expose phone busy event to desktop call interface

stream-multiview
evgeny 6 days ago
parent
commit
b68116eedf
  1. 3
      tools/chatgui/src/callwindow.h
  2. 1
      tools/chatgui/transport/gui_bridge.h
  3. 8
      tools/chatgui/transport/gui_bridge_impl.cpp

3
tools/chatgui/src/callwindow.h

@ -18,7 +18,7 @@ class CallVideoWindow;
class CallWindow : public QWidget {
Q_OBJECT
public:
enum State { Outgoing, Ringing, Incoming, Active, Ended };
enum State { Outgoing, Ringing, Incoming, Active, Ended, WaitDecision };
explicit CallWindow(QWidget* parent = nullptr);
~CallWindow() override;
@ -78,6 +78,7 @@ private:
QLabel* m_connectionLabel;
QLabel* m_statsLabel;
QPushButton* m_acceptBtn;
QPushButton* m_continueBtn; /* явное разрешение начать вызов занятого телефона */
QPushButton* m_declineBtn;
QPushButton* m_hangupBtn;
QPushButton* m_muteBtn;

1
tools/chatgui/transport/gui_bridge.h

@ -201,6 +201,7 @@ void gui_bridge_set_call_incoming_cb(gui_call_incoming_fn cb);
/* Callback для звонкового события с call_id (ringing/accepted) */
typedef void (*gui_call_id_fn)(uint64_t call_id);
void gui_bridge_set_call_ringing_cb(gui_call_id_fn cb);
void gui_bridge_set_call_phone_busy_cb(gui_call_id_fn cb);
void gui_bridge_set_call_accepted_cb(gui_call_id_fn cb);
/* Callback для завершения/отклонения звонка (вызывается из GUI-потока) */

8
tools/chatgui/transport/gui_bridge_impl.cpp

@ -58,6 +58,7 @@ static gui_local_event_fn g_local_invite_cb = nullptr;
static gui_local_event_fn g_local_delivery_cb = nullptr;
static gui_call_incoming_fn g_call_incoming_cb = nullptr;
static gui_call_id_fn g_call_ringing_cb = nullptr;
static gui_call_id_fn g_call_phone_busy_cb = nullptr;
static gui_call_id_fn g_call_accepted_cb = nullptr;
static gui_call_ended_fn g_call_ended_cb = nullptr;
static gui_call_ended_fn g_call_declined_cb = nullptr;
@ -375,6 +376,12 @@ void GuiBridgeReceiver::processPost(int eventType, QByteArray data) {
if (g_call_ringing_cb) g_call_ringing_cb(callId);
}
break;
case CHAT_EVT_CALL_PHONE_BUSY:
if (dlen == 9) {
uint64_t callId; memcpy(&callId, d, 8);
if (g_call_phone_busy_cb) g_call_phone_busy_cb(callId);
} else DEBUG_WARN(DEBUG_CATEGORY_CALL, "gui_bridge: invalid PHONE_BUSY bytes=%d", dlen);
break;
case GUI_EVT_CALL_ACCEPTED:
if (dlen >= 8) {
uint64_t callId; memcpy(&callId, d, 8);
@ -604,6 +611,7 @@ void gui_bridge_set_call_incoming_cb(gui_call_incoming_fn cb) {
void gui_bridge_set_call_ringing_cb(gui_call_id_fn cb) {
g_call_ringing_cb = cb;
}
void gui_bridge_set_call_phone_busy_cb(gui_call_id_fn cb) { g_call_phone_busy_cb = cb; }
void gui_bridge_set_call_accepted_cb(gui_call_id_fn cb) {
g_call_accepted_cb = cb;

Loading…
Cancel
Save