(purple) Adhere to user setting 'offline' status

This commit is contained in:
Jaidyn Ann 2021-08-13 15:56:41 -05:00
parent a712d89c76
commit 71433599e4
4 changed files with 42 additions and 7 deletions

View File

@ -170,6 +170,21 @@ PurpleApp::ImMessage(BMessage* msg)
{
PurpleAccount* account = _AccountFromMessage(msg);
UserStatus status = (UserStatus)msg->FindInt32("status");
switch (status) {
case STATUS_ONLINE:
if (purple_account_is_disconnected(account)) {
purple_account_set_enabled(account, PURPLE_UI_ID, true);
purple_account_connect(account);
}
break;
case STATUS_OFFLINE: {
SendMessage(account, BMessage(PURPLE_SHUTDOWN_ADDON));
purple_account_disconnect(account);
break;
}
}
PurpleStatusPrimitive prim = cardie_status_to_purple(status);
const char* primId = purple_primitive_get_id_from_type(prim);
@ -981,7 +996,7 @@ static PurpleConnectionUiOps _ui_op_connection =
{
NULL,
NULL,
NULL,
ui_op_disconnected,
NULL,
NULL,
NULL,
@ -1135,6 +1150,11 @@ signal_account_signed_on(PurpleAccount* account)
send_own_info(account);
load_account_buddies(account);
BMessage status(IM_MESSAGE);
status.AddInt32("im_what", IM_OWN_STATUS_SET);
status.AddInt32("status", (int32)STATUS_ONLINE);
((PurpleApp*)be_app)->SendMessage(account, status);
((PurpleApp*)be_app)->fUserNicks.AddItem(username, display);
}
@ -1422,6 +1442,21 @@ ui_op_input_add(gint fd, PurpleInputCondition condition,
}
static void
ui_op_disconnected(PurpleConnection* conn)
{
PurpleAccount* account = purple_connection_get_account(conn);
const PurpleConnectionErrorInfo* err
= purple_account_get_current_error(account);
if (!err) {
BMessage status(IM_MESSAGE);
status.AddInt32("im_what", IM_OWN_STATUS_SET);
status.AddInt32("status", (int32)STATUS_OFFLINE);
((PurpleApp*)be_app)->SendMessage(account, status);
}
}
static void
ui_op_report_disconnect_reason(PurpleConnection* conn,
PurpleConnectionError reason, const char* text)

View File

@ -166,6 +166,7 @@ private:
PurpleInputFunction function, gpointer data);
// Connection ui ops
static void ui_op_disconnected(PurpleConnection* conn);
static void ui_op_report_disconnect_reason(PurpleConnection* conn,
PurpleConnectionError reason, const char* text);

View File

@ -128,7 +128,6 @@ connect_thread(void* data)
BMessage* msg = new BMessage(receive_message());
switch (msg->what) {
case PURPLE_SHUTDOWN_ADDON: {
protocol->Shutdown();
BMessage* disabled = new BMessage(IM_MESSAGE);
disabled->AddInt32("im_what", IM_PROTOCOL_DISABLE);
protocol->SendMessage(disabled);
@ -235,17 +234,17 @@ PurpleProtocol::UpdateSettings(BMessage* msg)
msg->what = PURPLE_CONNECT_ACCOUNT;
_SendPrplMessage(msg);
thread_id thread = spawn_thread(connect_thread, "fly_away_little_bird",
fBirdThread = spawn_thread(connect_thread, "god_has_abandoned_us",
B_NORMAL_PRIORITY, (void*)this);
if (thread < B_OK)
if (fBirdThread < B_OK)
return B_ERROR;
BMessage* account = new BMessage(PURPLE_REGISTER_THREAD);
account->AddInt64("thread_id", thread);
account->AddInt64("thread_id", fBirdThread);
_SendPrplMessage(account);
resume_thread(thread);
resume_thread(fBirdThread);
return B_OK;
}

View File

@ -10,7 +10,7 @@ resource app_version {
variety = B_APPV_ALPHA,
internal = 0,
short_info = "Libpurple add-on for Cardie",
short_info = "Cardie libpurple add-on",
long_info = "©2021 Jaidyn Levesque"
};