int main (int argc, char **argv) { ActionContext actctx; GnomeProgram *program; GOptionContext *context; int current_action = ACTION_NOTHING; int IsCSV = FALSE; int IsVCard = FALSE; /*i18n-lize */ bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); program = gnome_program_init ( PACKAGE, VERSION, GNOME_BONOBO_MODULE, argc, argv, GNOME_PARAM_GOPTION_CONTEXT, context, GNOME_PARAM_NONE); /* Parsing Parameter */ if (opt_remaining && g_strv_length (opt_remaining) > 0) opt_addressbook_folder_uri = g_strdup (opt_remaining[0]); if (opt_list_folders_mode != FALSE) { current_action = ACTION_LIST_FOLDERS; /* check there should not be addressbook-folder-uri , and async and size , output_format */ if (opt_addressbook_folder_uri != NULL || opt_async_mode != FALSE || opt_output_format != NULL || opt_file_size != 0) { g_warning (_("Command line arguments error, please use --help option to see the usage.")); exit (-1); } } else { current_action = ACTION_LIST_CARDS; /* check the output format */ if (opt_output_format == NULL) { IsVCard = TRUE; } else { IsCSV = !strcmp (opt_output_format, "csv"); IsVCard = !strcmp (opt_output_format, "vcard"); if (IsCSV == FALSE && IsVCard == FALSE) { g_warning (_("Only support csv or vcard format.")); exit (-1); } } /*check async and output file */ if (opt_async_mode == TRUE) { /* check have to output file , set default file_size */ if (opt_output_file == NULL) { g_warning (_("In async mode, output must be file.")); exit (-1); } if (opt_file_size == 0) opt_file_size = DEFAULT_SIZE_NUMBER; } else { /*check no file_size */ if (opt_file_size != 0) { g_warning (_("In normal mode, there is no need for the size option.")); exit (-1); } } } /* do actions */ if (current_action == ACTION_LIST_FOLDERS) { actctx.action_type = current_action; if (opt_output_file == NULL) { actctx.action_list_folders.output_file = NULL; } else { actctx.action_list_folders.output_file = g_strdup (opt_output_file); } action_list_folders_init (&actctx); } else if (current_action == ACTION_LIST_CARDS) { actctx.action_type = current_action; if (opt_output_file == NULL) { actctx.action_list_cards.output_file = NULL; } else { actctx.action_list_cards.output_file = g_strdup (opt_output_file); } actctx.action_list_cards.IsCSV = IsCSV; actctx.action_list_cards.IsVCard = IsVCard; actctx.action_list_cards.addressbook_folder_uri = g_strdup (opt_addressbook_folder_uri); actctx.action_list_cards.async_mode = opt_async_mode; actctx.action_list_cards.file_size = opt_file_size; action_list_cards_init (&actctx); } else { g_warning (_("Unhandled error")); exit (-1); } /*FIXME:should free actctx's some char* field, such as output_file! but since the program will end, so that will not cause mem leak. */ exit (0); }
gint main (gint argc, gchar **argv) { ActionContext actctx; GOptionContext *context; GError *error = NULL; gint current_action = ACTION_NOTHING; gint IsCSV = FALSE; gint IsVCard = FALSE; #ifdef G_OS_WIN32 e_util_win32_initialize (); #endif /*i18n-lize */ bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_printerr ("%s\n", error->message); g_error_free (error); exit (-1); } actctx.registry = e_source_registry_new_sync (NULL, &error); if (error != NULL) { g_printerr ("%s\n", error->message); g_error_free (error); exit (-1); } /* Parsing Parameter */ if (opt_remaining && g_strv_length (opt_remaining) > 0) opt_addressbook_source_uid = g_strdup (opt_remaining[0]); if (opt_list_folders_mode != FALSE) { current_action = ACTION_LIST_FOLDERS; if (opt_addressbook_source_uid != NULL || opt_output_format != NULL) { g_warning (_("Command line arguments error, please use --help option to see the usage.")); exit (-1); } } else { current_action = ACTION_LIST_CARDS; /* check the output format */ if (opt_output_format == NULL) { IsVCard = TRUE; } else { IsCSV = !strcmp (opt_output_format, "csv"); IsVCard = !strcmp (opt_output_format, "vcard"); if (IsCSV == FALSE && IsVCard == FALSE) { g_warning (_("Only support csv or vcard format.")); exit (-1); } } } /* do actions */ if (current_action == ACTION_LIST_FOLDERS) { actctx.action_type = current_action; if (opt_output_file == NULL) { actctx.output_file = NULL; } else { actctx.output_file = g_strdup (opt_output_file); } action_list_folders_init (&actctx); } else if (current_action == ACTION_LIST_CARDS) { actctx.action_type = current_action; if (opt_output_file == NULL) { actctx.output_file = NULL; } else { actctx.output_file = g_strdup (opt_output_file); } actctx.IsCSV = IsCSV; actctx.IsVCard = IsVCard; actctx.addressbook_source_uid = g_strdup (opt_addressbook_source_uid); action_list_cards_init (&actctx); } else { g_warning (_("Unhandled error")); exit (-1); } g_object_unref (actctx.registry); /*FIXME:should free actctx's some gchar * field, such as output_file! but since the program will end, so that will not cause mem leak. */ return 0; }