mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-28 23:12:29 +01:00 
			
		
		
		
	refactor: simpler memory code
This commit is contained in:
		| @@ -3,7 +3,6 @@ | ||||
| waybar::modules::Memory::Memory(const Json::Value& config) | ||||
|   : ALabel(config, "{}%") | ||||
| { | ||||
|   label_.set_name("memory"); | ||||
|   uint32_t interval = config_["interval"].isUInt() ? config_["interval"].asUInt() : 30; | ||||
|   thread_ = [this, interval] { | ||||
|     dp.emit(); | ||||
| @@ -14,56 +13,50 @@ waybar::modules::Memory::Memory(const Json::Value& config) | ||||
| auto waybar::modules::Memory::update() -> void | ||||
| { | ||||
|   parseMeminfo(); | ||||
|   if(memtotal_ > 0 && memfree_ >= 0) { | ||||
|   if (memtotal_ > 0 && memfree_ >= 0) { | ||||
|     int used_ram_percentage = 100 * (memtotal_ - memfree_) / memtotal_; | ||||
|     label_.set_text(fmt::format(format_, used_ram_percentage)); | ||||
|     auto used_ram_gigabytes = (memtotal_ - memfree_) / std::pow(1024, 2); | ||||
|     label_.set_tooltip_text(fmt::format("{:.{}f}Gb used", used_ram_gigabytes, 1)); | ||||
|     label_.set_name("memory"); | ||||
|     label_.show(); | ||||
|   } else { | ||||
|     label_.set_name(""); | ||||
|     label_.hide(); | ||||
|   } | ||||
| } | ||||
|  | ||||
| void waybar::modules::Memory::parseMeminfo() | ||||
| { | ||||
|   long memtotal = -1, memfree = -1, membuffer = -1, memcache = -1, memavail = -1; | ||||
|   int count = 0; | ||||
|   long memfree = -1, membuffer = -1, memcache = -1, memavail = -1; | ||||
|   std::ifstream info(data_dir_); | ||||
|   if (!info.is_open()) { | ||||
|     throw std::runtime_error("Can't open " + data_dir_); | ||||
|   } | ||||
|   std::string line; | ||||
|   std::ifstream info("/proc/meminfo"); | ||||
|   if(info.is_open()) { | ||||
|     while(getline(info, line)) { | ||||
|       auto posDelim = line.find(":"); | ||||
|       std::string name = line.substr(0, posDelim); | ||||
|       long value = std::stol(line.substr(posDelim + 1)); | ||||
|  | ||||
|       if(name.compare("MemTotal") == 0) { | ||||
|         memtotal = value; | ||||
|         count++; | ||||
|       } else if(name.compare("MemAvailable") == 0) { | ||||
|         memavail = value; | ||||
|         count++; | ||||
|       } else if(name.compare("MemFree") == 0) { | ||||
|         memfree = value; | ||||
|         count++; | ||||
|       } else if(name.compare("Buffers") == 0) { | ||||
|         membuffer = value; | ||||
|         count++; | ||||
|       } else if(name.compare("Cached") == 0) { | ||||
|         memcache = value; | ||||
|         count++; | ||||
|       } | ||||
|       if (count >= 5 || (count >= 4 && memavail >= -1)) { | ||||
|         info.close(); | ||||
|       } | ||||
|   while (getline(info, line)) { | ||||
|     auto posDelim = line.find(":"); | ||||
|     if (posDelim == std::string::npos) { | ||||
|       continue; | ||||
|     } | ||||
|     std::string name = line.substr(0, posDelim); | ||||
|     long value = std::stol(line.substr(posDelim + 1)); | ||||
|  | ||||
|     if (name.compare("MemTotal") == 0) { | ||||
|       memtotal_ = value; | ||||
|     } else if (name.compare("MemAvailable") == 0) { | ||||
|       memavail = value; | ||||
|     } else if (name.compare("MemFree") == 0) { | ||||
|       memfree = value; | ||||
|     } else if (name.compare("Buffers") == 0) { | ||||
|       membuffer = value; | ||||
|     } else if (name.compare("Cached") == 0) { | ||||
|       memcache = value; | ||||
|     } | ||||
|     if (memtotal_ > 0 && | ||||
|       (memavail >= 0 || (memfree > -1  && membuffer > -1 && memcache > -1))) { | ||||
|       break; | ||||
|     } | ||||
|   } else { | ||||
|     throw std::runtime_error("Can't open /proc/meminfo"); | ||||
|   } | ||||
|   memtotal_ = memtotal; | ||||
|   if(memavail >= 0) { | ||||
|     memfree_ = memavail; | ||||
|   } else { | ||||
|     memfree_ = memfree + (membuffer + memcache); | ||||
|   } | ||||
|   memfree_ = memavail >= 0 ? memavail : memfree + membuffer + memcache; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alexis
					Alexis