Skip to content

feat: improve calendar migrator#57112

Open
SebastianKrupinski wants to merge 3 commits intomasterfrom
feat/improve-calendar-migrator
Open

feat: improve calendar migrator#57112
SebastianKrupinski wants to merge 3 commits intomasterfrom
feat/improve-calendar-migrator

Conversation

@SebastianKrupinski
Copy link
Contributor

@SebastianKrupinski SebastianKrupinski commented Dec 16, 2025

Summary

  • Resolves User Data Migration calendar#7793
  • refactored dav calendar export to use export service to prevent memory exhaustion
  • refactored dav calendar export to calendar add meta data to archive
  • refactored dav calendar import to use import service to prevent memory exhaustion
  • refactored dav calendar import to use calendar meta data from archive
  • made import backwards compatible to import version 1 archives.
  • Added ability to export and import subscriptions

Testing

  • Install / Enable user migration app
  • Export a user using console: occ user:export
  • Create new user
  • Import the data using console: occ user:import --user

Checklist

Comment on lines +310 to +314
if (str_starts_with($line, 'X-WR-CALNAME:')) {
$calendarName = substr($line, 13);
} elseif (str_starts_with($line, 'X-APPLE-CALENDAR-COLOR:')) {
$calendarColor = substr($line, 23);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why relying on non-standard properties since you've already got this information in the calendar meta?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is for compatibility... the first version of the migrator only created a single ICS file with custom properties for the name... part of the improvements is the ".meta" file.

@SebastianKrupinski SebastianKrupinski force-pushed the feat/improve-calendar-migrator branch from d27c7f9 to 1899e5f Compare January 12, 2026 18:05
This was referenced Jan 14, 2026
Copy link
Member

@ChristophWurst ChristophWurst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🐘

Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
@SebastianKrupinski SebastianKrupinski force-pushed the feat/improve-calendar-migrator branch from 1899e5f to bad2541 Compare January 27, 2026 21:24
This was referenced Jan 29, 2026
This was referenced Feb 11, 2026
@blizzz blizzz removed this from the Nextcloud 33 milestone Feb 16, 2026
@blizzz blizzz added this to the Nextcloud 34 milestone Feb 16, 2026
@ChristophWurst
Copy link
Member

/backport to stable33


$importSource->method('pathExists')
->willReturnCallback(function (string $path) {
if ($path === 'dav/calendars/calendars.json') {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not making the constants public and use them here?

$files = array_values(array_diff($files, ['.', '..']));
$this->assertNotEmpty($files, 'No asset files found');

// Load all ICS content and build calendars metadata

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this could be removed? I mean the metadata is included in the .meta file for V2 exports.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you talking about this:

$files = array_values(array_diff($files, ['.', '..']));
$this->assertNotEmpty($files, 'No asset files found');

Or the comment?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm talking about the block that comes after the comment (manually building the metadata instead of only using the .meta file).

Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: 🏗️ In progress

Development

Successfully merging this pull request may close these issues.

User Data Migration

5 participants