예제 #1
0
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();
}
예제 #2
0
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;
}