aboutsummaryrefslogtreecommitdiffstats
path: root/apps/dav/lib
diff options
context:
space:
mode:
authortobiasKaminsky <tobias@kaminsky.me>2023-08-03 14:51:09 +0200
committerAndy Scherzinger <info@andy-scherzinger.de>2023-08-04 10:32:08 +0200
commitb8b4a0e6ce74ca60521dde6cc03c3f32b69252e4 (patch)
tree056133e13e776b93cb8ff077ffaca1daace261bb /apps/dav/lib
parentf8bd676154f988ef2130ccb0e29b0cc95e42a204 (diff)
downloadnextcloud-server-b8b4a0e6ce74ca60521dde6cc03c3f32b69252e4.tar.gz
nextcloud-server-b8b4a0e6ce74ca60521dde6cc03c3f32b69252e4.zip
expose gps data via webdav
Diffstat (limited to 'apps/dav/lib')
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesPlugin.php22
1 files changed, 22 insertions, 0 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
index 6b6f622a5a7..547071cc6af 100644
--- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php
@@ -84,6 +84,7 @@ class FilesPlugin extends ServerPlugin {
public const SUBFOLDER_COUNT_PROPERTYNAME = '{http://nextcloud.org/ns}contained-folder-count';
public const SUBFILE_COUNT_PROPERTYNAME = '{http://nextcloud.org/ns}contained-file-count';
public const FILE_METADATA_SIZE = '{http://nextcloud.org/ns}file-metadata-size';
+ public const FILE_METADATA_GPS = '{http://nextcloud.org/ns}file-metadata-gps';
/** Reference to main server object */
private ?Server $server = null;
@@ -438,6 +439,27 @@ class FilesPlugin extends ServerPlugin {
return $sizeMetadata->getValue();
});
+
+ $propFind->handle(self::FILE_METADATA_GPS, function () use ($node) {
+ if (!str_starts_with($node->getFileInfo()->getMimetype(), 'image')) {
+ return json_encode((object)[], JSON_THROW_ON_ERROR);
+ }
+
+ if ($node->hasMetadata('gps')) {
+ $gpsMetadata = $node->getMetadata('gps');
+ } else {
+ // This code path should not be called since we try to preload
+ // the metadata when loading the folder or the search results
+ // in one go
+ $metadataManager = \OC::$server->get(IMetadataManager::class);
+ $gpsMetadata = $metadataManager->fetchMetadataFor('gps', [$node->getId()])[$node->getId()];
+
+ // TODO would be nice to display this in the profiler...
+ \OC::$server->get(LoggerInterface::class)->debug('Inefficient fetching of metadata');
+ }
+
+ return $gpsMetadata->getValue();
+ });
}
}