pidgin/quail/qpurple
Clone
Summary
Browse
Changes
Graph
now we ask for credentials rather than hardcode
2010-07-27, Gatlin C Johnson
6081cfe5b38f
now we ask for credentials rather than hardcode
#include
<QMap>
#include
"qpurple.h"
#include
"qpurpleionotifier.h"
#include
"qpurpletimer.h"
namespace
QPurple
{
// unique handle for our input events (QPurpleIONotifiers and QPurpleTimers)
unsigned
int
unique_handle
=
0
;
QMap
<
int
,
QPurpleIONotifier
*
>
notifierMap
;
QMap
<
int
,
QPurpleTimer
*
>
timerMap
;
// Event loop functions
static
guint
qt_input_add
(
gint
fd
,
PurpleInputCondition
condition
,
PurpleInputFunction
function
,
gpointer
data
)
{
PurpleGLibIOClosure
*
closure
=
g_new0
(
PurpleGLibIOClosure
,
1
);
int
handle
;
closure
->
function
=
function
;
closure
->
data
=
data
;
// modified from the nullclient source to integrate with Qt
handle
=
unique_handle
++
;
// this will be unique, certainly
notifierMap
[
handle
]
=
new
QPurpleIONotifier
(
fd
,
closure
,
condition
);
return
handle
;
}
static
gboolean
qt_input_remove
(
guint
handle
)
{
int
toReturn
=
0
;
QPurpleIONotifier
*
tmp
=
notifierMap
.
take
(
handle
);
if
(
!
tmp
->
defaultConstructed
)
{
toReturn
=
1
;
delete
tmp
;
}
return
toReturn
;
}
static
guint
qt_timer_add
(
guint
interval
,
GSourceFunc
function
,
gpointer
data
)
{
int
handle
=
unique_handle
++
;
timerMap
[
handle
]
=
new
QPurpleTimer
(
function
,
data
,
interval
);
return
handle
;
}
static
guint
qt_timer_add_seconds
(
guint
interval
,
GSourceFunc
function
,
gpointer
data
)
{
return
qt_timer_add
(
interval
*
1000
,
function
,
data
);
}
static
gboolean
qt_timer_remove
(
guint
handle
)
{
int
toReturn
=
0
;
QPurpleTimer
*
tmp
=
timerMap
.
take
(
handle
);
if
(
!
tmp
->
defaultConstructed
)
{
// we removed something
toReturn
=
1
;
delete
tmp
;
}
return
toReturn
;
}
static
PurpleEventLoopUiOps
qt_eventloops
=
{
qt_timer_add
,
qt_timer_remove
,
qt_input_add
,
qt_input_remove
,
NULL
,
qt_timer_add_seconds
,
/* padding */
NULL
,
NULL
,
NULL
};
static
void
qt_write_conv
(
PurpleConversation
*
conv
,
const
char
*
who
,
const
char
*
alias
,
const
char
*
message
,
PurpleMessageFlags
flags
,
time_t
mtime
)
{
printf
(
"(%s) %s %s: %s
\n
"
,
purple_conversation_get_name
(
conv
),
purple_utf8_strftime
(
"(%H:%M:%S)"
,
localtime
(
&
mtime
)),
who
,
message
);
}
static
PurpleConversationUiOps
null_conv_uiops
=
{
NULL
,
/* create_conversation */
NULL
,
/* destroy_conversation */
NULL
,
/* write_chat */
NULL
,
/* write_im */
qt_write_conv
,
/* write_conv */
NULL
,
/* chat_add_users */
NULL
,
/* chat_rename_user */
NULL
,
/* chat_remove_users */
NULL
,
/* chat_update_user */
NULL
,
/* present */
NULL
,
/* has_focus */
NULL
,
/* custom_smiley_add */
NULL
,
/* custom_smiley_write */
NULL
,
/* custom_smiley_close */
NULL
,
/* send_confirm */
NULL
,
NULL
,
NULL
,
NULL
};
static
void
qt_ui_init
(
void
)
{
/**
* This should initialize the UI components for all the modules. Here we
* just initialize the UI for conversations.
*/
purple_conversations_set_ui_ops
(
&
null_conv_uiops
);
}
static
PurpleCoreUiOps
null_core_uiops
=
{
NULL
,
NULL
,
qt_ui_init
,
NULL
,
/* padding */
NULL
,
NULL
,
NULL
,
NULL
};
static
void
_init_libpurple
(
void
)
{
/* Set a custom user directory (optional) */
purple_util_set_user_dir
(
CUSTOM_USER_DIRECTORY
);
/* We do not want any debugging for now to keep the noise to a minimum. */
purple_debug_set_enabled
(
FALSE
);
/* Set the core-uiops, which is used to
* - initialize the ui specific preferences.
* - initialize the debug ui.
* - initialize the ui components for all the modules.
* - uninitialize the ui components for all the modules when the core terminates.
*/
purple_core_set_ui_ops
(
&
null_core_uiops
);
/* Set the uiops for the eventloop. If your client is glib-based, you can safely
* copy this verbatim. */
purple_eventloop_set_ui_ops
(
&
qt_eventloops
);
/* Set path to search for plugins. The core (libpurple) takes care of loading the
* core-plugins, which includes the protocol-plugins. So it is not essential to add
* any path here, but it might be desired, especially for ui-specific plugins. */
purple_plugins_add_search_path
(
CUSTOM_PLUGIN_PATH
);
/* Now that all the essential stuff has been set, let's try to init the core. It's
* necessary to provide a non-NULL name for the current ui to the core. This name
* is used by stuff that depends on this ui, for example the ui-specific plugins. */
if
(
!
purple_core_init
(
UI_ID
))
{
/* Initializing the core failed. Terminate. */
fprintf
(
stderr
,
"libpurple initialization failed. Dumping core.
\n
"
"Please report this!
\n
"
);
abort
();
}
/* Create and load the buddylist. */
purple_set_blist
(
purple_blist_new
());
purple_blist_load
();
/* Load the preferences. */
purple_prefs_load
();
/* Load the desired plugins. The client should save the list of loaded plugins in
* the preferences using purple_plugins_save_loaded(PLUGIN_SAVE_PREF) */
purple_plugins_load_saved
(
PLUGIN_SAVE_PREF
);
/* Load the pounces. */
//purple_pounces_load();
}
// external wrappers
void
init
()
{
_init_libpurple
();
}
}