diff --git a/src/btop_shared.cpp b/src/btop_shared.cpp index 1b8e526..26d7d24 100644 --- a/src/btop_shared.cpp +++ b/src/btop_shared.cpp @@ -27,6 +27,45 @@ tab-size = 4 namespace rng = std::ranges; using namespace Tools; +namespace Cpu { + string trim_name(string name) { + auto name_vec = ssplit(name); + + if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { + auto cpu_pos = v_index(name_vec, "CPU"s); + if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) + name = name_vec.at(cpu_pos + 1); + else + name.clear(); + } else if (v_contains(name_vec, "Ryzen"s)) { + auto ryz_pos = v_index(name_vec, "Ryzen"s); + name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); + } else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { + auto cpu_pos = v_index(name_vec, "CPU"s); + if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1) != "@") + name = name_vec.at(cpu_pos + 1); + else + name.clear(); + } else + name.clear(); + + if (name.empty() and not name_vec.empty()) { + for (const auto &n : name_vec) { + if (n == "@") break; + name += n + ' '; + } + name.pop_back(); + for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Apple", "Core"}) { + name = s_replace(name, replace, ""); + name = s_replace(name, " ", " "); + } + name = trim(name); + } + + return name; + } +} + #ifdef GPU_SUPPORT namespace Gpu { vector gpu_names; diff --git a/src/btop_shared.hpp b/src/btop_shared.hpp index 7e24078..0b6168a 100644 --- a/src/btop_shared.hpp +++ b/src/btop_shared.hpp @@ -233,6 +233,8 @@ namespace Cpu { //* Get battery info from /sys auto get_battery() -> tuple; + + string trim_name(string); } namespace Mem { diff --git a/src/freebsd/btop_collect.cpp b/src/freebsd/btop_collect.cpp index 8662559..1d31d69 100644 --- a/src/freebsd/btop_collect.cpp +++ b/src/freebsd/btop_collect.cpp @@ -216,42 +216,7 @@ namespace Cpu { Logger::error("Failed to get CPU name"); return name; } - name = string(buffer); - - auto name_vec = ssplit(name); - - if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else if (v_contains(name_vec, "Ryzen"s)) { - auto ryz_pos = v_index(name_vec, "Ryzen"s); - name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); - } else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1) != "@") - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else - name.clear(); - - if (name.empty() and not name_vec.empty()) { - for (const auto &n : name_vec) { - if (n == "@") break; - name += n + ' '; - } - name.pop_back(); - for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Core"}) { - name = s_replace(name, replace, ""); - name = s_replace(name, " ", " "); - } - name = trim(name); - } - - return name; + return trim_name(string(buffer)); } bool get_sensors() { diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index 4b3ab95..01f99a8 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -375,42 +375,7 @@ namespace Cpu { } - auto name_vec = ssplit(name, ' '); - - if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } - else if (v_contains(name_vec, "Ryzen"s)) { - auto ryz_pos = v_index(name_vec, "Ryzen"s); - name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") - + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); - } - else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1).size() != 1) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } - else - name.clear(); - - if (name.empty() and not name_vec.empty()) { - for (const auto& n : name_vec) { - if (n == "@") break; - name += n + ' '; - } - name.pop_back(); - for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Core"}) { - name = s_replace(name, replace, ""); - name = s_replace(name, " ", " "); - } - name = trim(name); - } + name = trim_name(name); } return name; diff --git a/src/netbsd/btop_collect.cpp b/src/netbsd/btop_collect.cpp index 234b7d5..93adb50 100644 --- a/src/netbsd/btop_collect.cpp +++ b/src/netbsd/btop_collect.cpp @@ -211,42 +211,7 @@ namespace Cpu { Logger::error("Failed to get CPU name"); return name; } - name = string(buffer); - - auto name_vec = ssplit(name); - - if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else if (v_contains(name_vec, "Ryzen"s)) { - auto ryz_pos = v_index(name_vec, "Ryzen"s); - name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); - } else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1) != "@") - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else - name.clear(); - - if (name.empty() and not name_vec.empty()) { - for (const auto &n : name_vec) { - if (n == "@") break; - name += n + ' '; - } - name.pop_back(); - for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Core"}) { - name = s_replace(name, replace, ""); - name = s_replace(name, " ", " "); - } - name = trim(name); - } - - return name; + return trim_name(string(buffer)); } bool get_sensors() { diff --git a/src/openbsd/btop_collect.cpp b/src/openbsd/btop_collect.cpp index 480b834..27d6cb4 100644 --- a/src/openbsd/btop_collect.cpp +++ b/src/openbsd/btop_collect.cpp @@ -211,42 +211,7 @@ namespace Cpu { Logger::error("Failed to get CPU name"); return name; } - name = string(buffer); - - auto name_vec = ssplit(name); - - if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else if (v_contains(name_vec, "Ryzen"s)) { - auto ryz_pos = v_index(name_vec, "Ryzen"s); - name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); - } else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1) != "@") - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else - name.clear(); - - if (name.empty() and not name_vec.empty()) { - for (const auto &n : name_vec) { - if (n == "@") break; - name += n + ' '; - } - name.pop_back(); - for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Core"}) { - name = s_replace(name, replace, ""); - name = s_replace(name, " ", " "); - } - name = trim(name); - } - - return name; + return trim_name(string(buffer)); } int64_t get_sensor(string device, sensor_type type, int num) { diff --git a/src/osx/btop_collect.cpp b/src/osx/btop_collect.cpp index 4d54e32..50ed74d 100644 --- a/src/osx/btop_collect.cpp +++ b/src/osx/btop_collect.cpp @@ -212,42 +212,7 @@ namespace Cpu { Logger::error("Failed to get CPU name"); return name; } - name = string(buffer); - - auto name_vec = ssplit(name); - - if ((s_contains(name, "Xeon"s) or v_contains(name_vec, "Duo"s)) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')')) - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else if (v_contains(name_vec, "Ryzen"s)) { - auto ryz_pos = v_index(name_vec, "Ryzen"s); - name = "Ryzen" + (ryz_pos < name_vec.size() - 1 ? ' ' + name_vec.at(ryz_pos + 1) : "") + (ryz_pos < name_vec.size() - 2 ? ' ' + name_vec.at(ryz_pos + 2) : ""); - } else if (s_contains(name, "Intel"s) and v_contains(name_vec, "CPU"s)) { - auto cpu_pos = v_index(name_vec, "CPU"s); - if (cpu_pos < name_vec.size() - 1 and not name_vec.at(cpu_pos + 1).ends_with(')') and name_vec.at(cpu_pos + 1) != "@") - name = name_vec.at(cpu_pos + 1); - else - name.clear(); - } else - name.clear(); - - if (name.empty() and not name_vec.empty()) { - for (const auto &n : name_vec) { - if (n == "@") break; - name += n + ' '; - } - name.pop_back(); - for (const auto& replace : {"Processor", "CPU", "(R)", "(TM)", "Intel", "AMD", "Apple", "Core"}) { - name = s_replace(name, replace, ""); - name = s_replace(name, " ", " "); - } - name = trim(name); - } - - return name; + return trim_name(string(buffer)); } bool get_sensors() {