summaryrefslogtreecommitdiff
path: root/src/administration_writer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/administration_writer.cpp')
-rw-r--r--src/administration_writer.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index 3191be7..8cd1dcf 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -933,7 +933,7 @@ bool administration_writer::save_administration_info_blocking()
//// Write to Disk.
int final_length = (int)strops::length(file_content);
if (!xml_string_is_valid((uint8_t*)file_content, final_length)) result = 0;
- else if (!write_to_zip(ADMIN_FILE_INFO, file_content, final_length)) result = 0;
+ else if (!write_to_zip(ADMIN_INFO_FILE, file_content, final_length)) result = 0;
memops::unalloc(file_content);
@@ -941,4 +941,55 @@ bool administration_writer::save_administration_info_blocking()
else logger::error("Failed to save administration info.");
return result;
+}
+
+bool administration_writer::save_activities_blocking()
+{
+ STOPWATCH_START;
+
+ u32 activity_count = administration::activity_count();
+ u32 activity_list_buffer_size = (u32)strops::length(file_template::activity_template) * 3 * activity_count; // Ballpark list size. // @TODO
+ if (activity_list_buffer_size == 0) activity_list_buffer_size = 100;
+
+ char* activity_list_buffer = (char*)memops::alloc(activity_list_buffer_size);
+ memops::zero(activity_list_buffer, activity_list_buffer_size);
+ u32 activity_list_buffer_cursor = 0;
+
+ snprintf(activity_list_buffer, activity_list_buffer_size, "<ActivityList>"); // @TODO replace with strops function
+ activity_list_buffer_cursor += strlen(activity_list_buffer);
+
+ for (u32 i = 0; i < activity_count; i++)
+ {
+ activity ac;
+ a_err found = administration::activity_get_by_index(i, &ac);
+ if (found != A_ERR_SUCCESS) continue;
+
+ int buf_length = 0;
+ char* file_content = copy_template(file_template::activity_template, &buf_length);
+
+ strops::replace_int32(file_content, buf_length, "{{TIMESTAMP}}", ac.timestamp);
+ strops::replace(file_content, buf_length, "{{USERNAME}}", ac.user_name);
+ strops::replace(file_content, buf_length, "{{REF_ID}}", ac.ref_id);
+ strops::replace(file_content, buf_length, "{{MESSAGE}}", ac.message);
+
+ u32 content_len = (u32)strops::length(file_content);
+ memops::copy(activity_list_buffer+activity_list_buffer_cursor, file_content, content_len);
+
+ activity_list_buffer_cursor += content_len;
+ }
+
+ snprintf(activity_list_buffer+activity_list_buffer_cursor, activity_list_buffer_size-activity_list_buffer_cursor, "</ActivityList>");
+
+ //// Write to Disk.
+ bool result = 1;
+ int final_length = (int)strops::length(activity_list_buffer);
+ if (!xml_string_is_valid((uint8_t*)activity_list_buffer, final_length)) result = 0;
+ else if (!write_to_zip(ACTIVITY_FILE, activity_list_buffer, final_length)) result = 0;
+
+ memops::unalloc(activity_list_buffer);
+
+ if (result) logger::info("Saved activity list in %.3fms.", STOPWATCH_TIME);
+ else logger::error("Failed to save activity list.");
+
+ return result;
} \ No newline at end of file