Example #1
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;
}
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();
}