From 436ee744e07553b4d65484c850925f6d01017c1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 19:43:00 +0000 Subject: [PATCH 01/27] Build(deps-dev): Bump braces from 3.0.2 to 3.0.3 Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3. - [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: braces dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5526950b8..23abcc031 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4640,13 +4640,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -7519,9 +7519,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "peer": true, "dependencies": { @@ -19351,13 +19351,13 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "peer": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "brorand": { @@ -21599,9 +21599,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "peer": true, "requires": { From 9eb642e66fee4c8164ecd76f2853ab739bbbab0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 19:43:10 +0000 Subject: [PATCH 02/27] Build(deps): Bump @nextcloud/event-bus from 3.3.0 to 3.3.1 Bumps [@nextcloud/event-bus](https://github.com/nextcloud/nextcloud-event-bus) from 3.3.0 to 3.3.1. - [Release notes](https://github.com/nextcloud/nextcloud-event-bus/releases) - [Changelog](https://github.com/nextcloud-libraries/nextcloud-event-bus/blob/main/CHANGELOG.md) - [Commits](https://github.com/nextcloud/nextcloud-event-bus/compare/v3.3.0...v3.3.1) --- updated-dependencies: - dependency-name: "@nextcloud/event-bus" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5526950b8..417eba772 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.1", - "@nextcloud/event-bus": "^3.3.0", + "@nextcloud/event-bus": "^3.3.1", "@nextcloud/l10n": "^3.1.0", "@nextcloud/moment": "^1.3.1", "@nextcloud/paths": "^2.1.0", @@ -2468,11 +2468,11 @@ } }, "node_modules/@nextcloud/event-bus": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.0.tgz", - "integrity": "sha512-M7e0sC7RuLr3k7cyJOGeXvKpUZf25Qyhr9+Vr27Q6rBZ6J94xZhDdOyJGehXc34sQJX1TTbJRSDF02vsLx8Gqg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.1.tgz", + "integrity": "sha512-VBYJspOVk5aZopgZwCUoMKFqcTLCNel2TLvtu0HMPV2gR5ZLPiPAKbkyKkYTh+Sd5QB1gR6l3STTv1gyal0soQ==", "dependencies": { - "@types/node": "^20.12.11", + "@types/node": "^20.12.12", "semver": "^7.6.2" }, "engines": { @@ -17665,11 +17665,11 @@ } }, "@nextcloud/event-bus": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.0.tgz", - "integrity": "sha512-M7e0sC7RuLr3k7cyJOGeXvKpUZf25Qyhr9+Vr27Q6rBZ6J94xZhDdOyJGehXc34sQJX1TTbJRSDF02vsLx8Gqg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.1.tgz", + "integrity": "sha512-VBYJspOVk5aZopgZwCUoMKFqcTLCNel2TLvtu0HMPV2gR5ZLPiPAKbkyKkYTh+Sd5QB1gR6l3STTv1gyal0soQ==", "requires": { - "@types/node": "^20.12.11", + "@types/node": "^20.12.12", "semver": "^7.6.2" }, "dependencies": { diff --git a/package.json b/package.json index b18183216..c5663726f 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.1", - "@nextcloud/event-bus": "^3.3.0", + "@nextcloud/event-bus": "^3.3.1", "@nextcloud/l10n": "^3.1.0", "@nextcloud/moment": "^1.3.1", "@nextcloud/paths": "^2.1.0", From c25bd9007e0d245a0d71b12fc568b2ffa326034c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Jun 2024 19:43:16 +0000 Subject: [PATCH 03/27] Build(deps-dev): Bump ws from 8.13.0 to 8.17.1 Bumps [ws](https://github.com/websockets/ws) from 8.13.0 to 8.17.1. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/8.13.0...8.17.1) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5526950b8..211ac121c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15886,9 +15886,9 @@ } }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "peer": true, "engines": { @@ -27733,9 +27733,9 @@ } }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "peer": true, "requires": {} From f05df9a4b920792c9ced38cb0d237a9477a7ed5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:07:37 +0000 Subject: [PATCH 04/27] Build(deps): Bump @maplibre/maplibre-gl-leaflet from 0.0.20 to 0.0.22 Bumps [@maplibre/maplibre-gl-leaflet](https://github.com/maplibre/maplibre-gl-leaflet) from 0.0.20 to 0.0.22. - [Release notes](https://github.com/maplibre/maplibre-gl-leaflet/releases) - [Changelog](https://github.com/maplibre/maplibre-gl-leaflet/blob/main/CHANGELOG.md) - [Commits](https://github.com/maplibre/maplibre-gl-leaflet/compare/v0.0.20...v0.0.22) --- updated-dependencies: - dependency-name: "@maplibre/maplibre-gl-leaflet" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5526950b8..610909502 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "AGPL-3.0", "dependencies": { "@fortawesome/fontawesome-free": "^6.5.2", - "@maplibre/maplibre-gl-leaflet": "^0.0.20", + "@maplibre/maplibre-gl-leaflet": "^0.0.22", "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.1", @@ -2247,13 +2247,13 @@ } }, "node_modules/@maplibre/maplibre-gl-leaflet": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-leaflet/-/maplibre-gl-leaflet-0.0.20.tgz", - "integrity": "sha512-W36NFgRbhOic/Bv2dU4f6P3BE2QlhPbselQdf0snY4E36kjmhAl9RKEfAGDmfI1T5bUOmPmWzQDRnvEWqGc+jw==", + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-leaflet/-/maplibre-gl-leaflet-0.0.22.tgz", + "integrity": "sha512-9p4DSPLUE5t0StXH/IcZw37/UL7Ekea4jcVdkSsb2jWI+sM3K7mYHLOnti/2wn+HqxG4jMVUHah7Xun3bs00AQ==", "peerDependencies": { "@types/leaflet": "^1.9.0", "leaflet": "^1.9.3", - "maplibre-gl": "^2.4.0 || ^3.3.1" + "maplibre-gl": "^2.4.0 || ^3.3.1 || ^4.3.2" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { @@ -17519,9 +17519,9 @@ "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" }, "@maplibre/maplibre-gl-leaflet": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-leaflet/-/maplibre-gl-leaflet-0.0.20.tgz", - "integrity": "sha512-W36NFgRbhOic/Bv2dU4f6P3BE2QlhPbselQdf0snY4E36kjmhAl9RKEfAGDmfI1T5bUOmPmWzQDRnvEWqGc+jw==", + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-leaflet/-/maplibre-gl-leaflet-0.0.22.tgz", + "integrity": "sha512-9p4DSPLUE5t0StXH/IcZw37/UL7Ekea4jcVdkSsb2jWI+sM3K7mYHLOnti/2wn+HqxG4jMVUHah7Xun3bs00AQ==", "requires": {} }, "@maplibre/maplibre-gl-style-spec": { diff --git a/package.json b/package.json index b18183216..6459ae523 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^6.5.2", - "@maplibre/maplibre-gl-leaflet": "^0.0.20", + "@maplibre/maplibre-gl-leaflet": "^0.0.22", "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^5.3.1", From db244393bf9c6655bbf31427d17e99f23a6b329b Mon Sep 17 00:00:00 2001 From: AJ Jordan Date: Thu, 29 Aug 2024 17:25:50 -0400 Subject: [PATCH 05/27] Fix typo in MIME repair step names Signed-off-by: AJ Jordan --- lib/Migration/RegisterMimeType.php | 2 +- lib/Migration/UnregisterMimeType.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Migration/RegisterMimeType.php b/lib/Migration/RegisterMimeType.php index 996f34f73..325d68ff0 100644 --- a/lib/Migration/RegisterMimeType.php +++ b/lib/Migration/RegisterMimeType.php @@ -19,7 +19,7 @@ public function __construct(IMimeTypeLoader $mimeTypeLoader) public function getName() { - return 'Register Maps MIME types"'; + return 'Register Maps MIME types'; } private function registerForExistingFiles() diff --git a/lib/Migration/UnregisterMimeType.php b/lib/Migration/UnregisterMimeType.php index 89997e0f3..59a16ca7b 100644 --- a/lib/Migration/UnregisterMimeType.php +++ b/lib/Migration/UnregisterMimeType.php @@ -19,7 +19,7 @@ public function __construct(IMimeTypeLoader $mimeTypeLoader) public function getName() { - return 'Register Maps MIME types"'; + return 'Unregister Maps MIME types'; } private function unregisterForExistingFiles() From 03cc1dbf05147e3da184100e9805553be34fa67e Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 6 Oct 2024 16:35:58 +0200 Subject: [PATCH 06/27] Bump app to Nextcloud 30 Closes #1333 I decided to not cross-check the availability of all all deprecated things with older majors, so both min and max version are v30 for now. A list of all things that I've fixed: * Deprecated SCSS variables updated as documented in the upgrade notes[1]. * Fixed a bunch of query builder deprecations: * $qb->resetQueryParts() is deprecated, one should just create a new query-builder object. Done that. * Calling `$qb->expr()->andX()` (and `orX()`) with no arguments is deprecated. Instead, one should list all arguments in an array and pass that to the method. Reworked queries where necessary to do so. * The PHPUnit version I got by running `make test` downloaded a version that prohibits non-static data providers. Made all affected data providers static. With that, everything from `make test` passes in a local dev installation of Nextcloud 30 except for two tests: 1) OCA\Maps\Controller\PhotosControllerTest::testAddGetPhotos Failed asserting that actual size 0 matches expected size 1. /home/ma27/Projects/nextcloud/apps/maps/tests/Unit/Controller/PhotosControllerTest.php:206 2) OCA\Maps\Controller\TracksControllerTest::testAddGetTracks Failed asserting that false matches expected true. /home/ma27/Projects/nextcloud/apps/maps/tests/Unit/Controller/TracksControllerTest.php:205 Both tests failed on the previous commit already, so I decided to leave those for now. [1] https://docs.nextcloud.com/server/latest/developer_manual/app_publishing_maintenance/app_upgrade_guide/upgrade_to_30.html#front-end-changes Signed-off-by: Maximilian Bosch --- appinfo/info.xml | 2 +- css/style.scss | 14 +++---- lib/Controller/ContactsController.php | 5 ++- lib/Service/AddressService.php | 14 +++---- lib/Service/DevicesService.php | 42 +++++++++---------- lib/Service/FavoritesService.php | 18 ++++---- lib/Service/TracksService.php | 22 +++++----- .../Unit/Controller/PhotosControllerTest.php | 1 - .../Unit/Controller/TracksControllerTest.php | 2 - tests/Unit/Helper/ExifGeoDataTest.php | 4 +- 10 files changed, 61 insertions(+), 63 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index 2990fef7c..a47f79018 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -37,7 +37,7 @@ exif - + diff --git a/css/style.scss b/css/style.scss index 97b1184d6..523237d89 100644 --- a/css/style.scss +++ b/css/style.scss @@ -50,8 +50,8 @@ margin-left: 56px !important; padding-top: 5px; border: 2px solid var(--color-border-dark) !important; - border-bottom-left-radius: var(--border-radius-large) !important; - border-bottom-right-radius: var(--border-radius-large) !important; + border-bottom-left-radius: var(--border-radius-element) !important; + border-bottom-right-radius: var(--border-radius-element) !important; border-top: 0 !important; background-color: var(--color-main-background); } @@ -90,7 +90,7 @@ } td:nth-child(3) { - color: var(--color-text-light); + color: var(--color-main-text); } tr:nth-child(odd) { @@ -132,7 +132,7 @@ .leaflet-touch .leaflet-control-layers, .leaflet-touch .leaflet-bar { border: none; - border-radius: var(--border-radius); + border-radius: var(--border-radius-small); } /* Fix attribution overlapping map on mobile */ @@ -461,7 +461,7 @@ tr.selected td { .leaflet-marker-photo-suggestion, .leaflet-marker-photo, .leaflet-marker-photo-suggestion-selected { - border-radius: var(--border-radius); + border-radius: var(--border-radius-small); } .leaflet-marker-track.track-marker, @@ -479,7 +479,7 @@ tr.selected td { .photo-tooltip { max-width: 325px; max-height: 325px; - border-radius: var(--border-radius); + border-radius: var(--border-radius-small); } .easy-button-button { @@ -575,7 +575,7 @@ tr.selected td { text-align: center; } .tooltip-photo-name { - color: var(--color-text-light); + color: var(--color-main-text); } .tooltip-photo-date { font-weight: bold; diff --git a/lib/Controller/ContactsController.php b/lib/Controller/ContactsController.php index 58225c052..1b1e4d747 100644 --- a/lib/Controller/ContactsController.php +++ b/lib/Controller/ContactsController.php @@ -679,7 +679,7 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri $req = $qb->execute(); $result = $req->fetchAll(); $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); if ($result and count($result) > 0) { $id = $result[0]['id']; $qb->update('maps_address_geo') @@ -702,7 +702,8 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri ]); $req = $qb->execute(); $id = $qb->getLastInsertId(); - }$qb = $qb->resetQueryParts(); + } + $qb = $this->dbconnection->getQueryBuilder(); } diff --git a/lib/Service/AddressService.php b/lib/Service/AddressService.php index dc3132a78..e4dc90d1b 100644 --- a/lib/Service/AddressService.php +++ b/lib/Service/AddressService.php @@ -110,7 +110,7 @@ public function lookupAddress($adr, $uri): array { break; } $req->closeCursor(); - $qb = $this->qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); // if it's still not in the DB, it means the lookup did not happen yet // so we can schedule it for later if (!$inDb) { @@ -129,7 +129,7 @@ public function lookupAddress($adr, $uri): array { ->set('looked_up', $qb->createNamedParameter($lookedUp, IQueryBuilder::PARAM_BOOL)) ->where($this->qb->expr()->eq('id', $this->qb->createNamedParameter($id, IQueryBuilder::PARAM_STR))); $req = $this->qb->execute(); - $qb = $this->qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } } @@ -160,7 +160,7 @@ private function lookupAddressInternal($adr): array { $res[2] = true; } $req->closeCursor(); - $qb = $this->qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); return $res; } @@ -257,7 +257,7 @@ private function cleanUpDBContactAddresses($vCard, $uri) { } } $req->closeCursor(); - $qb = $this->qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); foreach ($adrIdToDelete as $id) { $qb->delete('maps_address_geo') @@ -265,7 +265,7 @@ private function cleanUpDBContactAddresses($vCard, $uri) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } } @@ -276,7 +276,7 @@ public function deleteDBContactAddresses($uri) { $qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } // schedules the address for an external lookup @@ -298,7 +298,7 @@ private function scheduleForLookup($adr, $uri): array { ]); $req = $this->qb->execute(); $id = $this->qb->getLastInsertId(); - $qb = $this->qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); if (!$geo[2]) { $this->jobList->add(LookupMissingGeoJob::class, []); } diff --git a/lib/Service/DevicesService.php b/lib/Service/DevicesService.php index db1a3ce72..d6b3b8cc1 100644 --- a/lib/Service/DevicesService.php +++ b/lib/Service/DevicesService.php @@ -73,7 +73,7 @@ public function getDevicesFromDB($userId) { ]; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $devices; } @@ -111,7 +111,7 @@ public function getDevicesByTokens(array $tokens) { } } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $devices; } @@ -163,7 +163,7 @@ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, ]; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return array_reverse($points); } @@ -179,18 +179,18 @@ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?int $limit = 10000, ?int $offset = 0) { $qb = $this->qb; // get coordinates - $or = $qb->expr()->orX(); + $or = []; foreach ($tokens as $token) { - $and = $qb->expr()->andX(); - $and->add($qb->expr()->eq('s.token', $qb->createNamedParameter($token, IQueryBuilder::PARAM_STR))); - $and->add($qb->expr()->lte('p.timestamp', 's.timestamp_to')); - $and->add($qb->expr()->gte('p.timestamp', 's.timestamp_from')); - $or->add($and); + $or[] = $qb->expr()->andX( + $qb->expr()->eq('s.token', $qb->createNamedParameter($token, IQueryBuilder::PARAM_STR)), + $qb->expr()->lte('p.timestamp', 's.timestamp_to'), + $qb->expr()->gte('p.timestamp', 's.timestamp_from') + ); } $qb->select('p.id', 'lat', 'lng', 'timestamp', 'altitude', 'accuracy', 'battery') ->from('maps_device_points', 'p') ->innerJoin('p', 'maps_device_shares', 's', $qb->expr()->eq('p.device_id', 's.device_id')) - ->where($or); + ->where($qb->expr()->orX(...$or)); if (intval($pruneBefore) > 0) { $qb->andWhere( @@ -219,7 +219,7 @@ public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?i ]; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return array_reverse($points); } @@ -250,7 +250,7 @@ public function getDeviceTimePointsFromDb($userId, $deviceId) { $points[intval($row['timestamp'])] = [floatval($row['lat']), floatval($row['lng'])]; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $points; } @@ -272,7 +272,7 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); if ($deviceId === null) { $qb->insert('maps_devices') @@ -282,7 +282,7 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { ]); $req = $qb->execute(); $deviceId = $qb->getLastInsertId(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } return $deviceId; } @@ -301,7 +301,7 @@ public function addPointToDB($deviceId, $lat, $lng, $ts, $altitude, $battery, $a ]); $req = $qb->execute(); $pointId = $qb->getLastInsertId(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $pointId; } @@ -353,7 +353,7 @@ public function getDeviceFromDB($id, $userId) { break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $device; } @@ -370,7 +370,7 @@ public function editDeviceInDB($id, $color, $name) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteDeviceFromDB($id) { @@ -380,14 +380,14 @@ public function deleteDeviceFromDB($id) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_device_points') ->where( $qb->expr()->eq('device_id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function countPoints($userId, $deviceIdList, $begin, $end) { @@ -423,7 +423,7 @@ public function countPoints($userId, $deviceIdList, $begin, $end) { $count = intval($row['co']); break; } - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $count; } @@ -538,7 +538,7 @@ private function getAndWriteDevicePoints($devid, $begin, $end, $fd, $nbPoints, $ $gpxText .= ' ' . "\n"; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); // write the chunk fwrite($fd, $gpxText); diff --git a/lib/Service/FavoritesService.php b/lib/Service/FavoritesService.php index e2070d576..ba94b1c68 100644 --- a/lib/Service/FavoritesService.php +++ b/lib/Service/FavoritesService.php @@ -108,7 +108,7 @@ public function getFavoritesFromDB($userId, $pruneBefore = 0, $filterCategory = ]; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $favorites; } @@ -160,7 +160,7 @@ public function getFavoriteFromDB($id, $userId = null, $category = null, $isDele break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $favorite; } @@ -181,7 +181,7 @@ public function addFavoriteToDB($userId, $name, $lat, $lng, $category, $comment, ]); $req = $qb->execute(); $favoriteId = $qb->getLastInsertId(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $favoriteId; } @@ -232,7 +232,7 @@ public function renameCategoryInDB($userId, $cat, $newName) { $qb->expr()->eq('category', $qb->createNamedParameter($cat, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $extensions) { @@ -262,7 +262,7 @@ public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $e $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteFavoriteFromDB($id) { @@ -272,7 +272,7 @@ public function deleteFavoriteFromDB($id) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteFavoritesFromDB($ids, $userId) { @@ -291,7 +291,7 @@ public function deleteFavoritesFromDB($ids, $userId) { return; } $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function countFavorites($userId, $categoryList, $begin, $end) { @@ -334,7 +334,7 @@ public function countFavorites($userId, $categoryList, $begin, $end) { break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $nbFavorites; } @@ -628,7 +628,7 @@ public function exportFavorites($userId, $fileHandler, $categoryList, $begin, $e $gpxText .= ' ' . "\n"; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); // write the chunk ! fwrite($fileHandler, $gpxText); $favIndex = $favIndex + $chunkSize; diff --git a/lib/Service/TracksService.php b/lib/Service/TracksService.php index 4d8f495f3..63b7d1ee2 100644 --- a/lib/Service/TracksService.php +++ b/lib/Service/TracksService.php @@ -38,7 +38,7 @@ public function __construct( private IL10N $l10n, private IRootFolder $root, private IManager $shareManager, - IDBConnection $dbconnection, + private IDBConnection $dbconnection, ) { $this->qb = $dbconnection->getQueryBuilder(); } @@ -276,7 +276,7 @@ public function getTracksFromDB($userId, $folder = null, bool $respectNomediaAnd $tracks[] = $track; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $tracks; } @@ -367,7 +367,7 @@ public function getTrackFromDB($id, $userId = null) { break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $track; } @@ -418,7 +418,7 @@ public function getTrackByFileIDFromDB($fileId, $userId = null) { break; } $req->closeCursor(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $track; } @@ -435,7 +435,7 @@ public function addTrackToDB($userId, $fileId, $file) { ]); $req = $qb->execute(); $trackId = $qb->getLastInsertId(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); return $trackId; } @@ -455,7 +455,7 @@ public function editTrackInDB($id, $color, $metadata, $etag) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteByFileId($fileId) { @@ -465,7 +465,7 @@ public function deleteByFileId($fileId) { $qb->expr()->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteByFileIdUserId($fileId, $userId) { @@ -478,7 +478,7 @@ public function deleteByFileIdUserId($fileId, $userId) { $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } public function deleteTrackFromDB($id) { @@ -488,7 +488,7 @@ public function deleteTrackFromDB($id) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } public function deleteAllTracksFromDB($userId) { @@ -498,7 +498,7 @@ public function deleteAllTracksFromDB($userId) { $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } public function deleteTracksFromDB($ids, $userId) { @@ -517,7 +517,7 @@ public function deleteTracksFromDB($ids, $userId) { return; } $req = $qb->execute(); - $qb = $qb->resetQueryParts(); + $qb = $this->dbconnection->getQueryBuilder(); } public function generateTrackMetadata($file) { diff --git a/tests/Unit/Controller/PhotosControllerTest.php b/tests/Unit/Controller/PhotosControllerTest.php index 23e00a67a..b48e08d0c 100644 --- a/tests/Unit/Controller/PhotosControllerTest.php +++ b/tests/Unit/Controller/PhotosControllerTest.php @@ -139,7 +139,6 @@ protected function setUp(): void { $qb->expr()->eq('user_id', $qb->createNamedParameter('test', IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); } public static function tearDownAfterClass(): void { diff --git a/tests/Unit/Controller/TracksControllerTest.php b/tests/Unit/Controller/TracksControllerTest.php index 3c9e7e1e2..4d138a51b 100644 --- a/tests/Unit/Controller/TracksControllerTest.php +++ b/tests/Unit/Controller/TracksControllerTest.php @@ -140,7 +140,6 @@ protected function setUp(): void { $qb->expr()->eq('user_id', $qb->createNamedParameter('test', IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); } public static function tearDownAfterClass(): void { @@ -173,7 +172,6 @@ protected function tearDown(): void { $qb->expr()->eq('user_id', $qb->createNamedParameter('test', IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $qb->resetQueryParts(); } public function testAddGetTracks() { diff --git a/tests/Unit/Helper/ExifGeoDataTest.php b/tests/Unit/Helper/ExifGeoDataTest.php index 46d66d498..29d3c35d0 100644 --- a/tests/Unit/Helper/ExifGeoDataTest.php +++ b/tests/Unit/Helper/ExifGeoDataTest.php @@ -6,7 +6,7 @@ class ExifGeoDataTest extends TestCase { - public function imageWithDateAndLocationProvider(): array { + public static function imageWithDateAndLocationProvider(): array { return [ ['tests/test_files/Photos/WithDateAndLocation/imageWithDateAndLocation1.JPG', 1311984000 + 7200, 47.071717, 10.339557], ['tests/test_files/Photos/WithDateAndLocation/imageWithDateAndLocation2.JPG', 1312156800 + 7200, 46.862350, 10.916452], @@ -54,7 +54,7 @@ public function testImagesWithDateAndLocation(string $path, int $date, float $la $this->assertEqualsWithDelta($lng, $exif_geo_data->lng, 0.000005); } - public function imageWithZeroIslandProvider(): array { + public static function imageWithZeroIslandProvider(): array { return [ ['tests/test_files/Photos/ZeroIsland/imageZeroIsland1.JPG', 1653829180 + 7200], ]; From f9118d857d299255b90eb63f8f5373a847aee6dc Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 6 Oct 2024 16:42:09 +0200 Subject: [PATCH 07/27] tests/bootstrap: don't re-declare PHPUNIT_RUN This is already set by Nextcloud's bootstrap (and from what I've seen we require that anyways), so no need to do this on our own. This also resolves the following warnings from `make test`: Warning: Constant PHPUNIT_RUN already defined in /home/ma27/Projects/nextcloud/tests/bootstrap.php on line 7 PHP Warning: Cannot modify header information - headers already sent by (output started at /home/ma27/Projects/nextcloud/tests/bootstrap.php:7) in /home/ma27/Projects/nextcloud/lib/private/legacy/OC_Response.php on line 71 Signed-off-by: Maximilian Bosch --- tests/bootstrap.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 39fd939ff..8db333626 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -8,7 +8,6 @@ * @author Julien Veyssier * @copyright Julien Veyssier 2019 */ -define('PHPUNIT_RUN', 1); require_once __DIR__.'/../../../tests/bootstrap.php'; require_once __DIR__.'/../../../lib/base.php'; From 8e9e960ac7bf8c9e7ac638775504b007242bb3e9 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 6 Oct 2024 16:43:36 +0200 Subject: [PATCH 08/27] PageController: allow tile.openstreetmap.org in CSP So far, we only allowed subdomains, but when I rolled out the other changes, this was missing from having a working map with OSM tiles. This is probably not related to the other changes (it worked fine a few days ago, perhaps something was just changed within OSM), but I figured it's still worth fixing. Signed-off-by: Maximilian Bosch --- lib/Controller/PageController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index f97e3f0bc..e65576324 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -93,6 +93,7 @@ private function addCsp($response): void { $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); // map tiles $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedImageDomain('https://tile.openstreetmap.org'); $csp->addAllowedImageDomain('https://server.arcgisonline.com'); $csp->addAllowedImageDomain('https://*.cartocdn.com'); $csp->addAllowedImageDomain('https://*.opentopomap.org'); From ebad227313f2f1e876d9ff46d556654e4c1ae86f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:27:29 +0000 Subject: [PATCH 09/27] Chore(deps): Bump fast-xml-parser from 4.3.6 to 4.5.0 Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.3.6 to 4.5.0. - [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases) - [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.3.6...v4.5.0) --- updated-dependencies: - dependency-name: fast-xml-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3f932b84..1a370827c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7572,9 +7572,9 @@ "peer": true }, "node_modules/fast-xml-parser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", - "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "funding": [ { "type": "github", @@ -21818,9 +21818,9 @@ "peer": true }, "fast-xml-parser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", - "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "requires": { "strnum": "^1.0.5" } From a8070ab5d487b2ce054ece173c49ea30af938086 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:18:57 +0000 Subject: [PATCH 10/27] Chore(deps): Bump cookie and express Bumps [cookie](https://github.com/jshttp/cookie) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together. Updates `cookie` from 0.6.0 to 0.7.1 - [Release notes](https://github.com/jshttp/cookie/releases) - [Commits](https://github.com/jshttp/cookie/compare/v0.6.0...v0.7.1) Updates `express` from 4.21.0 to 4.21.1 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1) --- updated-dependencies: - dependency-name: cookie dependency-type: indirect - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3f932b84..ccbf30661 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5447,9 +5447,9 @@ "peer": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "peer": true, "engines": { @@ -7430,9 +7430,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "peer": true, "dependencies": { @@ -7441,7 +7441,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -20137,9 +20137,9 @@ "peer": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "peer": true }, @@ -21697,9 +21697,9 @@ } }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "peer": true, "requires": { @@ -21708,7 +21708,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", From 8a90f0b1f333df156b42d4d78924c7dfbb59b455 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:19:25 +0000 Subject: [PATCH 11/27] Chore(deps-dev): Bump webpack from 5.88.2 to 5.95.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.88.2 to 5.95.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.88.2...v5.95.0) --- updated-dependencies: - dependency-name: webpack dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 390 ++++++++++++++++++++-------------------------- 1 file changed, 172 insertions(+), 218 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3f932b84..aac4ec213 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2096,14 +2096,14 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3089,32 +3089,10 @@ "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" }, - "node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "peer": true }, @@ -3885,9 +3863,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "peer": true, "dependencies": { @@ -3910,9 +3888,9 @@ "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, "peer": true }, @@ -3936,16 +3914,16 @@ "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -3976,30 +3954,30 @@ "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -4007,26 +3985,26 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -4035,13 +4013,13 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -4146,10 +4124,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peer": true, "peerDependencies": { @@ -6445,9 +6423,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "peer": true, "dependencies": { @@ -8175,9 +8153,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "peer": true }, @@ -13189,9 +13167,9 @@ "peer": true }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "peer": true, "dependencies": { @@ -14366,9 +14344,9 @@ } }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "dev": true, "peer": true, "dependencies": { @@ -14385,17 +14363,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -15628,9 +15606,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "peer": true, "dependencies": { @@ -15715,35 +15693,34 @@ } }, "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -17576,14 +17553,14 @@ "peer": true }, "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "peer": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { @@ -18304,32 +18281,10 @@ "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" }, - "@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "peer": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "peer": true }, @@ -18906,9 +18861,9 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "peer": true, "requires": { @@ -18931,9 +18886,9 @@ "peer": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true, "peer": true }, @@ -18957,16 +18912,16 @@ "peer": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { @@ -18997,30 +18952,30 @@ "peer": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -19028,26 +18983,26 @@ } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -19056,13 +19011,13 @@ } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "peer": true, "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -19132,10 +19087,10 @@ "dev": true, "peer": true }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peer": true, "requires": {} @@ -20969,9 +20924,9 @@ "peer": true }, "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "peer": true, "requires": { @@ -22255,9 +22210,9 @@ } }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "peer": true }, @@ -25907,9 +25862,9 @@ } }, "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "peer": true, "requires": { @@ -26804,9 +26759,9 @@ "peer": true }, "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "dev": true, "peer": true, "requires": { @@ -26817,17 +26772,17 @@ } }, "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "peer": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "terser": "^5.26.0" }, "dependencies": { "schema-utils": { @@ -27718,9 +27673,9 @@ "requires": {} }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "peer": true, "requires": { @@ -27788,35 +27743,34 @@ } }, "webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "version": "5.95.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", + "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "peer": true, "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "dependencies": { From c1247247f016f9f47856cbab3506b747e321bcf1 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Mon, 7 Oct 2024 18:00:42 +0200 Subject: [PATCH 12/27] lib: refactor query builder handling Rather than having to remember to reset the query builder in each method that uses it, these are now created on-demand from the db connection. Signed-off-by: Maximilian Bosch --- lib/Controller/ContactsController.php | 5 +- lib/Controller/PublicContactsController.php | 2 - lib/Service/AddressService.php | 69 ++++++++++----------- lib/Service/DevicesService.php | 40 ++++-------- lib/Service/FavoritesService.php | 29 +++------ lib/Service/TracksService.php | 27 +++----- 6 files changed, 65 insertions(+), 107 deletions(-) diff --git a/lib/Controller/ContactsController.php b/lib/Controller/ContactsController.php index 1b1e4d747..a6e8f7e80 100644 --- a/lib/Controller/ContactsController.php +++ b/lib/Controller/ContactsController.php @@ -34,7 +34,6 @@ class ContactsController extends Controller { private $contactsManager; private $addressService; private $dbconnection; - private $qb; private $cdBackend; private $avatarManager; private $root; @@ -69,7 +68,6 @@ public function __construct( $this->contactsManager = $contactsManager; $this->addressService = $addressService; $this->dbconnection = $dbconnection; - $this->qb = $dbconnection->getQueryBuilder(); $this->cdBackend = $cdBackend; $this->root = $root; $this->urlGenerator = $urlGenerator; @@ -669,7 +667,7 @@ private function getAddressBooksReadOnly(): array { * @throws \OCP\DB\Exception */ private function setAddressCoordinates(float $lat, float $lng, string $adr, string $uri): void { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $adr_norm = strtolower(preg_replace('/\s+/', '', $adr)); $qb->select('id') @@ -703,7 +701,6 @@ private function setAddressCoordinates(float $lat, float $lng, string $adr, stri $req = $qb->execute(); $id = $qb->getLastInsertId(); } - $qb = $this->dbconnection->getQueryBuilder(); } diff --git a/lib/Controller/PublicContactsController.php b/lib/Controller/PublicContactsController.php index 76b9cf180..f81f566bb 100644 --- a/lib/Controller/PublicContactsController.php +++ b/lib/Controller/PublicContactsController.php @@ -39,7 +39,6 @@ class PublicContactsController extends PublicPageController { protected IManager $contactsManager; protected AddressService $addressService; - protected IQueryBuilder $qb; protected CardDavBackend $cdBackend; protected IAvatarManager $avatarManager; protected IRootFolder $root; @@ -64,7 +63,6 @@ public function __construct( $this->avatarManager = $avatarManager; $this->contactsManager = $contactsManager; $this->addressService = $addressService; - $this->qb = $dbconnection->getQueryBuilder(); $this->cdBackend = $cdBackend; $this->root = $root; } diff --git a/lib/Service/AddressService.php b/lib/Service/AddressService.php index e4dc90d1b..758e9b89a 100644 --- a/lib/Service/AddressService.php +++ b/lib/Service/AddressService.php @@ -39,7 +39,6 @@ * @package OCA\Maps\Service */ class AddressService { - private $qb; private $dbconnection; private $jobList; private $appData; @@ -55,7 +54,6 @@ public function __construct( IDBConnection $dbconnection, ) { $this->dbconnection = $dbconnection; - $this->qb = $dbconnection->getQueryBuilder(); $this->memcache = $cacheFactory->createLocal('maps'); $this->jobList = $jobList; $this->appData = $appData; @@ -78,11 +76,12 @@ public function addressToGeo($adr, $uri): string { */ public function lookupAddress($adr, $uri): array { $adr_norm = strtolower(preg_replace('/\s+/', '', $adr)); - $this->qb->select('id', 'lat', 'lng', 'looked_up') + $qb = $this->dbconnection->getQueryBuilder(); + $qb->select('id', 'lat', 'lng', 'looked_up') ->from('maps_address_geo') - ->where($this->qb->expr()->eq('object_uri', $this->qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))) - ->andWhere($this->qb->expr()->eq('adr_norm', $this->qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); - $req = $this->qb->execute(); + ->where($qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))) + ->andWhere($qb->expr()->eq('adr_norm', $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); + $req = $qb->execute(); $lat = null; $lng = null; $inDb = false; @@ -122,14 +121,13 @@ public function lookupAddress($adr, $uri): array { } else { if ($lookedUp) { - $this->qb->update('maps_address_geo') + $qb->update('maps_address_geo') ->set('lat', $qb->createNamedParameter($lat, IQueryBuilder::PARAM_STR)) ->set('lng', $qb->createNamedParameter($lng, IQueryBuilder::PARAM_STR)) ->set('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ->set('looked_up', $qb->createNamedParameter($lookedUp, IQueryBuilder::PARAM_BOOL)) - ->where($this->qb->expr()->eq('id', $this->qb->createNamedParameter($id, IQueryBuilder::PARAM_STR))); - $req = $this->qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_STR))); + $req = $qb->execute(); } } @@ -149,18 +147,18 @@ private function lookupAddressInternal($adr): array { $adr_norm = strtolower(preg_replace('/\s+/', '', $adr)); - $this->qb->select('lat', 'lng') + $qb = $this->dbconnection->getQueryBuilder(); + $qb->select('lat', 'lng') ->from('maps_address_geo') - ->where($this->qb->expr()->eq('looked_up', $this->qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL))) - ->andWhere($this->qb->expr()->eq('adr_norm', $this->qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); - $req = $this->qb->execute(); + ->where($qb->expr()->eq('looked_up', $qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL))) + ->andWhere($qb->expr()->eq('adr_norm', $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR))); + $req = $qb->execute(); while ($row = $req->fetch()) { $res[0] = $row['lat']; $res[1] = $row['lng']; $res[2] = true; } $req->closeCursor(); - $qb = $this->dbconnection->getQueryBuilder(); return $res; } @@ -236,7 +234,7 @@ public function scheduleVCardForLookup($cardData, $cardUri) { } private function cleanUpDBContactAddresses($vCard, $uri) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); // get all vcard addresses $vCardAddresses = []; foreach ($vCard->children() as $property) { @@ -247,36 +245,34 @@ private function cleanUpDBContactAddresses($vCard, $uri) { } // check which addresses from DB is not in the vCard anymore $adrIdToDelete = []; - $this->qb->select('id', 'adr') + $qb->select('id', 'adr') ->from('maps_address_geo') - ->where($this->qb->expr()->eq('object_uri', $this->qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))); - $req = $this->qb->execute(); + ->where($qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR))); + $req = $qb->execute(); while ($row = $req->fetch()) { if (!in_array($row['adr'], $vCardAddresses)) { array_push($adrIdToDelete, $row['id']); } } $req->closeCursor(); - $qb = $this->dbconnection->getQueryBuilder(); foreach ($adrIdToDelete as $id) { + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_address_geo') ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); } } public function deleteDBContactAddresses($uri) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_address_geo') ->where( $qb->expr()->eq('object_uri', $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $qb = $this->dbconnection->getQueryBuilder(); } // schedules the address for an external lookup @@ -287,18 +283,18 @@ private function scheduleForLookup($adr, $uri): array { $geo = $this->lookupAddressExternal($adr); } $adr_norm = strtolower(preg_replace('/\s+/', '', $adr)); - $this->qb->insert('maps_address_geo') + $qb = $this->dbconnection->getQueryBuilder(); + $qb->insert('maps_address_geo') ->values([ - 'adr' => $this->qb->createNamedParameter($adr, IQueryBuilder::PARAM_STR), - 'adr_norm' => $this->qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR), - 'object_uri' => $this->qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR), - 'lat' => $this->qb->createNamedParameter($geo[0], IQueryBuilder::PARAM_STR), - 'lng' => $this->qb->createNamedParameter($geo[1], IQueryBuilder::PARAM_STR), - 'looked_up' => $this->qb->createNamedParameter($geo[2], IQueryBuilder::PARAM_BOOL), + 'adr' => $qb->createNamedParameter($adr, IQueryBuilder::PARAM_STR), + 'adr_norm' => $qb->createNamedParameter($adr_norm, IQueryBuilder::PARAM_STR), + 'object_uri' => $qb->createNamedParameter($uri, IQueryBuilder::PARAM_STR), + 'lat' => $qb->createNamedParameter($geo[0], IQueryBuilder::PARAM_STR), + 'lng' => $qb->createNamedParameter($geo[1], IQueryBuilder::PARAM_STR), + 'looked_up' => $qb->createNamedParameter($geo[2], IQueryBuilder::PARAM_BOOL), ]); - $req = $this->qb->execute(); - $id = $this->qb->getLastInsertId(); - $qb = $this->dbconnection->getQueryBuilder(); + $req = $qb->execute(); + $id = $qb->getLastInsertId(); if (!$geo[2]) { $this->jobList->add(LookupMissingGeoJob::class, []); } @@ -310,11 +306,12 @@ private function scheduleForLookup($adr, $uri): array { public function lookupMissingGeo($max = 200):bool { // stores if all addresses where looked up $lookedUpAll = true; - $this->qb->select('adr', 'object_uri') + $qb = $this->dbconnection->getQueryBuilder(); + $qb->select('adr', 'object_uri') ->from('maps_address_geo') - ->where($this->qb->expr()->eq('looked_up', $this->qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) + ->where($qb->expr()->eq('looked_up', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->setMaxResults($max); - $req = $this->qb->execute(); + $req = $qb->execute(); $result = $req->fetchAll(); $req->closeCursor(); $i = 0; diff --git a/lib/Service/DevicesService.php b/lib/Service/DevicesService.php index d6b3b8cc1..09b1679dd 100644 --- a/lib/Service/DevicesService.php +++ b/lib/Service/DevicesService.php @@ -22,7 +22,6 @@ class DevicesService { - private $qb; private $importUserId; private $currentXmlTag; private $importDevName; @@ -38,7 +37,6 @@ public function __construct( private IL10N $l10n, private IDBConnection $dbconnection, ) { - $this->qb = $dbconnection->getQueryBuilder(); } private function db_quote_escape_string($str) { @@ -52,7 +50,7 @@ private function db_quote_escape_string($str) { */ public function getDevicesFromDB($userId) { $devices = []; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'user_agent', 'color') ->from('maps_devices', 'd') ->where( @@ -73,7 +71,6 @@ public function getDevicesFromDB($userId) { ]; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $devices; } @@ -84,7 +81,7 @@ public function getDevicesFromDB($userId) { */ public function getDevicesByTokens(array $tokens) { $devices = []; - $qb = $this->qb; + $qb = $this->dbconnection->getquerybuilder(); $qb->select('d.id', 'd.user_agent', 'd.color', 's.token') ->from('maps_devices', 'd') ->innerJoin('d', 'maps_device_shares', 's', $qb->expr()->eq('d.id', 's.device_id')) @@ -111,7 +108,6 @@ public function getDevicesByTokens(array $tokens) { } } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $devices; } @@ -125,7 +121,7 @@ public function getDevicesByTokens(array $tokens) { * @throws \OCP\DB\Exception */ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, ?int $limit = null, ?int $offset = null) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); // get coordinates $qb->selectDistinct(['p.id', 'lat', 'lng', 'timestamp', 'altitude', 'accuracy', 'battery']) ->from('maps_device_points', 'p') @@ -163,7 +159,6 @@ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, ]; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return array_reverse($points); } @@ -177,7 +172,7 @@ public function getDevicePointsFromDB($userId, $deviceId, ?int $pruneBefore = 0, * @throws Exception */ public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?int $limit = 10000, ?int $offset = 0) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); // get coordinates $or = []; foreach ($tokens as $token) { @@ -219,7 +214,6 @@ public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?i ]; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return array_reverse($points); } @@ -231,7 +225,7 @@ public function getDevicePointsByTokens(array $tokens, ?int $pruneBefore = 0, ?i * @throws Exception */ public function getDeviceTimePointsFromDb($userId, $deviceId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); // get coordinates $qb->select('lat', 'lng', 'timestamp') ->from('maps_device_points', 'p') @@ -250,13 +244,12 @@ public function getDeviceTimePointsFromDb($userId, $deviceId) { $points[intval($row['timestamp'])] = [floatval($row['lat']), floatval($row['lng'])]; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $points; } public function getOrCreateDeviceFromDB($userId, $userAgent) { $deviceId = null; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id') ->from('maps_devices', 'd') ->where( @@ -272,7 +265,6 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); if ($deviceId === null) { $qb->insert('maps_devices') @@ -282,13 +274,12 @@ public function getOrCreateDeviceFromDB($userId, $userAgent) { ]); $req = $qb->execute(); $deviceId = $qb->getLastInsertId(); - $this->qb = $this->dbconnection->getQueryBuilder(); } return $deviceId; } public function addPointToDB($deviceId, $lat, $lng, $ts, $altitude, $battery, $accuracy) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->insert('maps_device_points') ->values([ 'device_id' => $qb->createNamedParameter($deviceId, IQueryBuilder::PARAM_STR), @@ -301,7 +292,6 @@ public function addPointToDB($deviceId, $lat, $lng, $ts, $altitude, $battery, $a ]); $req = $qb->execute(); $pointId = $qb->getLastInsertId(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $pointId; } @@ -331,7 +321,7 @@ public function addPointsToDB($deviceId, $points) { public function getDeviceFromDB($id, $userId) { $device = null; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'user_agent', 'color') ->from('maps_devices', 'd') ->where( @@ -353,12 +343,11 @@ public function getDeviceFromDB($id, $userId) { break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $device; } public function editDeviceInDB($id, $color, $name) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->update('maps_devices'); if (is_string($color) && strlen($color) > 0) { $qb->set('color', $qb->createNamedParameter($color, IQueryBuilder::PARAM_STR)); @@ -370,28 +359,25 @@ public function editDeviceInDB($id, $color, $name) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteDeviceFromDB($id) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_devices') ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_device_points') ->where( $qb->expr()->eq('device_id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function countPoints($userId, $deviceIdList, $begin, $end) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select($qb->createFunction('COUNT(*) AS co')) ->from('maps_devices', 'd') ->innerJoin('d', 'maps_device_points', 'p', $qb->expr()->eq('d.id', 'p.device_id')) @@ -423,7 +409,6 @@ public function countPoints($userId, $deviceIdList, $begin, $end) { $count = intval($row['co']); break; } - $this->qb = $this->dbconnection->getQueryBuilder(); return $count; } @@ -473,7 +458,7 @@ private function generateGpxHeader($name, $appVersion, $nbdev = 0) { private function getAndWriteDevicePoints($devid, $begin, $end, $fd, $nbPoints, $userId) { $device = $this->getDeviceFromDB($devid, $userId); $devname = $device['user_agent']; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $gpxText = '' . "\n" . ' ' . $devname . '' . "\n"; $gpxText .= ' ' . "\n"; @@ -538,7 +523,6 @@ private function getAndWriteDevicePoints($devid, $begin, $end, $fd, $nbPoints, $ $gpxText .= ' ' . "\n"; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); // write the chunk fwrite($fd, $gpxText); diff --git a/lib/Service/FavoritesService.php b/lib/Service/FavoritesService.php index ba94b1c68..8f5a0b477 100644 --- a/lib/Service/FavoritesService.php +++ b/lib/Service/FavoritesService.php @@ -25,7 +25,6 @@ class FavoritesService { private $l10n; - private $qb; private $dbconnection; private $secureRandom; @@ -48,7 +47,6 @@ public function __construct( $this->l10n = $l10n; $this->secureRandom = $secureRandom; $this->dbconnection = $dbconnection; - $this->qb = $dbconnection->getQueryBuilder(); } private function db_quote_escape_string($str) { @@ -63,7 +61,7 @@ private function db_quote_escape_string($str) { */ public function getFavoritesFromDB($userId, $pruneBefore = 0, $filterCategory = null, $isDeletable = true, $isUpdateable = true, $isShareable = true) { $favorites = []; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'name', 'date_created', 'date_modified', 'lat', 'lng', 'category', 'comment', 'extensions') ->from('maps_favorites', 'f') ->where( @@ -108,13 +106,12 @@ public function getFavoritesFromDB($userId, $pruneBefore = 0, $filterCategory = ]; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $favorites; } public function getFavoriteFromDB($id, $userId = null, $category = null, $isDeletable = true, $isUpdateable = true, $isShareable = true) { $favorite = null; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'name', 'date_modified', 'date_created', 'lat', 'lng', 'category', 'comment', 'extensions') ->from('maps_favorites', 'f') ->where( @@ -160,13 +157,12 @@ public function getFavoriteFromDB($id, $userId = null, $category = null, $isDele break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $favorite; } public function addFavoriteToDB($userId, $name, $lat, $lng, $category, $comment, $extensions) { $nowTimeStamp = (new \DateTime())->getTimestamp(); - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->insert('maps_favorites') ->values([ 'user_id' => $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR), @@ -181,7 +177,6 @@ public function addFavoriteToDB($userId, $name, $lat, $lng, $category, $comment, ]); $req = $qb->execute(); $favoriteId = $qb->getLastInsertId(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $favoriteId; } @@ -222,7 +217,7 @@ public function addMultipleFavoritesToDB($userId, $favoriteList) { } public function renameCategoryInDB($userId, $cat, $newName) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->update('maps_favorites'); $qb->set('category', $qb->createNamedParameter($newName, IQueryBuilder::PARAM_STR)); $qb->where( @@ -232,12 +227,11 @@ public function renameCategoryInDB($userId, $cat, $newName) { $qb->expr()->eq('category', $qb->createNamedParameter($cat, IQueryBuilder::PARAM_STR)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $extensions) { $nowTimeStamp = (new \DateTime())->getTimestamp(); - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->update('maps_favorites'); $qb->set('date_modified', $qb->createNamedParameter($nowTimeStamp, IQueryBuilder::PARAM_INT)); if ($name !== null) { @@ -262,21 +256,19 @@ public function editFavoriteInDB($id, $name, $lat, $lng, $category, $comment, $e $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteFavoriteFromDB($id) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_favorites') ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteFavoritesFromDB($ids, $userId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_favorites') ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) @@ -291,7 +283,6 @@ public function deleteFavoritesFromDB($ids, $userId) { return; } $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function countFavorites($userId, $categoryList, $begin, $end) { @@ -300,7 +291,7 @@ public function countFavorites($userId, $categoryList, $begin, $end) { ) { return 0; } - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select($qb->createFunction('COUNT(*) AS co')) ->from('maps_favorites', 'f') ->where( @@ -334,7 +325,6 @@ public function countFavorites($userId, $categoryList, $begin, $end) { break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $nbFavorites; } @@ -544,7 +534,7 @@ public function deleteFavoritesFromJSON($file, $ids) { } public function exportFavorites($userId, $fileHandler, $categoryList, $begin, $end, $appVersion) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $nbFavorites = $this->countFavorites($userId, $categoryList, $begin, $end); $gpxHeader = ' @@ -628,7 +618,6 @@ public function exportFavorites($userId, $fileHandler, $categoryList, $begin, $e $gpxText .= ' ' . "\n"; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); // write the chunk ! fwrite($fileHandler, $gpxText); $favIndex = $favIndex + $chunkSize; diff --git a/lib/Service/TracksService.php b/lib/Service/TracksService.php index 63b7d1ee2..7f338e8d9 100644 --- a/lib/Service/TracksService.php +++ b/lib/Service/TracksService.php @@ -40,7 +40,6 @@ public function __construct( private IManager $shareManager, private IDBConnection $dbconnection, ) { - $this->qb = $dbconnection->getQueryBuilder(); } public function rescan($userId) { @@ -254,7 +253,7 @@ public function getTracksFromDB($userId, $folder = null, bool $respectNomediaAnd } $userFolder = $this->root->getUserFolder($userId); $tracks = []; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'file_id', 'color', 'metadata', 'etag') ->from('maps_tracks', 't') ->where( @@ -276,7 +275,6 @@ public function getTracksFromDB($userId, $folder = null, bool $respectNomediaAnd $tracks[] = $track; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $tracks; } @@ -322,7 +320,7 @@ private function getIgnoredPaths($userId, $folder = null, $hideImagesOnCustomMap public function getTrackFromDB($id, $userId = null) { $track = null; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'file_id', 'color', 'metadata', 'etag') ->from('maps_tracks', 't') ->where( @@ -367,13 +365,12 @@ public function getTrackFromDB($id, $userId = null) { break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $track; } public function getTrackByFileIDFromDB($fileId, $userId = null) { $track = null; - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->select('id', 'file_id', 'color', 'metadata', 'etag') ->from('maps_tracks', 't') ->where( @@ -418,14 +415,13 @@ public function getTrackByFileIDFromDB($fileId, $userId = null) { break; } $req->closeCursor(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $track; } public function addTrackToDB($userId, $fileId, $file) { $metadata = ''; $etag = $file->getEtag(); - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->insert('maps_tracks') ->values([ 'user_id' => $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR), @@ -435,12 +431,11 @@ public function addTrackToDB($userId, $fileId, $file) { ]); $req = $qb->execute(); $trackId = $qb->getLastInsertId(); - $this->qb = $this->dbconnection->getQueryBuilder(); return $trackId; } public function editTrackInDB($id, $color, $metadata, $etag) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->update('maps_tracks'); if ($color !== null) { $qb->set('color', $qb->createNamedParameter($color, IQueryBuilder::PARAM_STR)); @@ -455,21 +450,19 @@ public function editTrackInDB($id, $color, $metadata, $etag) { $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteByFileId($fileId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)) ); $req = $qb->execute(); - $this->qb = $this->dbconnection->getQueryBuilder(); } public function deleteByFileIdUserId($fileId, $userId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)) @@ -482,7 +475,7 @@ public function deleteByFileIdUserId($fileId, $userId) { } public function deleteTrackFromDB($id) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)) @@ -492,7 +485,7 @@ public function deleteTrackFromDB($id) { } public function deleteAllTracksFromDB($userId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) @@ -502,7 +495,7 @@ public function deleteAllTracksFromDB($userId) { } public function deleteTracksFromDB($ids, $userId) { - $qb = $this->qb; + $qb = $this->dbconnection->getQueryBuilder(); $qb->delete('maps_tracks') ->where( $qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)) From dd8dfe4c40232bfa69d45b42b9c1c0809634e372 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 25 Oct 2024 01:20:04 +0000 Subject: [PATCH 13/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- l10n/fr.js | 1 + l10n/fr.json | 1 + translationfiles/templates/maps.pot | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/l10n/fr.js b/l10n/fr.js index 844470aad..2fceba307 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -383,6 +383,7 @@ OC.L10N.register( "Mapbox API key" : "Clé d'API Mapbox", "MapLibre Website" : "Site web MapLibre", "MapLibre settings" : "Paramètres MapLibre", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "Définissez l'URL et l'autorisation de base de style.json pour les Tiles vectorielles OpenStreetMap avec MapLibre-GL-JS.", "MapLibre Street style URL" : "URL du style MapLibre Street", "Basic Authorization if required. Format is \"user:password\"" : "Basic Authorization si nécessaire. Le format est \"user:password\"", "Maps settings" : "Paramètres de Maps" diff --git a/l10n/fr.json b/l10n/fr.json index c7843773c..02b2dfdbf 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -381,6 +381,7 @@ "Mapbox API key" : "Clé d'API Mapbox", "MapLibre Website" : "Site web MapLibre", "MapLibre settings" : "Paramètres MapLibre", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "Définissez l'URL et l'autorisation de base de style.json pour les Tiles vectorielles OpenStreetMap avec MapLibre-GL-JS.", "MapLibre Street style URL" : "URL du style MapLibre Street", "Basic Authorization if required. Format is \"user:password\"" : "Basic Authorization si nécessaire. Le format est \"user:password\"", "Maps settings" : "Paramètres de Maps" diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 15a3d66af..7427c3b8c 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-24 01:22+0000\n" +"POT-Creation-Date: 2024-10-25 01:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From c41615baecb4de7aacb2c851e1c06b424466814f Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 26 Oct 2024 01:13:02 +0000 Subject: [PATCH 14/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- l10n/it.js | 43 ++++++++++++++++++++++++++++- l10n/it.json | 43 ++++++++++++++++++++++++++++- translationfiles/templates/maps.pot | 2 +- 3 files changed, 85 insertions(+), 3 deletions(-) diff --git a/l10n/it.js b/l10n/it.js index d12335871..6d530a9c9 100644 --- a/l10n/it.js +++ b/l10n/it.js @@ -3,6 +3,8 @@ OC.L10N.register( { "Invalid values" : "Valori non validi", "No such device" : "Nessun dispositivo", + "Map not Found" : "Mappa non trovata", + "No device to export" : "Nessun dispositivo da esportare", "/Maps is not a directory" : "/Maps non è una cartella", "/Maps directory is not writeable" : "La directory /Maps non è scrivibile", "Impossible to create /Maps directory" : "Impossibile creare la cartella /Maps", @@ -10,8 +12,15 @@ OC.L10N.register( "Invalid file extension" : "Estensione del file non valida", "Impossible to read the file" : "Impossibile leggere il file", "File does not exist" : "Il file non esiste", + "Error sharing device" : "Errore durante la condivisione del dispositivo", + "Share not Found" : "Condivisione non trovata", + "Share was already on map" : "La condivisione era già sulla mappa", + "No such favorite" : "Nessun preferito", "invalid values" : "valori non validi", + "no such favorite" : "nessun preferito", "Unknown category" : "Categoria sconosciuta", + "Error sharing favorite" : "Errore nella condivisione dei preferiti", + "Bad file type" : "Tipo di file non valido", "File not found" : "File non trovato", "Personal" : "Personale", "Maps" : "Mappe", @@ -20,9 +29,13 @@ OC.L10N.register( "My contacts" : "I miei contatti", "Toggle all" : "Commuta tutto", "Zoom" : "Ingrandisci", + "Copy to map" : "Copia sulla mappa", + "Hide history" : "Nascondi cronologia", + "Show history" : "Mostra cronologia", "Change color" : "Cambia colore", "Zoom on area" : "Zoom sull'area", "Export" : "Esporta", + "Link to map" : "Collegamento alla mappa", "Delete" : "Elimina", "My devices" : "I miei dispositivi", "Refresh positions" : "Aggiorna posizioni", @@ -41,15 +54,22 @@ OC.L10N.register( "Create share link" : "Crea collegamento di condivisione", "Copied!" : "Copiato!", "Copy share link" : "Copia collegamento di condivisione", + "Leave share" : "Lascia la condivisione", "Cancel" : "Annulla", "Link copied" : "Collegamento copiato", "Link could not be copied to clipboard." : "Impossibile copiare il collegamento negli appunti.", "Open folder" : "Apri cartella", "Share" : "Condividi", + "My maps" : "Le mie mappe", + "New map" : "Nuova mappa", + "Add Map" : "Aggiungi mappa", "My photos" : "Le mie foto", "Disable photo drag" : "Disabilita il trascinamento delle foto", "Enable photo drag" : "Abilita il trascinamento delle foto", "Say hi" : "Saluta", + "Hide suggestions" : "Nascondi suggerimenti", + "Suggest photo locations" : "Suggerisci posizioni per le foto", + "Clear photo cache" : "Cancella la cache delle foto", "Hi" : "Ciao", "Show track elevation" : "Mostra quota della traccia", "My tracks" : "Le mie tracce", @@ -85,6 +105,7 @@ OC.L10N.register( "Select all" : "Seleziona tutto", "Display picture" : "Mostra l'immagine", "Remove from selection" : "Rimuovi dalla selezione", + "No suggestions found" : "Nessun suggerimento trovato", "Quit" : "Esci", "Load more" : "Carica altro", "Tracks" : "Tracce", @@ -131,8 +152,11 @@ OC.L10N.register( "Zoom on bounds" : "Zoom sui limiti", "Undo {action} (Ctrl+Z)" : "Annulla {azione} (Ctrl+Z)", "Redo {action} (Ctrl+Shift+Z)" : "Rifai {action} (Ctrl+Shift+Z)", + "Move photo" : "Sposta foto", "Add favorite" : "Aggiungi preferito", "Edit favorite" : "Modifica preferito", + "Rename favorite category" : "Rinomina la categoria dei preferiti", + "Delete contact address" : "Elimina indirizzo contatto", "Select All" : "Seleziona tutto", "Display pictures" : "Mostra immagini", "Spiderfy" : "Ragno", @@ -256,7 +280,18 @@ OC.L10N.register( "View in Maps" : "Visualizza in Mappe", "Import as favorites in Maps" : "Importa come preferito in Mappe", "Import as devices in Maps" : "Importa come dispositivo in Mappe", + "Copy link to map" : "Copia collegamento alla mappa", + "Default Map" : "Mappa predefinita", + "Your Default Map" : "La tua mappa predefinita", + "New Map" : "Nuova mappa", + "Map deleted" : "Mappa eliminata", + "Failed to save map color" : "Impossibile salvare il colore della mappa", + "Failed to delete map" : "Impossibile eliminare la mappa", + "Failed to rename map" : "Impossibile rinominare la mappa", + "Share map not implemented yet, just go to files and share the folder." : "La condivisione della mappa non è ancora implementata, basta andare su File e condividere la cartella.", + "Failed to load your maps" : "Impossibile caricare le mappe", "Media scan was not done yet. Wait a few minutes/hours and reload this page to see your photos/tracks." : "La scansione multimediale non è stata ancora completata. Attendi qualche minuto/ora e ricarica questa pagina per vedere le tue foto/tracce.", + "Report Error" : "Segnala un errore", "Failed to get favorites" : "Recupero dei preferiti non riuscito", "Failed to create favorite" : "Creazione del preferito non riuscita", "Failed to update favorite" : "Aggiornamento del preferito non riuscito", @@ -302,6 +337,12 @@ OC.L10N.register( "Mapbox settings" : "Impostazioni Mapbox", "Set the API key to use Mapbox routing service." : "Imposta la chiave API per usare il servizio di instradamento Mapbox.", "Leave empty to disable." : "Lascia vuoto per disabilitare.", - "Mapbox API key" : "Chiave API Mapbox" + "Mapbox API key" : "Chiave API Mapbox", + "MapLibre Website" : "Sito web MapLibre", + "MapLibre settings" : "Impostazioni di MapLibre", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "Imposta l'URL e l'autorizzazione di base di style.json per i riquadri vettoriali di OpenStreetMap con MapLibre-GL-JS.", + "MapLibre Street style URL" : "URL in stile MapLibre Street", + "Basic Authorization if required. Format is \"user:password\"" : "Autorizzazione di base se richiesta. Il formato è \"user:password\"", + "Maps settings" : "Impostazioni mappe" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/it.json b/l10n/it.json index c4c87a43c..4d3e418ca 100644 --- a/l10n/it.json +++ b/l10n/it.json @@ -1,6 +1,8 @@ { "translations": { "Invalid values" : "Valori non validi", "No such device" : "Nessun dispositivo", + "Map not Found" : "Mappa non trovata", + "No device to export" : "Nessun dispositivo da esportare", "/Maps is not a directory" : "/Maps non è una cartella", "/Maps directory is not writeable" : "La directory /Maps non è scrivibile", "Impossible to create /Maps directory" : "Impossibile creare la cartella /Maps", @@ -8,8 +10,15 @@ "Invalid file extension" : "Estensione del file non valida", "Impossible to read the file" : "Impossibile leggere il file", "File does not exist" : "Il file non esiste", + "Error sharing device" : "Errore durante la condivisione del dispositivo", + "Share not Found" : "Condivisione non trovata", + "Share was already on map" : "La condivisione era già sulla mappa", + "No such favorite" : "Nessun preferito", "invalid values" : "valori non validi", + "no such favorite" : "nessun preferito", "Unknown category" : "Categoria sconosciuta", + "Error sharing favorite" : "Errore nella condivisione dei preferiti", + "Bad file type" : "Tipo di file non valido", "File not found" : "File non trovato", "Personal" : "Personale", "Maps" : "Mappe", @@ -18,9 +27,13 @@ "My contacts" : "I miei contatti", "Toggle all" : "Commuta tutto", "Zoom" : "Ingrandisci", + "Copy to map" : "Copia sulla mappa", + "Hide history" : "Nascondi cronologia", + "Show history" : "Mostra cronologia", "Change color" : "Cambia colore", "Zoom on area" : "Zoom sull'area", "Export" : "Esporta", + "Link to map" : "Collegamento alla mappa", "Delete" : "Elimina", "My devices" : "I miei dispositivi", "Refresh positions" : "Aggiorna posizioni", @@ -39,15 +52,22 @@ "Create share link" : "Crea collegamento di condivisione", "Copied!" : "Copiato!", "Copy share link" : "Copia collegamento di condivisione", + "Leave share" : "Lascia la condivisione", "Cancel" : "Annulla", "Link copied" : "Collegamento copiato", "Link could not be copied to clipboard." : "Impossibile copiare il collegamento negli appunti.", "Open folder" : "Apri cartella", "Share" : "Condividi", + "My maps" : "Le mie mappe", + "New map" : "Nuova mappa", + "Add Map" : "Aggiungi mappa", "My photos" : "Le mie foto", "Disable photo drag" : "Disabilita il trascinamento delle foto", "Enable photo drag" : "Abilita il trascinamento delle foto", "Say hi" : "Saluta", + "Hide suggestions" : "Nascondi suggerimenti", + "Suggest photo locations" : "Suggerisci posizioni per le foto", + "Clear photo cache" : "Cancella la cache delle foto", "Hi" : "Ciao", "Show track elevation" : "Mostra quota della traccia", "My tracks" : "Le mie tracce", @@ -83,6 +103,7 @@ "Select all" : "Seleziona tutto", "Display picture" : "Mostra l'immagine", "Remove from selection" : "Rimuovi dalla selezione", + "No suggestions found" : "Nessun suggerimento trovato", "Quit" : "Esci", "Load more" : "Carica altro", "Tracks" : "Tracce", @@ -129,8 +150,11 @@ "Zoom on bounds" : "Zoom sui limiti", "Undo {action} (Ctrl+Z)" : "Annulla {azione} (Ctrl+Z)", "Redo {action} (Ctrl+Shift+Z)" : "Rifai {action} (Ctrl+Shift+Z)", + "Move photo" : "Sposta foto", "Add favorite" : "Aggiungi preferito", "Edit favorite" : "Modifica preferito", + "Rename favorite category" : "Rinomina la categoria dei preferiti", + "Delete contact address" : "Elimina indirizzo contatto", "Select All" : "Seleziona tutto", "Display pictures" : "Mostra immagini", "Spiderfy" : "Ragno", @@ -254,7 +278,18 @@ "View in Maps" : "Visualizza in Mappe", "Import as favorites in Maps" : "Importa come preferito in Mappe", "Import as devices in Maps" : "Importa come dispositivo in Mappe", + "Copy link to map" : "Copia collegamento alla mappa", + "Default Map" : "Mappa predefinita", + "Your Default Map" : "La tua mappa predefinita", + "New Map" : "Nuova mappa", + "Map deleted" : "Mappa eliminata", + "Failed to save map color" : "Impossibile salvare il colore della mappa", + "Failed to delete map" : "Impossibile eliminare la mappa", + "Failed to rename map" : "Impossibile rinominare la mappa", + "Share map not implemented yet, just go to files and share the folder." : "La condivisione della mappa non è ancora implementata, basta andare su File e condividere la cartella.", + "Failed to load your maps" : "Impossibile caricare le mappe", "Media scan was not done yet. Wait a few minutes/hours and reload this page to see your photos/tracks." : "La scansione multimediale non è stata ancora completata. Attendi qualche minuto/ora e ricarica questa pagina per vedere le tue foto/tracce.", + "Report Error" : "Segnala un errore", "Failed to get favorites" : "Recupero dei preferiti non riuscito", "Failed to create favorite" : "Creazione del preferito non riuscita", "Failed to update favorite" : "Aggiornamento del preferito non riuscito", @@ -300,6 +335,12 @@ "Mapbox settings" : "Impostazioni Mapbox", "Set the API key to use Mapbox routing service." : "Imposta la chiave API per usare il servizio di instradamento Mapbox.", "Leave empty to disable." : "Lascia vuoto per disabilitare.", - "Mapbox API key" : "Chiave API Mapbox" + "Mapbox API key" : "Chiave API Mapbox", + "MapLibre Website" : "Sito web MapLibre", + "MapLibre settings" : "Impostazioni di MapLibre", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "Imposta l'URL e l'autorizzazione di base di style.json per i riquadri vettoriali di OpenStreetMap con MapLibre-GL-JS.", + "MapLibre Street style URL" : "URL in stile MapLibre Street", + "Basic Authorization if required. Format is \"user:password\"" : "Autorizzazione di base se richiesta. Il formato è \"user:password\"", + "Maps settings" : "Impostazioni mappe" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 7427c3b8c..6074a3642 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-25 01:19+0000\n" +"POT-Creation-Date: 2024-10-26 01:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 2d1bcc7977749effaa9517c522879b0f13ea14cb Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 27 Oct 2024 01:19:31 +0000 Subject: [PATCH 15/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 6074a3642..2d146e8e6 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-26 01:12+0000\n" +"POT-Creation-Date: 2024-10-27 01:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 43a88bf5e09ba5e8a05b0f2e260ad0d8b3d4f931 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 28 Oct 2024 01:13:05 +0000 Subject: [PATCH 16/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 2d146e8e6..f66ad6b26 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-27 01:19+0000\n" +"POT-Creation-Date: 2024-10-28 01:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From bef0d3b9a603ceee5fe9b5f42061ac9225a73ebf Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Tue, 29 Oct 2024 01:12:44 +0000 Subject: [PATCH 17/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- l10n/lv.js | 2 +- l10n/lv.json | 2 +- translationfiles/templates/maps.pot | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/l10n/lv.js b/l10n/lv.js index 7747e4bf1..f599666a4 100644 --- a/l10n/lv.js +++ b/l10n/lv.js @@ -25,7 +25,7 @@ OC.L10N.register( "Load more" : "Ielādēt vairāk", "Devices" : "Ierīces", "Tags" : "Birkas", - "Favorite" : "Favorīts", + "Favorite" : "Izlasē", "Duration" : "Ilgums", "End" : "Beigas", "Name" : "Nosaukums", diff --git a/l10n/lv.json b/l10n/lv.json index 2fd57d1c7..d96b50543 100644 --- a/l10n/lv.json +++ b/l10n/lv.json @@ -23,7 +23,7 @@ "Load more" : "Ielādēt vairāk", "Devices" : "Ierīces", "Tags" : "Birkas", - "Favorite" : "Favorīts", + "Favorite" : "Izlasē", "Duration" : "Ilgums", "End" : "Beigas", "Name" : "Nosaukums", diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index f66ad6b26..aae3bb1e0 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-28 01:12+0000\n" +"POT-Creation-Date: 2024-10-29 01:12+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From b2e67d9139bdc69d9ff3ff0ca2678527a5530b82 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Wed, 30 Oct 2024 01:13:53 +0000 Subject: [PATCH 18/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index aae3bb1e0..e11db5d02 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-29 01:12+0000\n" +"POT-Creation-Date: 2024-10-30 01:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From d04e90b1ac78a71b943aae4b745e96415f1654f7 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Thu, 31 Oct 2024 01:14:03 +0000 Subject: [PATCH 19/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index e11db5d02..1ea561160 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-30 01:13+0000\n" +"POT-Creation-Date: 2024-10-31 01:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 146e69c26be5eefa50a19371930a82a6e7468e40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 02:30:14 +0000 Subject: [PATCH 20/27] Chore(deps-dev): Bump elliptic from 6.5.7 to 6.6.0 Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.7 to 6.6.0. - [Commits](https://github.com/indutny/elliptic/compare/v6.5.7...v6.6.0) --- updated-dependencies: - dependency-name: elliptic dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index f3f932b84..fc266c533 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6383,9 +6383,9 @@ "peer": true }, "node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", "dev": true, "peer": true, "dependencies": { @@ -20914,9 +20914,9 @@ "peer": true }, "elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", "dev": true, "peer": true, "requires": { From 0e189391c9107bfa4864d43183d2f3ffce967001 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Fri, 1 Nov 2024 01:13:34 +0000 Subject: [PATCH 21/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 1ea561160..532cf67a1 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-10-31 01:13+0000\n" +"POT-Creation-Date: 2024-11-01 01:13+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 11f38b3827e80226ba1b6b645645b4647ea3c3ad Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sat, 2 Nov 2024 01:18:51 +0000 Subject: [PATCH 22/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 532cf67a1..9673a63a3 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-11-01 01:13+0000\n" +"POT-Creation-Date: 2024-11-02 01:18+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 02adc663270657fb3e0e92910d16576f6872fa60 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Sun, 3 Nov 2024 01:19:11 +0000 Subject: [PATCH 23/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- translationfiles/templates/maps.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index 9673a63a3..ab1f6d24e 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-11-02 01:18+0000\n" +"POT-Creation-Date: 2024-11-03 01:18+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 9e825e4ed7ef965bd58988a5d18d950f5cf19194 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 1 Nov 2024 15:05:25 +0100 Subject: [PATCH 24/27] Build nc30 tests in CI Signed-off-by: Maximilian Bosch --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 74e46e236..78c71a153 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: php-versions: [8.1, 8.2, 8.3] - nextcloud-versions: ['stable28', 'stable29'] + nextcloud-versions: ['stable30'] name: Nextcloud ${{ matrix.nextcloud-versions }} php${{ matrix.php-versions }} unit tests steps: - name: Set up php${{ matrix.php-versions }} From ed6e01371be533dc8bc0073e408f6c53f2006b4a Mon Sep 17 00:00:00 2001 From: Arne Hamann Date: Sun, 3 Nov 2024 23:44:45 +0100 Subject: [PATCH 25/27] Prepare v1.5.0 Signed-off-by: Arne Hamann --- CHANGELOG.md | 4 ++++ appinfo/info.xml | 2 +- lib/Controller/PublicContactsController.php | 1 - lib/Migration/RegisterMimeType.php | 2 +- lib/Migration/UnregisterMimeType.php | 2 +- package.json | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5100b469d..eed1ea2b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 1.5.0 - 2024.11.xx Nextcloud Hub 9 +- Update OSM tile service URL [#1295](https://github.com/nextcloud/maps/pull/1295) @StyXman +- Support Nextcloud 30, update CSP header [1336](https://github.com/nextcloud/maps/pull/1336) @Ma27 + ## 1.4.0 - 2024.04.28 Nextcloud Hub 8 - Compability changes to Nextcloud 29. diff --git a/appinfo/info.xml b/appinfo/info.xml index a47f79018..4d5f68e85 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -14,7 +14,7 @@ - **📱 Devices:** Lost your phone? Check the map! - **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned. ]]> - 1.4.0 + 1.5.0 agpl Julien Veyssier Arne Hamann diff --git a/lib/Controller/PublicContactsController.php b/lib/Controller/PublicContactsController.php index f81f566bb..badb79a51 100644 --- a/lib/Controller/PublicContactsController.php +++ b/lib/Controller/PublicContactsController.php @@ -17,7 +17,6 @@ use OCP\AppFramework\Http\DataDisplayResponse; use OCP\AppFramework\Http\DataResponse; use OCP\Contacts\IManager; -use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\IRootFolder; use OCP\Files\Node; diff --git a/lib/Migration/RegisterMimeType.php b/lib/Migration/RegisterMimeType.php index 7dc68c426..2e6575195 100644 --- a/lib/Migration/RegisterMimeType.php +++ b/lib/Migration/RegisterMimeType.php @@ -16,7 +16,7 @@ public function __construct(IMimeTypeLoader $mimeTypeLoader) { } public function getName() { - return 'Register Maps MIME types'; + return 'Register Maps MIME types'; } private function registerForExistingFiles() { diff --git a/lib/Migration/UnregisterMimeType.php b/lib/Migration/UnregisterMimeType.php index aacd3fefb..3e5dd2085 100644 --- a/lib/Migration/UnregisterMimeType.php +++ b/lib/Migration/UnregisterMimeType.php @@ -16,7 +16,7 @@ public function __construct(IMimeTypeLoader $mimeTypeLoader) { } public function getName() { - return 'Unregister Maps MIME types'; + return 'Unregister Maps MIME types'; } private function unregisterForExistingFiles() { diff --git a/package.json b/package.json index 0f335e1ff..0ae398e04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "maps", - "version": "1.4.0", + "version": "1.5.0", "description": "Maps app", "main": "main.js", "directories": { From 9ce85119500a108eacf5512712c87a17b3fb6514 Mon Sep 17 00:00:00 2001 From: Arne Hamann Date: Mon, 4 Nov 2024 00:02:11 +0100 Subject: [PATCH 26/27] update release env: Signed-off-by: Arne Hamann --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 77a501e82..edce4ca26 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -57,7 +57,7 @@ jobs: sudo apt install make openssl -y echo "###### installing nextcloud" mkdir ~/html - git clone https://github.com/nextcloud/server.git --recursive --depth 1 -b v28.0.0 ~/html/nextcloud + git clone https://github.com/nextcloud/server.git --recursive --depth 1 -b v30.0.1 ~/html/nextcloud sed -i $'s|if (substr($fullPath, 0, strlen($root) + 1) === $root . \'/\')|if (is_string($root) and substr($fullPath, 0, strlen($root) + 1) === $root . \'/\')|g' ~/html/nextcloud/lib/autoloader.php cp -r $GITHUB_WORKSPACE ~/html/nextcloud/apps/${APP_ID} php ~/html/nextcloud/occ maintenance:install --database "sqlite" --admin-user "admin" --admin-pass "password" From e714095735c69ac6a11e48404144fbc56c298859 Mon Sep 17 00:00:00 2001 From: Nextcloud bot Date: Mon, 4 Nov 2024 01:18:26 +0000 Subject: [PATCH 27/27] Fix(l10n): Update translations from Transifex Signed-off-by: Nextcloud bot --- l10n/tr.js | 12 +- l10n/tr.json | 12 +- l10n/ug.js | 359 +++++++++++++++++++++++++++- l10n/ug.json | 359 +++++++++++++++++++++++++++- translationfiles/templates/maps.pot | 16 +- 5 files changed, 736 insertions(+), 22 deletions(-) diff --git a/l10n/tr.js b/l10n/tr.js index 399ed89aa..7ee1e5d58 100644 --- a/l10n/tr.js +++ b/l10n/tr.js @@ -44,8 +44,8 @@ OC.L10N.register( "Import devices" : "Aygıtları içe aktar", "Delete all" : "Tümünü sil", "My favorites" : "Sık kullandığım yerler", - "Disable favorite drag" : "Sık kullanılan yeri sürüklemeyi devre dışı bırak", - "Enable favorite drag" : "Sık kullanılan yeri sürüklemeyi etkinleştir", + "Disable favorite drag" : "Sık kullanılan yeri sürüklemeyi kullanımdan kaldır", + "Enable favorite drag" : "Sık kullanılan yeri sürüklemeyi kullanıma al", "Import" : "İçe aktar", "Category name" : "Kategori adı", "Rename" : "Yeniden adlandır", @@ -66,8 +66,8 @@ OC.L10N.register( "New map" : "Yeni harita", "Add Map" : "Harita ekle", "My photos" : "Fotoğraflarım", - "Disable photo drag" : "Fotoğraf sürüklemeyi devre dışı bırak", - "Enable photo drag" : "Fotoğraf sürüklemeyi etkinleştir", + "Disable photo drag" : "Fotoğraf sürüklemeyi kullanımdan kaldır", + "Enable photo drag" : "Fotoğraf sürüklemeyi kullanıma al", "Say hi" : "Selam ver", "Hide suggestions" : "Önerileri gizle", "Suggest photo locations" : "Fotoğraf konumları öner", @@ -247,7 +247,7 @@ OC.L10N.register( "Routing error:" : "Yöneltme sorunu:", "Reverse steps order" : "Adımları tersten sırala", "Add step" : "Adım ekle", - "Routing is currently disabled." : "Yöneltme şu anda devre dışı.", + "Routing is currently disabled." : "Yöneltme şu anda kullanımdan kaldırılmış.", "Nextcloud additional settings" : "Ek Nextcloud ayarları", "Add a routing service" : "Bir yöneltme hizmeti ekle", "Export as" : "Dışa aktar", @@ -362,7 +362,7 @@ OC.L10N.register( "Dentist" : "Dişçi", "Hotel" : "Otel", "Maps routing settings" : "Harita yön bulma ayarları", - "To enable routing, you must set up a routing engine below." : "Yöneltmeyi etkinleştirmek için aşağıdan bir yöneltme işleyici ayarlamalısınız.", + "To enable routing, you must set up a routing engine below." : "Yöneltmeyi kullanıma almak için aşağıdan bir yöneltme işleyici ayarlamalısınız.", "OSRM Website" : "OSRM sitesi", "OSRM settings" : "OSRM ayarları", "An OSRM server URL looks like this : https://my.osrm.server.org:5000/route/v1" : "Bir OSRM sunucu adresi şu şekilde görünür : https://benim.osrm.sunucum.org:5000/route/v1", diff --git a/l10n/tr.json b/l10n/tr.json index 713ff23ee..4860c8482 100644 --- a/l10n/tr.json +++ b/l10n/tr.json @@ -42,8 +42,8 @@ "Import devices" : "Aygıtları içe aktar", "Delete all" : "Tümünü sil", "My favorites" : "Sık kullandığım yerler", - "Disable favorite drag" : "Sık kullanılan yeri sürüklemeyi devre dışı bırak", - "Enable favorite drag" : "Sık kullanılan yeri sürüklemeyi etkinleştir", + "Disable favorite drag" : "Sık kullanılan yeri sürüklemeyi kullanımdan kaldır", + "Enable favorite drag" : "Sık kullanılan yeri sürüklemeyi kullanıma al", "Import" : "İçe aktar", "Category name" : "Kategori adı", "Rename" : "Yeniden adlandır", @@ -64,8 +64,8 @@ "New map" : "Yeni harita", "Add Map" : "Harita ekle", "My photos" : "Fotoğraflarım", - "Disable photo drag" : "Fotoğraf sürüklemeyi devre dışı bırak", - "Enable photo drag" : "Fotoğraf sürüklemeyi etkinleştir", + "Disable photo drag" : "Fotoğraf sürüklemeyi kullanımdan kaldır", + "Enable photo drag" : "Fotoğraf sürüklemeyi kullanıma al", "Say hi" : "Selam ver", "Hide suggestions" : "Önerileri gizle", "Suggest photo locations" : "Fotoğraf konumları öner", @@ -245,7 +245,7 @@ "Routing error:" : "Yöneltme sorunu:", "Reverse steps order" : "Adımları tersten sırala", "Add step" : "Adım ekle", - "Routing is currently disabled." : "Yöneltme şu anda devre dışı.", + "Routing is currently disabled." : "Yöneltme şu anda kullanımdan kaldırılmış.", "Nextcloud additional settings" : "Ek Nextcloud ayarları", "Add a routing service" : "Bir yöneltme hizmeti ekle", "Export as" : "Dışa aktar", @@ -360,7 +360,7 @@ "Dentist" : "Dişçi", "Hotel" : "Otel", "Maps routing settings" : "Harita yön bulma ayarları", - "To enable routing, you must set up a routing engine below." : "Yöneltmeyi etkinleştirmek için aşağıdan bir yöneltme işleyici ayarlamalısınız.", + "To enable routing, you must set up a routing engine below." : "Yöneltmeyi kullanıma almak için aşağıdan bir yöneltme işleyici ayarlamalısınız.", "OSRM Website" : "OSRM sitesi", "OSRM settings" : "OSRM ayarları", "An OSRM server URL looks like this : https://my.osrm.server.org:5000/route/v1" : "Bir OSRM sunucu adresi şu şekilde görünür : https://benim.osrm.sunucum.org:5000/route/v1", diff --git a/l10n/ug.js b/l10n/ug.js index 11b351699..b2985399b 100644 --- a/l10n/ug.js +++ b/l10n/ug.js @@ -1,33 +1,390 @@ OC.L10N.register( "maps", { + "Invalid values" : "ئىناۋەتسىز قىممەت", + "No such device" : "بۇنداق ئۈسكۈنى يوق", + "Map not Found" : "خەرىتە تېپىلمىدى", + "No device to export" : "ئېكسپورت قىلىدىغان ئۈسكۈنى يوق", + "/Maps is not a directory" : "/ خەرىتە مۇندەرىجە ئەمەس", + "/Maps directory is not writeable" : "/ خەرىتە مۇندەرىجىسىنى يازغىلى بولمايدۇ", + "Impossible to create /Maps directory" : "خەرىتە مۇندەرىجىسى قۇرۇش مۇمكىن ئەمەس", + "Nothing to export" : "ئېكىسپورت قىلىدىغان نەرسە يوق", + "Invalid file extension" : "ھۆججەت كېڭەيتىلمىسى ئىناۋەتسىز", + "Impossible to read the file" : "ھۆججەتنى ئوقۇش مۇمكىن ئەمەس", + "File does not exist" : "ھۆججەت مەۋجۇت ئەمەس", + "Error sharing device" : "ئۈسكۈنە ئورتاقلىشىش", + "Share not Found" : "ھەمبەھىر تېپىلمىدى", + "Share was already on map" : "ھەمبەھىرلىنىش خەرىتىدە ئىدى", + "No such favorite" : "ياقتۇرمايدىغانلار يوق", + "invalid values" : "ئىناۋەتسىز قىممەت", + "no such favorite" : "ياق", + "Unknown category" : "نامەلۇم تۈر", + "Error sharing favorite" : "ياقتۇرىدىغان ئورتاقلىشىشتا خاتالىق", + "Bad file type" : "ناچار ھۆججەت تىپى", + "File not found" : "ھۆججەت تېپىلمىدى", + "No such track" : "بۇنداق يول يوق", "Personal" : "شەخسىي", + "Maps" : "خەرىتە", + "🌍🌏🌎 The whole world fits inside your cloud!" : "World پۈتۈن دۇنيا بۇلۇتلىرىڭىزغا ماس كېلىدۇ!", + "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned." : "** پۈتۈن دۇنيا بۇلۇتلىرىڭىزغا ماس كېلىدۇ! **\n\n- ** 🗺 گۈزەل خەرىتە: ** [OpenStreetMap] (https://www.openstreetmap.org) ۋە [Leaflet] (https://leafletjs.com) نى ئىشلىتىپ ، ئۆلچەملىك خەرىتە ، سۈنئىي ھەمراھ ، يەر شەكلى ، قاراڭغۇ ھالەت ھەتتا سۇ بوياق! 🎨\n- ** av ياقتۇرىدىغانلار: ** ئۆزىڭىز ياقتۇرىدىغان جايلارنى ساقلاڭ! [GNOME خەرىتىسى] (https://github.com/nextcloud/maps/issues/30) ۋە كۆچمە ئەپلەر بىلەن ماسقەدەملەش پىلانلاندى.\n- ** 🧭 يول يۈرۈش: ** [OSRM] (http://project-osrm.org) ، [GraphHopper] (https://www.graphhopper.com) ياكى [Mapbox] (https: // www .mapbox.com).\n- ** the خەرىتىدىكى سۈرەتلەر: ** زېرىكىشلىك تام تەسۋىر يوق ، پەقەت قەيەردە ئىكەنلىكىڭىزنى بىۋاسىتە كۆرسىتىڭ!\n- ** map خەرىتىدىكى ئالاقىلىشىش: ** دوستلىرىڭىزنىڭ قەيەردە تۇرىدىغانلىقىنى كۆرۈڭ ۋە كېيىنكى زىيارىتىڭىزنى پىلانلاڭ.\n- ** 📱 ئۈسكۈنىلەر: ** تېلېفونىڭىز يوقاپ كەتتىمۇ؟ خەرىتىنى تەكشۈرۈپ بېقىڭ!\n- ** 〰 ئىزلار: ** GPS ئىزلىرىنى ياكى ئىلگىرىكى سەپەرلەرنى يۈكلەڭ. [PhoneTrack] (https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) ياكى [OwnTracks] (https://owntracks.org) بىلەن خاتىرىلەش پىلانلانغان.", + "My contacts" : "مېنىڭ ئالاقىداشلىرىم", + "Toggle all" : "ھەممىنى توغرىلاڭ", + "Zoom" : "چوڭايتىش", + "Copy to map" : "خەرىتىگە كۆچۈرۈڭ", + "Hide history" : "تارىخنى يوشۇرۇش", + "Show history" : "تارىخنى كۆرسەت", + "Change color" : "رەڭنى ئۆزگەرتىش", + "Zoom on area" : "رايوننى چوڭايتىش", "Export" : "چىقار", + "Link to map" : "خەرىتە ئۇلىنىشى", "Delete" : "ئۆچۈر", + "My devices" : "ئۈسكۈنىلىرىم", + "Refresh positions" : "ئورۇننى يېڭىلاش", + "Export all" : "ھەممىنى چىقىرىش", + "Import devices" : "ئۈسكۈنىلەرنى ئەكىرىش", + "Delete all" : "ھەممىنى ئۆچۈرۈڭ", + "My favorites" : "ياقتۇرىدىغانلىرىم", + "Disable favorite drag" : "ياقتۇرىدىغان سۆرەشنى چەكلەڭ", + "Enable favorite drag" : "ياقتۇرىدىغان سۆرەشنى قوزغىتىڭ", "Import" : "ئەكىر", + "Category name" : "تۈر ئىسمى", "Rename" : "ئات ئۆزگەرت", + "Add a favorite" : "ياقتۇرىدىغاننى قوشۇڭ", + "Zoom to bounds" : "چوڭايتىش", + "Delete share link" : "ھەمبەھىر ئۇلىنىشنى ئۆچۈرۈڭ", + "Create share link" : "ئورتاقلىشىش ئۇلانمىسى قۇر", + "Copied!" : "كۆچۈرۈلگەن!", + "Copy share link" : "ئورتاقلىشىش ئۇلانمىسىنى كۆچۈرۈڭ", + "Leave share" : "ئورتاقلىشىش", "Cancel" : "ۋاز كەچ", + "Link copied" : "ئۇلىنىش كۆچۈرۈلدى", + "Link {url} could not be copied to clipboard." : "ئۇلىنىش {url} نى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ.", + "Link could not be copied to clipboard." : "ئۇلىنىشنى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ.", + "Open folder" : "ھۆججەت قىسقۇچنى ئېچىڭ", "Share" : "ھەمبەھىر", + "My maps" : "مېنىڭ خەرىتەم", + "New map" : "يېڭى خەرىتە", + "Add Map" : "خەرىتە قوشۇڭ", + "My photos" : "مېنىڭ سۈرەتلىرىم", + "Disable photo drag" : "رەسىم سۆرەشنى چەكلەڭ", + "Enable photo drag" : "رەسىم سۆرەشنى قوزغىتىڭ", + "Say hi" : "سالام", + "Hide suggestions" : "تەكلىپلەرنى يوشۇرۇش", + "Suggest photo locations" : "رەسىم ئورۇنلىرىنى تەۋسىيە قىلىڭ", + "Clear photo cache" : "رەسىم ساقلىغۇچنى تازىلاش", + "Hi" : "ياخشىمۇسىز", + "Show track elevation" : "يولنىڭ ئېگىزلىكىنى كۆرسەت", + "Download track" : "ئىز قوغلاش", + "My tracks" : "مېنىڭ ئىزلىرىم", "Sort by name" : "Order by name", "Sort by date" : "Order by date", "Save" : "ساقلا", + "Favorite name" : "ياخشى كۆرىدىغان ئىسىم", + "Category" : "سەھىپە", + "Comment" : "باھا", "Location" : "ئورنى", + "New category {n}" : "يېڭى تۈر {n}", + "Place photos" : "رەسىملەرنى قويۇڭ", + "Place contact" : "ئالاقىلىشىش ئورنى", + "Share this location" : "بۇ ئورۇننى ئورتاقلىشىڭ", + "Shared location" : "ئورتاق ئورۇن", + "Route from here" : "بۇ يەردىن يولغا چىقىش يولى", + "Add route point" : "يول نۇقتىسىنى قوشۇڭ", + "Route to here" : "بۇ يەرگە بارىدىغان يول", + "Current location" : "نۆۋەتتىكى ئورنى", + "Improve this map" : "بۇ خەرىتىنى ياخشىلاڭ", + "Other maps" : "باشقا خەرىتە", + "Street map" : "كوچا خەرىتىسى", + "Satellite map" : "سۈنئىي ھەمراھ خەرىتىسى", + "Geo link ({geoLink}) copied to clipboard" : "Geo ئۇلىنىشى ({geoLink}) چاپلاش تاختىسىغا كۆچۈرۈلدى", + "Geo link could not be copied to clipboard" : "گېئو ئۇلىنىشنى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ", "Close" : "ياپ", + "Track my position" : "مېنىڭ ئورنۇمنى ئىز قوغلاڭ", + "Open geo links" : "Geo ئۇلانمىسىنى ئېچىڭ", + "Display time filter slider" : "ۋاقىت سۈزگۈچ سىيرىلغۇچنى كۆرسىتىش", + "The True Size of Africa" : "ئافرىقىنىڭ ھەقىقىي چوڭلۇقى", + "Keep in mind that map projections always distort sizes of countries. The standard Mercator projection is particularly biased. Read more at:" : "ئېسىڭىزدە تۇتۇڭ ، خەرىتە مۆلچەرى ھەر قايسى دۆلەتلەرنىڭ چوڭ-كىچىكلىكىنى بۇرمىلايدۇ. ئۆلچەملىك مېركاتور مۆلچەرى بىر تەرەپلىمىلىك. تېخىمۇ كۆپ ئوقۇڭ:", + "(No name)" : "(ئىسمى يوق)", + "No favorites to display" : "كۆرسىتىشكە ئامراق يوق", + "Clear selection" : "تاللاشنى تازىلاش", + "Select all" : "ھەممىنى تاللاڭ", + "Display picture" : "رەسىم كۆرسىتىش", + "Remove from selection" : "تاللاشتىن چىقىرىۋېتىڭ", + "No suggestions found" : "تەكلىپ تېپىلمىدى", "Quit" : "چېكىن", + "Load more" : "تېخىمۇ كۆپ يۈكلەڭ", + "Photos default timezone:" : "سۈرەت سۈكۈتتىكى ۋاقىت رايونى:", + "Location sources:" : "ئورۇن مەنبەسى:", + "Tracks" : "ئىزلار", + "Devices" : "ئۈسكۈنىلەر", + "Show localized photos" : "يەرلىك رەسىملەرنى كۆرسەت", + "Hide localized photos" : "يەرلىك رەسىملەرنى يوشۇرۇش", "Tags" : "بەلگەلەر", "Favorite" : "يىغقۇچ", + "Photo suggestions" : "رەسىم تەكلىپلىرى", + "Track metadata" : "مېتا سانلىق مەلۇماتنى ئىز قوغلاڭ", + "Unable to change the favourite state of the file" : "ھۆججەتنىڭ ياقتۇرىدىغان ھالىتىنى ئۆزگەرتەلمىدى", + "Error while loading the file data" : "ھۆججەت سانلىق مەلۇماتلىرىنى يۈكلەۋاتقاندا خاتالىق", + "Distance" : "ئارىلىق", + "Duration" : "Duration", + "Moving time" : "يۆتكىلىشچان ۋاقىت", + "Pause time" : "ۋاقتىنى توختىتىش", + "Begin" : "باشلاڭ", + "End" : "ئاخىر", + "Cumulative elevation gain" : "جۇغلانما ئېگىزلىكنىڭ ئۆسۈشى", + "Cumulative elevation loss" : "جۇغلانما ئېگىزلىك يوقىتىش", + "Minimum elevation" : "ئەڭ تۆۋەن ئېگىزلىك", + "Maximum elevation" : "ئەڭ يۇقىرى ئېگىزلىك", + "Maximum speed" : "ئەڭ يۇقىرى سۈرئەت", + "Average speed" : "ئوتتۇرىچە سۈرئەت", + "Moving average speed" : "ئوتتۇرىچە سۈرئەت", + "Moving average pace" : "ئوتتۇرىچە سۈرئەت", + "New Favorite" : "يېڭى ئامراق", + "This Place" : "بۇ يەر", "Name" : "ئاتى", "Add" : "قوش", "Add to favorites" : "Add to favorites", + "This place" : "بۇ يەر", + "Add contact address" : "ئالاقىلىشىش ئادرېسىنى قوشۇڭ", "Home" : "ئۆي", "Work" : "ئىش", + "Delete this address" : "بۇ ئادرېسنى ئۆچۈرۈڭ", + "Delete this location" : "بۇ ئورۇننى ئۆچۈرۈڭ", + "Open in Contacts" : "ئالاقىدە ئېچىڭ", + "Device" : "ئۈسكۈنە", "Date" : "Date", + "Altitude" : "ئېگىزلىك", + "Battery" : "باتارېيە", + "Accuracy" : "ئېنىقلىق", + "No name" : "ئىسمى يوق", + "Delete favorite" : "ياقتۇرىدىغاننى ئۆچۈرۈڭ", "Update" : "يېڭىلا", + "Delete favorites" : "ياقتۇرىدىغانلارنى ئۆچۈرۈڭ", + "Zoom on bounds" : "چەكنى چوڭايتىش", + "Undo {action} (Ctrl+Z)" : "ئەمەلدىن قالدۇرۇش {ھەرىكەت} (Ctrl + Z)", + "Redo {action} (Ctrl+Shift+Z)" : "Redo {action} (Ctrl + Shift + Z)", + "Move photo" : "رەسىمنى يۆتكەڭ", + "Add favorite" : "ياقتۇرىدىغاننى قوشۇڭ", + "Edit favorite" : "ياقتۇرىدىغان تەھرىرلەڭ", + "Rename favorite category" : "ياقتۇرىدىغان تۈرنىڭ نامىنى ئۆزگەرتىڭ", + "Delete contact address" : "ئالاقىلىشىش ئادرېسىنى ئۆچۈرۈڭ", + "Select All" : "ھەممىنى تاللاڭ", + "Display pictures" : "رەسىملەرنى كۆرسىتىش", + "Spiderfy" : "Spiderfy", + "Open in Sidebar" : "يان كۆزنەكتە ئېچىڭ", + "Remove geo data" : "گېئو سانلىق مەلۇماتلىرىنى ئۆچۈرۈڭ", + "Are you sure you want to remove geo data of {nb} photos?" : "{Nb} رەسىملەرنىڭ گېئو سانلىق مەلۇماتلىرىنى ئۆچۈرمەكچىمۇ؟", "Yes" : "Yes", + "New contact address" : "يېڭى ئالاقىلىشىش ئادرېسى", + "Choose a contact" : "ئالاقىنى تاللاڭ", + "Address type" : "ئادرېس تىپى", + "Add address to contact" : "ئالاقىلىشىش ئۈچۈن ئادرېس قوشۇڭ", + "Open" : "ئېچىڭ", + "closes in {nb} minutes" : "{nb} مىنۇتتا تاقىلىدۇ", + "until {date}" : "{date}", + "Closed" : "تاقالدى", + "opens at {date}" : "{چېسلادا ئېچىلىدۇ", + "Find directions" : "يۆنىلىشنى تېپىڭ", + "Clear POIs" : "POI نى تازىلاش", + "No suggestions" : "تەكلىپ يوق", "Search" : "Search", + "Point at {coords}" : "نۇقتا {coords}", + "Search for {q}" : "{Q for نى ئىزدەڭ", + "Unknown Place" : "نامەلۇم جاي", "File" : "File", + "Track/Route" : "ئىز / يول", + "Display elevation" : "ئېگىزلىكىنى كۆرسىتىش", + "Begins at" : "باشلىنىدۇ", + "north" : "شىمال", + "northeast" : "شەرقىي شىمال", + "east" : "شەرق", + "southeast" : "شەرقىي جەنۇب", + "south" : "جەنۇب", + "southwest" : "غەربىي جەنۇب", + "west" : "west", + "northwest" : "غەربىي شىمال", + "slight right" : "ئازراق ئوڭ", + "right" : "توغرا", + "sharp right" : "ئۆتكۈر ئوڭ", + "slight left" : "ئازراق سول", + "left" : "left", + "sharp left" : "ئۆتكۈر سول", + "Turn around" : "كەينىگە بۇرۇلۇڭ", + "Head {dir}" : "Head {dir}", + " on {road}" : " on {road}", + "Continue {dir}" : "داۋاملاشتۇرۇش {dir}", + "Waypoint reached" : "Waypoint reached", + "Take the {exitStr} exit in the roundabout" : "ئايلانما يولدا {exitStr} چىقىش ئېغىزىنى ئېلىڭ", + " onto {road}" : " on {road}", + "Destination reached" : "مەنزىلگە يەتتى", + "At the fork, turn {modifier}" : "چاتقالدا {ئۆزگەرتكۈچ turn", + "Merge {modifier}" : "بىرلەشتۈرۈش {ئۆزگەرتكۈچ}", + "Turn {modifier} on the ramp" : "پەلەمپەيدە {ئۆزگەرتكۈچ} نى ئېچىڭ", + "Take the ramp on the {modifier}" : "{ئۆزگەرتكۈچ on دىكى پەلەمپەينى ئېلىڭ", + "Turn {modifier} at the end of the road" : "يولنىڭ ئاخىرىدىكى {ئۆزگەرتكۈچنى ئايلاندۇرۇڭ", + "onto {road}" : "on {road}", + "Start" : "باشلاش", + "Via {viaNumber}" : "Via {viaNumber}", "Destination" : "Destination", + "m" : "m", + "km" : "km", + "yd" : "yd", + "mi" : "mi", + "h" : "h", + "min" : "min", + "s" : "s", + "By car (OSRM demo)" : "ماشىنا بىلەن (OSRM demo)", + "By car (OSRM)" : "ماشىنا بىلەن (OSRM)", + "By bike (OSRM)" : "ۋېلىسىپىت بىلەن (OSRM)", + "By foot (OSRM)" : "پىيادە (OSRM)", + "By bike (Mapbox)" : "ۋېلىسىپىت بىلەن (Mapbox)", + "By foot (Mapbox)" : "پىيادە (Mapbox)", + "By car with traffic (Mapbox)" : "قاتناش بىلەن (Mapbox)", + "By car without traffic (Mapbox)" : "قاتناشسىز ماشىنا بىلەن (Mapbox)", + "By car (GraphHopper)" : "ماشىنا بىلەن (GraphHopper)", + "By bike (GraphHopper)" : "ۋېلىسىپىت بىلەن (GraphHopper)", + "By Foot (GraphHopper)" : "By Foot (GraphHopper)", + "Routing error:" : "يول خاتالىقى:", + "Reverse steps order" : "قەدەم باسقۇچلىرىنى رەتلەش", + "Add step" : "قەدەم قوشۇڭ", + "Routing is currently disabled." : "نۆۋەتتە يول يۈرۈش چەكلەنگەن.", + "Nextcloud additional settings" : "Nextcloud قوشۇمچە تەڭشەكلىرى", + "Add a routing service" : "يېتەكلەش مۇلازىمىتى قوشۇڭ", + "Export as" : "Export as", + "GPX track" : "GPX ئىز", + "GPX route" : "GPX لىنىيىسى", + "Route {date}" : "يول {چېسلا}", + "Track {date}" : "ئىز {چېسلا}", + "Route exported to {path}." : "{يول} غا ئېكسپورت قىلىنغان يول.", + "Track exported to {path}." : "{يول} غا چىقىرىلغان يول.", + "Failed to export route" : "ئېكسپورت لىنىيىسى مەغلۇپ بولدى", + "Failed to export track" : "ئىز قوغلاش مەغلۇب بولدى", + "Export current route" : "نۆۋەتتىكى يولنى ئېكسپورت قىلىڭ", + "Zoom on current route" : "ھازىرقى لىنىيىدە چوڭايتىش", + "Via {i}" : "Via {i}", + "My location" : "مېنىڭ ئورنۇم", + "Impossible to get current location" : "ھازىرقى ئورۇنغا ئېرىشىش مۇمكىن ئەمەس", "Phone" : "تېلېفون", - "Default" : "كۆڭۈلدىكى" + "Computer" : "Computer", + "Unknown device type" : "نامەلۇم ئۈسكۈنىنىڭ تىپى", + "Failed to send current position" : "نۆۋەتتىكى ئورۇننى ئەۋەتىش مەغلۇب بولدى", + "Photo {photoName} added to map {mapName}" : "رەسىم {photoName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save photo {photoName} to map {mapName}" : "رەسىم {photoName map خەرىتە {mapName} نى ساقلىيالمىدى", + "A background job added {current} from {total} new photos. This might take a while." : "تەگلىك خىزمىتى {ئومۇمىي} يېڭى رەسىملەردىن {نۆۋەتتىكى} قوشۇلدى. بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن.", + "A background job updated {current} from {total} changed photos. This might take a while." : "تەگلىك خىزمىتى {ئومۇمىي} ئۆزگەرتىلگەن رەسىملەردىن {نۆۋەتتىكى} يېڭىلاندى. بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن.", + "What do you want to place?" : "نېمىگە قويماقچى؟", + "Photo files" : "رەسىم ھۆججىتى", + "Photo folders" : "رەسىم قىسقۇچلىرى", + "Choose pictures to place" : "جايغا رەسىم تاللاڭ", + "Choose directory of pictures to place" : "جايغا رەسىم مۇندەرىجىسىنى تاللاڭ", + "\"{path}\" successfully moved" : "\"{path}\" مۇۋەپپەقىيەتلىك يۆتكەلدى", + "{nb} photos moved" : "{nb} سۈرەتلەر يۆتكەلدى", + "Cleared photo cache" : "رەسىم ساقلىغۇچنى تازلىدى", + "Failed to clear photos cache" : "رەسىم غەملەكنى تازىلاش مەغلۇب بولدى", + "Saved {r} from {i} locations" : "{R} {i} ئورۇنلىرىدىن ساقلاندى", + "Failed to save locations" : "ئورۇننى ساقلىيالمىدى", + "Contact {contactName} added to map {mapName}" : "ئالاقىلىشىش {contactName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save Contact {contactName} to map {mapName}" : "ئالاقىلىشىش {contactName map خەرىتە {mapName to نى ساقلىيالمىدى", + "All Contacts added to map {mapName}" : "خەرىتە {mapName} غا قوشۇلغان بارلىق ئالاقىلەر", + "Failed to save all Contacts to map {mapName}" : "بارلىق ئالاقىداشلارنى خەرىتە {mapName to غا ساقلىمىدى", + "Failed to load contacts" : "ئالاقىنى يۈكلىيەلمىدى", + "Not grouped" : "گۇرۇپپا ئەمەس", + "Favorite {name} was saved" : "ياقتۇرىدىغان {ئىسىم} ساقلاندى", + "Favorite was deleted" : "ياقتۇرىدىغان ئۆچۈرۈلدى", + "Favorites exported in {path}" : "{يولدا ئېكسپورت قىلىنغان ئامراقلار", + "Import favorites from GeoJSON (Google Maps), gpx (OsmAnd, Nextcloud Maps) or kmz/kml (F-Droid Maps, Maps.me, Marble)" : "ياقتۇرىدىغانلارنى GeoJSON (Google خەرىتىسى) ، gpx (OsmAnd ، Nextcloud خەرىتىسى) ياكى kmz / kml (F-Droid خەرىتىسى ، Maps.me ، مەرمەر) دىن ئىمپورت قىلىڭ.", + "Favorite {favoriteName} added to map {mapName}" : "خەرىتە {mapName} غا ئەڭ ئامراق {favoriteName} قوشۇلدى", + "Failed to save Favorite {favoriteName} to map {mapName}" : "ئامراق {favoriteName} نى خەرىتە {mapName save نى ساقلاش مەغلۇب بولدى", + "Favorite category {favoriteName} linked to map {mapName}" : "ئەڭ ياخشى كۆرىدىغان تۈر {favoriteName map خەرىتە {mapName} غا ئۇلانغان", + "Failed to link Favorite category {favoriteName} to map {mapName}" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتە {mapName} غا ئۇلاش مەغلۇب بولدى", + "Favorite category {favoriteName} copied to map {mapName}" : "ياقتۇرىدىغان كاتېگورىيە {ياقتۇرىدىغان ئىسىم} خەرىتە كۆچۈرۈلگەن {mapName}", + "Failed to copy Favorite category {favoriteName} to map {mapName}" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتە {mapName} غا كۆچۈرەلمىدى", + "Favorite category {favoriteName} unlinked from map" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} خەرىتىدىن ئۇلانمىدى", + "Failed to remove Favorite category {favoriteName} from map" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتىدىن ئۆچۈرەلمىدى", + "Click on the map to add a favorite, press Esc to cancel" : "ئامراقنى قوشۇش ئۈچۈن خەرىتىنى چېكىڭ ، Esc نى بېسىڭ", + "Track {trackName} added to map {mapName}" : "ئىز {trackName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save track {trackName} to map {mapName}" : "ئىز قوغلاش مەغلۇب بولدى {trackName map خەرىتە {mapName}", + "Devices exported in {path}" : "{يولدا ئېكسپورت قىلىنغان ئۈسكۈنىلەر", + "Failed to export devices" : "ئۈسكۈنىلەرنى ئېكسپورت قىلالمىدى", + "Failed to delete device" : "ئۈسكۈنىنى ئۆچۈرەلمىدى", + "Device {deviceName} linked to map {mapName}" : "ئۈسكۈنە {deviceName map خەرىتە ئۇلانغان {mapName}", + "Failed to link Device to map {mapName}" : "ئۈسكۈنىنى خەرىتىگە ئۇلاش مەغلۇب بولدى {mapName}", + "Failed to share Device" : "ئۈسكۈنىنى ئورتاقلىشالمىدى", + "Import devices from gpx (Nextcloud Maps) or kml/kmz (Google Timeline) file" : "ئۈسكۈنىلەرنى gpx (Nextcloud خەرىتىسى) ياكى kml / kmz (Google ۋاقىت جەدۋىلى) ھۆججىتىدىن ئەكىرىڭ", + "{nb} devices imported from {path}" : "{nb} {يولدىن ئىمپورت قىلىنغان ئۈسكۈنىلەر", + "Failed to import devices" : "ئۈسكۈنىلەرنى ئەكىرىش مەغلۇب بولدى", + "Default" : "كۆڭۈلدىكى", + "Folder is not a map" : "ھۆججەت قىسقۇچ خەرىتە ئەمەس", + "Settings were successfully saved" : "تەڭشەكلەر مۇۋەپپەقىيەتلىك ساقلاندى", + "Failed to save settings" : "تەڭشەكلەرنى ساقلىيالمىدى", + "{nb} favorites imported from {path}" : "{nb} ياقتۇرىدىغان يول {يول}", + "Failed to import favorites" : "ياقتۇرىدىغانلارنى ئىمپورت قىلالمىدى", + "View in Maps" : "خەرىتە كۆرۈش", + "Import as favorites in Maps" : "خەرىتە ئامراق سۈپىتىدە ئەكىرىڭ", + "Import as devices in Maps" : "خەرىتە ئۈسكۈنىلىرى سۈپىتىدە ئەكىرىڭ", + "Copy link to map" : "خەرىتە ئۇلانمىسىنى كۆچۈرۈڭ", + "Default Map" : "كۆڭۈلدىكى خەرىتە", + "Your Default Map" : "سۈكۈتتىكى خەرىتىڭىز", + "New Map" : "يېڭى خەرىتە", + "Map deleted" : "خەرىتە ئۆچۈرۈلدى", + "Failed to save map color" : "خەرىتە رەڭگىنى ساقلىيالمىدى", + "Failed to delete map" : "خەرىتىنى ئۆچۈرەلمىدى", + "Failed to rename map" : "خەرىتىنىڭ نامىنى ئۆزگەرتىش مەغلۇب بولدى", + "Share map not implemented yet, just go to files and share the folder." : "ئورتاقلىشىش خەرىتىسى تېخى يولغا قويۇلمىدى ، ھۆججەتلەرگە بېرىپ ھۆججەت قىسقۇچنى ھەمبەھىرلەڭ.", + "Failed to load your maps" : "خەرىتىڭىزنى يۈكلىيەلمىدى", + "Media scan was not done yet. Wait a few minutes/hours and reload this page to see your photos/tracks." : "مېدىيا سىكانىرلاش تېخى ئېلىپ بېرىلمىدى. بىر نەچچە مىنۇت / سائەت ساقلاڭ ھەمدە بۇ بەتنى قايتا يۈكلەپ رەسىم / ئىزلىرىڭىزنى كۆرۈڭ.", + "Report Error" : "دوكلات خاتالىقى", + "Failed to get favorites" : "ياقتۇرىدىغانلارغا ئېرىشەلمىدى", + "Failed to create favorite" : "ياقتۇرىدىغان قۇرالمىدى", + "Failed to update favorite" : "ياقتۇرىدىغان يېڭىلانمىدى", + "Failed to delete favorite" : "ئامراقنى ئۆچۈرەلمىدى", + "Metadata" : "Metadata", + "Restaurant" : "رېستوران", + "Fast food" : "تېز تاماق", + "Bar" : "قاۋاقخانا", + "Supermarket" : "تاللا بازىرى", + "Cafe" : "قەھۋەخانا", + "Library" : "كۈتۈپخانا", + "School" : "مەكتەپ", + "Sports centre" : "تەنتەربىيە مەركىزى", + "Gas station" : "ماي قاچىلاش پونكىتى", + "Parking" : "ماشىنا توختىتىش", + "Bicycle parking" : "ۋېلىسىپىت توختىتىش", + "Car rental" : "ماشىنا ئىجارە بېرىش", + "ATM" : "ATM", + "Pharmacy" : "دورىگەرلىك", + "Cinema" : "Cinema", + "Public toilets" : "ئاممىۋى ھاجەتخانا", + "Drinking water" : "ئىچىملىك سۇ", + "Hospital" : "دوختۇرخانا", + "Doctors" : "دوختۇرلار", + "Dentist" : "چىش دوختۇرى", + "Hotel" : "مېھمانخانا", + "Maps routing settings" : "خەرىتە يېتەكلەش تەڭشىكى", + "To enable routing, you must set up a routing engine below." : "يول يۈرۈشنى قوزغىتىش ئۈچۈن چوقۇم تۆۋەندە يۆنىلىشلىك ماتور ئورنىتىشىڭىز كېرەك.", + "OSRM Website" : "OSRM تور بېكىتى", + "OSRM settings" : "OSRM تەڭشىكى", + "An OSRM server URL looks like this : https://my.osrm.server.org:5000/route/v1" : "OSRM مۇلازىمېتىر ئادرېسى مۇنداق: https://my.osrm.server.org:5000/route/v1", + "Leave URL fields empty to disable OSRM routing provider." : "OSRM يېتەكلىگۈچىنى چەكلەش ئۈچۈن URL بۆلەكلىرىنى بوش قويۇڭ.", + "OSRM server URL (car profile)" : "OSRM مۇلازىمېتىر URL (ماشىنا ئارخىپى)", + "OSRM server URL (bicycle profile)" : "OSRM مۇلازىمېتىر ئادرېسى (ۋېلىسىپىت ئارخىپى)", + "OSRM server URL (foot profile)" : "OSRM مۇلازىمېتىر URL (پۇت ئارخىپى)", + "Show OSRM demo server" : "OSRM ئۈلگە مۇلازىمېتىرنى كۆرسەت", + "Graphhopper Website" : "Graphhopper تور بېكىتى", + "GraphHopper settings" : "GraphHopper تەڭشىكى", + "A GraphHopper server URL looks like this : https://my.graphhopper.server.org:8989/route" : "GraphHopper مۇلازىمېتىر ئادرېسى مۇنداق: https://my.graphhopper.server.org:8989/route", + "GraphHopper server URL (will use main graphhopper server if empty)" : "GraphHopper مۇلازىمېتىر URL (قۇرۇق بولسا ئاساسلىق گرافىك مۇلازىمېتىرنى ئىشلىتىدۇ)", + "GraphHopper API key (mandatory if main server used)" : "GraphHopper API كۇنۇپكىسى (ئاساسلىق مۇلازىمېتىر ئىشلىتىلگەن بولسا مەجبۇرى)", + "Mapbox Website" : "خەرىتە ساندۇقى تور بېكىتى", + "Mapbox settings" : "خەرىتە ساندۇقى تەڭشىكى", + "Set the API key to use Mapbox routing service." : "Mapbox يول باشلاش مۇلازىمىتىنى ئىشلىتىش ئۈچۈن API كۇنۇپكىسىنى تەڭشەڭ.", + "Leave empty to disable." : "ئىناۋەتسىز قىلىش ئۈچۈن بوش قويۇڭ.", + "Mapbox API key" : "Mapbox API ئاچقۇچى", + "MapLibre Website" : "MapLibre تور بېكىتى", + "MapLibre settings" : "MapLibre تەڭشىكى", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "MapLibre-GL-JS بىلەن OpenStreetMap Vector Tiles ئۈچۈن ئۇسلۇب. Json نىڭ URL ۋە ئاساسىي ھوقۇق بېرىشىنى بەلگىلەڭ.", + "MapLibre Street style URL" : "MapLibre كوچا ئۇسلۇبىدىكى URL", + "Basic Authorization if required. Format is \"user:password\"" : "زۆرۈر تېپىلغاندا ئاساسىي ھوقۇق. فورماتى «ئىشلەتكۈچى: پارول»", + "Maps settings" : "خەرىتە تەڭشىكى" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/ug.json b/l10n/ug.json index 404bc143b..8e3ccd87f 100644 --- a/l10n/ug.json +++ b/l10n/ug.json @@ -1,31 +1,388 @@ { "translations": { + "Invalid values" : "ئىناۋەتسىز قىممەت", + "No such device" : "بۇنداق ئۈسكۈنى يوق", + "Map not Found" : "خەرىتە تېپىلمىدى", + "No device to export" : "ئېكسپورت قىلىدىغان ئۈسكۈنى يوق", + "/Maps is not a directory" : "/ خەرىتە مۇندەرىجە ئەمەس", + "/Maps directory is not writeable" : "/ خەرىتە مۇندەرىجىسىنى يازغىلى بولمايدۇ", + "Impossible to create /Maps directory" : "خەرىتە مۇندەرىجىسى قۇرۇش مۇمكىن ئەمەس", + "Nothing to export" : "ئېكىسپورت قىلىدىغان نەرسە يوق", + "Invalid file extension" : "ھۆججەت كېڭەيتىلمىسى ئىناۋەتسىز", + "Impossible to read the file" : "ھۆججەتنى ئوقۇش مۇمكىن ئەمەس", + "File does not exist" : "ھۆججەت مەۋجۇت ئەمەس", + "Error sharing device" : "ئۈسكۈنە ئورتاقلىشىش", + "Share not Found" : "ھەمبەھىر تېپىلمىدى", + "Share was already on map" : "ھەمبەھىرلىنىش خەرىتىدە ئىدى", + "No such favorite" : "ياقتۇرمايدىغانلار يوق", + "invalid values" : "ئىناۋەتسىز قىممەت", + "no such favorite" : "ياق", + "Unknown category" : "نامەلۇم تۈر", + "Error sharing favorite" : "ياقتۇرىدىغان ئورتاقلىشىشتا خاتالىق", + "Bad file type" : "ناچار ھۆججەت تىپى", + "File not found" : "ھۆججەت تېپىلمىدى", + "No such track" : "بۇنداق يول يوق", "Personal" : "شەخسىي", + "Maps" : "خەرىتە", + "🌍🌏🌎 The whole world fits inside your cloud!" : "World پۈتۈن دۇنيا بۇلۇتلىرىڭىزغا ماس كېلىدۇ!", + "**The whole world fits inside your cloud!**\n\n- **🗺 Beautiful map:** Using [OpenStreetMap](https://www.openstreetmap.org) and [Leaflet](https://leafletjs.com), you can choose between standard map, satellite, topographical, dark mode or even watercolor! 🎨\n- **⭐ Favorites:** Save your favorite places, privately! Sync with [GNOME Maps](https://github.com/nextcloud/maps/issues/30) and mobile apps is planned.\n- **🧭 Routing:** Possible using either [OSRM](http://project-osrm.org), [GraphHopper](https://www.graphhopper.com) or [Mapbox](https://www.mapbox.com).\n- **🖼 Photos on the map:** No more boring slideshows, just show directly where you were!\n- **🙋 Contacts on the map:** See where your friends live and plan your next visit.\n- **📱 Devices:** Lost your phone? Check the map!\n- **〰 Tracks:** Load GPS tracks or past trips. Recording with [PhoneTrack](https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) or [OwnTracks](https://owntracks.org) is planned." : "** پۈتۈن دۇنيا بۇلۇتلىرىڭىزغا ماس كېلىدۇ! **\n\n- ** 🗺 گۈزەل خەرىتە: ** [OpenStreetMap] (https://www.openstreetmap.org) ۋە [Leaflet] (https://leafletjs.com) نى ئىشلىتىپ ، ئۆلچەملىك خەرىتە ، سۈنئىي ھەمراھ ، يەر شەكلى ، قاراڭغۇ ھالەت ھەتتا سۇ بوياق! 🎨\n- ** av ياقتۇرىدىغانلار: ** ئۆزىڭىز ياقتۇرىدىغان جايلارنى ساقلاڭ! [GNOME خەرىتىسى] (https://github.com/nextcloud/maps/issues/30) ۋە كۆچمە ئەپلەر بىلەن ماسقەدەملەش پىلانلاندى.\n- ** 🧭 يول يۈرۈش: ** [OSRM] (http://project-osrm.org) ، [GraphHopper] (https://www.graphhopper.com) ياكى [Mapbox] (https: // www .mapbox.com).\n- ** the خەرىتىدىكى سۈرەتلەر: ** زېرىكىشلىك تام تەسۋىر يوق ، پەقەت قەيەردە ئىكەنلىكىڭىزنى بىۋاسىتە كۆرسىتىڭ!\n- ** map خەرىتىدىكى ئالاقىلىشىش: ** دوستلىرىڭىزنىڭ قەيەردە تۇرىدىغانلىقىنى كۆرۈڭ ۋە كېيىنكى زىيارىتىڭىزنى پىلانلاڭ.\n- ** 📱 ئۈسكۈنىلەر: ** تېلېفونىڭىز يوقاپ كەتتىمۇ؟ خەرىتىنى تەكشۈرۈپ بېقىڭ!\n- ** 〰 ئىزلار: ** GPS ئىزلىرىنى ياكى ئىلگىرىكى سەپەرلەرنى يۈكلەڭ. [PhoneTrack] (https://f-droid.org/en/packages/net.eneiluj.nextcloud.phonetrack/) ياكى [OwnTracks] (https://owntracks.org) بىلەن خاتىرىلەش پىلانلانغان.", + "My contacts" : "مېنىڭ ئالاقىداشلىرىم", + "Toggle all" : "ھەممىنى توغرىلاڭ", + "Zoom" : "چوڭايتىش", + "Copy to map" : "خەرىتىگە كۆچۈرۈڭ", + "Hide history" : "تارىخنى يوشۇرۇش", + "Show history" : "تارىخنى كۆرسەت", + "Change color" : "رەڭنى ئۆزگەرتىش", + "Zoom on area" : "رايوننى چوڭايتىش", "Export" : "چىقار", + "Link to map" : "خەرىتە ئۇلىنىشى", "Delete" : "ئۆچۈر", + "My devices" : "ئۈسكۈنىلىرىم", + "Refresh positions" : "ئورۇننى يېڭىلاش", + "Export all" : "ھەممىنى چىقىرىش", + "Import devices" : "ئۈسكۈنىلەرنى ئەكىرىش", + "Delete all" : "ھەممىنى ئۆچۈرۈڭ", + "My favorites" : "ياقتۇرىدىغانلىرىم", + "Disable favorite drag" : "ياقتۇرىدىغان سۆرەشنى چەكلەڭ", + "Enable favorite drag" : "ياقتۇرىدىغان سۆرەشنى قوزغىتىڭ", "Import" : "ئەكىر", + "Category name" : "تۈر ئىسمى", "Rename" : "ئات ئۆزگەرت", + "Add a favorite" : "ياقتۇرىدىغاننى قوشۇڭ", + "Zoom to bounds" : "چوڭايتىش", + "Delete share link" : "ھەمبەھىر ئۇلىنىشنى ئۆچۈرۈڭ", + "Create share link" : "ئورتاقلىشىش ئۇلانمىسى قۇر", + "Copied!" : "كۆچۈرۈلگەن!", + "Copy share link" : "ئورتاقلىشىش ئۇلانمىسىنى كۆچۈرۈڭ", + "Leave share" : "ئورتاقلىشىش", "Cancel" : "ۋاز كەچ", + "Link copied" : "ئۇلىنىش كۆچۈرۈلدى", + "Link {url} could not be copied to clipboard." : "ئۇلىنىش {url} نى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ.", + "Link could not be copied to clipboard." : "ئۇلىنىشنى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ.", + "Open folder" : "ھۆججەت قىسقۇچنى ئېچىڭ", "Share" : "ھەمبەھىر", + "My maps" : "مېنىڭ خەرىتەم", + "New map" : "يېڭى خەرىتە", + "Add Map" : "خەرىتە قوشۇڭ", + "My photos" : "مېنىڭ سۈرەتلىرىم", + "Disable photo drag" : "رەسىم سۆرەشنى چەكلەڭ", + "Enable photo drag" : "رەسىم سۆرەشنى قوزغىتىڭ", + "Say hi" : "سالام", + "Hide suggestions" : "تەكلىپلەرنى يوشۇرۇش", + "Suggest photo locations" : "رەسىم ئورۇنلىرىنى تەۋسىيە قىلىڭ", + "Clear photo cache" : "رەسىم ساقلىغۇچنى تازىلاش", + "Hi" : "ياخشىمۇسىز", + "Show track elevation" : "يولنىڭ ئېگىزلىكىنى كۆرسەت", + "Download track" : "ئىز قوغلاش", + "My tracks" : "مېنىڭ ئىزلىرىم", "Sort by name" : "Order by name", "Sort by date" : "Order by date", "Save" : "ساقلا", + "Favorite name" : "ياخشى كۆرىدىغان ئىسىم", + "Category" : "سەھىپە", + "Comment" : "باھا", "Location" : "ئورنى", + "New category {n}" : "يېڭى تۈر {n}", + "Place photos" : "رەسىملەرنى قويۇڭ", + "Place contact" : "ئالاقىلىشىش ئورنى", + "Share this location" : "بۇ ئورۇننى ئورتاقلىشىڭ", + "Shared location" : "ئورتاق ئورۇن", + "Route from here" : "بۇ يەردىن يولغا چىقىش يولى", + "Add route point" : "يول نۇقتىسىنى قوشۇڭ", + "Route to here" : "بۇ يەرگە بارىدىغان يول", + "Current location" : "نۆۋەتتىكى ئورنى", + "Improve this map" : "بۇ خەرىتىنى ياخشىلاڭ", + "Other maps" : "باشقا خەرىتە", + "Street map" : "كوچا خەرىتىسى", + "Satellite map" : "سۈنئىي ھەمراھ خەرىتىسى", + "Geo link ({geoLink}) copied to clipboard" : "Geo ئۇلىنىشى ({geoLink}) چاپلاش تاختىسىغا كۆچۈرۈلدى", + "Geo link could not be copied to clipboard" : "گېئو ئۇلىنىشنى چاپلاش تاختىسىغا كۆچۈرگىلى بولمايدۇ", "Close" : "ياپ", + "Track my position" : "مېنىڭ ئورنۇمنى ئىز قوغلاڭ", + "Open geo links" : "Geo ئۇلانمىسىنى ئېچىڭ", + "Display time filter slider" : "ۋاقىت سۈزگۈچ سىيرىلغۇچنى كۆرسىتىش", + "The True Size of Africa" : "ئافرىقىنىڭ ھەقىقىي چوڭلۇقى", + "Keep in mind that map projections always distort sizes of countries. The standard Mercator projection is particularly biased. Read more at:" : "ئېسىڭىزدە تۇتۇڭ ، خەرىتە مۆلچەرى ھەر قايسى دۆلەتلەرنىڭ چوڭ-كىچىكلىكىنى بۇرمىلايدۇ. ئۆلچەملىك مېركاتور مۆلچەرى بىر تەرەپلىمىلىك. تېخىمۇ كۆپ ئوقۇڭ:", + "(No name)" : "(ئىسمى يوق)", + "No favorites to display" : "كۆرسىتىشكە ئامراق يوق", + "Clear selection" : "تاللاشنى تازىلاش", + "Select all" : "ھەممىنى تاللاڭ", + "Display picture" : "رەسىم كۆرسىتىش", + "Remove from selection" : "تاللاشتىن چىقىرىۋېتىڭ", + "No suggestions found" : "تەكلىپ تېپىلمىدى", "Quit" : "چېكىن", + "Load more" : "تېخىمۇ كۆپ يۈكلەڭ", + "Photos default timezone:" : "سۈرەت سۈكۈتتىكى ۋاقىت رايونى:", + "Location sources:" : "ئورۇن مەنبەسى:", + "Tracks" : "ئىزلار", + "Devices" : "ئۈسكۈنىلەر", + "Show localized photos" : "يەرلىك رەسىملەرنى كۆرسەت", + "Hide localized photos" : "يەرلىك رەسىملەرنى يوشۇرۇش", "Tags" : "بەلگەلەر", "Favorite" : "يىغقۇچ", + "Photo suggestions" : "رەسىم تەكلىپلىرى", + "Track metadata" : "مېتا سانلىق مەلۇماتنى ئىز قوغلاڭ", + "Unable to change the favourite state of the file" : "ھۆججەتنىڭ ياقتۇرىدىغان ھالىتىنى ئۆزگەرتەلمىدى", + "Error while loading the file data" : "ھۆججەت سانلىق مەلۇماتلىرىنى يۈكلەۋاتقاندا خاتالىق", + "Distance" : "ئارىلىق", + "Duration" : "Duration", + "Moving time" : "يۆتكىلىشچان ۋاقىت", + "Pause time" : "ۋاقتىنى توختىتىش", + "Begin" : "باشلاڭ", + "End" : "ئاخىر", + "Cumulative elevation gain" : "جۇغلانما ئېگىزلىكنىڭ ئۆسۈشى", + "Cumulative elevation loss" : "جۇغلانما ئېگىزلىك يوقىتىش", + "Minimum elevation" : "ئەڭ تۆۋەن ئېگىزلىك", + "Maximum elevation" : "ئەڭ يۇقىرى ئېگىزلىك", + "Maximum speed" : "ئەڭ يۇقىرى سۈرئەت", + "Average speed" : "ئوتتۇرىچە سۈرئەت", + "Moving average speed" : "ئوتتۇرىچە سۈرئەت", + "Moving average pace" : "ئوتتۇرىچە سۈرئەت", + "New Favorite" : "يېڭى ئامراق", + "This Place" : "بۇ يەر", "Name" : "ئاتى", "Add" : "قوش", "Add to favorites" : "Add to favorites", + "This place" : "بۇ يەر", + "Add contact address" : "ئالاقىلىشىش ئادرېسىنى قوشۇڭ", "Home" : "ئۆي", "Work" : "ئىش", + "Delete this address" : "بۇ ئادرېسنى ئۆچۈرۈڭ", + "Delete this location" : "بۇ ئورۇننى ئۆچۈرۈڭ", + "Open in Contacts" : "ئالاقىدە ئېچىڭ", + "Device" : "ئۈسكۈنە", "Date" : "Date", + "Altitude" : "ئېگىزلىك", + "Battery" : "باتارېيە", + "Accuracy" : "ئېنىقلىق", + "No name" : "ئىسمى يوق", + "Delete favorite" : "ياقتۇرىدىغاننى ئۆچۈرۈڭ", "Update" : "يېڭىلا", + "Delete favorites" : "ياقتۇرىدىغانلارنى ئۆچۈرۈڭ", + "Zoom on bounds" : "چەكنى چوڭايتىش", + "Undo {action} (Ctrl+Z)" : "ئەمەلدىن قالدۇرۇش {ھەرىكەت} (Ctrl + Z)", + "Redo {action} (Ctrl+Shift+Z)" : "Redo {action} (Ctrl + Shift + Z)", + "Move photo" : "رەسىمنى يۆتكەڭ", + "Add favorite" : "ياقتۇرىدىغاننى قوشۇڭ", + "Edit favorite" : "ياقتۇرىدىغان تەھرىرلەڭ", + "Rename favorite category" : "ياقتۇرىدىغان تۈرنىڭ نامىنى ئۆزگەرتىڭ", + "Delete contact address" : "ئالاقىلىشىش ئادرېسىنى ئۆچۈرۈڭ", + "Select All" : "ھەممىنى تاللاڭ", + "Display pictures" : "رەسىملەرنى كۆرسىتىش", + "Spiderfy" : "Spiderfy", + "Open in Sidebar" : "يان كۆزنەكتە ئېچىڭ", + "Remove geo data" : "گېئو سانلىق مەلۇماتلىرىنى ئۆچۈرۈڭ", + "Are you sure you want to remove geo data of {nb} photos?" : "{Nb} رەسىملەرنىڭ گېئو سانلىق مەلۇماتلىرىنى ئۆچۈرمەكچىمۇ؟", "Yes" : "Yes", + "New contact address" : "يېڭى ئالاقىلىشىش ئادرېسى", + "Choose a contact" : "ئالاقىنى تاللاڭ", + "Address type" : "ئادرېس تىپى", + "Add address to contact" : "ئالاقىلىشىش ئۈچۈن ئادرېس قوشۇڭ", + "Open" : "ئېچىڭ", + "closes in {nb} minutes" : "{nb} مىنۇتتا تاقىلىدۇ", + "until {date}" : "{date}", + "Closed" : "تاقالدى", + "opens at {date}" : "{چېسلادا ئېچىلىدۇ", + "Find directions" : "يۆنىلىشنى تېپىڭ", + "Clear POIs" : "POI نى تازىلاش", + "No suggestions" : "تەكلىپ يوق", "Search" : "Search", + "Point at {coords}" : "نۇقتا {coords}", + "Search for {q}" : "{Q for نى ئىزدەڭ", + "Unknown Place" : "نامەلۇم جاي", "File" : "File", + "Track/Route" : "ئىز / يول", + "Display elevation" : "ئېگىزلىكىنى كۆرسىتىش", + "Begins at" : "باشلىنىدۇ", + "north" : "شىمال", + "northeast" : "شەرقىي شىمال", + "east" : "شەرق", + "southeast" : "شەرقىي جەنۇب", + "south" : "جەنۇب", + "southwest" : "غەربىي جەنۇب", + "west" : "west", + "northwest" : "غەربىي شىمال", + "slight right" : "ئازراق ئوڭ", + "right" : "توغرا", + "sharp right" : "ئۆتكۈر ئوڭ", + "slight left" : "ئازراق سول", + "left" : "left", + "sharp left" : "ئۆتكۈر سول", + "Turn around" : "كەينىگە بۇرۇلۇڭ", + "Head {dir}" : "Head {dir}", + " on {road}" : " on {road}", + "Continue {dir}" : "داۋاملاشتۇرۇش {dir}", + "Waypoint reached" : "Waypoint reached", + "Take the {exitStr} exit in the roundabout" : "ئايلانما يولدا {exitStr} چىقىش ئېغىزىنى ئېلىڭ", + " onto {road}" : " on {road}", + "Destination reached" : "مەنزىلگە يەتتى", + "At the fork, turn {modifier}" : "چاتقالدا {ئۆزگەرتكۈچ turn", + "Merge {modifier}" : "بىرلەشتۈرۈش {ئۆزگەرتكۈچ}", + "Turn {modifier} on the ramp" : "پەلەمپەيدە {ئۆزگەرتكۈچ} نى ئېچىڭ", + "Take the ramp on the {modifier}" : "{ئۆزگەرتكۈچ on دىكى پەلەمپەينى ئېلىڭ", + "Turn {modifier} at the end of the road" : "يولنىڭ ئاخىرىدىكى {ئۆزگەرتكۈچنى ئايلاندۇرۇڭ", + "onto {road}" : "on {road}", + "Start" : "باشلاش", + "Via {viaNumber}" : "Via {viaNumber}", "Destination" : "Destination", + "m" : "m", + "km" : "km", + "yd" : "yd", + "mi" : "mi", + "h" : "h", + "min" : "min", + "s" : "s", + "By car (OSRM demo)" : "ماشىنا بىلەن (OSRM demo)", + "By car (OSRM)" : "ماشىنا بىلەن (OSRM)", + "By bike (OSRM)" : "ۋېلىسىپىت بىلەن (OSRM)", + "By foot (OSRM)" : "پىيادە (OSRM)", + "By bike (Mapbox)" : "ۋېلىسىپىت بىلەن (Mapbox)", + "By foot (Mapbox)" : "پىيادە (Mapbox)", + "By car with traffic (Mapbox)" : "قاتناش بىلەن (Mapbox)", + "By car without traffic (Mapbox)" : "قاتناشسىز ماشىنا بىلەن (Mapbox)", + "By car (GraphHopper)" : "ماشىنا بىلەن (GraphHopper)", + "By bike (GraphHopper)" : "ۋېلىسىپىت بىلەن (GraphHopper)", + "By Foot (GraphHopper)" : "By Foot (GraphHopper)", + "Routing error:" : "يول خاتالىقى:", + "Reverse steps order" : "قەدەم باسقۇچلىرىنى رەتلەش", + "Add step" : "قەدەم قوشۇڭ", + "Routing is currently disabled." : "نۆۋەتتە يول يۈرۈش چەكلەنگەن.", + "Nextcloud additional settings" : "Nextcloud قوشۇمچە تەڭشەكلىرى", + "Add a routing service" : "يېتەكلەش مۇلازىمىتى قوشۇڭ", + "Export as" : "Export as", + "GPX track" : "GPX ئىز", + "GPX route" : "GPX لىنىيىسى", + "Route {date}" : "يول {چېسلا}", + "Track {date}" : "ئىز {چېسلا}", + "Route exported to {path}." : "{يول} غا ئېكسپورت قىلىنغان يول.", + "Track exported to {path}." : "{يول} غا چىقىرىلغان يول.", + "Failed to export route" : "ئېكسپورت لىنىيىسى مەغلۇپ بولدى", + "Failed to export track" : "ئىز قوغلاش مەغلۇب بولدى", + "Export current route" : "نۆۋەتتىكى يولنى ئېكسپورت قىلىڭ", + "Zoom on current route" : "ھازىرقى لىنىيىدە چوڭايتىش", + "Via {i}" : "Via {i}", + "My location" : "مېنىڭ ئورنۇم", + "Impossible to get current location" : "ھازىرقى ئورۇنغا ئېرىشىش مۇمكىن ئەمەس", "Phone" : "تېلېفون", - "Default" : "كۆڭۈلدىكى" + "Computer" : "Computer", + "Unknown device type" : "نامەلۇم ئۈسكۈنىنىڭ تىپى", + "Failed to send current position" : "نۆۋەتتىكى ئورۇننى ئەۋەتىش مەغلۇب بولدى", + "Photo {photoName} added to map {mapName}" : "رەسىم {photoName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save photo {photoName} to map {mapName}" : "رەسىم {photoName map خەرىتە {mapName} نى ساقلىيالمىدى", + "A background job added {current} from {total} new photos. This might take a while." : "تەگلىك خىزمىتى {ئومۇمىي} يېڭى رەسىملەردىن {نۆۋەتتىكى} قوشۇلدى. بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن.", + "A background job updated {current} from {total} changed photos. This might take a while." : "تەگلىك خىزمىتى {ئومۇمىي} ئۆزگەرتىلگەن رەسىملەردىن {نۆۋەتتىكى} يېڭىلاندى. بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن.", + "What do you want to place?" : "نېمىگە قويماقچى؟", + "Photo files" : "رەسىم ھۆججىتى", + "Photo folders" : "رەسىم قىسقۇچلىرى", + "Choose pictures to place" : "جايغا رەسىم تاللاڭ", + "Choose directory of pictures to place" : "جايغا رەسىم مۇندەرىجىسىنى تاللاڭ", + "\"{path}\" successfully moved" : "\"{path}\" مۇۋەپپەقىيەتلىك يۆتكەلدى", + "{nb} photos moved" : "{nb} سۈرەتلەر يۆتكەلدى", + "Cleared photo cache" : "رەسىم ساقلىغۇچنى تازلىدى", + "Failed to clear photos cache" : "رەسىم غەملەكنى تازىلاش مەغلۇب بولدى", + "Saved {r} from {i} locations" : "{R} {i} ئورۇنلىرىدىن ساقلاندى", + "Failed to save locations" : "ئورۇننى ساقلىيالمىدى", + "Contact {contactName} added to map {mapName}" : "ئالاقىلىشىش {contactName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save Contact {contactName} to map {mapName}" : "ئالاقىلىشىش {contactName map خەرىتە {mapName to نى ساقلىيالمىدى", + "All Contacts added to map {mapName}" : "خەرىتە {mapName} غا قوشۇلغان بارلىق ئالاقىلەر", + "Failed to save all Contacts to map {mapName}" : "بارلىق ئالاقىداشلارنى خەرىتە {mapName to غا ساقلىمىدى", + "Failed to load contacts" : "ئالاقىنى يۈكلىيەلمىدى", + "Not grouped" : "گۇرۇپپا ئەمەس", + "Favorite {name} was saved" : "ياقتۇرىدىغان {ئىسىم} ساقلاندى", + "Favorite was deleted" : "ياقتۇرىدىغان ئۆچۈرۈلدى", + "Favorites exported in {path}" : "{يولدا ئېكسپورت قىلىنغان ئامراقلار", + "Import favorites from GeoJSON (Google Maps), gpx (OsmAnd, Nextcloud Maps) or kmz/kml (F-Droid Maps, Maps.me, Marble)" : "ياقتۇرىدىغانلارنى GeoJSON (Google خەرىتىسى) ، gpx (OsmAnd ، Nextcloud خەرىتىسى) ياكى kmz / kml (F-Droid خەرىتىسى ، Maps.me ، مەرمەر) دىن ئىمپورت قىلىڭ.", + "Favorite {favoriteName} added to map {mapName}" : "خەرىتە {mapName} غا ئەڭ ئامراق {favoriteName} قوشۇلدى", + "Failed to save Favorite {favoriteName} to map {mapName}" : "ئامراق {favoriteName} نى خەرىتە {mapName save نى ساقلاش مەغلۇب بولدى", + "Favorite category {favoriteName} linked to map {mapName}" : "ئەڭ ياخشى كۆرىدىغان تۈر {favoriteName map خەرىتە {mapName} غا ئۇلانغان", + "Failed to link Favorite category {favoriteName} to map {mapName}" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتە {mapName} غا ئۇلاش مەغلۇب بولدى", + "Favorite category {favoriteName} copied to map {mapName}" : "ياقتۇرىدىغان كاتېگورىيە {ياقتۇرىدىغان ئىسىم} خەرىتە كۆچۈرۈلگەن {mapName}", + "Failed to copy Favorite category {favoriteName} to map {mapName}" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتە {mapName} غا كۆچۈرەلمىدى", + "Favorite category {favoriteName} unlinked from map" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} خەرىتىدىن ئۇلانمىدى", + "Failed to remove Favorite category {favoriteName} from map" : "ئامراق كاتېگورىيە {ياقتۇرىدىغان ئىسمى} نى خەرىتىدىن ئۆچۈرەلمىدى", + "Click on the map to add a favorite, press Esc to cancel" : "ئامراقنى قوشۇش ئۈچۈن خەرىتىنى چېكىڭ ، Esc نى بېسىڭ", + "Track {trackName} added to map {mapName}" : "ئىز {trackName map خەرىتىگە قوشۇلدى {mapName}", + "Failed to save track {trackName} to map {mapName}" : "ئىز قوغلاش مەغلۇب بولدى {trackName map خەرىتە {mapName}", + "Devices exported in {path}" : "{يولدا ئېكسپورت قىلىنغان ئۈسكۈنىلەر", + "Failed to export devices" : "ئۈسكۈنىلەرنى ئېكسپورت قىلالمىدى", + "Failed to delete device" : "ئۈسكۈنىنى ئۆچۈرەلمىدى", + "Device {deviceName} linked to map {mapName}" : "ئۈسكۈنە {deviceName map خەرىتە ئۇلانغان {mapName}", + "Failed to link Device to map {mapName}" : "ئۈسكۈنىنى خەرىتىگە ئۇلاش مەغلۇب بولدى {mapName}", + "Failed to share Device" : "ئۈسكۈنىنى ئورتاقلىشالمىدى", + "Import devices from gpx (Nextcloud Maps) or kml/kmz (Google Timeline) file" : "ئۈسكۈنىلەرنى gpx (Nextcloud خەرىتىسى) ياكى kml / kmz (Google ۋاقىت جەدۋىلى) ھۆججىتىدىن ئەكىرىڭ", + "{nb} devices imported from {path}" : "{nb} {يولدىن ئىمپورت قىلىنغان ئۈسكۈنىلەر", + "Failed to import devices" : "ئۈسكۈنىلەرنى ئەكىرىش مەغلۇب بولدى", + "Default" : "كۆڭۈلدىكى", + "Folder is not a map" : "ھۆججەت قىسقۇچ خەرىتە ئەمەس", + "Settings were successfully saved" : "تەڭشەكلەر مۇۋەپپەقىيەتلىك ساقلاندى", + "Failed to save settings" : "تەڭشەكلەرنى ساقلىيالمىدى", + "{nb} favorites imported from {path}" : "{nb} ياقتۇرىدىغان يول {يول}", + "Failed to import favorites" : "ياقتۇرىدىغانلارنى ئىمپورت قىلالمىدى", + "View in Maps" : "خەرىتە كۆرۈش", + "Import as favorites in Maps" : "خەرىتە ئامراق سۈپىتىدە ئەكىرىڭ", + "Import as devices in Maps" : "خەرىتە ئۈسكۈنىلىرى سۈپىتىدە ئەكىرىڭ", + "Copy link to map" : "خەرىتە ئۇلانمىسىنى كۆچۈرۈڭ", + "Default Map" : "كۆڭۈلدىكى خەرىتە", + "Your Default Map" : "سۈكۈتتىكى خەرىتىڭىز", + "New Map" : "يېڭى خەرىتە", + "Map deleted" : "خەرىتە ئۆچۈرۈلدى", + "Failed to save map color" : "خەرىتە رەڭگىنى ساقلىيالمىدى", + "Failed to delete map" : "خەرىتىنى ئۆچۈرەلمىدى", + "Failed to rename map" : "خەرىتىنىڭ نامىنى ئۆزگەرتىش مەغلۇب بولدى", + "Share map not implemented yet, just go to files and share the folder." : "ئورتاقلىشىش خەرىتىسى تېخى يولغا قويۇلمىدى ، ھۆججەتلەرگە بېرىپ ھۆججەت قىسقۇچنى ھەمبەھىرلەڭ.", + "Failed to load your maps" : "خەرىتىڭىزنى يۈكلىيەلمىدى", + "Media scan was not done yet. Wait a few minutes/hours and reload this page to see your photos/tracks." : "مېدىيا سىكانىرلاش تېخى ئېلىپ بېرىلمىدى. بىر نەچچە مىنۇت / سائەت ساقلاڭ ھەمدە بۇ بەتنى قايتا يۈكلەپ رەسىم / ئىزلىرىڭىزنى كۆرۈڭ.", + "Report Error" : "دوكلات خاتالىقى", + "Failed to get favorites" : "ياقتۇرىدىغانلارغا ئېرىشەلمىدى", + "Failed to create favorite" : "ياقتۇرىدىغان قۇرالمىدى", + "Failed to update favorite" : "ياقتۇرىدىغان يېڭىلانمىدى", + "Failed to delete favorite" : "ئامراقنى ئۆچۈرەلمىدى", + "Metadata" : "Metadata", + "Restaurant" : "رېستوران", + "Fast food" : "تېز تاماق", + "Bar" : "قاۋاقخانا", + "Supermarket" : "تاللا بازىرى", + "Cafe" : "قەھۋەخانا", + "Library" : "كۈتۈپخانا", + "School" : "مەكتەپ", + "Sports centre" : "تەنتەربىيە مەركىزى", + "Gas station" : "ماي قاچىلاش پونكىتى", + "Parking" : "ماشىنا توختىتىش", + "Bicycle parking" : "ۋېلىسىپىت توختىتىش", + "Car rental" : "ماشىنا ئىجارە بېرىش", + "ATM" : "ATM", + "Pharmacy" : "دورىگەرلىك", + "Cinema" : "Cinema", + "Public toilets" : "ئاممىۋى ھاجەتخانا", + "Drinking water" : "ئىچىملىك سۇ", + "Hospital" : "دوختۇرخانا", + "Doctors" : "دوختۇرلار", + "Dentist" : "چىش دوختۇرى", + "Hotel" : "مېھمانخانا", + "Maps routing settings" : "خەرىتە يېتەكلەش تەڭشىكى", + "To enable routing, you must set up a routing engine below." : "يول يۈرۈشنى قوزغىتىش ئۈچۈن چوقۇم تۆۋەندە يۆنىلىشلىك ماتور ئورنىتىشىڭىز كېرەك.", + "OSRM Website" : "OSRM تور بېكىتى", + "OSRM settings" : "OSRM تەڭشىكى", + "An OSRM server URL looks like this : https://my.osrm.server.org:5000/route/v1" : "OSRM مۇلازىمېتىر ئادرېسى مۇنداق: https://my.osrm.server.org:5000/route/v1", + "Leave URL fields empty to disable OSRM routing provider." : "OSRM يېتەكلىگۈچىنى چەكلەش ئۈچۈن URL بۆلەكلىرىنى بوش قويۇڭ.", + "OSRM server URL (car profile)" : "OSRM مۇلازىمېتىر URL (ماشىنا ئارخىپى)", + "OSRM server URL (bicycle profile)" : "OSRM مۇلازىمېتىر ئادرېسى (ۋېلىسىپىت ئارخىپى)", + "OSRM server URL (foot profile)" : "OSRM مۇلازىمېتىر URL (پۇت ئارخىپى)", + "Show OSRM demo server" : "OSRM ئۈلگە مۇلازىمېتىرنى كۆرسەت", + "Graphhopper Website" : "Graphhopper تور بېكىتى", + "GraphHopper settings" : "GraphHopper تەڭشىكى", + "A GraphHopper server URL looks like this : https://my.graphhopper.server.org:8989/route" : "GraphHopper مۇلازىمېتىر ئادرېسى مۇنداق: https://my.graphhopper.server.org:8989/route", + "GraphHopper server URL (will use main graphhopper server if empty)" : "GraphHopper مۇلازىمېتىر URL (قۇرۇق بولسا ئاساسلىق گرافىك مۇلازىمېتىرنى ئىشلىتىدۇ)", + "GraphHopper API key (mandatory if main server used)" : "GraphHopper API كۇنۇپكىسى (ئاساسلىق مۇلازىمېتىر ئىشلىتىلگەن بولسا مەجبۇرى)", + "Mapbox Website" : "خەرىتە ساندۇقى تور بېكىتى", + "Mapbox settings" : "خەرىتە ساندۇقى تەڭشىكى", + "Set the API key to use Mapbox routing service." : "Mapbox يول باشلاش مۇلازىمىتىنى ئىشلىتىش ئۈچۈن API كۇنۇپكىسىنى تەڭشەڭ.", + "Leave empty to disable." : "ئىناۋەتسىز قىلىش ئۈچۈن بوش قويۇڭ.", + "Mapbox API key" : "Mapbox API ئاچقۇچى", + "MapLibre Website" : "MapLibre تور بېكىتى", + "MapLibre settings" : "MapLibre تەڭشىكى", + "Set the URL and Basic Authorization of style.json for OpenStreetMap Vector Tiles with MapLibre-GL-JS." : "MapLibre-GL-JS بىلەن OpenStreetMap Vector Tiles ئۈچۈن ئۇسلۇب. Json نىڭ URL ۋە ئاساسىي ھوقۇق بېرىشىنى بەلگىلەڭ.", + "MapLibre Street style URL" : "MapLibre كوچا ئۇسلۇبىدىكى URL", + "Basic Authorization if required. Format is \"user:password\"" : "زۆرۈر تېپىلغاندا ئاساسىي ھوقۇق. فورماتى «ئىشلەتكۈچى: پارول»", + "Maps settings" : "خەرىتە تەڭشىكى" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/translationfiles/templates/maps.pot b/translationfiles/templates/maps.pot index ab1f6d24e..439377f88 100644 --- a/translationfiles/templates/maps.pot +++ b/translationfiles/templates/maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Nextcloud 3.14159\n" "Report-Msgid-Bugs-To: translations\\@example.com\n" -"POT-Creation-Date: 2024-11-03 01:18+0000\n" +"POT-Creation-Date: 2024-11-04 01:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -151,13 +151,13 @@ msgstr "" #. TRANSLATORS src/components/AppNavigationFavoritesItem.vue:85 #. TRANSLATORS src/views/App.vue:591 -#: /app/lib/Service/FavoritesService.php:399 -#: /app/lib/Service/FavoritesService.php:487 -#: /app/lib/Service/FavoritesService.php:488 -#: /app/lib/Service/FavoritesService.php:616 -#: /app/lib/Service/FavoritesService.php:731 -#: /app/lib/Service/FavoritesService.php:847 -#: /app/lib/Service/FavoritesService.php:908 +#: /app/lib/Service/FavoritesService.php:389 +#: /app/lib/Service/FavoritesService.php:477 +#: /app/lib/Service/FavoritesService.php:478 +#: /app/lib/Service/FavoritesService.php:606 +#: /app/lib/Service/FavoritesService.php:720 +#: /app/lib/Service/FavoritesService.php:836 +#: /app/lib/Service/FavoritesService.php:897 #: /app/specialVueFakeDummyForL10nScript.js:58 #: /app/specialVueFakeDummyForL10nScript.js:636 #: /app/specialVueFakeDummyForL10nScript.js:694