diff --git a/Libraries/LibGUI/JsonArrayModel.cpp b/Libraries/LibGUI/JsonArrayModel.cpp index 60305641bf..9e158212e3 100644 --- a/Libraries/LibGUI/JsonArrayModel.cpp +++ b/Libraries/LibGUI/JsonArrayModel.cpp @@ -48,6 +48,49 @@ void JsonArrayModel::update() did_update(); } +bool JsonArrayModel::store() +{ + auto file = Core::File::construct(m_json_path); + if (!file->open(Core::IODevice::WriteOnly)) { + dbg() << "Unable to open " << file->filename(); + return false; + } + + file->write(m_array.to_string()); + file->close(); + return true; +} + +bool JsonArrayModel::add(const Vector&& values) +{ + ASSERT(values.size() == m_fields.size()); + JsonObject obj; + for (size_t i = 0; i < m_fields.size(); ++i) { + auto& field_spec = m_fields[i]; + obj.set(field_spec.json_field_name, values.at(i)); + } + m_array.append(move(obj)); + did_update(); + return true; +} + +bool JsonArrayModel::remove(int row) +{ + if (row >= m_array.size()) + return false; + + JsonArray new_array; + for (int i = 0; i < m_array.size(); ++i) + if (i != row) + new_array.append(m_array.at(i)); + + m_array = new_array; + + did_update(); + + return true; +} + Model::ColumnMetadata JsonArrayModel::column_metadata(int column) const { ASSERT(column < static_cast(m_fields.size())); diff --git a/Libraries/LibGUI/JsonArrayModel.h b/Libraries/LibGUI/JsonArrayModel.h index e29838c60f..f6366cf637 100644 --- a/Libraries/LibGUI/JsonArrayModel.h +++ b/Libraries/LibGUI/JsonArrayModel.h @@ -76,6 +76,10 @@ public: const String& json_path() const { return m_json_path; } void set_json_path(const String& json_path); + bool add(const Vector&& fields); + bool remove(int row); + bool store(); + private: JsonArrayModel(const String& json_path, Vector&& fields) : m_json_path(json_path)