Status pluginDataGet(const Account &account, const std::string &plugin, const std::string &key, std::string &data) { PluginDataFile json; ABC_CHECK(json.load(keyFilename(account, plugin, key), account.login.dataKey())); ABC_CHECK(json.keyOk()); ABC_CHECK(json.dataOk()); if (json.key() != key) return ABC_ERROR(ABC_CC_JSONError, "Plugin filename does not match contents"); data = json.data(); return Status(); }
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; }