* Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA #include "conversation.h" #include "savedstatuses.h" #include "smiley-custom.h" #include "smiley-parser.h" #include "smiley-theme.h" #include "sound-theme-loader.h" #include "theme-manager.h" static PurpleCoreUiOps *_ops = NULL; static PurpleCore *_core = NULL; purple_core_print_version(void) GHashTable *ui_info = purple_core_get_ui_info(); gchar *ui_full_name = NULL; ui_name = ui_info ? g_hash_table_lookup(ui_info, "name") : NULL; ui_version = ui_info ? g_hash_table_lookup(ui_info, "version") : NULL; ui_full_name = g_strdup_printf("%s %s", ui_name, ui_version); ui_full_name = g_strdup(ui_name); purple_debug_info("main", "Launching %s%slibpurple %s", ui_full_name ? ui_full_name : "", ui_full_name ? " with " : "", purple_core_get_version()); purple_core_init(const char *ui) g_return_val_if_fail(ui != NULL, FALSE); g_return_val_if_fail(purple_get_core() == NULL, FALSE); bindtextdomain(PACKAGE, PURPLE_LOCALEDIR); _core = core = g_new0(PurpleCore, 1); ops = purple_core_get_ui_ops(); /* The signals subsystem is important and should be first. */ purple_signal_register(core, "uri-handler", purple_marshal_BOOLEAN__POINTER_POINTER_POINTER, G_TYPE_STRING, /* Protocol */ G_TYPE_STRING, /* Command */ G_TYPE_POINTER); /* Parameters (GHashTable *) */ purple_signal_register(core, "quitting", purple_marshal_VOID, G_TYPE_NONE, purple_signal_register(core, "core-initialized", purple_marshal_VOID, purple_core_print_version(); /* The prefs subsystem needs to be initialized before static protocols * for protocol prefs to work. */ if (ops->ui_prefs_init != NULL) if (ops->debug_ui_init != NULL) /* Since plugins get probed so early we should probably initialize their * subsystem right away too. purple_keyring_init(); /* before accounts */ purple_theme_manager_init(); /* The buddy icon code uses the image store, so init it early. */ _purple_image_store_init(); /* Accounts use status, buddy icons and connection signals, so * initialize these before accounts purple_buddy_icons_init(); purple_connections_init(); purple_savedstatuses_init(); purple_conversations_init(); _purple_smiley_custom_init(); _purple_smiley_parser_init(); * Call this early on to try to auto-detect our IP address and * hopefully save some time later. purple_network_get_my_ip(-1); if (ops != NULL && ops->ui_init != NULL) /* The UI may have registered some theme types, so refresh them */ purple_theme_manager_refresh(); /* Load the buddy list after UI init */ purple_signal_emit(purple_get_core(), "core-initialized"); PurpleCore *core = purple_get_core(); g_return_if_fail(core != NULL); /* The self destruct sequence has been initiated */ purple_signal_emit(purple_get_core(), "quitting"); purple_connections_disconnect_all(); /* Save .xml files, remove signals, etc. */ _purple_smiley_theme_uninit(); _purple_smiley_custom_uninit(); _purple_smiley_parser_uninit(); purple_conversations_uninit(); purple_connections_uninit(); purple_buddy_icons_uninit(); purple_savedstatuses_uninit(); purple_statuses_uninit(); purple_accounts_uninit(); purple_keyring_uninit(); /* after accounts */ purple_theme_manager_uninit(); _purple_image_store_uninit(); ops = purple_core_get_ui_ops(); if (ops != NULL && ops->quit != NULL) /* Everything after prefs_uninit must not try to read any prefs */ purple_protocols_uninit(); _purple_message_uninit(); /* Everything after util_uninit cannot try to write things to the * confdir nor use purple_escape_js purple_core_quit_cb(gpointer unused) purple_core_get_version(void) PurpleCore *core = purple_get_core(); g_return_val_if_fail(core != NULL, NULL); purple_core_ui_ops_copy(PurpleCoreUiOps *ops) PurpleCoreUiOps *ops_new; g_return_val_if_fail(ops != NULL, NULL); ops_new = g_new(PurpleCoreUiOps, 1); purple_core_ui_ops_get_type(void) type = g_boxed_type_register_static("PurpleCoreUiOps", (GBoxedCopyFunc)purple_core_ui_ops_copy, purple_core_set_ui_ops(PurpleCoreUiOps *ops) purple_core_get_ui_ops(void) GHashTable* purple_core_get_ui_info() { PurpleCoreUiOps *ops = purple_core_get_ui_ops(); if(NULL == ops || NULL == ops->get_ui_info) return ops->get_ui_info(); #define MIGRATE_TO_XDG_DIR(xdg_base_dir, legacy_path) \ migrate_res = purple_move_to_xdg_base_dir(xdg_base_dir, legacy_path); \ purple_debug_error("core", "Error migrating %s to %s\n", \ legacy_path, xdg_base_dir); \ purple_core_migrate_to_xdg_base_dirs(void) xdg_dir_exists = g_file_test(purple_data_dir(), G_FILE_TEST_EXISTS); MIGRATE_TO_XDG_DIR(purple_data_dir(), "certificates"); MIGRATE_TO_XDG_DIR(purple_data_dir(), "custom_smiley"); MIGRATE_TO_XDG_DIR(purple_data_dir(), "logs"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "accounts.xml"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "blist.xml"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "fs-codec.conf"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "fs-element.conf"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "pounces.xml"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "prefs.xml"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "smileys.xml"); MIGRATE_TO_XDG_DIR(purple_config_dir(), "status.xml");