duplicati/Duplicati/Library/Main/Operation
Kenneth Skovhede 3b695cf065 Added support for Photos on MacOS
This PR adds detection of the MacOS Photos folder, and intercepts reads and replaces them with PhotoKit calls.
With this, it is possible to make backups of all MacOS Photos, even if they are not stored locally.

The previous versions would just make a backup of the on-disk structure, which was not guaranteed to contain all photos, but instead has various indexing for finding photos, and may contain some original photos.

The option `--photos-handling` controls how Duplicati now deals with the Photos folder. The options are:
- `LibraryOnly`: Same as before, just treat it as a folder
- `PhotosOnly`: Ignore the folder contents and just back up the actual photos
- `PhotosAndLibrary` (default): Make a backup of the photos and the library on-disk. This may cause images to be stored twice, but de-duplication will usually limit the storage increase.

The option `--photos-library-path` can be used to point to the on-disk Photo library that should be handled, in case the auto-detection does not pick it up. If this does not point to a valid Photoslibrary, or the path is not being backed up, no special handling will be done.

Note that the restore is not restoring into Photos itself, but instead restores into a sub-folder in the Photolibrary that is called `dup_backup`. To get the photos out after a restore, one needs to right-click the Photolibrary folder, and choose "Show package contents" and then the `dup_backup` folder is revealed.

This is done to keep all photos in the same folder, but avoid messing with the structure of the on-disk Photolibrary.

A future update could allow restoring back into Photos, and metadata is captured for each image to eventually allow this.

This fixes #6381
2025-11-17 17:12:10 +01:00
..
Backup Added support for Photos on MacOS 2025-11-17 17:12:10 +01:00
Common Forwarded cancellation tokens, added some missing .ConfigureAwait() and added some missing docstrings 2025-06-19 11:04:09 +02:00
Restore Reduced the timing of a block to the lifetime of the block request as it roundtrips from/to the BlockManager 2025-11-10 13:28:59 +01:00
BackupHandler.cs Added support for Photos on MacOS 2025-11-17 17:12:10 +01:00
CompactHandler.cs Made the callback on a put command to the backend be a function returning an awaitable Task rather than an Action. 2025-06-23 10:27:09 +02:00
CreateBugReportHandler.cs Removed zip64 code in bugreport as the compression modules handle this automatically now. 2025-07-27 11:59:34 +02:00
DeleteHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
FilelistProcessor.cs Various updates after the upgrade 2025-11-14 15:45:19 +01:00
ListAffected.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListBrokenFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListChangesHandler.cs Various updates after the upgrade 2025-11-14 15:45:19 +01:00
ListControlFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListFilesetsHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListFileVersionsHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
ListFolderHandler.cs Various updates after the upgrade 2025-11-14 15:45:19 +01:00
PurgeBrokenFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
PurgeFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
RecreateDatabaseHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
RepairHandler.cs Added support for Photos on MacOS 2025-11-17 17:12:10 +01:00
RestoreControlFilesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
RestoreHandler.cs Check the database for volume sizes reported in remotevolume 2025-11-10 14:56:20 +01:00
RestoreHandlerMetadataStorage.cs Feature/update license 2025 (#5851) 2025-01-07 09:40:39 +01:00
SearchEntriesHandler.cs Removed the sqlite page cache option. It should be set through the environment variable, or some other way of providing a custom database configurotion 2025-06-19 11:41:39 +02:00
SystemInfoHandler.cs Changed parameter from boolean to Enum for clarity of purpose 2025-04-02 10:15:21 -03:00
TestFilterHandler.cs Added setup step for source providers. 2025-02-24 12:50:58 +01:00
TestHandler.cs Post merge master fixes 2025-06-24 14:38:58 +02:00
VacuumHandler.cs Added tests for the Vacuum and bugreport operations. 2025-07-23 10:56:58 +00:00