Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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);
	}
}