From 52a21198a4797d3b3aa92ecc0def3ca8017ff276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 27 Sep 2018 15:13:38 +0200 Subject: [PATCH] [apps/ion] Use the new storage API --- apps/code/console_controller.cpp | 2 +- apps/code/menu_controller.cpp | 2 +- apps/code/script_node_cell.cpp | 4 ++-- apps/code/script_node_cell.h | 2 +- apps/code/script_store.cpp | 2 +- ion/include/ion/storage.h | 1 + ion/src/shared/storage.cpp | 21 +++++++++++++++++++++ 7 files changed, 28 insertions(+), 6 deletions(-) diff --git a/apps/code/console_controller.cpp b/apps/code/console_controller.cpp index 19009dcf2..2e0e1e9e6 100644 --- a/apps/code/console_controller.cpp +++ b/apps/code/console_controller.cpp @@ -335,7 +335,7 @@ void ConsoleController::autoImportScript(Script script, bool force) { assert(strlen(k_importCommand1) + strlen(script.name()) - strlen(ScriptStore::k_scriptExtension) + strlen(k_importCommand2) + 1 <= k_maxImportCommandSize); char command[k_maxImportCommandSize]; size_t currentChar = strlcpy(command, k_importCommand1, k_maxImportCommandSize); - const char * scriptName = script.name(); + const char * scriptName = script.fullName(); currentChar += strlcpy(command+currentChar, scriptName, k_maxImportCommandSize - currentChar); // Remove the name extension ".py" currentChar -= strlen(ScriptStore::k_scriptExtension); diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index a850512f7..8331b3f7b 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -273,7 +273,7 @@ int MenuController::typeAtLocation(int i, int j) { void MenuController::willDisplayScriptTitleCellForIndex(HighlightCell * cell, int index) { assert(index >= 0 && index < m_scriptStore->numberOfScripts()); EditableTextCell * editableTextCell = static_cast(cell)->editableTextCell(); - editableTextCell->textField()->setText(m_scriptStore->scriptAtIndex(index).name()); + editableTextCell->textField()->setText(m_scriptStore->scriptAtIndex(index).fullName()); } void MenuController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) { diff --git a/apps/code/script_node_cell.cpp b/apps/code/script_node_cell.cpp index c60ddf84d..8fcdbc15a 100644 --- a/apps/code/script_node_cell.cpp +++ b/apps/code/script_node_cell.cpp @@ -28,7 +28,7 @@ void ScriptNodeCell::ScriptNodeView::drawRect(KDContext * ctx, KDRect rect) cons if (m_scriptNode->type() == ScriptNode::Type::Function) { ctx->drawString(ScriptNodeCell::k_parentheses, KDPoint(nameSize.width(), Metric::TableCellLabelTopMargin), k_font, KDColorBlack, isHighlighted()? Palette::Select : KDColorWhite); } - ctx->drawString(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).name(), KDPoint(0, Metric::TableCellLabelTopMargin + nameSize.height() + k_verticalMargin), k_font, Palette::GreyDark, isHighlighted()? Palette::Select : KDColorWhite); + ctx->drawString(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).fullName(), KDPoint(0, Metric::TableCellLabelTopMargin + nameSize.height() + k_verticalMargin), k_font, Palette::GreyDark, isHighlighted()? Palette::Select : KDColorWhite); } KDSize ScriptNodeCell::ScriptNodeView::minimalSizeForOptimalDisplay() const { @@ -36,7 +36,7 @@ KDSize ScriptNodeCell::ScriptNodeView::minimalSizeForOptimalDisplay() const { return KDSizeZero; } KDSize size1 = k_font->stringSize(m_scriptNode->name()); - KDSize size2 = k_font->stringSize(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).name()); + KDSize size2 = k_font->stringSize(m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).fullName()); KDSize size3 = KDSizeZero; if (m_scriptNode->type() == ScriptNode::Type::Function) { size3 = k_font->stringSize(ScriptNodeCell::k_parentheses); diff --git a/apps/code/script_node_cell.h b/apps/code/script_node_cell.h index 893d51378..ae1c252ba 100644 --- a/apps/code/script_node_cell.h +++ b/apps/code/script_node_cell.h @@ -34,7 +34,7 @@ protected: void drawRect(KDContext * ctx, KDRect rect) const override; virtual KDSize minimalSizeForOptimalDisplay() const override; const char * text() const override { - return m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).name(); + return m_scriptStore->scriptAtIndex(m_scriptNode->scriptIndex()).fullName(); } private: constexpr static const KDFont * k_font = KDFont::SmallFont; diff --git a/apps/code/script_store.cpp b/apps/code/script_store.cpp index b64038aa8..b07a976c5 100644 --- a/apps/code/script_store.cpp +++ b/apps/code/script_store.cpp @@ -122,7 +122,7 @@ const char * ScriptStore::contentOfScript(const char * name) { Script::ErrorStatus ScriptStore::addScriptFromTemplate(const ScriptTemplate * scriptTemplate) { size_t valueSize = strlen(scriptTemplate->content())+1+1;// scriptcontent size + 1 char for the importation status assert(Script::nameCompliant(scriptTemplate->name())); - Script::ErrorStatus err = Ion::Storage::sharedStorage()->createRecord(scriptTemplate->name(), scriptTemplate->value(), valueSize); + Script::ErrorStatus err = Ion::Storage::sharedStorage()->createRecordWithFullName(scriptTemplate->name(), scriptTemplate->value(), valueSize); assert(err != Script::ErrorStatus::NonCompliantName); return err; } diff --git a/ion/include/ion/storage.h b/ion/include/ion/storage.h index 41d95a0ee..9de9a0591 100644 --- a/ion/include/ion/storage.h +++ b/ion/include/ion/storage.h @@ -70,6 +70,7 @@ public: int numberOfRecordsWithExtension(const char * extension); // Record creation + Record::ErrorStatus createRecordWithFullName(const char * fullName, const void * data, size_t size); Record::ErrorStatus createRecordWithExtension(const char * baseName, const char * extension, const void * data, size_t size); // Record getters diff --git a/ion/src/shared/storage.cpp b/ion/src/shared/storage.cpp index 14c560ed2..68e499803 100644 --- a/ion/src/shared/storage.cpp +++ b/ion/src/shared/storage.cpp @@ -96,6 +96,27 @@ size_t Storage::availableSize() { return k_storageSize-(endBuffer()-m_buffer)-sizeof(record_size_t); } +Storage::Record::ErrorStatus Storage::createRecordWithFullName(const char * fullName, const void * data, size_t size) { + size_t recordSize = sizeOfRecordWithFullName(fullName, size); + if (recordSize >= k_maxRecordSize || recordSize > availableSize()) { + return Record::ErrorStatus::NotEnoughSpaceAvailable; + } + if (isFullNameTaken(fullName)) { + return Record::ErrorStatus::NameTaken; + } + // Find the end of data + char * newRecord = endBuffer(); + // Fill totalSize + newRecord += overrideSizeAtPosition(newRecord, (record_size_t)recordSize); + // Fill name + newRecord += overrideFullNameAtPosition(newRecord, fullName); + // Fill data + newRecord += overrideValueAtPosition(newRecord, data, size); + // Next Record is null-sized + overrideSizeAtPosition(newRecord, 0); + return Record::ErrorStatus::None; +} + Storage::Record::ErrorStatus Storage::createRecordWithExtension(const char * baseName, const char * extension, const void * data, size_t size) { size_t recordSize = sizeOfRecordWithBaseNameAndExtension(baseName, extension, size); if (recordSize >= k_maxRecordSize || recordSize > availableSize()) {