Skip to content

Commit

Permalink
improve csv save
Browse files Browse the repository at this point in the history
  • Loading branch information
xianjimli committed Dec 11, 2023
1 parent f5972bc commit 62d8978
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
3 changes: 3 additions & 0 deletions docs/changes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# 最新动态

2023/12/11
* 完善 cvs file object 保存命令。

2023/12/09
* 增加函数 date\_time\_parse\_date/date\_time\_parse\_time/date\_time\_parse\_date\_time
* 完善 fscript ulen。
Expand Down
18 changes: 16 additions & 2 deletions src/csv/csv_file_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ static ret_t csv_file_object_remove_prop(tk_object_t* obj, const char* name) {

return_value_if_fail(csv_path_parse_ex(o, &p, name, TRUE) == RET_OK, RET_FAIL);

o->is_dirty = TRUE;
return csv_file_remove_row(o->csv, p.row);
}

Expand All @@ -165,6 +166,7 @@ static ret_t csv_file_object_set_prop(tk_object_t* obj, const char* name, const
return csv_file_set_row_checked(o->csv, p.row, value_bool(v));
}

o->is_dirty = TRUE;
str_from_value(&(o->str), v);
return csv_file_set(o->csv, p.row, p.col, o->str.str);
}
Expand Down Expand Up @@ -218,7 +220,7 @@ static bool_t csv_file_object_can_exec(tk_object_t* obj, const char* name, const
return_value_if_fail(o != NULL, RET_BAD_PARAMS);

if (tk_str_ieq(name, TK_OBJECT_CMD_SAVE)) {
return TRUE;
return o->is_dirty;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_RELOAD)) {
return TRUE;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_CLEAR)) {
Expand Down Expand Up @@ -304,23 +306,35 @@ static ret_t csv_file_object_exec(tk_object_t* obj, const char* name, const char
return_value_if_fail(o != NULL, RET_BAD_PARAMS);

if (tk_str_ieq(name, TK_OBJECT_CMD_SAVE)) {
ret = csv_file_save(o->csv, NULL);
if (o->is_dirty) {
o->is_dirty = FALSE;
ret = csv_file_save(o->csv, NULL);
emitter_dispatch_simple_event(EMITTER(obj), EVT_PROPS_CHANGED);
} else {
ret = RET_OK;
log_debug("csv file is not dirty, need not save.\n");
}
} else if (tk_str_ieq(name, TK_OBJECT_CMD_RELOAD)) {
csv_file_reload(o->csv);
ret = RET_ITEMS_CHANGED;
csv_file_object_clear_query(obj);
o->is_dirty = FALSE;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_CLEAR)) {
csv_file_clear(o->csv);
ret = RET_ITEMS_CHANGED;
csv_file_object_clear_query(obj);
o->is_dirty = TRUE;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_REMOVE)) {
o->is_dirty = TRUE;
ret = csv_file_object_remove_prop(obj, args) == RET_OK ? RET_ITEMS_CHANGED : RET_FAIL;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_REMOVE_CHECKED)) {
ret = csv_file_remove_checked_rows(o->csv) == RET_OK ? RET_ITEMS_CHANGED : RET_FAIL;
csv_file_object_clear_query(obj);
o->is_dirty = TRUE;
} else if (tk_str_ieq(name, TK_OBJECT_CMD_ADD)) {
return_value_if_fail(args != NULL, RET_FAIL);
ret = csv_file_append_row(o->csv, args) == RET_OK ? RET_ITEMS_CHANGED : RET_FAIL;
o->is_dirty = TRUE;
} else if (tk_str_eq(name, CSV_CMD_QUERY)) {
if (tk_str_eq(args, CSV_CMD_QUERY_ARG_CLEAR)) {
ret = csv_file_object_clear_query(obj);
Expand Down
1 change: 1 addition & 0 deletions src/csv/csv_file_object.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ typedef struct _csv_file_object_t {
uint32_t rows_map_capacity;
csv_file_object_filter_t filter;
void* filter_ctx;
bool_t is_dirty;
} csv_file_object_t;

/**
Expand Down

0 comments on commit 62d8978

Please sign in to comment.