gint main (gint argc, gchar **argv) { GOptionContext *context; EDBusServer *server; GError *error = NULL; setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); prompt_user_init (&argc, &argv); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error != NULL) { g_printerr ("%s\n", error->message); exit (EXIT_FAILURE); } e_gdbus_templates_init_main_thread (); server = e_user_prompter_server_new (); g_signal_connect ( server, "prompt", G_CALLBACK (prompt_user_show), NULL); g_print ("Prompter is up and running...\n"); /* This SHOULD keep the server's use * count from ever reaching zero. */ if (opt_keep_running) e_dbus_server_hold (server); e_dbus_server_run (server, TRUE); g_object_unref (server); g_print ("Bye.\n"); return 0; }
gint main (gint argc, gchar **argv) { GOptionContext *context; EDBusServer *server; EDBusServerExitCode exit_code; GError *error = NULL; #ifdef G_OS_WIN32 e_util_win32_initialize (); #endif setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); /* Workaround https://bugzilla.gnome.org/show_bug.cgi?id=674885 */ g_type_ensure (G_TYPE_DBUS_CONNECTION); #if defined (ENABLE_MAINTAINER_MODE) && defined (HAVE_GTK) if (g_getenv ("EDS_TESTING") == NULL) /* This is only to load gtk-modules, like * bug-buddy's gnomesegvhandler, if possible */ gtk_init_check (&argc, &argv); #endif context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error != NULL) { g_printerr ("%s\n", error->message); exit (EXIT_FAILURE); } e_gdbus_templates_init_main_thread (); reload: server = e_data_book_factory_new (NULL, &error); if (error != NULL) { g_printerr ("%s\n", error->message); exit (EXIT_FAILURE); } g_debug ("Server is up and running..."); /* This SHOULD keep the server's use * count from ever reaching zero. */ if (opt_keep_running) e_dbus_server_hold (server); exit_code = e_dbus_server_run (server, opt_wait_for_client); g_object_unref (server); if (exit_code == E_DBUS_SERVER_EXIT_RELOAD) { g_debug ("Reloading..."); goto reload; } g_debug ("Bye."); return 0; }
gint main (gint argc, gchar **argv) { GOptionContext *context; EDBusServer *server; GError *error = NULL; #ifdef G_OS_WIN32 /* Reduce risks */ { typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName); t_SetDllDirectoryA p_SetDllDirectoryA; p_SetDllDirectoryA = GetProcAddress ( GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA"); if (p_SetDllDirectoryA != NULL) p_SetDllDirectoryA (""); } #ifndef _WIN64 { typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags); t_SetProcessDEPPolicy p_SetProcessDEPPolicy; p_SetProcessDEPPolicy = GetProcAddress ( GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy"); if (p_SetProcessDEPPolicy != NULL) p_SetProcessDEPPolicy ( PROCESS_DEP_ENABLE | PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION); } #endif #endif setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #if defined (ENABLE_MAINTAINER_MODE) && defined (HAVE_GTK) /* This is only to load gtk-modules, like * bug-buddy's gnomesegvhandler, if possible. */ gtk_init_check (&argc, &argv); #else g_type_init (); #endif context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error != NULL) { g_printerr ("%s\n", error->message); exit (EXIT_FAILURE); } #ifdef HAVE_ICAL_UNKNOWN_TOKEN_HANDLING ical_set_unknown_token_handling_setting (ICAL_DISCARD_TOKEN); #endif e_gdbus_templates_init_main_thread (); server = e_data_cal_factory_new (NULL, &error); if (error != NULL) { g_printerr ("%s\n", error->message); exit (EXIT_FAILURE); } g_print ("Server is up and running...\n"); /* This SHOULD keep the server's use * count from ever reaching zero. */ if (opt_keep_running) e_dbus_server_hold (server); e_dbus_server_run (server, opt_wait_for_client); g_object_unref (server); g_print ("Bye.\n"); return 0; }
static gboolean impl_CalFactory_get_cal (EGdbusCalFactory *object, GDBusMethodInvocation *invocation, const gchar * const *in_source_type, EDataCalFactory *factory) { EDataCal *calendar; EBackend *backend; EDataCalFactoryPrivate *priv = factory->priv; GDBusConnection *connection; ESource *source; gchar *uri; gchar *path = NULL; const gchar *sender; GList *list; GError *error = NULL; gchar *source_xml = NULL; guint type = 0; sender = g_dbus_method_invocation_get_sender (invocation); connection = g_dbus_method_invocation_get_connection (invocation); if (!e_gdbus_cal_factory_decode_get_cal (in_source_type, &source_xml, &type)) { error = g_error_new ( E_DATA_CAL_ERROR, NoSuchCal, _("Invalid call")); g_dbus_method_invocation_return_gerror (invocation, error); g_error_free (error); return TRUE; } source = e_source_new_from_standalone_xml (source_xml); g_free (source_xml); if (!source) { error = g_error_new ( E_DATA_CAL_ERROR, NoSuchCal, _("Invalid source")); g_dbus_method_invocation_return_gerror (invocation, error); g_error_free (error); return TRUE; } uri = e_source_get_uri (source); if (uri == NULL || *uri == '\0') { g_object_unref (source); g_free (uri); error = g_error_new ( E_DATA_CAL_ERROR, NoSuchCal, _("Empty URI")); g_dbus_method_invocation_return_gerror (invocation, error); g_error_free (error); return TRUE; } backend = e_data_cal_factory_get_backend (factory, source, uri, type); if (backend == NULL) { error = g_error_new ( E_DATA_CAL_ERROR, NoSuchCal, _("Invalid source")); g_dbus_method_invocation_return_gerror (invocation, error); g_error_free (error); return TRUE; } g_mutex_lock (priv->calendars_lock); e_dbus_server_hold (E_DBUS_SERVER (factory)); path = construct_cal_factory_path (); calendar = e_data_cal_new (E_CAL_BACKEND (backend)); g_hash_table_insert (priv->calendars, g_strdup (path), calendar); e_cal_backend_add_client (E_CAL_BACKEND (backend), calendar); e_data_cal_register_gdbus_object (calendar, connection, path, &error); g_object_weak_ref ( G_OBJECT (calendar), (GWeakNotify) calendar_freed_cb, factory); /* Update the hash of open connections. */ g_mutex_lock (priv->connections_lock); list = g_hash_table_lookup (priv->connections, sender); list = g_list_prepend (list, calendar); g_hash_table_insert (priv->connections, g_strdup (sender), list); g_mutex_unlock (priv->connections_lock); g_mutex_unlock (priv->calendars_lock); g_object_unref (source); g_free (uri); e_gdbus_cal_factory_complete_get_cal ( object, invocation, path, error); if (error) g_error_free (error); g_free (path); return TRUE; }