From 39e74c627e01bf330038315834036484c3814a5f Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sun, 2 Jul 2023 10:27:56 +0200 Subject: [PATCH] impr: Handle unidentifiable data in the data information view better --- .../include/content/helpers/diagrams.hpp | 4 ++++ plugins/builtin/romfs/lang/en_US.json | 2 ++ .../source/content/views/view_information.cpp | 18 ++++++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/builtin/include/content/helpers/diagrams.hpp b/plugins/builtin/include/content/helpers/diagrams.hpp index 70587efe1..14f0ef04c 100644 --- a/plugins/builtin/include/content/helpers/diagrams.hpp +++ b/plugins/builtin/include/content/helpers/diagrams.hpp @@ -812,6 +812,10 @@ namespace hex { // Return the percentage of plain text character inside the analyzed region double getPlainTextCharacterPercentage() { + if (this->m_yBlockTypeDistributions[2].empty() || this->m_yBlockTypeDistributions[4].empty()) + return -1.0; + + double plainTextPercentage = std::reduce(this->m_yBlockTypeDistributions[2].begin(), this->m_yBlockTypeDistributions[2].end()) / this->m_yBlockTypeDistributions[2].size(); return plainTextPercentage + std::reduce(this->m_yBlockTypeDistributions[4].begin(), this->m_yBlockTypeDistributions[4].end()) / this->m_yBlockTypeDistributions[4].size(); } diff --git a/plugins/builtin/romfs/lang/en_US.json b/plugins/builtin/romfs/lang/en_US.json index a3573830a..dc24f965c 100644 --- a/plugins/builtin/romfs/lang/en_US.json +++ b/plugins/builtin/romfs/lang/en_US.json @@ -816,6 +816,8 @@ "hex.builtin.view.information.magic_db_added": "Magic database added!", "hex.builtin.view.information.mime": "MIME Type:", "hex.builtin.view.information.name": "Data Information", + "hex.builtin.view.information.octet_stream_text": "Unknown", + "hex.builtin.view.information.octet_stream_warning": "application/octet-stream denotes an unknown data type.\n\nThis means that this data has no MIME type associated with it because it's not in a known format.", "hex.builtin.view.information.region": "Analyzed region", "hex.builtin.view.information.plain_text": "This data is most likely plain text.", "hex.builtin.view.information.plain_text_percentage": "Plain text percentage", diff --git a/plugins/builtin/source/content/views/view_information.cpp b/plugins/builtin/source/content/views/view_information.cpp index cd9fef193..11d17a2e7 100644 --- a/plugins/builtin/source/content/views/view_information.cpp +++ b/plugins/builtin/source/content/views/view_information.cpp @@ -199,14 +199,28 @@ namespace hex::plugin::builtin { ImGui::TableNextColumn(); ImGui::TextUnformatted("hex.builtin.view.information.description"_lang); ImGui::TableNextColumn(); - ImGui::TextFormattedWrapped("{}", this->m_dataDescription.c_str()); + + if (this->m_dataDescription == "data") { + ImGui::TextFormattedColored(ImVec4(0.92F, 0.25F, 0.2F, 1.0F), "{} ({})", "hex.builtin.view.information.octet_stream_text"_lang, this->m_dataDescription); + } else { + ImGui::TextFormattedWrapped("{}", this->m_dataDescription); + } } if (!this->m_dataMimeType.empty()) { ImGui::TableNextColumn(); ImGui::TextUnformatted("hex.builtin.view.information.mime"_lang); ImGui::TableNextColumn(); - ImGui::TextFormattedWrapped("{}", this->m_dataMimeType.c_str()); + + if (this->m_dataMimeType == "application/octet-stream") { + ImGui::TextFormattedColored(ImVec4(0.92F, 0.25F, 0.2F, 1.0F), "{} ({})", "hex.builtin.view.information.octet_stream_text"_lang, this->m_dataMimeType); + ImGui::SameLine(); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0)); + ImGui::HelpHover("hex.builtin.view.information.octet_stream_warning"_lang); + ImGui::PopStyleVar(); + } else { + ImGui::TextFormatted("{}", this->m_dataMimeType); + } } ImGui::EndTable();