static void write_message(PurpleBuddy *buddy, const char *message) { PurpleConversation *conv; const char *alias = purple_buddy_get_alias(buddy); /* Acquire conversion */ conv = purple_find_conversation_with_account( PURPLE_CONV_TYPE_ANY, buddy->name, buddy->account); if (conv != NULL) { /* If conversation is open just place there the message using purple_conversation_write() */ purple_conversation_write(conv, alias, message, PURPLE_MESSAGE_SYSTEM, time(NULL)); } else { /* No conversation opened. Reopen last or create new */ if (ONLY_OPENED_CONVERSATIONS) return; /* Log file to write to */ PurpleLog *log = NULL; if (!try_to_append(buddy, message)) { if (DEBUG) printf(INTRO "Creating new log file for %s\n", buddy->name); log = purple_log_new(PURPLE_LOG_IM, buddy->name, buddy->account, NULL, time(NULL), NULL); if (!log) { printf(INTRO "Log creation for %s failed!\n", buddy->name); return; } purple_log_write(log, PURPLE_MESSAGE_SYSTEM, alias, time(NULL), message); purple_log_free(log); } } return; }
void qq_system_log(qq_account* ac,const char* log) { char buf[8192]; snprintf(buf,sizeof(buf),"[帐号 %s]:<br>%s",ac->account->username,log); purple_log_write(ac->sys_log, PURPLE_LOG_SYSTEM, "system", time(NULL), buf); }
static int try_to_append(PurpleBuddy *buddy, const char *message) { int retval = 0; /* Log file to write to */ PurpleLog *log = NULL; GList *list; list = purple_log_get_logs(PURPLE_LOG_IM, buddy->name, buddy->account); if (!list) return 0; log = g_list_first(list)->data; if (!log) { if (DEBUG) printf(INTRO "Unable to append, log list empty\n"); goto cleanup; } if (!log->logger) { if (DEBUG) printf(INTRO "Unable to append logger is NULL\n"); goto cleanup; } if (!log->logger_data) { if (DEBUG) printf(INTRO "Unable to append NULL logger_data\n"); goto cleanup; } /* We must reopen log file * This should work with txt logger and html logger. * No idea about others. This is kind of hack. * * We don't know real type of logger_data. */ PurpleLogCommonLoggerData *data = log->logger_data; if (data->file) { /* Right. This should be NULL really, type might be wrong. */ if (DEBUG) printf(INTRO "WARNING incompatible logger or logging system updated!\n"); goto cleanup; } data->file = fopen(data->path, "a"); if (!data->file) { if (DEBUG) printf(INTRO "Unable to append to existing log!\n"); goto cleanup; } const char *alias = purple_buddy_get_alias(buddy); purple_log_write(log, PURPLE_MESSAGE_SYSTEM, alias, time(NULL), message); fclose(data->file); data->file = NULL; /* All fine */ retval = 1; cleanup: g_list_foreach(list, (GFunc)purple_log_free, NULL); g_list_free(list); return retval; }
void purple_connection_set_state(PurpleConnection *gc, PurpleConnectionState state) { PurpleConnectionUiOps *ops; g_return_if_fail(gc != NULL); if (gc->state == state) return; gc->state = state; ops = purple_connections_get_ui_ops(); if (gc->state == PURPLE_CONNECTING) { connections_connecting = g_list_append(connections_connecting, gc); } else { connections_connecting = g_list_remove(connections_connecting, gc); } if (gc->state == PURPLE_CONNECTED) { PurpleAccount *account; PurplePresence *presence; account = purple_connection_get_account(gc); presence = purple_account_get_presence(account); /* Set the time the account came online */ purple_presence_set_login_time(presence, time(NULL)); #if 0 if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, TRUE); if (log != NULL) { char *msg = g_strdup_printf(_("+++ %s signed on"), purple_account_get_username(account)); purple_log_write(log, PURPLE_MESSAGE_SYSTEM, purple_account_get_username(account), purple_presence_get_login_time(presence), msg); g_free(msg); } } #endif if (ops != NULL && ops->connected != NULL) ops->connected(gc); purple_blist_add_account(account); purple_signal_emit(purple_connections_get_handle(), "signed-on", gc); purple_signal_emit_return_1(purple_connections_get_handle(), "autojoin", gc); serv_set_permit_deny(gc); update_keepalive(gc, TRUE); } else if (gc->state == PURPLE_DISCONNECTED) { PurpleAccount *account = purple_connection_get_account(gc); #if 0 if (purple_prefs_get_bool("/purple/logging/log_system")) { PurpleLog *log = purple_account_get_log(account, FALSE); if (log != NULL) { char *msg = g_strdup_printf(_("+++ %s signed off"), purple_account_get_username(account)); purple_log_write(log, PURPLE_MESSAGE_SYSTEM, purple_account_get_username(account), time(NULL), msg); g_free(msg); } } purple_account_destroy_log(account); #endif if (ops != NULL && ops->disconnected != NULL) ops->disconnected(gc); } }