Commit b349e0c4ee3b86ceac899a0c0734bd30d2a15de3
1 parent
68f3236d
Exists in
master
and in
1 other branch
Reimplementing load of queue from xml file.
Showing
5 changed files
with
168 additions
and
32 deletions
Show diff stats
src/include/v3270/filetransfer.h
| @@ -116,6 +116,8 @@ | @@ -116,6 +116,8 @@ | ||
| 116 | 116 | ||
| 117 | LIB3270_EXPORT GObject * v3270_ft_activity_new(); | 117 | LIB3270_EXPORT GObject * v3270_ft_activity_new(); |
| 118 | 118 | ||
| 119 | + LIB3270_EXPORT void v3270_ft_activity_set_from_context(GObject * activity, GMarkupParseContext * context); | ||
| 120 | + | ||
| 119 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); | 121 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_local_filename(GObject *object); |
| 120 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); | 122 | LIB3270_EXPORT const gchar * v3270_ft_activity_get_remote_filename(GObject *object); |
| 121 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); | 123 | LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_activity_get_options(GObject *object); |
src/v3270ft/activity.c
| @@ -192,3 +192,78 @@ | @@ -192,3 +192,78 @@ | ||
| 192 | G_V3270_FT_ACTIVITY(object)->values[id] = value; | 192 | G_V3270_FT_ACTIVITY(object)->values[id] = value; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, V3270FTActivity *activity, GError **error) | ||
| 196 | + { | ||
| 197 | + if(!g_ascii_strcasecmp(element_name,"file")) | ||
| 198 | + { | ||
| 199 | + const gchar *type; | ||
| 200 | + const gchar *path; | ||
| 201 | + | ||
| 202 | + if(!g_markup_collect_attributes( | ||
| 203 | + element_name,names,values,error, | ||
| 204 | + G_MARKUP_COLLECT_STRING, "type", &type, | ||
| 205 | + G_MARKUP_COLLECT_STRING, "path", &path, | ||
| 206 | + G_MARKUP_COLLECT_INVALID | ||
| 207 | + )) { | ||
| 208 | + | ||
| 209 | + return; | ||
| 210 | + | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + if(g_ascii_strcasecmp(type,"local") == 0) | ||
| 214 | + v3270_ft_activity_set_local_filename(G_OBJECT(activity),path); | ||
| 215 | + else if(g_ascii_strcasecmp(type,"remote") == 0) | ||
| 216 | + v3270_ft_activity_set_remote_filename(G_OBJECT(activity),path); | ||
| 217 | + | ||
| 218 | + } | ||
| 219 | + else if(!g_ascii_strcasecmp(element_name,"option")) | ||
| 220 | + { | ||
| 221 | + const gchar *name; | ||
| 222 | + const gchar *value; | ||
| 223 | + | ||
| 224 | + if(!g_markup_collect_attributes( | ||
| 225 | + element_name,names,values,error, | ||
| 226 | + G_MARKUP_COLLECT_STRING, "name", &name, | ||
| 227 | + G_MARKUP_COLLECT_STRING, "value", &value, | ||
| 228 | + G_MARKUP_COLLECT_INVALID | ||
| 229 | + )) { | ||
| 230 | + | ||
| 231 | + return; | ||
| 232 | + | ||
| 233 | + } | ||
| 234 | + | ||
| 235 | + | ||
| 236 | + } | ||
| 237 | + else if(!g_ascii_strcasecmp(element_name,"parameter")) | ||
| 238 | + { | ||
| 239 | + const gchar *name; | ||
| 240 | + const gchar *value; | ||
| 241 | + | ||
| 242 | + if(!g_markup_collect_attributes( | ||
| 243 | + element_name,names,values,error, | ||
| 244 | + G_MARKUP_COLLECT_STRING, "name", &name, | ||
| 245 | + G_MARKUP_COLLECT_STRING, "value", &value, | ||
| 246 | + G_MARKUP_COLLECT_INVALID | ||
| 247 | + )) { | ||
| 248 | + | ||
| 249 | + return; | ||
| 250 | + | ||
| 251 | + } | ||
| 252 | + | ||
| 253 | + } | ||
| 254 | + | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + void v3270_ft_activity_set_from_context(GObject * activity, GMarkupParseContext * context) | ||
| 258 | + { | ||
| 259 | + static const GMarkupParser parser = { | ||
| 260 | + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **)) element_start, | ||
| 261 | + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **)) NULL, | ||
| 262 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
| 263 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
| 264 | + (void (*)(GMarkupParseContext *, GError *, gpointer)) NULL | ||
| 265 | + }; | ||
| 266 | + | ||
| 267 | + g_markup_parse_context_push(context,&parser,activity); | ||
| 268 | + | ||
| 269 | + } |
src/v3270ft/activitylist.c
| @@ -63,32 +63,6 @@ | @@ -63,32 +63,6 @@ | ||
| 63 | 63 | ||
| 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 65 | 65 | ||
| 66 | - static const struct _option_list | ||
| 67 | - { | ||
| 68 | - LIB3270_FT_OPTION option; | ||
| 69 | - const gchar * name; | ||
| 70 | - const gchar * value; | ||
| 71 | - } | ||
| 72 | - option_list[] = | ||
| 73 | - { | ||
| 74 | - | ||
| 75 | - { LIB3270_FT_OPTION_SEND, "type", "send", }, | ||
| 76 | - { LIB3270_FT_OPTION_RECEIVE, "type", "receive", }, | ||
| 77 | - { LIB3270_FT_OPTION_ASCII, "format", "ascii", }, | ||
| 78 | - { LIB3270_FT_OPTION_CRLF, "format", "crlf", }, | ||
| 79 | - { LIB3270_FT_OPTION_APPEND, "format", "append", }, | ||
| 80 | - { LIB3270_FT_OPTION_REMAP, "format", "remap", }, | ||
| 81 | - { LIB3270_FT_OPTION_UNIX, "file-format", "unix", }, | ||
| 82 | - { LIB3270_FT_RECORD_FORMAT_DEFAULT, "record-format", "default", }, | ||
| 83 | - { LIB3270_FT_RECORD_FORMAT_FIXED, "record-format", "fixed", }, | ||
| 84 | - { LIB3270_FT_RECORD_FORMAT_VARIABLE, "record-format", "variable", }, | ||
| 85 | - { LIB3270_FT_RECORD_FORMAT_UNDEFINED, "record-format", "undefined", }, | ||
| 86 | - { LIB3270_FT_ALLOCATION_UNITS_DEFAULT, "units", "default", }, | ||
| 87 | - { LIB3270_FT_ALLOCATION_UNITS_TRACKS, "units", "tracks", }, | ||
| 88 | - { LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, "units", "cylinders", }, | ||
| 89 | - { LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, "units", "avblock", }, | ||
| 90 | - }; | ||
| 91 | - | ||
| 92 | static void dispose(GObject *object) | 66 | static void dispose(GObject *object) |
| 93 | { | 67 | { |
| 94 | debug("%s",__FUNCTION__); | 68 | debug("%s",__FUNCTION__); |
| @@ -183,6 +157,59 @@ | @@ -183,6 +157,59 @@ | ||
| 183 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); | 157 | gtk_list_store_set((GtkListStore *) model, &iter, 0, activity, -1); |
| 184 | } | 158 | } |
| 185 | 159 | ||
| 160 | + static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, V3270FTActivityList *widget, GError **error) | ||
| 161 | + { | ||
| 162 | + if(!g_ascii_strcasecmp(element_name,"entry")) | ||
| 163 | + { | ||
| 164 | + // Create new activity | ||
| 165 | + GObject * activity = v3270_ft_activity_new(); | ||
| 166 | + v3270_ft_activity_set_from_context(activity,context); | ||
| 167 | + v3270_activity_list_append(GTK_WIDGET(widget), activity); | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + static void element_end(GMarkupParseContext *context, const gchar *element_name, G_GNUC_UNUSED void *info,G_GNUC_UNUSED GError **error) | ||
| 173 | + { | ||
| 174 | + if(!g_ascii_strcasecmp(element_name,"entry")) | ||
| 175 | + { | ||
| 176 | + g_markup_parse_context_pop(context); | ||
| 177 | + } | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + static void reload(GtkWidget *widget) | ||
| 181 | + { | ||
| 182 | + static const GMarkupParser parser = { | ||
| 183 | + (void (*)(GMarkupParseContext *, const gchar *, const gchar **, const gchar **, gpointer, GError **)) element_start, | ||
| 184 | + (void (*)(GMarkupParseContext *, const gchar *, gpointer, GError **)) element_end, | ||
| 185 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
| 186 | + (void (*)(GMarkupParseContext *, const gchar *, gsize, gpointer, GError **)) NULL, | ||
| 187 | + (void (*)(GMarkupParseContext *, GError *, gpointer)) NULL | ||
| 188 | + }; | ||
| 189 | + | ||
| 190 | + GError * error = NULL; | ||
| 191 | + g_autofree gchar * text = NULL; | ||
| 192 | + | ||
| 193 | + if(g_file_get_contents(GTK_V3270_FT_ACTIVITY_LIST(widget)->filename,&text,NULL,&error)) { | ||
| 194 | + | ||
| 195 | + GMarkupParseContext * context = | ||
| 196 | + g_markup_parse_context_new( | ||
| 197 | + &parser, | ||
| 198 | + G_MARKUP_TREAT_CDATA_AS_TEXT|G_MARKUP_PREFIX_ERROR_POSITION, | ||
| 199 | + widget, | ||
| 200 | + NULL | ||
| 201 | + ); | ||
| 202 | + | ||
| 203 | + /* | ||
| 204 | + GMarkupParseContext * context = g_markup_parse_context_new(&parser,G_MARKUP_TREAT_CDATA_AS_TEXT|G_MARKUP_PREFIX_ERROR_POSITION,GTK_V3270FT(widget),NULL); | ||
| 205 | + g_markup_parse_context_parse(context,text,strlen(text),&error); | ||
| 206 | + g_markup_parse_context_free(context); | ||
| 207 | + */ | ||
| 208 | + | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + } | ||
| 212 | + | ||
| 186 | void v3270_activity_list_load(GtkWidget *widget) | 213 | void v3270_activity_list_load(GtkWidget *widget) |
| 187 | { | 214 | { |
| 188 | V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); | 215 | V3270FTActivityList * list = GTK_V3270_FT_ACTIVITY_LIST(widget); |
| @@ -200,8 +227,11 @@ | @@ -200,8 +227,11 @@ | ||
| 200 | list->filename = filename; | 227 | list->filename = filename; |
| 201 | } | 228 | } |
| 202 | 229 | ||
| 230 | + reload(widget); | ||
| 231 | + | ||
| 203 | g_signal_emit(widget, v3270_activity_list_signals[V3270_ACTIVITY_LIST_HAS_FILE_SIGNAL], 0, (list->filename == NULL ? FALSE : TRUE)); | 232 | g_signal_emit(widget, v3270_activity_list_signals[V3270_ACTIVITY_LIST_HAS_FILE_SIGNAL], 0, (list->filename == NULL ? FALSE : TRUE)); |
| 204 | 233 | ||
| 234 | + | ||
| 205 | } | 235 | } |
| 206 | 236 | ||
| 207 | void v3270_activity_list_save(GtkWidget *widget) | 237 | void v3270_activity_list_save(GtkWidget *widget) |
| @@ -232,10 +262,10 @@ | @@ -232,10 +262,10 @@ | ||
| 232 | g_string_append_printf(str,"\t\t<file type=\'remote\' path=\'%s\' />\n",v3270_ft_activity_get_remote_filename(activity)); | 262 | g_string_append_printf(str,"\t\t<file type=\'remote\' path=\'%s\' />\n",v3270_ft_activity_get_remote_filename(activity)); |
| 233 | 263 | ||
| 234 | LIB3270_FT_OPTION options = v3270_ft_activity_get_options(activity); | 264 | LIB3270_FT_OPTION options = v3270_ft_activity_get_options(activity); |
| 235 | - for(ix = 0; ix < G_N_ELEMENTS(option_list);ix++) | 265 | + for(ix = 0; ix < v3270_activity_list_options[ix].name;ix++) |
| 236 | { | 266 | { |
| 237 | - if(options & option_list[ix].option) | ||
| 238 | - g_string_append_printf(str,"\t\t<option name=\'%s\' value=\'%s\' />\n",option_list[ix].name,option_list[ix].value); | 267 | + if(options & v3270_activity_list_options[ix].option) |
| 268 | + g_string_append_printf(str,"\t\t<option name=\'%s\' value=\'%s\' />\n",v3270_activity_list_options[ix].name,v3270_activity_list_options[ix].value); | ||
| 239 | } | 269 | } |
| 240 | 270 | ||
| 241 | for(ix=0;ix<LIB3270_FT_VALUE_COUNT;ix++) { | 271 | for(ix=0;ix<LIB3270_FT_VALUE_COUNT;ix++) { |
src/v3270ft/private.h
| @@ -97,9 +97,17 @@ | @@ -97,9 +97,17 @@ | ||
| 97 | 97 | ||
| 98 | }; | 98 | }; |
| 99 | 99 | ||
| 100 | - extern const struct v3270ft_option ft_option[]; | ||
| 101 | - extern const struct v3270ft_type ft_type[]; | ||
| 102 | - extern const struct v3270ft_value ft_value[]; | 100 | + struct v3270_activity_list_option |
| 101 | + { | ||
| 102 | + LIB3270_FT_OPTION option; | ||
| 103 | + const gchar * name; | ||
| 104 | + const gchar * value; | ||
| 105 | + }; | ||
| 106 | + | ||
| 107 | + G_GNUC_INTERNAL extern const struct v3270ft_option ft_option[]; | ||
| 108 | + G_GNUC_INTERNAL extern const struct v3270ft_type ft_type[]; | ||
| 109 | + G_GNUC_INTERNAL extern const struct v3270ft_value ft_value[]; | ||
| 110 | + G_GNUC_INTERNAL extern const struct v3270_activity_list_option v3270_activity_list_options[]; | ||
| 103 | 111 | ||
| 104 | #define ENTRY_FILENAME_LENGTH FILENAME_MAX | 112 | #define ENTRY_FILENAME_LENGTH FILENAME_MAX |
| 105 | struct v3270ft_entry { | 113 | struct v3270ft_entry { |
src/v3270ft/tables.c
| @@ -197,3 +197,24 @@ const struct v3270ft_value ft_value[] = { | @@ -197,3 +197,24 @@ const struct v3270ft_value ft_value[] = { | ||
| 197 | 197 | ||
| 198 | }; | 198 | }; |
| 199 | 199 | ||
| 200 | +const struct v3270_activity_list_option v3270_activity_list_options[] = | ||
| 201 | +{ | ||
| 202 | + | ||
| 203 | + { LIB3270_FT_OPTION_SEND, "type", "send" }, | ||
| 204 | + { LIB3270_FT_OPTION_RECEIVE, "type", "receive" }, | ||
| 205 | + { LIB3270_FT_OPTION_ASCII, "format", "ascii" }, | ||
| 206 | + { LIB3270_FT_OPTION_CRLF, "format", "crlf" }, | ||
| 207 | + { LIB3270_FT_OPTION_APPEND, "format", "append" }, | ||
| 208 | + { LIB3270_FT_OPTION_REMAP, "format", "remap" }, | ||
| 209 | + { LIB3270_FT_OPTION_UNIX, "file-format", "unix" }, | ||
| 210 | + { LIB3270_FT_RECORD_FORMAT_DEFAULT, "record-format", "default" }, | ||
| 211 | + { LIB3270_FT_RECORD_FORMAT_FIXED, "record-format", "fixed" }, | ||
| 212 | + { LIB3270_FT_RECORD_FORMAT_VARIABLE, "record-format", "variable" }, | ||
| 213 | + { LIB3270_FT_RECORD_FORMAT_UNDEFINED, "record-format", "undefined" }, | ||
| 214 | + { LIB3270_FT_ALLOCATION_UNITS_DEFAULT, "units", "default" }, | ||
| 215 | + { LIB3270_FT_ALLOCATION_UNITS_TRACKS, "units", "tracks" }, | ||
| 216 | + { LIB3270_FT_ALLOCATION_UNITS_CYLINDERS, "units", "cylinders" }, | ||
| 217 | + { LIB3270_FT_ALLOCATION_UNITS_AVBLOCK, "units", "avblock" }, | ||
| 218 | + { 0, NULL, NULL } | ||
| 219 | +}; | ||
| 220 | + |