From 7c665dcb7a58fb324b6f27ff8443420ed6ba36f9 Mon Sep 17 00:00:00 2001 From: myk002 Date: Sat, 12 Mar 2022 12:28:40 -0800 Subject: [PATCH] allow search terms to match full item labels even when the item label is truncated for length this change also fixes items that were being incorrecty grouped due to having differences only in the truncated part of their labels --- plugins/stocks.cpp | 90 +++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/plugins/stocks.cpp b/plugins/stocks.cpp index 25ced70f7..7c715d956 100644 --- a/plugins/stocks.cpp +++ b/plugins/stocks.cpp @@ -206,47 +206,7 @@ static bool is_item_in_cage_cache(df::item *item) return items_in_cages.find(item) != items_in_cages.end(); } -static string get_keywords(df::item *item) -{ - string keywords; - - if (item->flags.bits.in_job) - keywords += "job "; - - if (item->flags.bits.rotten) - keywords += "rotten "; - - if (item->flags.bits.owned) - keywords += "owned "; - - if (item->flags.bits.forbid) - keywords += "forbid "; - - if (item->flags.bits.dump) - keywords += "dump "; - - if (item->flags.bits.on_fire) - keywords += "fire "; - - if (item->flags.bits.melt) - keywords += "melt "; - - if (is_item_in_cage_cache(item)) - keywords += "caged "; - - if (is_in_inventory(item)) - keywords += "inventory "; - - if (depot_info.canTrade()) - { - if (is_marked_for_trade(item)) - keywords += "trade "; - } - - return keywords; -} - -static string get_item_label(df::item *item, bool trim = false) +static string get_item_label(df::item *item, bool truncate, bool trim) { auto label = Items::getBookTitle(item); if (label == "") @@ -289,11 +249,51 @@ static string get_item_label(df::item *item, bool trim = false) label = wearX + label + wearX; } - label = pad_string(label, MAX_NAME, false, true); + label = pad_string(label, MAX_NAME, false, truncate); return label; } +static string get_keywords(df::item *item) +{ + string keywords; + + if (item->flags.bits.in_job) + keywords += "job "; + + if (item->flags.bits.rotten) + keywords += "rotten "; + + if (item->flags.bits.owned) + keywords += "owned "; + + if (item->flags.bits.forbid) + keywords += "forbid "; + + if (item->flags.bits.dump) + keywords += "dump "; + + if (item->flags.bits.on_fire) + keywords += "fire "; + + if (item->flags.bits.melt) + keywords += "melt "; + + if (is_item_in_cage_cache(item)) + keywords += "caged "; + + if (is_in_inventory(item)) + keywords += "inventory "; + + if (depot_info.canTrade()) + { + if (is_marked_for_trade(item)) + keywords += "trade "; + } + + return keywords + get_item_label(item, false, false); +} + struct item_grouped_entry { std::vector entries; @@ -303,7 +303,7 @@ struct item_grouped_entry if (entries.size() == 0) return ""; - return get_item_label(entries[0], grouped); + return get_item_label(entries[0], true, grouped); } string getKeywords() const @@ -1265,7 +1265,7 @@ private: auto item_group = &grouped_items_store.back(); item_group->entries.push_back(item); - auto label = get_item_label(item); + auto label = get_item_label(item, true, false); auto entry = ListEntry(label, item_group, item_group->getKeywords()); items_column.add(entry); @@ -1304,7 +1304,7 @@ private: string getItemHash(df::item *item) { - auto label = get_item_label(item, true); + auto label = get_item_label(item, false, true); auto quality = static_cast(item->getQuality()); auto quality_enum = static_cast(quality); auto quality_string = ENUM_KEY_STR(item_quality, quality_enum);