From 9fbbbc7ca6767ac401d94ee035dd57ae070aae24 Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Fri, 29 Apr 2022 02:33:45 +0000 Subject: [PATCH] Update contacts estimation Signed-off-by: Christopher Ng --- .../lib/UserMigration/ContactsMigrator.php | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/dav/lib/UserMigration/ContactsMigrator.php b/apps/dav/lib/UserMigration/ContactsMigrator.php index fc498288810..ae1a61ce4f4 100644 --- a/apps/dav/lib/UserMigration/ContactsMigrator.php +++ b/apps/dav/lib/UserMigration/ContactsMigrator.php @@ -48,6 +48,7 @@ use Sabre\VObject\Splitter\VCard as VCardSplitter; use Sabre\VObject\UUIDUtil; use Safe\Exceptions\ArrayException; use Safe\Exceptions\StringsException; +use Symfony\Component\Console\Output\NullOutput; use Symfony\Component\Console\Output\OutputInterface; use Throwable; @@ -198,15 +199,21 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator { * {@inheritDoc} */ public function getEstimatedExportSize(IUser $user): int { - $principalUri = $this->getPrincipalUri($user); + $addressBookExports = $this->getAddressBookExports($user, new NullOutput()); + $addressBookCount = count($addressBookExports); - return array_sum(array_map( - function (array $addressBookInfo) use ($user): int { - // FIXME 1MiB by addressbook, no idea if this is accurate and if we should go into more details - return 1000; - }, - $this->cardDavBackend->getAddressBooksForUser($principalUri), + // 50B for each metadata JSON + $size = ($addressBookCount * 50) / 1024; + + $contactsCount = array_sum(array_map( + fn (array $data): int => count($data['vCards']), + $addressBookExports, )); + + // 350B for each contact + $size += ($contactsCount * 350) / 1024; + + return (int)ceil($size); } /** -- 2.39.5