pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
merge of '77693555855fe9cd3215414f79964dba346cc5fa'
gaim
2008-11-12, Richard Laager
1966704b3e42
merge of '77693555855fe9cd3215414f79964dba346cc5fa'
and '19a87e98e5857ad0289f2c760d460f7f1dbbb42d'
#include
"internal.h"
#include
"account.h"
#include
"blist.h"
#include
"conversation.h"
#include
"debug.h"
#include
"signals.h"
#include
"status.h"
#include
"version.h"
#include
"plugin.h"
#include
"pluginpref.h"
#include
"prefs.h"
#define PLUGIN_ID "core-psychic"
#define PLUGIN_NAME N_("Psychic Mode")
#define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation")
#define PLUGIN_DESC N_("Causes conversation windows to appear as other" \
" users begin to message you. This works for" \
" AIM, ICQ, Jabber, Sametime, and Yahoo!")
#define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>"
#define PREFS_BASE "/plugins/core/psychic"
#define PREF_BUDDIES PREFS_BASE "/buddies_only"
#define PREF_NOTICE PREFS_BASE "/show_notice"
#define PREF_STATUS PREFS_BASE "/activate_online"
#define PREF_RAISE PREFS_BASE "/raise_conv"
static
void
buddy_typing_cb
(
GaimAccount
*
acct
,
const
char
*
name
,
void
*
data
)
{
GaimConversation
*
gconv
;
if
(
gaim_prefs_get_bool
(
PREF_STATUS
)
&&
!
gaim_status_is_available
(
gaim_account_get_active_status
(
acct
)))
{
gaim_debug_info
(
"psychic"
,
"not available, doing nothing
\n
"
);
return
;
}
if
(
gaim_prefs_get_bool
(
PREF_BUDDIES
)
&&
!
gaim_find_buddy
(
acct
,
name
))
{
gaim_debug_info
(
"psychic"
,
"not in blist, doing nothing
\n
"
);
return
;
}
gconv
=
gaim_find_conversation_with_account
(
GAIM_CONV_TYPE_IM
,
name
,
acct
);
if
(
!
gconv
)
{
gaim_debug_info
(
"psychic"
,
"no previous conversation exists
\n
"
);
gconv
=
gaim_conversation_new
(
GAIM_CONV_TYPE_IM
,
acct
,
name
);
if
(
gaim_prefs_get_bool
(
PREF_RAISE
))
{
gaim_conversation_present
(
gconv
);
}
if
(
gaim_prefs_get_bool
(
PREF_NOTICE
))
{
/* This is a quote from Star Wars. You should probably not
translate it literally. If you can't find a fitting cultural
reference in your language, consider translating something
like this instead: "You feel a new message coming." */
gaim_conversation_write
(
gconv
,
NULL
,
_
(
"You feel a disturbance in the force..."
),
GAIM_MESSAGE_SYSTEM
|
GAIM_MESSAGE_NO_LOG
|
GAIM_MESSAGE_ACTIVE_ONLY
,
time
(
NULL
));
}
gaim_conv_im_set_typing_state
(
GAIM_CONV_IM
(
gconv
),
GAIM_TYPING
);
}
}
static
GaimPluginPrefFrame
*
get_plugin_pref_frame
(
GaimPlugin
*
plugin
)
{
GaimPluginPrefFrame
*
frame
;
GaimPluginPref
*
pref
;
frame
=
gaim_plugin_pref_frame_new
();
pref
=
gaim_plugin_pref_new_with_name
(
PREF_BUDDIES
);
gaim_plugin_pref_set_label
(
pref
,
_
(
"Only enable for users on"
" the buddy list"
));
gaim_plugin_pref_frame_add
(
frame
,
pref
);
pref
=
gaim_plugin_pref_new_with_name
(
PREF_STATUS
);
gaim_plugin_pref_set_label
(
pref
,
_
(
"Disable when away"
));
gaim_plugin_pref_frame_add
(
frame
,
pref
);
pref
=
gaim_plugin_pref_new_with_name
(
PREF_NOTICE
);
gaim_plugin_pref_set_label
(
pref
,
_
(
"Display notification message in"
" conversations"
));
gaim_plugin_pref_frame_add
(
frame
,
pref
);
pref
=
gaim_plugin_pref_new_with_name
(
PREF_RAISE
);
gaim_plugin_pref_set_label
(
pref
,
_
(
"Raise psychic conversations"
));
gaim_plugin_pref_frame_add
(
frame
,
pref
);
return
frame
;
}
static
gboolean
plugin_load
(
GaimPlugin
*
plugin
)
{
void
*
convs_handle
;
convs_handle
=
gaim_conversations_get_handle
();
gaim_signal_connect
(
convs_handle
,
"buddy-typing"
,
plugin
,
GAIM_CALLBACK
(
buddy_typing_cb
),
NULL
);
return
TRUE
;
}
static
GaimPluginUiInfo
prefs_info
=
{
get_plugin_pref_frame
,
0
,
/* page_num (Reserved) */
NULL
,
/* frame (Reserved) */
};
static
GaimPluginInfo
info
=
{
GAIM_PLUGIN_MAGIC
,
GAIM_MAJOR_VERSION
,
GAIM_MINOR_VERSION
,
GAIM_PLUGIN_STANDARD
,
/**< type */
NULL
,
/**< ui_requirement */
0
,
/**< flags */
NULL
,
/**< dependencies */
GAIM_PRIORITY_DEFAULT
,
/**< priority */
PLUGIN_ID
,
/**< id */
PLUGIN_NAME
,
/**< name */
VERSION
,
/**< version */
PLUGIN_SUMMARY
,
/**< summary */
PLUGIN_DESC
,
/**< description */
PLUGIN_AUTHOR
,
/**< author */
GAIM_WEBSITE
,
/**< homepage */
plugin_load
,
/**< load */
NULL
,
/**< unload */
NULL
,
/**< destroy */
NULL
,
/**< ui_info */
NULL
,
/**< extra_info */
&
prefs_info
,
/**< prefs_info */
NULL
,
/**< actions */
};
static
void
init_plugin
(
GaimPlugin
*
plugin
)
{
gaim_prefs_add_none
(
PREFS_BASE
);
gaim_prefs_add_bool
(
PREF_BUDDIES
,
FALSE
);
gaim_prefs_add_bool
(
PREF_NOTICE
,
TRUE
);
gaim_prefs_add_bool
(
PREF_STATUS
,
TRUE
);
}
GAIM_INIT_PLUGIN
(
psychic
,
init_plugin
,
info
)