static void gplp_func_file_save (G_GNUC_UNUSED GOFileSaver const *fs, GOPluginService *service, GOIOContext *io_context, gconstpointer wb_view, GsfOutput *output) { ServiceLoaderDataFileSaver *saver_data; PyObject *py_workbook; PyObject *save_result = NULL; PyObject *output_wrapper; g_return_if_fail (GO_IS_PLUGIN_SERVICE_FILE_SAVER (service)); g_return_if_fail (output != NULL); g_return_if_fail (_PyGObject_API != NULL); saver_data = g_object_get_data (G_OBJECT (service), "loader_data"); SWITCH_TO_PLUGIN (go_plugin_service_get_plugin (service)); py_workbook = py_new_Workbook_object (wb_view_get_workbook (wb_view)); output_wrapper = pygobject_new (G_OBJECT (output)); if (output_wrapper != NULL) { /* wrapping adds a reference */ g_object_unref (output); save_result = PyObject_CallFunction (saver_data->python_func_file_save, (char *) "NO", py_workbook, output_wrapper); Py_DECREF (output_wrapper); } if (save_result != NULL) { Py_DECREF (save_result); } else { go_io_error_string (io_context, py_exc_to_string ()); gnm_python_clear_error_if_needed (SERVICE_GET_LOADER (service)->py_object); } }
static void gplp_load_service_file_saver (GOPluginLoader *loader, GOPluginService *service, GOErrorInfo **ret_error) { printf("gplp_load_service_file_saver(start)\n"); GnmPythonPluginLoader *loader_python = GNM_PYTHON_PLUGIN_LOADER (loader); gchar *func_name_file_save; PyObject *python_func_file_save; g_return_if_fail (GO_IS_PLUGIN_SERVICE_FILE_SAVER (service)); GO_INIT_RET_ERROR_INFO (ret_error); gnm_py_interpreter_switch_to (loader_python->py_interpreter_info); gnm_py_interpreter_load(loader_python->py_interpreter_info); func_name_file_save = g_strconcat ( go_plugin_service_get_id (service), "_file_save", NULL); python_func_file_save = PyDict_GetItemString (loader_python->main_module_dict, func_name_file_save); gnm_python_clear_error_if_needed (loader_python->py_object); if (python_func_file_save != NULL) { GOPluginServiceFileSaverCallbacks *cbs; ServiceLoaderDataFileSaver *saver_data; cbs = go_plugin_service_get_cbs (service); cbs->plugin_func_file_save = gplp_func_file_save; saver_data = g_new (ServiceLoaderDataFileSaver, 1); saver_data->python_func_file_save = python_func_file_save; Py_INCREF (saver_data->python_func_file_save); g_object_set_data_full (G_OBJECT (service), "loader_data", saver_data, (GDestroyNotify) gplp_loader_data_saver_free); } else { *ret_error = go_error_info_new_printf ( _("Python file \"%s\" has invalid format."), loader_python->module_name); if (python_func_file_save == NULL) { go_error_info_add_details (*ret_error, go_error_info_new_printf ( _("File doesn't contain \"%s\" function."), func_name_file_save)); } } g_free (func_name_file_save); gnm_py_interpreter_save(loader_python->py_interpreter_info); }