From aaedc95e817c55576ed7413bc2220800bb66ef85 Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Fri, 29 Apr 2022 03:03:01 +0000 Subject: [PATCH] Update calendar estimation Signed-off-by: Christopher Ng --- .../lib/UserMigration/CalendarMigrator.php | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/dav/lib/UserMigration/CalendarMigrator.php b/apps/dav/lib/UserMigration/CalendarMigrator.php index 5a296a2b527..057f7dce77d 100644 --- a/apps/dav/lib/UserMigration/CalendarMigrator.php +++ b/apps/dav/lib/UserMigration/CalendarMigrator.php @@ -51,6 +51,7 @@ use Sabre\VObject\Property\ICalendar\DateTime; use Sabre\VObject\Reader as VObjectReader; use Sabre\VObject\UUIDUtil; use Safe\Exceptions\StringsException; +use Symfony\Component\Console\Output\NullOutput; use Symfony\Component\Console\Output\OutputInterface; use Throwable; @@ -211,15 +212,25 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator { * {@inheritDoc} */ public function getEstimatedExportSize(IUser $user): int { - $principalUri = $this->getPrincipalUri($user); + $calendarExports = $this->getCalendarExports($user, new NullOutput()); + $calendarCount = count($calendarExports); + + // 150B for top-level properties + $size = ($calendarCount * 150) / 1024; - return array_sum(array_map( - function (ICalendar $calendar) use ($user): int { - // FIXME 1MiB by calendar, no idea if this is accurate and if we should go into more details - return 1000; + $componentCount = array_sum(array_map( + function (array $data): int { + /** @var VCalendar $vCalendar */ + $vCalendar = $data['vCalendar']; + return count($vCalendar->getComponents()); }, - $this->calendarManager->getCalendarsForPrincipal($principalUri), + $calendarExports, )); + + // 450B for each component (events, todos, alarms, etc.) + $size += ($componentCount * 450) / 1024; + + return (int)ceil($size); } /** -- 2.39.5