void ProtoManager::PluginsAvailable () { purple_debug_set_enabled (true); const auto& dir = Util::CreateIfNotExists ("azoth/velvetbird/purple"); purple_util_set_user_dir (dir.absolutePath ().toUtf8 ().constData ()); purple_core_set_ui_ops (&UiOps); purple_eventloop_set_ui_ops (&EvLoopOps); purple_idle_set_ui_ops (&IdleOps); purple_connections_set_ui_ops (&ConnUiOps); purple_set_blist (purple_blist_new ()); purple_blist_set_ui_data (this); purple_blist_set_ui_ops (&BListUiOps); purple_conversations_set_ui_ops (&ConvUiOps); purple_accounts_set_ui_ops (&AccUiOps); purple_notify_set_ui_ops (&NotifyUiOps); purple_imgstore_init (); purple_buddy_icons_init (); if (!purple_core_init ("leechcraft.azoth")) { qWarning () << Q_FUNC_INFO << "failed initializing libpurple"; return; } QMap<QByteArray, Protocol_ptr> id2proto; auto protos = purple_plugins_get_protocols (); while (protos) { auto item = static_cast<PurplePlugin*> (protos->data); protos = protos->next; const auto& proto = std::make_shared<Protocol> (item, Proxy_); const auto& purpleId = proto->GetPurpleID (); if (purpleId == "prpl-jabber" || purpleId == "prpl-irc") continue; Protocols_ << proto; id2proto [purpleId] = proto; } auto accs = purple_accounts_get_all (); while (accs) { auto acc = static_cast<PurpleAccount*> (accs->data); accs = accs->next; id2proto [purple_account_get_protocol_id (acc)]->PushAccount (acc); } purple_blist_load (); purple_savedstatus_activate (purple_savedstatus_get_startup ()); }
static void pidgin_ui_init(void) { pidgin_stock_init(); /* Set the UI operation structures. */ purple_accounts_set_ui_ops(pidgin_accounts_get_ui_ops()); purple_xfers_set_ui_ops(pidgin_xfers_get_ui_ops()); purple_blist_set_ui_ops(pidgin_blist_get_ui_ops()); purple_notify_set_ui_ops(pidgin_notify_get_ui_ops()); purple_privacy_set_ui_ops(pidgin_privacy_get_ui_ops()); purple_request_set_ui_ops(pidgin_request_get_ui_ops()); purple_sound_set_ui_ops(pidgin_sound_get_ui_ops()); purple_connections_set_ui_ops(pidgin_connections_get_ui_ops()); purple_whiteboard_set_ui_ops(pidgin_whiteboard_get_ui_ops()); #if defined(USE_SCREENSAVER) || defined(HAVE_IOKIT) purple_idle_set_ui_ops(pidgin_idle_get_ui_ops()); #endif pidgin_account_init(); pidgin_connection_init(); pidgin_blist_init(); pidgin_status_init(); pidgin_conversations_init(); pidgin_pounces_init(); pidgin_privacy_init(); pidgin_xfers_init(); pidgin_roomlist_init(); pidgin_log_init(); pidgin_docklet_init(); pidgin_smileys_init(); pidgin_utils_init(); pidgin_medias_init(); pidgin_notify_init(); }
xmlnode * _h_elim_init ( const char *name , const char *id , SEXP_VALUE *args , gpointer data ) { ASSERT_ALISTP( args, id, name ); char *dir = ALIST_VAL_STRING( args, "dot-dir" ); char *ui = ALIST_VAL_STRING( args, "ui-id" ); gboolean dbg = ALIST_VAL_BOOL ( args, "debug" ); if( !ui ) { ui = "elim"; } // libpurple initialisation: purple_util_set_user_dir ( dir ); purple_util_init (); purple_core_set_ui_ops ( &elim_core_ui_ops ); purple_eventloop_set_ui_ops ( &elim_eventloop_ui_ops ); purple_blist_set_ui_ops ( &elim_blist_ui_ops ); purple_accounts_set_ui_ops ( &elim_account_ui_ops ); purple_request_set_ui_ops ( &elim_request_ui_ops ); purple_idle_set_ui_ops ( &elim_idle_ui_ops ); purple_connections_set_ui_ops ( &elim_connections_ui_ops ); purple_conversations_set_ui_ops( &elim_conversation_ui_ops ); purple_notify_set_ui_ops ( &elim_notify_ui_ops ); // load any data for init: if( purple_get_core() == NULL ) { // purple debug goes to stdout if we don't divert it here: g_set_print_handler( (GPrintFunc)_h_elim_warning ); // look for plugins in user specified directory tree: char *ppath = g_build_filename( purple_user_dir(), "plugins", NULL ); purple_plugins_add_search_path ( ppath ); purple_debug_set_enabled( dbg ); purple_core_init ( ui ); purple_set_blist ( purple_blist_new() ); purple_prefs_load(); purple_blist_load(); // glib signal initialisation: elim_ft_signals_init(); // tidy up: g_free( ppath ); } else { const char *cur_ui = purple_core_get_ui(); if( strcmp( cur_ui, name ) ) { sexp_val_free( args ); return response_error( EINVAL, id, name, "purple has already been initialised" ); } } sexp_val_free( args ); xmlnode *rval = xnode_new( "alist" ); AL_STR( rval, "ui-id", purple_core_get_ui() ); return response_value( 0, id, name, rval ); }
static int init_libpurple(int argc, char **argv) { char *path; int opt; gboolean opt_help = FALSE; gboolean opt_nologin = FALSE; gboolean opt_version = FALSE; char *opt_config_dir_arg = NULL; gboolean debug_enabled = FALSE; struct option long_options[] = { {"config", required_argument, NULL, 'c'}, {"debug", no_argument, NULL, 'd'}, {"help", no_argument, NULL, 'h'}, {"nologin", no_argument, NULL, 'n'}, {"version", no_argument, NULL, 'v'}, {0, 0, 0, 0} }; #ifdef ENABLE_NLS bindtextdomain(PACKAGE, PURPLE_LOCALEDIR); bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); #endif #ifdef HAVE_SETLOCALE setlocale(LC_ALL, ""); #endif /* scan command-line options */ opterr = 1; while ((opt = getopt_long(argc, argv, "c:dhn::v", long_options, NULL)) != -1) { switch (opt) { case 'c': /* config dir */ g_free(opt_config_dir_arg); opt_config_dir_arg = g_strdup(optarg); break; case 'd': /* debug */ debug_enabled = TRUE; break; case 'h': /* help */ opt_help = TRUE; break; case 'n': /* no autologin */ opt_nologin = TRUE; break; case 'v': /* version */ opt_version = TRUE; break; case '?': /* show terse help */ default: show_usage(argv[0], TRUE); return 0; break; } } /* show help message */ if (opt_help) { show_usage(argv[0], FALSE); return 0; } /* show version message */ if (opt_version) { /* Translators may want to transliterate the name. It is not to be translated. */ printf("%s %s (%s)\n", _("Finch"), DISPLAY_VERSION, REVISION); return 0; } /* set a user-specified config directory */ if (opt_config_dir_arg != NULL) { if (g_path_is_absolute(opt_config_dir_arg)) { purple_util_set_user_dir(opt_config_dir_arg); } else { /* Make an absolute (if not canonical) path */ char *cwd = g_get_current_dir(); char *path = g_build_path(G_DIR_SEPARATOR_S, cwd, opt_config_dir_arg, NULL); purple_util_set_user_dir(path); g_free(path); g_free(cwd); } g_free(opt_config_dir_arg); } /* * We're done piddling around with command line arguments. * Fire up this baby. */ /* We don't want debug-messages to show up and corrupt the display */ purple_debug_set_enabled(debug_enabled); purple_core_set_ui_ops(gnt_core_get_ui_ops()); purple_eventloop_set_ui_ops(gnt_eventloop_get_ui_ops()); purple_idle_set_ui_ops(finch_idle_get_ui_ops()); if (!purple_core_init(FINCH_UI)) { fprintf(stderr, "Initialization of the Purple core failed. Dumping core.\n" "Please report this!\n"); abort(); } path = g_build_filename(purple_user_dir(), "plugins", NULL); if (g_mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR) != 0 && errno != EEXIST) fprintf(stderr, "Couldn't create plugins dir\n"); purple_plugins_add_search_path(path); g_free(path); purple_plugins_add_search_path(FINCH_LIBDIR); purple_plugins_refresh(); /* TODO: should this be moved into finch_prefs_init() ? */ finch_prefs_update_old(); /* load plugins we had when we quit */ purple_plugins_load_saved("/finch/plugins/loaded"); if (opt_nologin) { /* Set all accounts to "offline" */ PurpleSavedStatus *saved_status; /* If we've used this type+message before, lookup the transient status */ saved_status = purple_savedstatus_find_transient_by_type_and_message( PURPLE_STATUS_OFFLINE, NULL); /* If this type+message is unique then create a new transient saved status */ if (saved_status == NULL) saved_status = purple_savedstatus_new(NULL, PURPLE_STATUS_OFFLINE); /* Set the status for each account */ purple_savedstatus_activate(saved_status); } else { /* Everything is good to go--sign on already */ if (!purple_prefs_get_bool("/purple/savedstatus/startup_current_status")) purple_savedstatus_activate(purple_savedstatus_get_startup()); purple_accounts_restore_current_statuses(); } return 1; }