std::list<std::string> pluginDataKeys(const Account &account, const std::string &plugin) { std::list<std::string> out; std::string outer = pluginDirectory(account, plugin); DIR *dir = opendir(outer.c_str()); if (!dir) return out; struct dirent *de; while (nullptr != (de = readdir(dir))) { PluginDataFile json; if (fileIsJson(de->d_name) && json.load(outer + de->d_name, account.login.dataKey()) && json.keyOk()) out.push_back(json.key()); } closedir(dir); return out; }
Status AddressDb::load() { std::lock_guard<std::mutex> lock(mutex_); addresses_.clear(); files_.clear(); // Open the directory: DIR *dir = opendir(dir_.c_str()); if (dir) { struct dirent *de; while (nullptr != (de = readdir(dir))) { if (!fileIsJson(de->d_name)) continue; // Try to load the address: Address address; AddressJson json; if (json.load(dir_ + de->d_name, wallet_.dataKey()).log() && json.unpack(address).log()) { if (path(address) != dir_ + de->d_name) ABC_DebugLog("Filename %s does not match address", de->d_name); addresses_[address.address] = address; files_[address.address] = json; } } closedir(dir); } ABC_CHECK(stockpile()); return Status(); }