Skip to content

Unhandled exception in migrate-google-takeout  #1053

@hindsholm

Description

@hindsholm

Describe the bug

I have made a Google takeout and placed the photos and .json files on a drive which is mounted as "external storage" at /MntPhotos in Nextcloud.
All photos have been scanned and are visible in the Memories app.
Now I want to use the metadata in the Google .json files, so I run:

sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ memories:migrate-google-takeout --override --user=morten --folder=/MntPhotos/Bratten

The command starts scanning but fails on the first file with an unhandled exception.

I have tried different combinations of the --user and --folder options, but I get the same error.

To Reproduce
I don't know what to say here, but the bug is easily reproducable on my setup. The command fails consistently.

Screenshots
Output:

sudo docker exec --user www-data -it nextcloud-aio-nextcloud php occ memories:migrate-google-takeout --override --user=morten --folder=/MntPhotos/Bratten
This command will migrate JSON metadata from Google Takeout to EXIF metadata.
Only metadata that is missing from EXIF will be migrated, unless --override is specified.
It will also update the JSON files to mark them as migrated.
Make sure you have a backup of your originals before running this command.
Also make sure exiftool is working beforehand by running memories:index on some files.
Are you sure you want to continue? (y/N): y
Migrating user morten
Scanning folder /morten/files/MntPhotos/Bratten
Writing EXIF metadata for /morten/files/MntPhotos/Bratten/IMG_6663.JPG (AllDates)
An unhandled exception has been thrown:
TypeError: OC\Files\View::basicOperation(): Argument #2 ($path) must be of type string, null given, called in /var/www/html/lib/private/Files/View.php on line 528 and defined in /var/www/html/lib/private/Files/View.php:1128
Stack trace:
#0 /var/www/html/lib/private/Files/View.php(528): OC\Files\View->basicOperation('file_exists', NULL)
#1 /var/www/html/lib/private/Files/Filesystem.php(545): OC\Files\View->file_exists(NULL)
#2 /var/www/html/apps/files_versions/lib/Storage.php(189): OC\Files\Filesystem::file_exists(NULL)
#3 /var/www/html/apps/files_versions/lib/Listener/FileEventsListener.php(196): OCA\Files_Versions\Storage::store(NULL)
#4 /var/www/html/apps/files_versions/lib/Listener/FileEventsListener.php(102): OCA\Files_Versions\Listener\FileEventsListener->write_hook(Object(OC\Files\Node\File))
#5 /var/www/html/lib/private/EventDispatcher/ServiceEventListener.php(86): OCA\Files_Versions\Listener\FileEventsListener->handle(Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent))
#6 /var/www/html/3rdparty/symfony/event-dispatcher/EventDispatcher.php(251): OC\EventDispatcher\ServiceEventListener->__invoke(Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent), 'OCP\\Files\\Event...', Object(Symfony\Component\EventDispatcher\EventDispatcher))
#7 /var/www/html/3rdparty/symfony/event-dispatcher/EventDispatcher.php(73): Symfony\Component\EventDispatcher\EventDispatcher->callListeners(Array, 'OCP\\Files\\Event...', Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent))
#8 /var/www/html/lib/private/EventDispatcher/EventDispatcher.php(94): Symfony\Component\EventDispatcher\EventDispatcher->dispatch(Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent), 'OCP\\Files\\Event...')
#9 /var/www/html/lib/private/EventDispatcher/EventDispatcher.php(106): OC\EventDispatcher\EventDispatcher->dispatch('OCP\\Files\\Event...', Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent))
#10 /var/www/html/lib/private/Files/Node/HookConnector.php(112): OC\EventDispatcher\EventDispatcher->dispatchTyped(Object(OCP\Files\Events\Node\BeforeNodeWrittenEvent))
#11 /var/www/html/lib/private/legacy/OC_Hook.php(105): OC\Files\Node\HookConnector->write(Array)
#12 /var/www/html/lib/private/Files/View.php(1275): OC_Hook::emit('OC_Filesystem', 'write', Array)
#13 /var/www/html/lib/private/Files/View.php(1144): OC\Files\View->runHooks(Array, '/MntPhotos/Brat...')
#14 /var/www/html/lib/private/Files/View.php(680): OC\Files\View->basicOperation('file_put_conten...', '/morten/files/M...', Array, '{\n    "title": ...')
#15 /var/www/html/lib/private/Files/Node/File.php(73): OC\Files\View->file_put_contents('/morten/files/M...', '{\n    "title": ...')
#16 /var/www/html/custom_apps/memories/lib/Command/MigrateGoogleTakeout.php(279): OC\Files\Node\File->putContent('{\n    "title": ...')
#17 /var/www/html/custom_apps/memories/lib/Command/MigrateGoogleTakeout.php(170): OCA\Memories\Command\MigrateGoogleTakeout->migrateFile(Object(OC\Files\Node\File))
#18 /var/www/html/custom_apps/memories/lib/Command/MigrateGoogleTakeout.php(150): OCA\Memories\Command\MigrateGoogleTakeout->migrateFolder(Object(OC\Files\Node\Folder))
#19 /var/www/html/custom_apps/memories/lib/Command/MigrateGoogleTakeout.php(112): OCA\Memories\Command\MigrateGoogleTakeout->migrateUser(Object(OC\User\User))
#20 /var/www/html/3rdparty/symfony/console/Command/Command.php(298): OCA\Memories\Command\MigrateGoogleTakeout->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 /var/www/html/3rdparty/symfony/console/Application.php(1040): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /var/www/html/3rdparty/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(OCA\Memories\Command\MigrateGoogleTakeout), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 /var/www/html/3rdparty/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 /var/www/html/lib/private/Console/Application.php(211): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /var/www/html/console.php(100): OC\Console\Application->run()
#26 /var/www/html/occ(11): require_once('/var/www/html/c...')
#27 {main}

Contents of Bratten/IMG_6663.JPG.json:

{
  "title": "IMG_6663.JPG",
  "description": "",
  "imageViews": "70",
  "creationTime": {
    "timestamp": "1281650148",
    "formatted": "Aug 12, 2010, 9:55:48 PM UTC"
  },
  "photoTakenTime": {
    "timestamp": "1280572001",
    "formatted": "Jul 31, 2010, 10:26:41 AM UTC"
  },
  "geoData": {
    "latitude": 0.0,
    "longitude": 0.0,
    "altitude": 0.0,
    "latitudeSpan": 0.0,
    "longitudeSpan": 0.0
  },
  "geoDataExif": {
    "latitude": 0.0,
    "longitude": 0.0,
    "altitude": 0.0,
    "latitudeSpan": 0.0,
    "longitudeSpan": 0.0
  },
  "people": [{
    "name": "George",
    "email": "[email protected]",
    "x": 0.28125,
    "y": 0.2221181,
    "width": 0.09375,
    "height": 0.16869728
  }, {
    "name": "George"
  }, {
    "name": "Lise"
  }],
  "url": "https://photos.google.com/photo/AF1QipN_C-zeVtzWzYtSgb6q5gU1-0_hASvrKmRYfqaR",
  "googlePhotosOrigin": {
    "picasa": {
    }
  }
}

Platform:

  • OS: Ubuntu 22.04.3 LTS
  • Browser: Firefox
  • Memories Version: 6.2.2
  • Nextcloud Version: 27.1.5
  • PHP Version: 8.1.27

Additional context
Please let me know if I should run some further tests.

  • Any errors in the JS console? N/A
  • Any errors in the Nextcloud server logs? No

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedNeeds fix or release upstreambugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions