⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nullprpl.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
static void nullprpl_rename_group(PurpleConnection *gc, const char *old_name,                                  PurpleGroup *group, GList *moved_buddies) {  purple_debug_info("nullprpl", "%s has renamed group %s to %s\n",                    gc->account->username, old_name, group->name);}static void nullprpl_convo_closed(PurpleConnection *gc, const char *who) {  purple_debug_info("nullprpl", "%s's conversation with %s was closed\n",                    gc->account->username, who);}/* normalize a username (e.g. remove whitespace, add default domain, etc.) * for nullprpl, this is a noop. */static const char *nullprpl_normalize(const PurpleAccount *acct,                                      const char *input) {  return NULL;}static void nullprpl_set_buddy_icon(PurpleConnection *gc,                                    PurpleStoredImage *img) { purple_debug_info("nullprpl", "setting %s's buddy icon to %s\n",                   gc->account->username, purple_imgstore_get_filename(img));}static void nullprpl_remove_group(PurpleConnection *gc, PurpleGroup *group) {  purple_debug_info("nullprpl", "%s has removed group %s\n",                    gc->account->username, group->name);}static void set_chat_topic_fn(PurpleConvChat *from, PurpleConvChat *to,                              int id, const char *room, gpointer userdata) {  const char *topic = (const char *)userdata;  const char *username = from->conv->account->username;  char *msg;  purple_conv_chat_set_topic(to, username, topic);  if (topic && strlen(topic) > 0)    msg = g_strdup_printf(_("%s sets topic to: %s"), username, topic);  else    msg = g_strdup_printf(_("%s clears topic"), username);  purple_conv_chat_write(to, username, msg,                         PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG,                         time(NULL));  g_free(msg);}static void nullprpl_set_chat_topic(PurpleConnection *gc, int id,                                    const char *topic) {  PurpleConversation *conv = purple_find_chat(gc, id);  PurpleConvChat *chat = purple_conversation_get_chat_data(conv);  const char *last_topic;  if (!chat)    return;  purple_debug_info("nullprpl", "%s sets topic of chat room '%s' to '%s'\n",                    gc->account->username, conv->name, topic);  last_topic = purple_conv_chat_get_topic(chat);  if ((!topic && !last_topic) ||      (topic && last_topic && !strcmp(topic, last_topic)))    return;  /* topic is unchanged, this is a noop */  foreach_gc_in_chat(set_chat_topic_fn, gc, id, (gpointer)topic);}static gboolean nullprpl_finish_get_roomlist(gpointer roomlist) {  purple_roomlist_set_in_progress((PurpleRoomlist *)roomlist, FALSE);  return FALSE;}static PurpleRoomlist *nullprpl_roomlist_get_list(PurpleConnection *gc) {  char *username = gc->account->username;  PurpleRoomlist *roomlist = purple_roomlist_new(gc->account);  GList *fields = NULL;  PurpleRoomlistField *field;  GList *chats;  GList *seen_ids = NULL;  purple_debug_info("nullprpl", "%s asks for room list; returning:\n", username);  /* set up the room list */  field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "room",                                    "room", TRUE /* hidden */);  fields = g_list_append(fields, field);  field = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_INT, "Id", "Id", FALSE);  fields = g_list_append(fields, field);  purple_roomlist_set_fields(roomlist, fields);  /* add each chat room. the chat ids are cached in seen_ids so that each room   * is only returned once, even if multiple users are in it. */  for (chats  = purple_get_chats(); chats; chats = g_list_next(chats)) {    PurpleConversation *conv = (PurpleConversation *)chats->data;    PurpleRoomlistRoom *room;    char *name = conv->name;    int id = purple_conversation_get_chat_data(conv)->id;    /* have we already added this room? */    if (g_list_find_custom(seen_ids, name, (GCompareFunc)strcmp))      continue;                                /* yes! try the next one. */    seen_ids = g_list_append(seen_ids, name);  /* no, it's new. */    purple_debug_info("nullprpl", "%s (%d), ", name, id);    room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, NULL);    purple_roomlist_room_add_field(roomlist, room, name);    purple_roomlist_room_add_field(roomlist, room, &id);    purple_roomlist_room_add(roomlist, room);  }  purple_timeout_add(1 /* ms */, nullprpl_finish_get_roomlist, roomlist);  return roomlist;}static void nullprpl_roomlist_cancel(PurpleRoomlist *list) { purple_debug_info("nullprpl", "%s asked to cancel room list request\n",                   list->account->username);}static void nullprpl_roomlist_expand_category(PurpleRoomlist *list,                                              PurpleRoomlistRoom *category) { purple_debug_info("nullprpl", "%s asked to expand room list category %s\n",                   list->account->username, category->name);}/* nullprpl doesn't support file transfer...yet... */static gboolean nullprpl_can_receive_file(PurpleConnection *gc,                                          const char *who) {  return FALSE;}static gboolean nullprpl_offline_message(const PurpleBuddy *buddy) {  purple_debug_info("nullprpl",                    "reporting that offline messages are supported for %s\n",                    buddy->name);  return TRUE;}/* * prpl stuff. see prpl.h for more information. */static PurplePluginProtocolInfo prpl_info ={  OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC,  /* options */  NULL,               /* user_splits, initialized in nullprpl_init() */  NULL,               /* protocol_options, initialized in nullprpl_init() */  {   /* icon_spec, a PurpleBuddyIconSpec */      "png,jpg,gif",                   /* format */      0,                               /* min_width */      0,                               /* min_height */      128,                             /* max_width */      128,                             /* max_height */      10000,                           /* max_filesize */      PURPLE_ICON_SCALE_DISPLAY,       /* scale_rules */  },  nullprpl_list_icon,                  /* list_icon */  nullprpl_list_emblem,                /* list_emblem */  nullprpl_status_text,                /* status_text */  nullprpl_tooltip_text,               /* tooltip_text */  nullprpl_status_types,               /* status_types */  nullprpl_blist_node_menu,            /* blist_node_menu */  nullprpl_chat_info,                  /* chat_info */  nullprpl_chat_info_defaults,         /* chat_info_defaults */  nullprpl_login,                      /* login */  nullprpl_close,                      /* close */  nullprpl_send_im,                    /* send_im */  nullprpl_set_info,                   /* set_info */  nullprpl_send_typing,                /* send_typing */  nullprpl_get_info,                   /* get_info */  nullprpl_set_status,                 /* set_status */  nullprpl_set_idle,                   /* set_idle */  nullprpl_change_passwd,              /* change_passwd */  nullprpl_add_buddy,                  /* add_buddy */  nullprpl_add_buddies,                /* add_buddies */  nullprpl_remove_buddy,               /* remove_buddy */  nullprpl_remove_buddies,             /* remove_buddies */  nullprpl_add_permit,                 /* add_permit */  nullprpl_add_deny,                   /* add_deny */  nullprpl_rem_permit,                 /* rem_permit */  nullprpl_rem_deny,                   /* rem_deny */  nullprpl_set_permit_deny,            /* set_permit_deny */  nullprpl_join_chat,                  /* join_chat */  nullprpl_reject_chat,                /* reject_chat */  nullprpl_get_chat_name,              /* get_chat_name */  nullprpl_chat_invite,                /* chat_invite */  nullprpl_chat_leave,                 /* chat_leave */  nullprpl_chat_whisper,               /* chat_whisper */  nullprpl_chat_send,                  /* chat_send */  NULL,                                /* keepalive */  nullprpl_register_user,              /* register_user */  nullprpl_get_cb_info,                /* get_cb_info */  NULL,                                /* get_cb_away */  nullprpl_alias_buddy,                /* alias_buddy */  nullprpl_group_buddy,                /* group_buddy */  nullprpl_rename_group,               /* rename_group */  NULL,                                /* buddy_free */  nullprpl_convo_closed,               /* convo_closed */  nullprpl_normalize,                  /* normalize */  nullprpl_set_buddy_icon,             /* set_buddy_icon */  nullprpl_remove_group,               /* remove_group */  NULL,                                /* get_cb_real_name */  nullprpl_set_chat_topic,             /* set_chat_topic */  NULL,                                /* find_blist_chat */  nullprpl_roomlist_get_list,          /* roomlist_get_list */  nullprpl_roomlist_cancel,            /* roomlist_cancel */  nullprpl_roomlist_expand_category,   /* roomlist_expand_category */  nullprpl_can_receive_file,           /* can_receive_file */  NULL,                                /* send_file */  NULL,                                /* new_xfer */  nullprpl_offline_message,            /* offline_message */  NULL,                                /* whiteboard_prpl_ops */  NULL,                                /* send_raw */  NULL,                                /* roomlist_room_serialize */  NULL,                                /* padding... */  NULL,  NULL,  NULL,};static void nullprpl_init(PurplePlugin *plugin){  /* see accountopt.h for information about user splits and protocol options */  PurpleAccountUserSplit *split = purple_account_user_split_new(    _("Example user split (unused)"),  /* text shown to user */    "default",                         /* default value */    '@');                              /* field separator */  PurpleAccountOption *option = purple_account_option_string_new(    _("Example option (unused)"),      /* text shown to user */    "example",                         /* pref name */    "default");                        /* default value */  purple_debug_info("nullprpl", "starting up\n");  prpl_info.user_splits = g_list_append(NULL, split);  prpl_info.protocol_options = g_list_append(NULL, option);  /* register whisper chat command, /msg */  purple_cmd_register("msg",                    "ws",                /* args: recipient and message */                    PURPLE_CMD_P_DEFAULT,  /* priority */                    PURPLE_CMD_FLAG_CHAT,                    "prpl-null",                    send_whisper,                    "msg &lt;username&gt; &lt;message&gt;: send a private message, aka a whisper",                    NULL);               /* userdata */  /* get ready to store offline messages */  goffline_messages = g_hash_table_new_full(g_str_hash,  /* hash fn */                                            g_str_equal, /* key comparison fn */                                            g_free,      /* key free fn */                                            NULL);       /* value free fn */  _null_protocol = plugin;}static void nullprpl_destroy(PurplePlugin *plugin) {  purple_debug_info("nullprpl", "shutting down\n");}static PurplePluginInfo info ={  PURPLE_PLUGIN_MAGIC,                                     /* magic */  PURPLE_MAJOR_VERSION,                                    /* major_version */  PURPLE_MINOR_VERSION,                                    /* minor_version */  PURPLE_PLUGIN_PROTOCOL,                                  /* type */  NULL,                                                    /* ui_requirement */  0,                                                       /* flags */  NULL,                                                    /* dependencies */  PURPLE_PRIORITY_DEFAULT,                                 /* priority */  NULLPRPL_ID,                                             /* id */  "Nullprpl",                                              /* name */  "0.3",                                                   /* version */  "Null Protocol Plugin",                                  /* summary */  "Null Protocol Plugin",                                  /* description */  "Ryan Barrett <nullprpl@ryanb.org>",                     /* author */  "http://snarfed.org/space/pidgin+null+protocol+plugin",  /* homepage */  NULL,                                                    /* load */  NULL,                                                    /* unload */  nullprpl_destroy,                                        /* destroy */  NULL,                                                    /* ui_info */  &prpl_info,                                              /* extra_info */  NULL,                                                    /* prefs_info */  nullprpl_actions,                                        /* actions */  NULL,                                                    /* padding... */  NULL,  NULL,  NULL,};PURPLE_INIT_PLUGIN(null, nullprpl_init, info);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -