mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-07 07:44:13 +00:00
spread addresses between subdirectories
This commit is contained in:
parent
6096d572f3
commit
1b6ad8413e
@ -34,8 +34,15 @@ namespace client
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
boost::filesystem::path GetPath () const { return i2p::util::filesystem::GetDefaultDataDir() / "addressbook"; };
|
boost::filesystem::path GetPath () const
|
||||||
|
{
|
||||||
|
return i2p::util::filesystem::GetDefaultDataDir() / "addressbook";
|
||||||
|
}
|
||||||
|
boost::filesystem::path GetAddressPath (const i2p::data::IdentHash& ident) const
|
||||||
|
{
|
||||||
|
auto b32 = ident.ToBase32();
|
||||||
|
return GetPath () / (std::string ("b") + b32[0]) / (b32 + ".b32");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AddressBookFilesystemStorage::AddressBookFilesystemStorage ()
|
AddressBookFilesystemStorage::AddressBookFilesystemStorage ()
|
||||||
@ -47,11 +54,27 @@ namespace client
|
|||||||
if (!boost::filesystem::create_directory (path))
|
if (!boost::filesystem::create_directory (path))
|
||||||
LogPrint (eLogError, "Failed to create addressbook directory");
|
LogPrint (eLogError, "Failed to create addressbook directory");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<const i2p::data::IdentityEx> AddressBookFilesystemStorage::GetAddress (const i2p::data::IdentHash& ident) const
|
std::shared_ptr<const i2p::data::IdentityEx> AddressBookFilesystemStorage::GetAddress (const i2p::data::IdentHash& ident) const
|
||||||
{
|
{
|
||||||
auto filename = GetPath () / (ident.ToBase32() + ".b32");
|
auto filename = GetAddressPath (ident);
|
||||||
|
if (!boost::filesystem::exists (filename))
|
||||||
|
{
|
||||||
|
boost::filesystem::create_directory (filename.parent_path ());
|
||||||
|
// try to find in main folder
|
||||||
|
auto filename1 = GetPath () / (ident.ToBase32 () + ".b32");
|
||||||
|
if (!boost::filesystem::exists (filename1))
|
||||||
|
{
|
||||||
|
boost::system::error_code ec;
|
||||||
|
boost::filesystem::rename (filename1, filename, ec);
|
||||||
|
if (ec)
|
||||||
|
LogPrint (eLogError, "Couldn't move file ", ec.message ());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return nullptr; // address doesn't exist
|
||||||
|
}
|
||||||
std::ifstream f(filename.string (), std::ifstream::binary);
|
std::ifstream f(filename.string (), std::ifstream::binary);
|
||||||
if (f.is_open ())
|
if (f.is_open ())
|
||||||
{
|
{
|
||||||
@ -75,8 +98,14 @@ namespace client
|
|||||||
|
|
||||||
void AddressBookFilesystemStorage::AddAddress (std::shared_ptr<const i2p::data::IdentityEx> address)
|
void AddressBookFilesystemStorage::AddAddress (std::shared_ptr<const i2p::data::IdentityEx> address)
|
||||||
{
|
{
|
||||||
auto filename = GetPath () / (address->GetIdentHash ().ToBase32() + ".b32");
|
auto filename = GetAddressPath (address->GetIdentHash ());
|
||||||
std::ofstream f (filename.string (), std::ofstream::binary | std::ofstream::out);
|
std::ofstream f (filename.string (), std::ofstream::binary | std::ofstream::out);
|
||||||
|
if (!f.is_open ())
|
||||||
|
{
|
||||||
|
// create subdirectory
|
||||||
|
if (boost::filesystem::create_directory (filename.parent_path ()))
|
||||||
|
f.open (filename.string (), std::ofstream::binary | std::ofstream::out); // and try to open again
|
||||||
|
}
|
||||||
if (f.is_open ())
|
if (f.is_open ())
|
||||||
{
|
{
|
||||||
size_t len = address->GetFullLen ();
|
size_t len = address->GetFullLen ();
|
||||||
@ -91,7 +120,7 @@ namespace client
|
|||||||
|
|
||||||
void AddressBookFilesystemStorage::RemoveAddress (const i2p::data::IdentHash& ident)
|
void AddressBookFilesystemStorage::RemoveAddress (const i2p::data::IdentHash& ident)
|
||||||
{
|
{
|
||||||
auto filename = GetPath () / (ident.ToBase32() + ".b32");
|
auto filename = GetAddressPath (ident);
|
||||||
if (boost::filesystem::exists (filename))
|
if (boost::filesystem::exists (filename))
|
||||||
boost::filesystem::remove (filename);
|
boost::filesystem::remove (filename);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user