Compare commits
73 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3a53447b56 | |||
| 7294c16138 | |||
| 104c36d217 | |||
| f8dbe2349a | |||
| 0b74ccd426 | |||
| a2bb782f66 | |||
| b2fef6a112 | |||
| a8345b1da7 | |||
| 43c5fd3f76 | |||
| d407cdd861 | |||
| 0c5e1b2ee3 | |||
| 8fad0ceffc | |||
| c181720a89 | |||
| 4841e6ee63 | |||
| 52ce67b799 | |||
| 3c3cbd16b5 | |||
| 14472cb8cc | |||
| 033e78e587 | |||
| 909ff0e4f1 | |||
| 8ea3fba96e | |||
| f445c14b76 | |||
| 17c223efbf | |||
| 94774ca5c3 | |||
| c96099183e | |||
| 00609572e4 | |||
| 3cd3c6dd90 | |||
| e96a89e630 | |||
| 1219c8e152 | |||
| e3e499a63a | |||
| 9ff0adf239 | |||
| d6ee1eafa3 | |||
| c835064a6b | |||
| 5b7ea4e858 | |||
| d3ef95c78f | |||
| e761005e52 | |||
| 415ecb1cf5 | |||
| a30653c6cb | |||
| 48c3933cb6 | |||
| d02df72efe | |||
| 9fd6c4abc1 | |||
| 680ddd93c2 | |||
| 72812b2b07 | |||
| 2d91bdd74c | |||
| 053f725f98 | |||
| 0b5ce4e78a | |||
| 2fd8961b85 | |||
| 9d70509221 | |||
| 29628eba33 | |||
| b060efaca4 | |||
| 13583e8c6b | |||
| 0526c18ac2 | |||
| 239c8ccfe1 | |||
| b9e4a2a115 | |||
| 1ed4f74551 | |||
| 66881a7cc9 | |||
| a58a2961f3 | |||
| 044f4f076e | |||
| 3f6d0c4192 | |||
| 3f539d78e3 | |||
| c5e3677d28 | |||
| 52d092da64 | |||
| bf729c53d7 | |||
| 645350d4b2 | |||
| 1b241388ee | |||
| 71aa36860f | |||
| 0317e002f3 | |||
| 966db54089 | |||
| b76cdd09cc | |||
| 921ee17026 | |||
| 7eae0e5f8c | |||
| b7150ad88c | |||
| eedd8dce3c | |||
| ac9c17c7b8 |
@@ -9,6 +9,7 @@ on:
|
||||
- ".github/workflows/phpunit-32bits.yml"
|
||||
- "tests/phpunit-autotest.xml"
|
||||
- "lib/private/Snowflake/*"
|
||||
- "tests/lib/Preview/PreviewMapperTest.php"
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "15 1 * * 1-6"
|
||||
|
||||
@@ -105,9 +105,15 @@ jobs:
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
php -f tests/enable_all.php
|
||||
|
||||
- name: Add problem matchers for PHPUnit
|
||||
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
|
||||
|
||||
- name: PHPUnit nodb testsuite
|
||||
run: composer run test -- --exclude-group DB --exclude-group SLOWDB --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.nodb.xml' || '' }}
|
||||
|
||||
- name: Remove problem matchers for PHPUnit
|
||||
run: echo "::remove-matcher owner=phpunit::"
|
||||
|
||||
- name: Upload nodb code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: f257bfe47e...f3f66d0662
+32
-27
@@ -1,32 +1,37 @@
|
||||
OC.L10N.register(
|
||||
"comments",
|
||||
{
|
||||
"Comments" : "Comments",
|
||||
"You commented" : "You commented",
|
||||
"{author} commented" : "{author} commented",
|
||||
"You commented on %1$s" : "You commented on %1$s",
|
||||
"You commented on {file}" : "You commented on {file}",
|
||||
"%1$s commented on %2$s" : "%1$s commented on %2$s",
|
||||
"{author} commented on {file}" : "{author} commented on {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mentioned you in a comment on \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files app plugin to add comments to files",
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
"Failed to mark comments as read" : "Failed to mark comments as read",
|
||||
"Unable to load the comments list" : "Unable to load the comments list",
|
||||
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
|
||||
"No more messages" : "No more messages",
|
||||
"Retry" : "Retry",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"],
|
||||
"Comment" : "Comment",
|
||||
"An error occurred while trying to edit the comment" : "An error occurred while trying to edit the comment",
|
||||
"Comment deleted" : "Comment deleted",
|
||||
"An error occurred while trying to delete the comment" : "An error occurred while trying to delete the comment",
|
||||
"An error occurred while trying to create the comment" : "An error occurred while trying to create the comment"
|
||||
"Comments" : "კომენტარები",
|
||||
"You commented" : "თქვენი კომენტარი",
|
||||
"{author} commented" : "{author}-ის კომენტარი",
|
||||
"You commented on %1$s" : "თქვენი კომენტარი %1$s-ზე",
|
||||
"You commented on {file}" : "თქვენი კომენტარი {file}-ზე",
|
||||
"%1$s commented on %2$s" : "%1$s-მა დატოვა კომენტარი %2$s-ზე",
|
||||
"{author} commented on {file}" : "{author}-მა დატოვა კომენტარი {file}-ზე",
|
||||
"<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებისთვის",
|
||||
"Files" : "ფაილები",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "თქვენ გახსენეს \"{file}\"-ის კომენტარში ანგარიშიდან, რომელიც მის შემდეგ წაიშალა",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user}-მა გახსენათ კომენტარში ფაილზე \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files აპის დამატება ფაილებზე კომენტარების დასამატებლად",
|
||||
"Edit comment" : "კომენტარის ჩასწორება",
|
||||
"Delete comment" : "კომენტარის წაშლა",
|
||||
"Cancel edit" : "ჩასწორების გაუქმება",
|
||||
"New comment" : "ახალი კომენტარი",
|
||||
"Write a comment …" : "კომენტარის დაწერა …",
|
||||
"Post comment" : "კომენტარის დაპოსტვა",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ ხსენებისთვის, : ემოჯისთვის, / ჭკვიანი ამრჩევისთვის",
|
||||
"Could not reload comments" : "კომენტარების თავიდან ჩატვირთვა შეუძლებელია",
|
||||
"Failed to mark comments as read" : "კომენტარების წაკითხულად მონიშვნა ჩავარდა",
|
||||
"Unable to load the comments list" : "კომენტარების სიის ჩატვირთვა ჩავარდა",
|
||||
"No comments yet, start the conversation!" : "ჯერ კომენტარები არაა. დაიწყეთ საუბარი!",
|
||||
"No more messages" : "მეტი შეტყობინება აღარაა",
|
||||
"Retry" : "თავიდან ცდა",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 ახალი კომენტარი","{unread} ახალი კომენტარი"],
|
||||
"Comment" : "კომენტარი",
|
||||
"An error occurred while trying to edit the comment" : "კომენტარის ჩასწორებისას აღმოჩენილია შეცდომა",
|
||||
"Comment deleted" : "კომენტარი წაიშალა",
|
||||
"An error occurred while trying to delete the comment" : "კომენტარის წაშლისას აღმოჩენილია შეცდომა",
|
||||
"An error occurred while trying to create the comment" : "კომენტარის შექმნისას აღმოჩენილია შეცდომა",
|
||||
"Write a comment …" : "კომენტარის დაწერა …"
|
||||
},
|
||||
"nplurals=2; plural=(n!=1);");
|
||||
|
||||
+32
-27
@@ -1,30 +1,35 @@
|
||||
{ "translations": {
|
||||
"Comments" : "Comments",
|
||||
"You commented" : "You commented",
|
||||
"{author} commented" : "{author} commented",
|
||||
"You commented on %1$s" : "You commented on %1$s",
|
||||
"You commented on {file}" : "You commented on {file}",
|
||||
"%1$s commented on %2$s" : "%1$s commented on %2$s",
|
||||
"{author} commented on {file}" : "{author} commented on {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mentioned you in a comment on \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files app plugin to add comments to files",
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
"Failed to mark comments as read" : "Failed to mark comments as read",
|
||||
"Unable to load the comments list" : "Unable to load the comments list",
|
||||
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
|
||||
"No more messages" : "No more messages",
|
||||
"Retry" : "Retry",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"],
|
||||
"Comment" : "Comment",
|
||||
"An error occurred while trying to edit the comment" : "An error occurred while trying to edit the comment",
|
||||
"Comment deleted" : "Comment deleted",
|
||||
"An error occurred while trying to delete the comment" : "An error occurred while trying to delete the comment",
|
||||
"An error occurred while trying to create the comment" : "An error occurred while trying to create the comment"
|
||||
"Comments" : "კომენტარები",
|
||||
"You commented" : "თქვენი კომენტარი",
|
||||
"{author} commented" : "{author}-ის კომენტარი",
|
||||
"You commented on %1$s" : "თქვენი კომენტარი %1$s-ზე",
|
||||
"You commented on {file}" : "თქვენი კომენტარი {file}-ზე",
|
||||
"%1$s commented on %2$s" : "%1$s-მა დატოვა კომენტარი %2$s-ზე",
|
||||
"{author} commented on {file}" : "{author}-მა დატოვა კომენტარი {file}-ზე",
|
||||
"<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებისთვის",
|
||||
"Files" : "ფაილები",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "თქვენ გახსენეს \"{file}\"-ის კომენტარში ანგარიშიდან, რომელიც მის შემდეგ წაიშალა",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user}-მა გახსენათ კომენტარში ფაილზე \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files აპის დამატება ფაილებზე კომენტარების დასამატებლად",
|
||||
"Edit comment" : "კომენტარის ჩასწორება",
|
||||
"Delete comment" : "კომენტარის წაშლა",
|
||||
"Cancel edit" : "ჩასწორების გაუქმება",
|
||||
"New comment" : "ახალი კომენტარი",
|
||||
"Write a comment …" : "კომენტარის დაწერა …",
|
||||
"Post comment" : "კომენტარის დაპოსტვა",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ ხსენებისთვის, : ემოჯისთვის, / ჭკვიანი ამრჩევისთვის",
|
||||
"Could not reload comments" : "კომენტარების თავიდან ჩატვირთვა შეუძლებელია",
|
||||
"Failed to mark comments as read" : "კომენტარების წაკითხულად მონიშვნა ჩავარდა",
|
||||
"Unable to load the comments list" : "კომენტარების სიის ჩატვირთვა ჩავარდა",
|
||||
"No comments yet, start the conversation!" : "ჯერ კომენტარები არაა. დაიწყეთ საუბარი!",
|
||||
"No more messages" : "მეტი შეტყობინება აღარაა",
|
||||
"Retry" : "თავიდან ცდა",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 ახალი კომენტარი","{unread} ახალი კომენტარი"],
|
||||
"Comment" : "კომენტარი",
|
||||
"An error occurred while trying to edit the comment" : "კომენტარის ჩასწორებისას აღმოჩენილია შეცდომა",
|
||||
"Comment deleted" : "კომენტარი წაიშალა",
|
||||
"An error occurred while trying to delete the comment" : "კომენტარის წაშლისას აღმოჩენილია შეცდომა",
|
||||
"An error occurred while trying to create the comment" : "კომენტარის შექმნისას აღმოჩენილია შეცდომა",
|
||||
"Write a comment …" : "კომენტარის დაწერა …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n!=1);"
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
<template>
|
||||
<main id="app-dashboard">
|
||||
<h2>{{ greeting.text }}</h2>
|
||||
<ul class="statuses">
|
||||
<ul v-if="sortedRegisteredStatus.length > 0" class="statuses">
|
||||
<li
|
||||
v-for="status in sortedRegisteredStatus"
|
||||
:id="'status-' + status"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\Storage\Wrapper\PermissionsMask;
|
||||
use OC\Files\Storage\Wrapper\DirPermissionsMask;
|
||||
use OC\Files\View;
|
||||
use OCA\DAV\Connector\LegacyPublicAuth;
|
||||
use OCA\DAV\Connector\Sabre\ServerFactory;
|
||||
@@ -98,7 +98,11 @@ $server = $serverFactory->createServer(
|
||||
// FIXME: should not add storage wrappers outside of preSetup, need to find a better way
|
||||
$previousLog = Filesystem::logWarningWhenAddingStorageWrapper(false);
|
||||
Filesystem::addStorageWrapper('sharePermissions', function ($mountPoint, $storage) use ($share) {
|
||||
return new PermissionsMask(['storage' => $storage, 'mask' => $share->getPermissions() | Constants::PERMISSION_SHARE]);
|
||||
return new DirPermissionsMask([
|
||||
'storage' => $storage,
|
||||
'mask' => $share->getPermissions() | Constants::PERMISSION_SHARE,
|
||||
'path' => 'files'
|
||||
]);
|
||||
});
|
||||
Filesystem::addStorageWrapper('shareOwner', function ($mountPoint, $storage) use ($share) {
|
||||
return new PublicOwnerWrapper(['storage' => $storage, 'owner' => $share->getShareOwner()]);
|
||||
|
||||
+50
-50
@@ -72,39 +72,39 @@ OC.L10N.register(
|
||||
"Description: %s" : "Leírás: %s",
|
||||
"Where: %s" : "Hely: %s",
|
||||
"%1$s via %2$s" : "%1$s – %2$s",
|
||||
"Could not generate when statement" : "Nem sikerült létrehozni amikor az állítást",
|
||||
"Every Day for the entire day" : "Minden Nap a teljes napra",
|
||||
"Every Day for the entire day until %1$s" : "Minden Nap a teljes napon eddig %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Minden Nap %1$s - %2$sközött",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Minden Nap %1$s - %2$s között %3$s-ig",
|
||||
"Every %1$d Days for the entire day" : "Minden %1$d Nap az teljes napra",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Minden%1$d Nap a teljes napra %2$s-ig",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Minden%1$d Nap %2$s - %3$s között",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Minden%1$d Napon %2$s - %3$s között %4$s-ig",
|
||||
"Could not generate event recurrence statement" : "Nem sikerült megújuló eseményt létrehozni",
|
||||
"Every Week on %1$s for the entire day" : "Minden hét %1$s napon a teljes napja",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Minden Héten %1$s a teljes napra %2$s-ig",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Minden Hét %1$s napján %2$s - %3$sközött",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Minden Hét %1$s napján %2$s - %3$s között %4$s-ig",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Minden%1$d héten %2$s napon a teljes napra",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Minden%1$d Héten %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Minden%1$d hét %2$s napján %3$s - %4$sközött",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Minden%1$d héten %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Minden hónap %1$s napján a teljes napon",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Minden hónap %1$s napján a teljes napon %2$s-ig",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Minden hónap %1$s napján %2$sés %3$s között",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Minden hónap %1$s napján %2$sés %3$s között %4$s-ig",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Minden%1$d Hónap %2$s napján a teljes napon",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Minden%1$d Hónap %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között %5$s-ig",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Minden év %1$s hónap %2$s napján a teljes napra",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Minden év %1$s hónapjában %2$s napján a teljes napon %3$s-ig",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$sközött.",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Minden%1$d év %2$s hónapján %3$s napján a teljes napra",
|
||||
"On specific dates for the entire day until %1$s" : "Egy megadott időpontban a teljes napon %1$s-ig ",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Egy megadott időpontban %1$s és %2$s %3$s-ig",
|
||||
"Could not generate when statement" : "Nem sikerült előállítani az időfeltételt",
|
||||
"Every Day for the entire day" : "Minden nap a teljes napra",
|
||||
"Every Day for the entire day until %1$s" : "Minden nap a teljes napon eddig: %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Minden nap %1$s és %2$sközött",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Minden nap %1$s és %2$s között eddig: %3$s",
|
||||
"Every %1$d Days for the entire day" : "Minden %1$d. napon, a teljes napra",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Minden %1$d. napon, a teljes napra eddig: %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Minden %1$d. napon %2$s és %3$s között",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Minden %1$d. napon %2$s és %3$s között eddig: %4$s",
|
||||
"Could not generate event recurrence statement" : "Nem sikerült eseményismétlési utasítást előállítani",
|
||||
"Every Week on %1$s for the entire day" : "Minden héten %1$s, a teljes napra",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Minden héten %1$s, a teljes napra eddig: %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Minden héten %1$s, %2$s és %3$s között",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Minden héten %1$s, %2$s és %3$s között eddig: %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Minden %1$d. héten %2$s, a teljes napra",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Minden %1$d. héten %2$s, a teljes napon eddig: %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Minden %1$d. héten %2$s, %3$s és %4$s között",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Minden %1$d. héten %2$s, %3$s és %4$s között eddig: %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Minden hónap %1$s. napján, a teljes napon",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Minden hónap %1$s. napján, a teljes napon eddig: %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Minden hónap %1$s. napján %2$s és %3$s között",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Minden hónap %1$s. napján %2$s és %3$s között eddig: %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Minden %1$d. hónap %2$s. napján, a teljes napon",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Minden %1$d. hónap %2$s. napján, a teljes napon eddig: %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Minden %1$d. hónap %2$s. napján %3$s és %4$s között",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Minden %1$d. hónap %2$s. napján %3$s és %4$s között eddig: %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Minden év %1$s hónapja %2$s. napján, a teljes napra",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Minden év %1$s hónapjának %2$s. napján, a teljes napon eddig: %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Minden év %1$s hónapjának %2$s. napján %3$s – %4$s között.",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Minden év %1$s hónapjának %2$s. napján %3$s – %4$s között eddig: %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Minden %1$d. év %2$s hónapjának %3$s. napján, a teljes napra",
|
||||
"On specific dates for the entire day until %1$s" : "Adott dátumokon, a teljes napra eddig: %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Megadott dátumokon %1$s és %2$s között, eddig: %3$s",
|
||||
"Could not generate next recurrence statement" : "Nem sikerült a következő megújuló eseményt létrehozni",
|
||||
"Cancelled: %1$s" : "Lemondva: %1$s",
|
||||
"\"%1$s\" has been canceled" : "A következőt le lett mondva: „%1$s”",
|
||||
@@ -135,24 +135,24 @@ OC.L10N.register(
|
||||
"Friday" : "Péntek",
|
||||
"Saturday" : "Szombat",
|
||||
"Sunday" : "Vasárnap",
|
||||
"January" : "Január",
|
||||
"February" : "Február",
|
||||
"March" : "Március",
|
||||
"April" : "Április",
|
||||
"May" : "Május",
|
||||
"June" : "Június",
|
||||
"July" : "Július",
|
||||
"August" : "Augusztus",
|
||||
"September" : "Szeptember",
|
||||
"January" : "január",
|
||||
"February" : "február",
|
||||
"March" : "március",
|
||||
"April" : "április",
|
||||
"May" : "május",
|
||||
"June" : "június",
|
||||
"July" : "július",
|
||||
"August" : "augusztus",
|
||||
"September" : "szeptember",
|
||||
"October" : "Október",
|
||||
"November" : "November",
|
||||
"December" : "December",
|
||||
"November" : "november",
|
||||
"December" : "december",
|
||||
"First" : "Első",
|
||||
"Second" : "Másodperc",
|
||||
"Second" : "Második",
|
||||
"Third" : "Harmadik",
|
||||
"Fourth" : "Negyedik",
|
||||
"Last" : "Utolsó",
|
||||
"Second Last" : "Második Utolsó",
|
||||
"Second Last" : "Utolsó előtti",
|
||||
"Third Last" : "Harmadik Utolsó",
|
||||
"Fourth Last" : "Negyedik Utolsó",
|
||||
"Contacts" : "Névjegyek",
|
||||
@@ -183,7 +183,7 @@ OC.L10N.register(
|
||||
"Accounts" : "Fiókok",
|
||||
"System address book which holds all accounts" : "A rendszer címjegyzéke, amely az összes fiókot tartalmazza",
|
||||
"File is not updatable: %1$s" : "A fájl nem frissíthető: %1$s",
|
||||
"Failed to get storage for file" : "Nem sikerlt a tárhely lekérése a fájl számára",
|
||||
"Failed to get storage for file" : "Nem sikerült a tárhely lekérése a fájl számára",
|
||||
"Could not write to final file, canceled by hook" : "A végleges fájl nem írható, a hurok megszakította",
|
||||
"Could not write file contents" : "A fájl tartalma nem írható",
|
||||
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
|
||||
@@ -208,9 +208,9 @@ OC.L10N.register(
|
||||
"Completed on %s" : "Befejezve: %s",
|
||||
"Due on %s by %s" : "Esedékesség: %s, %s által",
|
||||
"Due on %s" : "Esedékesség: %s",
|
||||
"DAV system address book" : "DAV rendszer címjegyzék",
|
||||
"No outstanding DAV system address book sync." : "Nincs kiemelkedő DAV rendszer címjegyzék szinkronizálás.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "A DAV rendszer címjegyzék szinkronizációja még nem futott le, mert több, mint 1000 felhasználó található vagy hiba történt. Kérem futtassa manuálisan a következő paranccsal: \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book" : "DAV rendszer-címjegyzék",
|
||||
"No outstanding DAV system address book sync." : "Nincs függőben lévő DAV rendszercímjegyzék-szinkronizálás.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "A DAV rendszer címjegyzék-szinkronizációja még nem futott le, mert több, mint 1000 felhasználó található, vagy mert hiba történt. Futtassa kézileg a következő paranccsal: „occ dav:sync-system-addressbook”.",
|
||||
"WebDAV endpoint" : "WebDAV végpont",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "A webkiszolgáló nincs megfelelően beállítva a fájlok szinkronizálásához, mert a WebDAV interfész hibásnak tűnik.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "A webkisolgáló megfelelően van konfigurálva a WebDAVon keresztüli fájl szinkronizáció engedélyezéséhez.",
|
||||
|
||||
+50
-50
@@ -70,39 +70,39 @@
|
||||
"Description: %s" : "Leírás: %s",
|
||||
"Where: %s" : "Hely: %s",
|
||||
"%1$s via %2$s" : "%1$s – %2$s",
|
||||
"Could not generate when statement" : "Nem sikerült létrehozni amikor az állítást",
|
||||
"Every Day for the entire day" : "Minden Nap a teljes napra",
|
||||
"Every Day for the entire day until %1$s" : "Minden Nap a teljes napon eddig %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Minden Nap %1$s - %2$sközött",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Minden Nap %1$s - %2$s között %3$s-ig",
|
||||
"Every %1$d Days for the entire day" : "Minden %1$d Nap az teljes napra",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Minden%1$d Nap a teljes napra %2$s-ig",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Minden%1$d Nap %2$s - %3$s között",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Minden%1$d Napon %2$s - %3$s között %4$s-ig",
|
||||
"Could not generate event recurrence statement" : "Nem sikerült megújuló eseményt létrehozni",
|
||||
"Every Week on %1$s for the entire day" : "Minden hét %1$s napon a teljes napja",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Minden Héten %1$s a teljes napra %2$s-ig",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Minden Hét %1$s napján %2$s - %3$sközött",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Minden Hét %1$s napján %2$s - %3$s között %4$s-ig",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Minden%1$d héten %2$s napon a teljes napra",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Minden%1$d Héten %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Minden%1$d hét %2$s napján %3$s - %4$sközött",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Minden%1$d héten %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Minden hónap %1$s napján a teljes napon",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Minden hónap %1$s napján a teljes napon %2$s-ig",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Minden hónap %1$s napján %2$sés %3$s között",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Minden hónap %1$s napján %2$sés %3$s között %4$s-ig",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Minden%1$d Hónap %2$s napján a teljes napon",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Minden%1$d Hónap %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között %5$s-ig",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Minden év %1$s hónap %2$s napján a teljes napra",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Minden év %1$s hónapjában %2$s napján a teljes napon %3$s-ig",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$sközött.",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Minden%1$d év %2$s hónapján %3$s napján a teljes napra",
|
||||
"On specific dates for the entire day until %1$s" : "Egy megadott időpontban a teljes napon %1$s-ig ",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Egy megadott időpontban %1$s és %2$s %3$s-ig",
|
||||
"Could not generate when statement" : "Nem sikerült előállítani az időfeltételt",
|
||||
"Every Day for the entire day" : "Minden nap a teljes napra",
|
||||
"Every Day for the entire day until %1$s" : "Minden nap a teljes napon eddig: %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Minden nap %1$s és %2$sközött",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Minden nap %1$s és %2$s között eddig: %3$s",
|
||||
"Every %1$d Days for the entire day" : "Minden %1$d. napon, a teljes napra",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Minden %1$d. napon, a teljes napra eddig: %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Minden %1$d. napon %2$s és %3$s között",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Minden %1$d. napon %2$s és %3$s között eddig: %4$s",
|
||||
"Could not generate event recurrence statement" : "Nem sikerült eseményismétlési utasítást előállítani",
|
||||
"Every Week on %1$s for the entire day" : "Minden héten %1$s, a teljes napra",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Minden héten %1$s, a teljes napra eddig: %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Minden héten %1$s, %2$s és %3$s között",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Minden héten %1$s, %2$s és %3$s között eddig: %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Minden %1$d. héten %2$s, a teljes napra",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Minden %1$d. héten %2$s, a teljes napon eddig: %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Minden %1$d. héten %2$s, %3$s és %4$s között",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Minden %1$d. héten %2$s, %3$s és %4$s között eddig: %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Minden hónap %1$s. napján, a teljes napon",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Minden hónap %1$s. napján, a teljes napon eddig: %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Minden hónap %1$s. napján %2$s és %3$s között",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Minden hónap %1$s. napján %2$s és %3$s között eddig: %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Minden %1$d. hónap %2$s. napján, a teljes napon",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Minden %1$d. hónap %2$s. napján, a teljes napon eddig: %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Minden %1$d. hónap %2$s. napján %3$s és %4$s között",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Minden %1$d. hónap %2$s. napján %3$s és %4$s között eddig: %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Minden év %1$s hónapja %2$s. napján, a teljes napra",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Minden év %1$s hónapjának %2$s. napján, a teljes napon eddig: %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Minden év %1$s hónapjának %2$s. napján %3$s – %4$s között.",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Minden év %1$s hónapjának %2$s. napján %3$s – %4$s között eddig: %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Minden %1$d. év %2$s hónapjának %3$s. napján, a teljes napra",
|
||||
"On specific dates for the entire day until %1$s" : "Adott dátumokon, a teljes napra eddig: %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Megadott dátumokon %1$s és %2$s között, eddig: %3$s",
|
||||
"Could not generate next recurrence statement" : "Nem sikerült a következő megújuló eseményt létrehozni",
|
||||
"Cancelled: %1$s" : "Lemondva: %1$s",
|
||||
"\"%1$s\" has been canceled" : "A következőt le lett mondva: „%1$s”",
|
||||
@@ -133,24 +133,24 @@
|
||||
"Friday" : "Péntek",
|
||||
"Saturday" : "Szombat",
|
||||
"Sunday" : "Vasárnap",
|
||||
"January" : "Január",
|
||||
"February" : "Február",
|
||||
"March" : "Március",
|
||||
"April" : "Április",
|
||||
"May" : "Május",
|
||||
"June" : "Június",
|
||||
"July" : "Július",
|
||||
"August" : "Augusztus",
|
||||
"September" : "Szeptember",
|
||||
"January" : "január",
|
||||
"February" : "február",
|
||||
"March" : "március",
|
||||
"April" : "április",
|
||||
"May" : "május",
|
||||
"June" : "június",
|
||||
"July" : "július",
|
||||
"August" : "augusztus",
|
||||
"September" : "szeptember",
|
||||
"October" : "Október",
|
||||
"November" : "November",
|
||||
"December" : "December",
|
||||
"November" : "november",
|
||||
"December" : "december",
|
||||
"First" : "Első",
|
||||
"Second" : "Másodperc",
|
||||
"Second" : "Második",
|
||||
"Third" : "Harmadik",
|
||||
"Fourth" : "Negyedik",
|
||||
"Last" : "Utolsó",
|
||||
"Second Last" : "Második Utolsó",
|
||||
"Second Last" : "Utolsó előtti",
|
||||
"Third Last" : "Harmadik Utolsó",
|
||||
"Fourth Last" : "Negyedik Utolsó",
|
||||
"Contacts" : "Névjegyek",
|
||||
@@ -181,7 +181,7 @@
|
||||
"Accounts" : "Fiókok",
|
||||
"System address book which holds all accounts" : "A rendszer címjegyzéke, amely az összes fiókot tartalmazza",
|
||||
"File is not updatable: %1$s" : "A fájl nem frissíthető: %1$s",
|
||||
"Failed to get storage for file" : "Nem sikerlt a tárhely lekérése a fájl számára",
|
||||
"Failed to get storage for file" : "Nem sikerült a tárhely lekérése a fájl számára",
|
||||
"Could not write to final file, canceled by hook" : "A végleges fájl nem írható, a hurok megszakította",
|
||||
"Could not write file contents" : "A fájl tartalma nem írható",
|
||||
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
|
||||
@@ -206,9 +206,9 @@
|
||||
"Completed on %s" : "Befejezve: %s",
|
||||
"Due on %s by %s" : "Esedékesség: %s, %s által",
|
||||
"Due on %s" : "Esedékesség: %s",
|
||||
"DAV system address book" : "DAV rendszer címjegyzék",
|
||||
"No outstanding DAV system address book sync." : "Nincs kiemelkedő DAV rendszer címjegyzék szinkronizálás.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "A DAV rendszer címjegyzék szinkronizációja még nem futott le, mert több, mint 1000 felhasználó található vagy hiba történt. Kérem futtassa manuálisan a következő paranccsal: \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book" : "DAV rendszer-címjegyzék",
|
||||
"No outstanding DAV system address book sync." : "Nincs függőben lévő DAV rendszercímjegyzék-szinkronizálás.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "A DAV rendszer címjegyzék-szinkronizációja még nem futott le, mert több, mint 1000 felhasználó található, vagy mert hiba történt. Futtassa kézileg a következő paranccsal: „occ dav:sync-system-addressbook”.",
|
||||
"WebDAV endpoint" : "WebDAV végpont",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "A webkiszolgáló nincs megfelelően beállítva a fájlok szinkronizálásához, mert a WebDAV interfész hibásnak tűnik.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "A webkisolgáló megfelelően van konfigurálva a WebDAVon keresztüli fájl szinkronizáció engedélyezéséhez.",
|
||||
|
||||
@@ -49,7 +49,7 @@ class BlockLegacyClientPlugin extends ServerPlugin {
|
||||
return;
|
||||
}
|
||||
|
||||
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.1.81');
|
||||
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.1.83');
|
||||
$maximumSupportedDesktopVersion = $this->config->getSystemValueString('maximum.supported.desktop.version', '99.99.99');
|
||||
|
||||
// Check if the client is a desktop client
|
||||
|
||||
@@ -79,6 +79,7 @@ OC.L10N.register(
|
||||
"Go to the \"{dir}\" directory" : "Fara í heimamöppu",
|
||||
"Current directory path" : "Fyrirliggjandi slóð að möppu",
|
||||
"Share" : "Deila",
|
||||
"Reload content" : "Endurlesa efni",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Þú hefur fullnýtt geymslukvótann þinn og getur ekki lengur sent inn skrár",
|
||||
"You do not have permission to upload or create files here." : "Þú hefur ekki heimild til að senda inn eða búa til skrár hér.",
|
||||
"Drag and drop files here to upload" : "Dragðu og slepptu hér skrám til að senda inn",
|
||||
@@ -94,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Önnur færsla með sama heiti er þegar til staðar.",
|
||||
"Invalid filename." : "Ógilt skráarheiti.",
|
||||
"Rename file" : "Endurnefna skrá",
|
||||
"Recently created" : "Nýlega útbúið",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Óþekkt skráartegund",
|
||||
"{ext} image" : "{ext} mynd",
|
||||
@@ -109,6 +111,7 @@ OC.L10N.register(
|
||||
"Last 30 days" : "Síðustu 30 daga",
|
||||
"This year ({year})" : "Þetta ár ({year})",
|
||||
"Last year ({year})" : "Síðasta ár ({year})",
|
||||
"Custom range" : "Sérsniðið bil",
|
||||
"Custom date range" : "Sérsniðið dagsetningabil",
|
||||
"Search everywhere" : "Leita allsstaðar",
|
||||
"Documents" : "Skjöl",
|
||||
@@ -120,6 +123,7 @@ OC.L10N.register(
|
||||
"Images" : "Myndir",
|
||||
"Videos" : "Myndskeið",
|
||||
"Filters" : "Síur",
|
||||
"Back to filters" : "Til baka í síur",
|
||||
"Appearance" : "Útlit",
|
||||
"Show hidden files" : "Sýna faldar skrár",
|
||||
"Show file type column" : "Sýna dálk fyrir skráategund",
|
||||
@@ -128,6 +132,7 @@ OC.L10N.register(
|
||||
"General" : "Almennt",
|
||||
"Sort favorites first" : "Raða eftirlætum fremst",
|
||||
"Sort folders before files" : "Raða möppum á undan skrám",
|
||||
"Enable folder tree view" : "Virkja möppugreinasýn",
|
||||
"Default view" : "Sjálfgefin sýn",
|
||||
"All files" : "Allar skrár",
|
||||
"Personal files" : "Einkaskrár",
|
||||
@@ -150,7 +155,10 @@ OC.L10N.register(
|
||||
"Show those shortcuts" : "Sýna þessa flýtilykla",
|
||||
"Warnings" : "Aðvaranir",
|
||||
"Warn before changing a file extension" : "Aðvara áður en skráarendingu er breytt",
|
||||
"Warn before deleting a file" : "Aðvara áður en skrá er eytt",
|
||||
"WebDAV URL" : "WebDAV-slóð",
|
||||
"Create an app password" : "Búa til lykilorð forrits",
|
||||
"Required for WebDAV authentication because Two-Factor Authentication is enabled for this account." : "Er krafist fyrir WebDAV-auðkenningu þar sem tveggja-þátta auðkenning er virkjuð fyrir þennan aðgang.",
|
||||
"How to access files using WebDAV" : "Hvernig á að nálgast skrár í gegnum WebDAV",
|
||||
"Total rows summary" : "Samantek á fjölda raða",
|
||||
"Toggle selection for all files and folders" : "Víxla vali af/á fyrir allar skrár og möppur",
|
||||
@@ -227,6 +235,9 @@ OC.L10N.register(
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Sé skráaendingin \"{old}\" fjarlægð, gæti skráin orðið ólæsileg.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Sé skráaendingunni \"{new}\" bætt við, gæti skráin orðið ólæsileg.",
|
||||
"Do not show this dialog again." : "Ekki sýna þennan glugga aftur.",
|
||||
"Rename file to hidden" : "Endurnefna skrá sem falda",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Sé settur punktur framan við skráaheiti, gæti skráin orðið falin.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Ertu viss um að þú viljir endurnefna skrána sem \"{filename}\"?",
|
||||
"Cancel" : "Hætta við",
|
||||
"Rename" : "Endurnefna",
|
||||
"Select file or folder to link to" : "Veldu skrá eða möppu til að tengja í",
|
||||
@@ -241,11 +252,13 @@ OC.L10N.register(
|
||||
"Error during upload: {message}" : "Villa við innsendingu: {message}",
|
||||
"Error during upload, status code {status}" : "Villa við innsendingu, stöðukóði: {status}",
|
||||
"Unknown error during upload" : "Óþekkt villa við innsendingu",
|
||||
"File list is reloading" : "Skráalisti er að hlaðast inn",
|
||||
"Loading current folder" : "Hleð inn núverandi möppu",
|
||||
"Retry" : "Reyna aftur",
|
||||
"No files in here" : "Engar skrár hér",
|
||||
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
|
||||
"Go back" : "Fara til baka",
|
||||
"Loading …" : "Hleð inn…",
|
||||
"Your files" : "Skrárnar þínar",
|
||||
"Open in files" : "Opna í skráaforritinu",
|
||||
"File cannot be accessed" : "Skráin er ekki aðgengileg",
|
||||
@@ -269,6 +282,9 @@ OC.L10N.register(
|
||||
"Failed to convert files: {message}" : "Mistókst að umbreyta skrám: {message}",
|
||||
"All files failed to be converted" : "Mistókst að umbreyta öllum skrám",
|
||||
"One file could not be converted: {message}" : "Ekki var hægt að umbreyta einni skrá: {message}",
|
||||
"_%n file could not be converted_::_%n files could not be converted_" : ["Ekki var hægt að umbreyta %n skrá","Ekki var hægt að umbreyta %n skrám"],
|
||||
"_%n file converted_::_%n files converted_" : ["%n skrá umbreytt","%n skrám umbreytt"],
|
||||
"Files converted" : "Skrám umbreytt",
|
||||
"Failed to convert files" : "Mistókst að umbreyta skrám",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"File successfully converted" : "Tókst að umbreyta skrá",
|
||||
@@ -304,7 +320,9 @@ OC.L10N.register(
|
||||
"The files are locked" : "Skrárnar eru læstar",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Færi {count} skrár í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Afrita {count} skrár í \"{destination}\" …",
|
||||
"Choose destination" : "Veldu áfangastað",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
@@ -319,6 +337,8 @@ OC.L10N.register(
|
||||
"Retry and close" : "Prófa aftur og loka",
|
||||
"Open online" : "Opna á netinu",
|
||||
"Details" : "Nánar",
|
||||
"Open the details sidebar" : "Opna hliðarspjald með ítarupplýsingum",
|
||||
"Unfavorite" : "Taka úr eftirlætum",
|
||||
"View in folder" : "Skoða í möppu",
|
||||
"Type" : "Tegund",
|
||||
"Created new folder \"{name}\"" : "Bjó til nýja möppu \"{name}\"",
|
||||
@@ -327,6 +347,7 @@ OC.L10N.register(
|
||||
"Templates" : "Sniðmát",
|
||||
"New template folder" : "Ný mappa fyrir sniðmát",
|
||||
"In folder" : "Í möppunni",
|
||||
"Pick folder to search in" : "Veldu möppu til að leita í",
|
||||
"Search in all files" : "Leita í öllum skrám",
|
||||
"Search in folder: {folder}" : "Leita í möppunni: {folder}",
|
||||
"One of the dropped files could not be processed" : "Ekki var hægt að vinna með eina af slepptu skránum",
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
"Go to the \"{dir}\" directory" : "Fara í heimamöppu",
|
||||
"Current directory path" : "Fyrirliggjandi slóð að möppu",
|
||||
"Share" : "Deila",
|
||||
"Reload content" : "Endurlesa efni",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Þú hefur fullnýtt geymslukvótann þinn og getur ekki lengur sent inn skrár",
|
||||
"You do not have permission to upload or create files here." : "Þú hefur ekki heimild til að senda inn eða búa til skrár hér.",
|
||||
"Drag and drop files here to upload" : "Dragðu og slepptu hér skrám til að senda inn",
|
||||
@@ -92,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Önnur færsla með sama heiti er þegar til staðar.",
|
||||
"Invalid filename." : "Ógilt skráarheiti.",
|
||||
"Rename file" : "Endurnefna skrá",
|
||||
"Recently created" : "Nýlega útbúið",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Óþekkt skráartegund",
|
||||
"{ext} image" : "{ext} mynd",
|
||||
@@ -107,6 +109,7 @@
|
||||
"Last 30 days" : "Síðustu 30 daga",
|
||||
"This year ({year})" : "Þetta ár ({year})",
|
||||
"Last year ({year})" : "Síðasta ár ({year})",
|
||||
"Custom range" : "Sérsniðið bil",
|
||||
"Custom date range" : "Sérsniðið dagsetningabil",
|
||||
"Search everywhere" : "Leita allsstaðar",
|
||||
"Documents" : "Skjöl",
|
||||
@@ -118,6 +121,7 @@
|
||||
"Images" : "Myndir",
|
||||
"Videos" : "Myndskeið",
|
||||
"Filters" : "Síur",
|
||||
"Back to filters" : "Til baka í síur",
|
||||
"Appearance" : "Útlit",
|
||||
"Show hidden files" : "Sýna faldar skrár",
|
||||
"Show file type column" : "Sýna dálk fyrir skráategund",
|
||||
@@ -126,6 +130,7 @@
|
||||
"General" : "Almennt",
|
||||
"Sort favorites first" : "Raða eftirlætum fremst",
|
||||
"Sort folders before files" : "Raða möppum á undan skrám",
|
||||
"Enable folder tree view" : "Virkja möppugreinasýn",
|
||||
"Default view" : "Sjálfgefin sýn",
|
||||
"All files" : "Allar skrár",
|
||||
"Personal files" : "Einkaskrár",
|
||||
@@ -148,7 +153,10 @@
|
||||
"Show those shortcuts" : "Sýna þessa flýtilykla",
|
||||
"Warnings" : "Aðvaranir",
|
||||
"Warn before changing a file extension" : "Aðvara áður en skráarendingu er breytt",
|
||||
"Warn before deleting a file" : "Aðvara áður en skrá er eytt",
|
||||
"WebDAV URL" : "WebDAV-slóð",
|
||||
"Create an app password" : "Búa til lykilorð forrits",
|
||||
"Required for WebDAV authentication because Two-Factor Authentication is enabled for this account." : "Er krafist fyrir WebDAV-auðkenningu þar sem tveggja-þátta auðkenning er virkjuð fyrir þennan aðgang.",
|
||||
"How to access files using WebDAV" : "Hvernig á að nálgast skrár í gegnum WebDAV",
|
||||
"Total rows summary" : "Samantek á fjölda raða",
|
||||
"Toggle selection for all files and folders" : "Víxla vali af/á fyrir allar skrár og möppur",
|
||||
@@ -225,6 +233,9 @@
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Sé skráaendingin \"{old}\" fjarlægð, gæti skráin orðið ólæsileg.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Sé skráaendingunni \"{new}\" bætt við, gæti skráin orðið ólæsileg.",
|
||||
"Do not show this dialog again." : "Ekki sýna þennan glugga aftur.",
|
||||
"Rename file to hidden" : "Endurnefna skrá sem falda",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Sé settur punktur framan við skráaheiti, gæti skráin orðið falin.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Ertu viss um að þú viljir endurnefna skrána sem \"{filename}\"?",
|
||||
"Cancel" : "Hætta við",
|
||||
"Rename" : "Endurnefna",
|
||||
"Select file or folder to link to" : "Veldu skrá eða möppu til að tengja í",
|
||||
@@ -239,11 +250,13 @@
|
||||
"Error during upload: {message}" : "Villa við innsendingu: {message}",
|
||||
"Error during upload, status code {status}" : "Villa við innsendingu, stöðukóði: {status}",
|
||||
"Unknown error during upload" : "Óþekkt villa við innsendingu",
|
||||
"File list is reloading" : "Skráalisti er að hlaðast inn",
|
||||
"Loading current folder" : "Hleð inn núverandi möppu",
|
||||
"Retry" : "Reyna aftur",
|
||||
"No files in here" : "Engar skrár hér",
|
||||
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
|
||||
"Go back" : "Fara til baka",
|
||||
"Loading …" : "Hleð inn…",
|
||||
"Your files" : "Skrárnar þínar",
|
||||
"Open in files" : "Opna í skráaforritinu",
|
||||
"File cannot be accessed" : "Skráin er ekki aðgengileg",
|
||||
@@ -267,6 +280,9 @@
|
||||
"Failed to convert files: {message}" : "Mistókst að umbreyta skrám: {message}",
|
||||
"All files failed to be converted" : "Mistókst að umbreyta öllum skrám",
|
||||
"One file could not be converted: {message}" : "Ekki var hægt að umbreyta einni skrá: {message}",
|
||||
"_%n file could not be converted_::_%n files could not be converted_" : ["Ekki var hægt að umbreyta %n skrá","Ekki var hægt að umbreyta %n skrám"],
|
||||
"_%n file converted_::_%n files converted_" : ["%n skrá umbreytt","%n skrám umbreytt"],
|
||||
"Files converted" : "Skrám umbreytt",
|
||||
"Failed to convert files" : "Mistókst að umbreyta skrám",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"File successfully converted" : "Tókst að umbreyta skrá",
|
||||
@@ -302,7 +318,9 @@
|
||||
"The files are locked" : "Skrárnar eru læstar",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Færi {count} skrár í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Afrita {count} skrár í \"{destination}\" …",
|
||||
"Choose destination" : "Veldu áfangastað",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
@@ -317,6 +335,8 @@
|
||||
"Retry and close" : "Prófa aftur og loka",
|
||||
"Open online" : "Opna á netinu",
|
||||
"Details" : "Nánar",
|
||||
"Open the details sidebar" : "Opna hliðarspjald með ítarupplýsingum",
|
||||
"Unfavorite" : "Taka úr eftirlætum",
|
||||
"View in folder" : "Skoða í möppu",
|
||||
"Type" : "Tegund",
|
||||
"Created new folder \"{name}\"" : "Bjó til nýja möppu \"{name}\"",
|
||||
@@ -325,6 +345,7 @@
|
||||
"Templates" : "Sniðmát",
|
||||
"New template folder" : "Ný mappa fyrir sniðmát",
|
||||
"In folder" : "Í möppunni",
|
||||
"Pick folder to search in" : "Veldu möppu til að leita í",
|
||||
"Search in all files" : "Leita í öllum skrám",
|
||||
"Search in folder: {folder}" : "Leita í möppunni: {folder}",
|
||||
"One of the dropped files could not be processed" : "Ekki var hægt að vinna með eina af slepptu skránum",
|
||||
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Inny wpis o tej samej nazwie już istnieje.",
|
||||
"Invalid filename." : "Nieprawidłowa nazwa pliku.",
|
||||
"Rename file" : "Zmień nazwę pliku",
|
||||
"Recently created" : "Ostatnio utworzone",
|
||||
"Folder" : "Katalog",
|
||||
"Unknown file type" : "Nieznany typ pliku",
|
||||
"{ext} image" : "{ext} zdjęcie",
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Inny wpis o tej samej nazwie już istnieje.",
|
||||
"Invalid filename." : "Nieprawidłowa nazwa pliku.",
|
||||
"Rename file" : "Zmień nazwę pliku",
|
||||
"Recently created" : "Ostatnio utworzone",
|
||||
"Folder" : "Katalog",
|
||||
"Unknown file type" : "Nieznany typ pliku",
|
||||
"{ext} image" : "{ext} zdjęcie",
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
namespace OCA\Files\BackgroundJob;
|
||||
|
||||
use OC\Files\SetupManager;
|
||||
use OC\Files\Utils\Scanner;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
@@ -15,6 +16,7 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUserManager;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
@@ -33,6 +35,8 @@ class ScanFiles extends TimedJob {
|
||||
private LoggerInterface $logger,
|
||||
private IDBConnection $connection,
|
||||
ITimeFactory $time,
|
||||
private readonly SetupManager $setupManager,
|
||||
private readonly IUserManager $userManager,
|
||||
) {
|
||||
parent::__construct($time);
|
||||
// Run once per 10 minutes
|
||||
@@ -42,10 +46,11 @@ class ScanFiles extends TimedJob {
|
||||
protected function runScanner(string $user): void {
|
||||
try {
|
||||
$scanner = new Scanner(
|
||||
$user,
|
||||
$this->userManager->get($user),
|
||||
null,
|
||||
$this->dispatcher,
|
||||
$this->logger
|
||||
$this->logger,
|
||||
$this->setupManager,
|
||||
);
|
||||
$scanner->backgroundScan('');
|
||||
} catch (\Exception $e) {
|
||||
|
||||
@@ -11,6 +11,7 @@ use OC\Core\Command\Base;
|
||||
use OC\Core\Command\InterruptedException;
|
||||
use OC\DB\Connection;
|
||||
use OC\DB\ConnectionAdapter;
|
||||
use OC\Files\SetupManager;
|
||||
use OC\Files\Storage\Wrapper\Jail;
|
||||
use OC\Files\Utils\Scanner;
|
||||
use OC\FilesMetadata\FilesMetadataManager;
|
||||
@@ -49,6 +50,7 @@ class Scan extends Base {
|
||||
private FilesMetadataManager $filesMetadataManager,
|
||||
private IEventDispatcher $eventDispatcher,
|
||||
private LoggerInterface $logger,
|
||||
private SetupManager $setupManager,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
@@ -111,10 +113,11 @@ class Scan extends Base {
|
||||
): void {
|
||||
$connection = $this->reconnectToDatabase($output);
|
||||
$scanner = new Scanner(
|
||||
$user,
|
||||
$this->userManager->get($user),
|
||||
new ConnectionAdapter($connection),
|
||||
Server::get(IEventDispatcher::class),
|
||||
Server::get(LoggerInterface::class)
|
||||
$this->eventDispatcher,
|
||||
$this->logger,
|
||||
$this->setupManager,
|
||||
);
|
||||
|
||||
# check on each file/folder if there was a user interrupt (ctrl-c) and throw an exception
|
||||
|
||||
@@ -10,6 +10,7 @@ use OC\Core\Command\Base;
|
||||
use OC\Core\Command\InterruptedException;
|
||||
use OC\DB\Connection;
|
||||
use OC\DB\ConnectionAdapter;
|
||||
use OC\Files\SetupManager;
|
||||
use OC\Files\Utils\Scanner;
|
||||
use OC\ForbiddenException;
|
||||
use OC\Preview\Storage\StorageFactory;
|
||||
@@ -60,6 +61,7 @@ class ScanAppData extends Base {
|
||||
new ConnectionAdapter($connection),
|
||||
Server::get(IEventDispatcher::class),
|
||||
Server::get(LoggerInterface::class),
|
||||
Server::get(SetupManager::class),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ import { emit } from '@nextcloud/event-bus'
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import PQueue from 'p-queue'
|
||||
import logger from '../logger.ts'
|
||||
import { fetchNode } from '../services/WebdavClient.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
type ConversionResponse = {
|
||||
path: string
|
||||
|
||||
@@ -10,7 +10,7 @@ import * as capabilities from '@nextcloud/capabilities'
|
||||
import * as eventBus from '@nextcloud/event-bus'
|
||||
import { File, Folder, Permission } from '@nextcloud/files'
|
||||
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { action } from './deleteAction.ts'
|
||||
import { shouldAskForConfirmation } from './deleteUtils.ts'
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { Permission } from '@nextcloud/files'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import PQueue from 'p-queue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { askConfirmation, canDisconnectOnly, canUnshareOnly, deleteNode, displayName, shouldAskForConfirmation } from './deleteUtils.ts'
|
||||
|
||||
// TODO: once the files app is migrated to the new frontend use the import instead:
|
||||
|
||||
@@ -11,10 +11,10 @@ import { showError } from '@nextcloud/dialogs'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { DefaultType, FileType } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { isDownloadable } from '../utils/permissions.ts'
|
||||
|
||||
export const action: IFileAction = {
|
||||
|
||||
@@ -9,7 +9,7 @@ import axios from '@nextcloud/axios'
|
||||
import * as eventBus from '@nextcloud/event-bus'
|
||||
import { File, Permission } from '@nextcloud/files'
|
||||
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { action } from './favoriteAction.ts'
|
||||
import * as favoriteAction from './favoriteAction.ts'
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import { generateUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import PQueue from 'p-queue'
|
||||
import Vue from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
const queue = new PQueue({ concurrency: 5 })
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import { t } from '@nextcloud/l10n'
|
||||
import { getConflicts } from '@nextcloud/upload'
|
||||
import { basename, join } from 'path'
|
||||
import Vue from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { getContents } from '../services/Files.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { canCopy, canMove, getQueue, MoveCopyAction } from './moveOrCopyActionUtils.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@ import { translate as t } from '@nextcloud/l10n'
|
||||
import { encodePath } from '@nextcloud/paths'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { isSyncable } from '../utils/permissions.ts'
|
||||
|
||||
export const action: IFileAction = {
|
||||
|
||||
@@ -7,7 +7,7 @@ import type { IView } from '@nextcloud/files'
|
||||
|
||||
import { File, Folder, Permission } from '@nextcloud/files'
|
||||
import { beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { action } from './sidebarAction.ts'
|
||||
|
||||
const sidebar = vi.hoisted(() => ({
|
||||
|
||||
@@ -9,7 +9,7 @@ import InformationSvg from '@mdi/svg/svg/information-outline.svg?raw'
|
||||
import { getSidebar, Permission } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export const ACTION_DETAILS = 'details'
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@ import NcBreadcrumbs from '@nextcloud/vue/components/NcBreadcrumbs'
|
||||
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useViews } from '../composables/useViews.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { dataTransferToFileTree, onDropExternalFiles, onDropInternalFiles } from '../services/DropService.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useDragAndDropStore } from '../store/dragging.ts'
|
||||
@@ -84,6 +83,7 @@ import { useFilesStore } from '../store/files.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { useUploaderStore } from '../store/uploader.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'BreadCrumbs',
|
||||
|
||||
@@ -37,9 +37,9 @@ import { UploadStatus } from '@nextcloud/upload'
|
||||
import debounce from 'debounce'
|
||||
import { defineComponent } from 'vue'
|
||||
import TrayArrowDownIcon from 'vue-material-design-icons/TrayArrowDown.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { dataTransferToFileTree, onDropExternalFiles } from '../services/DropService.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DragAndDropNotice',
|
||||
|
||||
@@ -136,10 +136,10 @@ import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import CustomElementRender from '../CustomElementRender.vue'
|
||||
import { useFileListWidth } from '../../composables/useFileListWidth.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import actionsMixins from '../../mixins/actionsMixin.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { executeAction } from '../../utils/actionUtils.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryActions',
|
||||
|
||||
@@ -27,10 +27,10 @@ import { useHotKey } from '@nextcloud/vue/composables/useHotKey'
|
||||
import { defineComponent } from 'vue'
|
||||
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useKeyboardStore } from '../../store/keyboard.ts'
|
||||
import { useSelectionStore } from '../../store/selection.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryCheckbox',
|
||||
|
||||
@@ -49,11 +49,11 @@ import { basename } from '@nextcloud/paths'
|
||||
import { defineComponent, inject } from 'vue'
|
||||
import NcTextField from '@nextcloud/vue/components/NcTextField'
|
||||
import { useFileListWidth } from '../../composables/useFileListWidth.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useRenamingStore } from '../../store/renaming.ts'
|
||||
import { useUserConfigStore } from '../../store/userconfig.ts'
|
||||
import { getFilenameValidity } from '../../utils/filenameValidity.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryName',
|
||||
|
||||
@@ -78,9 +78,9 @@ import CollectivesIcon from './CollectivesIcon.vue'
|
||||
import FavoriteIcon from './FavoriteIcon.vue'
|
||||
import RecentlyCreatedIcon from './RecentlyCreatedIcon.vue'
|
||||
import { usePreviewImage } from '../../composables/usePreviewImage.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import { isLivePhoto } from '../../services/LivePhotos.ts'
|
||||
import { useUserConfigStore } from '../../store/userconfig.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryPreview',
|
||||
|
||||
@@ -14,13 +14,13 @@ import { generateUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import { getConflicts, getUploader } from '@nextcloud/upload'
|
||||
import { vOnClickOutside } from '@vueuse/components'
|
||||
import { extname } from 'path'
|
||||
import { extname, relative } from 'path'
|
||||
import Vue, { computed, defineComponent } from 'vue'
|
||||
import { action as sidebarAction } from '../actions/sidebarAction.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { onDropInternalFiles } from '../services/DropService.ts'
|
||||
import { getDragAndDropPreview } from '../utils/dragUtils.ts'
|
||||
import { hashCode } from '../utils/hashUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { isDownloadable } from '../utils/permissions.ts'
|
||||
|
||||
Vue.directive('onClickOutside', vOnClickOutside)
|
||||
@@ -488,12 +488,17 @@ export default defineComponent({
|
||||
const items = Array.from(event.dataTransfer?.items || [])
|
||||
|
||||
if (selection.length === 0 && items.some((item) => item.kind === 'file')) {
|
||||
const files = items.filter((item) => item.kind === 'file')
|
||||
.map((item) => 'webkitGetAsEntry' in item ? item.webkitGetAsEntry() : item.getAsFile())
|
||||
.filter(Boolean) as (FileSystemEntry | File)[]
|
||||
const uploader = getUploader()
|
||||
const root = uploader.destination.path
|
||||
const relativePath = relative(root, this.source.path)
|
||||
logger.debug('Start uploading dropped files', { target: this.source.path, root, relativePath, files: files.map((file) => file.name) })
|
||||
|
||||
await uploader.batchUpload(
|
||||
this.source.path,
|
||||
items.filter((item) => item.kind === 'file')
|
||||
.map((item) => 'webkitGetAsEntry' in item ? item.webkitGetAsEntry() : item.getAsFile())
|
||||
.filter(Boolean) as (FileSystemEntry | File)[],
|
||||
relativePath,
|
||||
files,
|
||||
async (nodes, path) => {
|
||||
try {
|
||||
const { contents, folder } = await this.activeView!.getContents(path)
|
||||
@@ -536,7 +541,7 @@ export default defineComponent({
|
||||
const isCopy = event.ctrlKey
|
||||
this.dragover = false
|
||||
|
||||
logger.debug('Dropped', { event, folder: this.source, selection, fileTree })
|
||||
logger.debug('Dropped', { event, folder: this.source, selection })
|
||||
|
||||
const nodes = selection.map((source) => this.filesStore.getNode(source)) as Node[]
|
||||
await onDropInternalFiles(nodes, this.source, contents, isCopy)
|
||||
|
||||
@@ -13,7 +13,7 @@ import type { Folder, IFileListHeader, View } from '@nextcloud/files'
|
||||
import type { PropType } from 'vue'
|
||||
|
||||
import PQueue from 'p-queue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* This component is used to render custom
|
||||
|
||||
@@ -84,11 +84,11 @@ import { FILE_LIST_HEAD_FIRST_BATCH_ACTION_ID } from './FilesListTableHeaderActi
|
||||
import FilesListTableHeaderButton from './FilesListTableHeaderButton.vue'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useRouteParameters } from '../composables/useRouteParameters.ts'
|
||||
import logger from '../logger.ts'
|
||||
import filesSortingMixin from '../mixins/filesSorting.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export const FILES_LIST_HEADER_SELECT_ALL_CHECKBOX_ID = 'files-list-header-select-all-checkbox'
|
||||
|
||||
|
||||
@@ -88,12 +88,12 @@ import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import { FILES_LIST_HEADER_SELECT_ALL_CHECKBOX_ID } from './FilesListTableHeader.vue'
|
||||
import { useFileActions } from '../composables/useFileActions.ts'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import logger from '../logger.ts'
|
||||
import actionsMixins from '../mixins/actionsMixin.ts'
|
||||
import { useActionsMenuStore } from '../store/actionsmenu.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export const FILE_LIST_HEAD_FIRST_BATCH_ACTION_ID = 'files-list-head-first-batch-action'
|
||||
|
||||
|
||||
@@ -91,10 +91,10 @@ import { useEnabledFileActions } from '../composables/useFileActions.ts'
|
||||
import { useFileListHeaders } from '../composables/useFileListHeaders.ts'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useRouteParameters } from '../composables/useRouteParameters.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FilesListVirtual',
|
||||
|
||||
@@ -10,9 +10,9 @@ import { NcIconSvgWrapper, NcLoadingIcon } from '@nextcloud/vue'
|
||||
import { ref, toRef, watch } from 'vue'
|
||||
import NcAppSidebarTab from '@nextcloud/vue/components/NcAppSidebarTab'
|
||||
import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useSidebarStore } from '../../store/sidebar.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
const props = defineProps<{
|
||||
/**
|
||||
|
||||
@@ -37,7 +37,7 @@ import { debounce, throttle } from 'throttle-debounce'
|
||||
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
|
||||
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
|
||||
import ChartPie from 'vue-material-design-icons/ChartPieOutline.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default {
|
||||
name: 'NavigationQuota',
|
||||
|
||||
@@ -17,8 +17,8 @@ import NcInputField from '@nextcloud/vue/components/NcInputField'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
|
||||
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
|
||||
import logger from '../../logger.ts'
|
||||
import { SanitizeFilenameStatus } from '../../models/SanitizeFilenameStatus.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
type ApiStatus = { total: number, processed: number, errors?: Record<string, string[]>, status: SanitizeFilenameStatus }
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ import debounce from 'debounce'
|
||||
import Vue from 'vue'
|
||||
import NcButton from '@nextcloud/vue/components/NcButton'
|
||||
import NcSelect from '@nextcloud/vue/components/NcSelect'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
const picker = getFilePickerBuilder(t('files', 'Choose a file or folder to transfer'))
|
||||
.setMultiSelect(false)
|
||||
|
||||
@@ -77,7 +77,7 @@ import type { PropType } from 'vue'
|
||||
import debounce from 'debounce'
|
||||
import { defineComponent } from 'vue'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
interface RecycledPoolItem {
|
||||
key: string
|
||||
|
||||
@@ -7,9 +7,9 @@ import { getFileActions } from '@nextcloud/files'
|
||||
import { useHotKey } from '@nextcloud/vue/composables/useHotKey'
|
||||
import { dirname } from 'path'
|
||||
import { useRoute, useRouter } from 'vue-router/composables'
|
||||
import logger from '../logger.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { executeAction } from '../utils/actionUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { useRouteParameters } from './useRouteParameters.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,7 @@ import { t } from '@nextcloud/l10n'
|
||||
import wrap from '@vue/web-component-wrapper'
|
||||
import Vue from 'vue'
|
||||
import FileListFilterType from '../components/FileListFilter/FileListFilterType.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export interface ITypePreset {
|
||||
id: string
|
||||
|
||||
@@ -13,7 +13,7 @@ import { emit } from '@nextcloud/event-bus'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { basename } from 'path'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { newNodeName } from '../utils/newNodeDialog.ts'
|
||||
|
||||
export const entry: NewMenuEntry = {
|
||||
|
||||
@@ -14,7 +14,7 @@ import { loadState } from '@nextcloud/initial-state'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { join } from 'path'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { newNodeName } from '../utils/newNodeDialog.ts'
|
||||
|
||||
const templatesEnabled = loadState<boolean>('files', 'templates_enabled', true)
|
||||
|
||||
@@ -9,7 +9,7 @@ import { getFilePickerBuilder } from '@nextcloud/dialogs'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { imagePath } from '@nextcloud/router'
|
||||
import logger from '../../logger.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* Initialize the unified search plugin.
|
||||
|
||||
@@ -12,11 +12,11 @@ import { relative } from 'path'
|
||||
import queryString from 'query-string'
|
||||
import Vue from 'vue'
|
||||
import Router, { isNavigationFailure, NavigationFailureType } from 'vue-router'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { defaultView } from '../utils/filesViews.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import { join } from '@nextcloud/paths'
|
||||
import { getUploader, hasConflict } from '@nextcloud/upload'
|
||||
import { handleCopyMoveNodesTo, HintException } from '../actions/moveOrCopyAction.ts'
|
||||
import { MoveCopyAction } from '../actions/moveOrCopyActionUtils.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { createDirectoryIfNotExists, Directory, resolveConflict, traverseTree } from './DropServiceUtils.ts'
|
||||
|
||||
/**
|
||||
@@ -123,7 +123,7 @@ export async function onDropExternalFiles(root: RootDirectory, destination: IFol
|
||||
// then browse its tree and upload its contents.
|
||||
if (file instanceof Directory) {
|
||||
try {
|
||||
logger.debug('Processing directory', { relativePath })
|
||||
logger.debug('Processing directory', { relativePath, destination })
|
||||
await createDirectoryIfNotExists(relativePath, destination)
|
||||
await uploadDirectoryContents(file, relativePath)
|
||||
} catch (error) {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { join } from 'node:path'
|
||||
import { beforeAll, describe, expect, it, vi } from 'vitest'
|
||||
import { DataTransferItem as DataTransferItemMock, FileSystemDirectoryEntry, fileSystemEntryToDataTransferItem, FileSystemFileEntry } from '../../../../__tests__/FileSystemAPIUtils.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { dataTransferToFileTree } from './DropService.ts'
|
||||
import { Directory, traverseTree } from './DropServiceUtils.ts'
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { defaultRemoteURL, defaultRootPath, getClient, getDefaultPropfind, resul
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { join } from '@nextcloud/paths'
|
||||
import { openConflictPicker } from '@nextcloud/upload'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* This represents a Directory in the file tree
|
||||
|
||||
@@ -8,7 +8,7 @@ import type { ContentsWithRoot } from '@nextcloud/files'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { getFavoriteNodes, getRemoteURL, getRootPath } from '@nextcloud/files/dav'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { getContents as filesContents } from './Files.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ import type { FileStat, ResponseDataDetailed } from 'webdav'
|
||||
|
||||
import { getDefaultPropfind, getRootPath, resultToNode } from '@nextcloud/files/dav'
|
||||
import { join } from 'path'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useSearchStore } from '../store/search.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
import { searchNodes } from './WebDavSearch.ts'
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@ import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { getRecentSearch, getRemoteURL, getRootPath, resultToNode } from '@nextcloud/files/dav'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import logger from '../logger.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
|
||||
const lastTwoWeeksTimestamp = Math.round((Date.now() / 1000) - (60 * 60 * 24 * 14))
|
||||
|
||||
@@ -8,9 +8,9 @@ import type { ContentsWithRoot } from '@nextcloud/files'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { defaultRemoteURL, getRootPath } from '@nextcloud/files/dav'
|
||||
import logger from '../logger.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useSearchStore } from '../store/search.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { searchNodes } from './WebDavSearch.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
import { generateUrl, getRootUrl } from '@nextcloud/router'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default () => {
|
||||
if ('serviceWorker' in navigator) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default class Settings {
|
||||
_settings
|
||||
|
||||
@@ -9,7 +9,7 @@ import type { ResponseDataDetailed, SearchResult } from 'webdav'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { defaultRootPath, getDavNameSpaces, getDavProperties, resultToNode } from '@nextcloud/files/dav'
|
||||
import { getBaseUrl } from '@nextcloud/router'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
|
||||
export interface SearchNodesOptions {
|
||||
|
||||
@@ -11,7 +11,7 @@ import { Folder, getNavigation, Permission } from '@nextcloud/files'
|
||||
import { getRemoteURL, getRootPath } from '@nextcloud/files/dav'
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, shallowRef, watch } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
// Temporary fake folder to use until we have the first valid folder
|
||||
// fetched and cached. This allow us to mount the FilesListVirtual
|
||||
|
||||
@@ -9,8 +9,8 @@ import type { FileSource, FilesStore, RootOptions, RootsStore, Service } from '.
|
||||
import { subscribe } from '@nextcloud/event-bus'
|
||||
import { defineStore } from 'pinia'
|
||||
import Vue, { ref } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { fetchNode } from '../services/WebdavClient.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { usePathsStore } from './paths.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,7 +9,7 @@ import { emit, subscribe } from '@nextcloud/event-bus'
|
||||
import { getFileListFilters, getFilesRegistry } from '@nextcloud/files'
|
||||
import { defineStore } from 'pinia'
|
||||
import { computed, ref } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* Check if the given value is an instance file list filter with mount function
|
||||
|
||||
@@ -11,7 +11,7 @@ import { File, FileType, getNavigation } from '@nextcloud/files'
|
||||
import { dirname } from '@nextcloud/paths'
|
||||
import { defineStore } from 'pinia'
|
||||
import Vue from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { useFilesStore } from './files.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,8 +13,8 @@ import { basename, dirname, extname } from '@nextcloud/paths'
|
||||
import { spawnDialog } from '@nextcloud/vue/functions/dialog'
|
||||
import { defineStore } from 'pinia'
|
||||
import Vue, { defineAsyncComponent, ref } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { fetchNode } from '../services/WebdavClient.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { useUserConfigStore } from './userconfig.ts'
|
||||
|
||||
export const useRenamingStore = defineStore('renaming', () => {
|
||||
|
||||
@@ -11,7 +11,7 @@ import { emit, subscribe } from '@nextcloud/event-bus'
|
||||
import debounce from 'debounce'
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, watch } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { VIEW_ID } from '../views/search.ts'
|
||||
|
||||
export const useSearchStore = defineStore('search', () => {
|
||||
|
||||
@@ -9,7 +9,7 @@ import { subscribe } from '@nextcloud/event-bus'
|
||||
import { getSidebarActions, getSidebarTabs } from '@nextcloud/files'
|
||||
import { defineStore } from 'pinia'
|
||||
import { computed, readonly, ref, watch } from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { useActiveStore } from './active.ts'
|
||||
import { useFilesStore } from './files.ts'
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ import { showError, showSuccess } from '@nextcloud/dialogs'
|
||||
import { NodeStatus } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import Vue from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* Execute an action on the current active node
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/**
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getLoggerBuilder } from '@nextcloud/logger'
|
||||
|
||||
export default getLoggerBuilder()
|
||||
export const logger = getLoggerBuilder()
|
||||
.setApp('files')
|
||||
.detectUser()
|
||||
.build()
|
||||
@@ -15,7 +15,7 @@ import { FilePickerBuilder } from '@nextcloud/dialogs'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { onMounted } from 'vue'
|
||||
import { generateFileUrl } from '../../../files_sharing/src/utils/generateUrl.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
defineProps<{
|
||||
providerId: string
|
||||
|
||||
@@ -190,7 +190,6 @@ import FilesListVirtual from '../components/FilesListVirtual.vue'
|
||||
import { useEnabledFileListActions } from '../composables/useFileListActions.ts'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useRouteParameters } from '../composables/useRouteParameters.ts'
|
||||
import logger from '../logger.ts'
|
||||
import filesSortingMixin from '../mixins/filesSorting.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
@@ -204,6 +203,7 @@ import { useViewConfigStore } from '../store/viewConfig.ts'
|
||||
import { humanizeWebDAVError } from '../utils/davUtils.ts'
|
||||
import { defaultView } from '../utils/filesViews.ts'
|
||||
import { getSummaryFor } from '../utils/fileUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FilesList',
|
||||
|
||||
@@ -52,9 +52,9 @@ import FilesNavigationSearch from '../components/FilesNavigationSearch.vue'
|
||||
import NavigationQuota from '../components/NavigationQuota.vue'
|
||||
import FilesAppSettings from './FilesAppSettings.vue'
|
||||
import { useViews } from '../composables/useViews.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useSidebarStore } from '../store/sidebar.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
const sidebar = useSidebarStore()
|
||||
const activeStore = useActiveStore()
|
||||
|
||||
@@ -68,7 +68,7 @@ import { defineComponent } from 'vue'
|
||||
import FileIcon from 'vue-material-design-icons/File.vue'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder.vue'
|
||||
import { generateFileUrl } from '../../../files_sharing/src/utils/generateUrl.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
// see lib/private/Collaboration/Reference/File/FileReferenceProvider.php
|
||||
type Ressource = {
|
||||
|
||||
@@ -13,7 +13,7 @@ import { ref } from 'vue'
|
||||
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
|
||||
import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'
|
||||
import SettingsSanitizeFilenames from '../components/Settings/SettingsSanitizeFilenames.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
const {
|
||||
docUrl,
|
||||
|
||||
@@ -70,8 +70,8 @@ import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
|
||||
import NcModal from '@nextcloud/vue/components/NcModal'
|
||||
import TemplateFiller from '../components/TemplateFiller.vue'
|
||||
import TemplatePreview from '../components/TemplatePreview.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { createFromTemplate, getTemplateFields, getTemplates } from '../services/Templates.js'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
const border = 2
|
||||
const margin = 8
|
||||
|
||||
@@ -10,9 +10,9 @@ import StarSvg from '@mdi/svg/svg/star-outline.svg?raw'
|
||||
import { subscribe } from '@nextcloud/event-bus'
|
||||
import { FileType, getNavigation, View } from '@nextcloud/files'
|
||||
import { getCanonicalLocale, getLanguage, t } from '@nextcloud/l10n'
|
||||
import logger from '../logger.ts'
|
||||
import { getContents } from '../services/Favorites.ts'
|
||||
import { hashCode } from '../utils/hashUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
/**
|
||||
* Generate a favorite folder view
|
||||
|
||||
@@ -9,6 +9,7 @@ declare(strict_types=1);
|
||||
namespace OCA\Files\Tests\BackgroundJob;
|
||||
|
||||
use OC\Files\Mount\MountPoint;
|
||||
use OC\Files\SetupManager;
|
||||
use OC\Files\Storage\Temporary;
|
||||
use OCA\Files\BackgroundJob\ScanFiles;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
@@ -17,6 +18,7 @@ use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\TestCase;
|
||||
@@ -51,7 +53,9 @@ class ScanFilesTest extends TestCase {
|
||||
$dispatcher,
|
||||
$logger,
|
||||
$connection,
|
||||
$this->createMock(ITimeFactory::class)
|
||||
$this->createMock(ITimeFactory::class),
|
||||
$this->createMock(SetupManager::class),
|
||||
$this->createMock(IUserManager::class),
|
||||
])
|
||||
->onlyMethods(['runScanner'])
|
||||
->getMock();
|
||||
|
||||
@@ -15,6 +15,9 @@ OC.L10N.register(
|
||||
"Unsatisfied authentication mechanism parameters" : "Neispunjeni parametri mehanizma autentifikacije",
|
||||
"Insufficient data: %s" : "Nedovoljno podataka: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "Pohranu s ID-om „%d” ne mogu uređivati korisnici koji nisu administratori",
|
||||
"Static credentials" : "Statičke vjerodajnice",
|
||||
"Access key ID" : "ID pristupnog ključa",
|
||||
"Secret access key" : "Tajni pristupni ključ",
|
||||
"Builtin" : "Ugrađen",
|
||||
"None" : "Nema",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -48,6 +51,7 @@ OC.L10N.register(
|
||||
"Storage Class" : "Razred pohrane",
|
||||
"Enable SSL" : "Omogući SSL",
|
||||
"Enable Path Style" : "Omogući Path Style",
|
||||
"Use Legacy S3 signing (v2)" : "Koristi starije S3 potpisivanje (v2)",
|
||||
"Enable multipart copy" : "Omogući višedijelno kopiranje",
|
||||
"Use presigned S3 url" : "Koristi unaprijed potpisani S3 URL",
|
||||
"SSE-C encryption key" : "SSE-C enkripcijski ključ",
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
"Unsatisfied authentication mechanism parameters" : "Neispunjeni parametri mehanizma autentifikacije",
|
||||
"Insufficient data: %s" : "Nedovoljno podataka: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "Pohranu s ID-om „%d” ne mogu uređivati korisnici koji nisu administratori",
|
||||
"Static credentials" : "Statičke vjerodajnice",
|
||||
"Access key ID" : "ID pristupnog ključa",
|
||||
"Secret access key" : "Tajni pristupni ključ",
|
||||
"Builtin" : "Ugrađen",
|
||||
"None" : "Nema",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -46,6 +49,7 @@
|
||||
"Storage Class" : "Razred pohrane",
|
||||
"Enable SSL" : "Omogući SSL",
|
||||
"Enable Path Style" : "Omogući Path Style",
|
||||
"Use Legacy S3 signing (v2)" : "Koristi starije S3 potpisivanje (v2)",
|
||||
"Enable multipart copy" : "Omogući višedijelno kopiranje",
|
||||
"Use presigned S3 url" : "Koristi unaprijed potpisani S3 URL",
|
||||
"SSE-C encryption key" : "SSE-C enkripcijski ključ",
|
||||
|
||||
@@ -15,6 +15,9 @@ OC.L10N.register(
|
||||
"Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です",
|
||||
"Insufficient data: %s" : "データが不足しています: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "ストレージID \"%d\" は、管理者ではないユーザーによる編集はできません。",
|
||||
"Static credentials" : "静的認証情報",
|
||||
"Access key ID" : "アクセスキーID",
|
||||
"Secret access key" : "シークレットアクセスキー",
|
||||
"Builtin" : "ビルトイン",
|
||||
"None" : "なし",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -48,6 +51,7 @@ OC.L10N.register(
|
||||
"Storage Class" : "ストレージクラス",
|
||||
"Enable SSL" : "SSLを有効",
|
||||
"Enable Path Style" : "パス形式を有効",
|
||||
"Use Legacy S3 signing (v2)" : "レガシー S3 署名 (v2) を使用する",
|
||||
"Enable multipart copy" : "マルチパートコピーの有効化",
|
||||
"Use presigned S3 url" : "事前署名付き S3 URL を使用する",
|
||||
"SSE-C encryption key" : "SSE-C暗号化キー",
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
"Unsatisfied authentication mechanism parameters" : "認証のためのパラメータが不十分です",
|
||||
"Insufficient data: %s" : "データが不足しています: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "ストレージID \"%d\" は、管理者ではないユーザーによる編集はできません。",
|
||||
"Static credentials" : "静的認証情報",
|
||||
"Access key ID" : "アクセスキーID",
|
||||
"Secret access key" : "シークレットアクセスキー",
|
||||
"Builtin" : "ビルトイン",
|
||||
"None" : "なし",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -46,6 +49,7 @@
|
||||
"Storage Class" : "ストレージクラス",
|
||||
"Enable SSL" : "SSLを有効",
|
||||
"Enable Path Style" : "パス形式を有効",
|
||||
"Use Legacy S3 signing (v2)" : "レガシー S3 署名 (v2) を使用する",
|
||||
"Enable multipart copy" : "マルチパートコピーの有効化",
|
||||
"Use presigned S3 url" : "事前署名付き S3 URL を使用する",
|
||||
"SSE-C encryption key" : "SSE-C暗号化キー",
|
||||
|
||||
@@ -15,6 +15,9 @@ OC.L10N.register(
|
||||
"Unsatisfied authentication mechanism parameters" : "Niepoprawne parametry mechanizmu uwierzytelnienia",
|
||||
"Insufficient data: %s" : "Niewystarczające dane: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "Magazyn o identyfikatorze „%d” nie może być edytowany przez osoby niebędące administratorami",
|
||||
"Static credentials" : "Stałe dane uwierzytelniające",
|
||||
"Access key ID" : "Identyfikator klucza dostępu",
|
||||
"Secret access key" : "Tajny klucz dostępu",
|
||||
"Builtin" : "Wbudowane",
|
||||
"None" : "Nic",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -48,6 +51,7 @@ OC.L10N.register(
|
||||
"Storage Class" : "Klasa przechowywania",
|
||||
"Enable SSL" : "Włącz SSL",
|
||||
"Enable Path Style" : "Włącz styl ścieżki",
|
||||
"Use Legacy S3 signing (v2)" : "Użyj starszego podpisywania S3 (v2)",
|
||||
"Enable multipart copy" : "Włącz kopiowanie wieloczęściowe",
|
||||
"Use presigned S3 url" : "Użyj wstępnie podpisanego adresu URL S3",
|
||||
"SSE-C encryption key" : "Klucz szyfrowania SSE-C",
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
"Unsatisfied authentication mechanism parameters" : "Niepoprawne parametry mechanizmu uwierzytelnienia",
|
||||
"Insufficient data: %s" : "Niewystarczające dane: %s",
|
||||
"Storage with ID \"%d\" is not editable by non-admins" : "Magazyn o identyfikatorze „%d” nie może być edytowany przez osoby niebędące administratorami",
|
||||
"Static credentials" : "Stałe dane uwierzytelniające",
|
||||
"Access key ID" : "Identyfikator klucza dostępu",
|
||||
"Secret access key" : "Tajny klucz dostępu",
|
||||
"Builtin" : "Wbudowane",
|
||||
"None" : "Nic",
|
||||
"OpenStack v2" : "OpenStack v2",
|
||||
@@ -46,6 +49,7 @@
|
||||
"Storage Class" : "Klasa przechowywania",
|
||||
"Enable SSL" : "Włącz SSL",
|
||||
"Enable Path Style" : "Włącz styl ścieżki",
|
||||
"Use Legacy S3 signing (v2)" : "Użyj starszego podpisywania S3 (v2)",
|
||||
"Enable multipart copy" : "Włącz kopiowanie wieloczęściowe",
|
||||
"Use presigned S3 url" : "Użyj wstępnie podpisanego adresu URL S3",
|
||||
"SSE-C encryption key" : "Klucz szyfrowania SSE-C",
|
||||
|
||||
@@ -11,13 +11,14 @@ namespace OCA\Files_External\Lib;
|
||||
|
||||
use OC\Files\Storage\Wrapper\PermissionsMask;
|
||||
use OCP\Constants;
|
||||
use OCP\Files\Storage\IStorage;
|
||||
|
||||
/**
|
||||
* Wrap Storage in PermissionsMask for session ephemeral use
|
||||
*/
|
||||
class SessionStorageWrapper extends PermissionsMask {
|
||||
/**
|
||||
* @param array $parameters ['storage' => $storage]
|
||||
* @param array{storage: IStorage, ...} $parameters
|
||||
*/
|
||||
public function __construct(array $parameters) {
|
||||
// disable sharing permission
|
||||
|
||||
@@ -148,6 +148,7 @@ OC.L10N.register(
|
||||
"Can edit" : "Can edit",
|
||||
"Custom permissions" : "Custom permissions",
|
||||
"Resharing is not allowed" : "Resharing is not allowed",
|
||||
"Searching …" : "ძებნა …",
|
||||
"No elements found." : "No elements found.",
|
||||
"Search everywhere" : "მოძებნე ყველგან",
|
||||
"Guest" : "Guest",
|
||||
|
||||
@@ -146,6 +146,7 @@
|
||||
"Can edit" : "Can edit",
|
||||
"Custom permissions" : "Custom permissions",
|
||||
"Resharing is not allowed" : "Resharing is not allowed",
|
||||
"Searching …" : "ძებნა …",
|
||||
"No elements found." : "No elements found.",
|
||||
"Search everywhere" : "მოძებნე ყველგან",
|
||||
"Guest" : "Guest",
|
||||
|
||||
@@ -299,18 +299,65 @@ class Trashbin implements IEventListener {
|
||||
|
||||
$configuredTrashbinSize = static::getConfiguredTrashbinSize($owner);
|
||||
if ($configuredTrashbinSize >= 0 && $sourceInfo->getSize() >= $configuredTrashbinSize) {
|
||||
$trashStorage->releaseLock($trashInternalPath, ILockingProvider::LOCK_EXCLUSIVE, $lockingProvider);
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$moveSuccessful = true;
|
||||
// there is still a possibility that the file has been deleted by a remote user
|
||||
$deletedBy = self::overwriteDeletedBy($user);
|
||||
|
||||
$query = Server::get(IDBConnection::class)->getQueryBuilder();
|
||||
$query->insert('files_trash')
|
||||
->setValue('id', $query->createNamedParameter($filename))
|
||||
->setValue('timestamp', $query->createNamedParameter($timestamp))
|
||||
->setValue('location', $query->createNamedParameter($location))
|
||||
->setValue('user', $query->createNamedParameter($owner))
|
||||
->setValue('deleted_by', $query->createNamedParameter($deletedBy));
|
||||
$inserted = false;
|
||||
try {
|
||||
$inserted = ($query->executeStatement() === 1);
|
||||
} catch (\Throwable $e) {
|
||||
Server::get(LoggerInterface::class)->error(
|
||||
'trash bin database insert failed',
|
||||
[
|
||||
'app' => 'files_trashbin',
|
||||
'exception' => $e,
|
||||
'user' => $owner,
|
||||
'filename' => $filename,
|
||||
'timestamp' => $timestamp,
|
||||
]
|
||||
);
|
||||
}
|
||||
if (!$inserted) {
|
||||
Server::get(LoggerInterface::class)->error(
|
||||
'trash bin database couldn\'t be updated, skipping trash move',
|
||||
[
|
||||
'app' => 'files_trashbin',
|
||||
'user' => $owner,
|
||||
'filename' => $filename,
|
||||
'timestamp' => $timestamp,
|
||||
]
|
||||
);
|
||||
$trashStorage->releaseLock($trashInternalPath, ILockingProvider::LOCK_EXCLUSIVE, $lockingProvider);
|
||||
return false;
|
||||
}
|
||||
|
||||
$moveSuccessful = true;
|
||||
try {
|
||||
$inCache = $sourceStorage->getCache()->inCache($sourceInternalPath);
|
||||
$trashStorage->moveFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
|
||||
if ($inCache) {
|
||||
$trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
|
||||
} else {
|
||||
$sizeDifference = $sourceInfo->getSize();
|
||||
if ($sizeDifference < 0) {
|
||||
$sizeDifference = null;
|
||||
} else {
|
||||
$sizeDifference = (int)$sizeDifference;
|
||||
}
|
||||
$trashStorage->getUpdater()->update($trashInternalPath, null, $sizeDifference);
|
||||
}
|
||||
} catch (CopyRecursiveException $e) {
|
||||
} catch (\Exception $e) {
|
||||
$moveSuccessful = false;
|
||||
if ($trashStorage->file_exists($trashInternalPath)) {
|
||||
$trashStorage->unlink($trashInternalPath);
|
||||
@@ -331,24 +378,31 @@ class Trashbin implements IEventListener {
|
||||
} else {
|
||||
$trashStorage->getUpdater()->remove($trashInternalPath);
|
||||
}
|
||||
return false;
|
||||
$moveSuccessful = false;
|
||||
}
|
||||
|
||||
if (!$moveSuccessful) {
|
||||
Server::get(LoggerInterface::class)->error(
|
||||
'trash move failed, removing trash metadata and payload',
|
||||
[
|
||||
'app' => 'files_trashbin',
|
||||
'user' => $owner,
|
||||
'filename' => $filename,
|
||||
'timestamp' => $timestamp,
|
||||
]
|
||||
);
|
||||
self::deleteTrashRow($user, $filename, $timestamp);
|
||||
if ($trashStorage->file_exists($trashInternalPath)) {
|
||||
if ($trashStorage->is_dir($trashInternalPath)) {
|
||||
$trashStorage->rmdir($trashInternalPath);
|
||||
} else {
|
||||
$trashStorage->unlink($trashInternalPath);
|
||||
}
|
||||
}
|
||||
$trashStorage->getUpdater()->remove($trashInternalPath);
|
||||
}
|
||||
|
||||
if ($moveSuccessful) {
|
||||
// there is still a possibility that the file has been deleted by a remote user
|
||||
$deletedBy = self::overwriteDeletedBy($user);
|
||||
|
||||
$query = Server::get(IDBConnection::class)->getQueryBuilder();
|
||||
$query->insert('files_trash')
|
||||
->setValue('id', $query->createNamedParameter($filename))
|
||||
->setValue('timestamp', $query->createNamedParameter($timestamp))
|
||||
->setValue('location', $query->createNamedParameter($location))
|
||||
->setValue('user', $query->createNamedParameter($owner))
|
||||
->setValue('deleted_by', $query->createNamedParameter($deletedBy));
|
||||
$result = $query->executeStatement();
|
||||
if (!$result) {
|
||||
Server::get(LoggerInterface::class)->error('trash bin database couldn\'t be updated', ['app' => 'files_trashbin']);
|
||||
}
|
||||
Util::emitHook('\OCA\Files_Trashbin\Trashbin', 'post_moveToTrash', ['filePath' => Filesystem::normalizePath($file_path),
|
||||
'trashPath' => Filesystem::normalizePath(static::getTrashFilename($filename, $timestamp))]);
|
||||
|
||||
@@ -545,12 +599,7 @@ class Trashbin implements IEventListener {
|
||||
self::restoreVersions($view, $file, $filename, $uniqueFilename, $location, $timestamp);
|
||||
|
||||
if ($timestamp) {
|
||||
$query = Server::get(IDBConnection::class)->getQueryBuilder();
|
||||
$query->delete('files_trash')
|
||||
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
|
||||
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
|
||||
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));
|
||||
$query->executeStatement();
|
||||
self::deleteTrashRow($user, $filename, $timestamp);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -689,13 +738,6 @@ class Trashbin implements IEventListener {
|
||||
$size = 0;
|
||||
|
||||
if ($timestamp) {
|
||||
$query = Server::get(IDBConnection::class)->getQueryBuilder();
|
||||
$query->delete('files_trash')
|
||||
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
|
||||
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
|
||||
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));
|
||||
$query->executeStatement();
|
||||
|
||||
$file = static::getTrashFilename($filename, $timestamp);
|
||||
} else {
|
||||
$file = $filename;
|
||||
@@ -706,6 +748,9 @@ class Trashbin implements IEventListener {
|
||||
try {
|
||||
$node = $userRoot->get('/files_trashbin/files/' . $file);
|
||||
} catch (NotFoundException $e) {
|
||||
if ($timestamp) {
|
||||
self::deleteTrashRow($user, $filename, $timestamp);
|
||||
}
|
||||
return $size;
|
||||
}
|
||||
|
||||
@@ -719,9 +764,22 @@ class Trashbin implements IEventListener {
|
||||
$node->delete();
|
||||
self::emitTrashbinPostDelete('/files_trashbin/files/' . $file);
|
||||
|
||||
if ($timestamp) {
|
||||
self::deleteTrashRow($user, $filename, $timestamp);
|
||||
}
|
||||
|
||||
return $size;
|
||||
}
|
||||
|
||||
private static function deleteTrashRow(string $user, string $filename, int $timestamp): void {
|
||||
$query = Server::get(IDBConnection::class)->getQueryBuilder();
|
||||
$query->delete('files_trash')
|
||||
->where($query->expr()->eq('user', $query->createNamedParameter($user)))
|
||||
->andWhere($query->expr()->eq('id', $query->createNamedParameter($filename)))
|
||||
->andWhere($query->expr()->eq('timestamp', $query->createNamedParameter($timestamp)));
|
||||
$query->executeStatement();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $file
|
||||
* @param string $filename
|
||||
|
||||
@@ -6,16 +6,21 @@ declare(strict_types=1);
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
namespace OCA\Files_Trashbin\Tests;
|
||||
|
||||
use OC\Files\Cache\Updater;
|
||||
use OC\Files\Filesystem;
|
||||
use OC\Files\ObjectStore\ObjectStoreStorage;
|
||||
use OC\Files\Storage\Common;
|
||||
use OC\Files\Storage\Local;
|
||||
use OC\Files\Storage\Temporary;
|
||||
use OC\Files\View;
|
||||
use OCA\Files_Trashbin\AppInfo\Application;
|
||||
use OCA\Files_Trashbin\Events\MoveToTrashEvent;
|
||||
use OCA\Files_Trashbin\Storage;
|
||||
use OCA\Files_Trashbin\Trash\ITrashManager;
|
||||
use OCA\Files_Trashbin\Trashbin;
|
||||
use OCP\AppFramework\Bootstrap\IBootContext;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\Constants;
|
||||
@@ -118,6 +123,84 @@ class StorageTest extends \Test\TestCase {
|
||||
$this->assertEquals('test.txt', substr($name, 0, strrpos($name, '.')));
|
||||
}
|
||||
|
||||
public function testTrashEntryCreatedWhenSourceNotInCache(): void {
|
||||
$this->userView->file_put_contents('uncached.txt', 'foo');
|
||||
|
||||
[$storage, $internalPath] = $this->userView->resolvePath('uncached.txt');
|
||||
if ($storage->instanceOfStorage(ObjectStoreStorage::class)) {
|
||||
$this->markTestSkipped('object store always has the file in cache');
|
||||
}
|
||||
$cache = $storage->getCache();
|
||||
$cache->remove($internalPath);
|
||||
$this->assertFalse($cache->inCache($internalPath));
|
||||
|
||||
$this->userView->unlink('uncached.txt');
|
||||
|
||||
$results = $this->rootView->getDirectoryContent($this->user . '/files_trashbin/files/');
|
||||
$this->assertCount(1, $results);
|
||||
$name = $results[0]->getName();
|
||||
$this->assertEquals('uncached.txt', substr($name, 0, strrpos($name, '.')));
|
||||
|
||||
[$trashStorage, $trashInternalPath] = $this->rootView->resolvePath('/' . $this->user . '/files_trashbin/files/' . $name);
|
||||
$this->assertTrue($trashStorage->getCache()->inCache($trashInternalPath));
|
||||
}
|
||||
|
||||
public function testTrashEntryNotCreatedWhenDeleteFailed(): void {
|
||||
$storage2 = $this->getMockBuilder(Temporary::class)
|
||||
->setConstructorArgs([])
|
||||
->onlyMethods(['unlink', 'instanceOfStorage'])
|
||||
->getMock();
|
||||
$storage2->method('unlink')
|
||||
->willReturn(false);
|
||||
|
||||
// disable same-storage move optimization
|
||||
$storage2->method('instanceOfStorage')
|
||||
->willReturnCallback(fn (string $class) => ($class !== Local::class) && (new Temporary([]))->instanceOfStorage($class));
|
||||
|
||||
|
||||
Filesystem::mount($storage2, [], $this->user . '/files/substorage');
|
||||
$this->userView->file_put_contents('substorage/test.txt', 'foo');
|
||||
|
||||
$this->assertFalse($this->userView->unlink('substorage/test.txt'));
|
||||
|
||||
$results = $this->rootView->getDirectoryContent($this->user . '/files_trashbin/files/');
|
||||
$this->assertEmpty($results);
|
||||
|
||||
$trashData = Trashbin::getExtraData($this->user);
|
||||
$this->assertEmpty($trashData);
|
||||
}
|
||||
|
||||
public function testTrashEntryNotCreatedWhenCacheRowFailed(): void {
|
||||
$trashStorage = $this->getMockBuilder(Temporary::class)
|
||||
->setConstructorArgs([])
|
||||
->onlyMethods(['getUpdater'])
|
||||
->getMock();
|
||||
$updater = $this->getMockBuilder(Updater::class)
|
||||
->setConstructorArgs([$trashStorage])
|
||||
->onlyMethods(['renameFromStorage'])
|
||||
->getMock();
|
||||
$trashStorage->method('getUpdater')
|
||||
->willReturn($updater);
|
||||
$updater->method('renameFromStorage')
|
||||
->willThrowException(new \Exception());
|
||||
|
||||
Filesystem::mount($trashStorage, [], $this->user . '/files_trashbin');
|
||||
$this->userView->file_put_contents('test.txt', 'foo');
|
||||
|
||||
try {
|
||||
$this->assertFalse($this->userView->unlink('test.txt'));
|
||||
$this->fail();
|
||||
} catch (\Exception) {
|
||||
// expected
|
||||
}
|
||||
|
||||
$results = $this->rootView->getDirectoryContent($this->user . '/files_trashbin/files/');
|
||||
$this->assertEmpty($results);
|
||||
|
||||
$trashData = Trashbin::getExtraData($this->user);
|
||||
$this->assertEmpty($trashData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that deleting a folder puts it into the trashbin.
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,7 @@ OC.L10N.register(
|
||||
"profile",
|
||||
{
|
||||
"Profile" : "Profile",
|
||||
"Searching …" : "ძებნა …",
|
||||
"Not found" : "Not found",
|
||||
"You have not added any info yet" : "You have not added any info yet",
|
||||
"{user} has not added any info yet" : "{user} has not added any info yet",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{ "translations": {
|
||||
"Profile" : "Profile",
|
||||
"Searching …" : "ძებნა …",
|
||||
"Not found" : "Not found",
|
||||
"You have not added any info yet" : "You have not added any info yet",
|
||||
"{user} has not added any info yet" : "{user} has not added any info yet",
|
||||
|
||||
@@ -369,6 +369,38 @@ $content-max-width: 640px;
|
||||
}
|
||||
}
|
||||
|
||||
.user-actions {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px 0;
|
||||
margin-top: 20px;
|
||||
max-width: 300px;
|
||||
|
||||
&__primary {
|
||||
margin: 0 auto;
|
||||
max-width: 100%;
|
||||
|
||||
&__icon {
|
||||
filter: var(--primary-invert-if-dark);
|
||||
}
|
||||
}
|
||||
|
||||
&__other {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0 4px;
|
||||
|
||||
&__icon {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
object-fit: contain;
|
||||
filter: var(--background-invert-if-dark);
|
||||
align-self: center;
|
||||
margin: 12px; // so we get 44px x 44px
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
.profile {
|
||||
&__header {
|
||||
@@ -419,37 +451,12 @@ $content-max-width: 640px;
|
||||
position: unset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.user-actions {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px 0;
|
||||
margin-top: 20px;
|
||||
max-width: 300px;
|
||||
|
||||
&__primary {
|
||||
.user-actions {
|
||||
width: unset;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
max-width: 100%;
|
||||
|
||||
&__icon {
|
||||
filter: var(--primary-invert-if-dark);
|
||||
}
|
||||
}
|
||||
|
||||
&__other {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0 4px;
|
||||
|
||||
&__icon {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
object-fit: contain;
|
||||
filter: var(--background-invert-if-dark);
|
||||
align-self: center;
|
||||
margin: 12px; // so we get 44px x 44px
|
||||
}
|
||||
padding: 20px 50px 0px 50px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -677,7 +677,6 @@ OC.L10N.register(
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} حساب ","{userCount} حساب ","{userCount} حساب ","{userCount} حسابات","{userCount} حساب ","{userCount} حساب "],
|
||||
"Total rows summary" : "ملخص مجموع الأسطر",
|
||||
"Scroll to load more rows" : "مرِّر على القائمة لتحميل المزيد من الصفوف",
|
||||
"Password or insufficient permissions message" : "رسالة حول كلمة المرور أو عدم كفاية الأذونات",
|
||||
"Avatar" : "صورة الملف الشخصي الرمزية",
|
||||
"Account name" : "اسم الحساب",
|
||||
"Group admin for" : "مدير المجموعة لـ",
|
||||
@@ -702,14 +701,10 @@ OC.L10N.register(
|
||||
"Account deletion" : "حذف حساب",
|
||||
"Delete {userid}'s account" : "حذف حساب {userid}",
|
||||
"Display name was successfully changed" : "تم تغيير اسم العرض بنجاح",
|
||||
"Password can't be empty" : "كلمة المرور لايمكن أن تكون فارغةً",
|
||||
"Password was successfully changed" : "تم تغيير كلمة المرور بنجاح",
|
||||
"Email can't be empty" : "البريد الإلكتروني لايمكن أن يكون فارغاً",
|
||||
"Email was successfully changed" : "تم تغيير البريد الإلكتروني بنجاح",
|
||||
"Welcome mail sent!" : "تمّ إرسال إيميل ترحيبي!",
|
||||
"Change display name" : "تعديل اسم العرض",
|
||||
"Set new password" : "تعيين كلمة مرور جديدة",
|
||||
"You do not have permissions to see the details of this account" : "ليس لديك الإذن بالاطلاع على تفاصيل هذا الحساب",
|
||||
"Set new email address" : "تعيين عنوان بريد الكتروني جديد",
|
||||
"Add account to group" : "إضافة حساب إلى مجموعة",
|
||||
"Set account as admin for" : "تعيين حساب كمدير على ",
|
||||
@@ -870,7 +865,12 @@ OC.L10N.register(
|
||||
"Loading accounts …" : "تحميل الحسابات ...",
|
||||
"Set account as admin for …" : "تعيين الحساب كمدير على ...",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} حساب …","{userCount} حساب …","{userCount} حساب …","{userCount} حسابات …","{userCount} حساب …","{userCount} حساب …"],
|
||||
"Password or insufficient permissions message" : "رسالة حول كلمة المرور أو عدم كفاية الأذونات",
|
||||
"Password can't be empty" : "كلمة المرور لايمكن أن تكون فارغةً",
|
||||
"Password was successfully changed" : "تم تغيير كلمة المرور بنجاح",
|
||||
"Loading account …" : "تحميل حسابات ...",
|
||||
"Set new password" : "تعيين كلمة مرور جديدة",
|
||||
"You do not have permissions to see the details of this account" : "ليس لديك الإذن بالاطلاع على تفاصيل هذا الحساب",
|
||||
"Adding your device …" : "إضافة جهازك جاريةٌ ...",
|
||||
"Sending…" : "الإرسال جارٍ …",
|
||||
"Email sent" : "تمّ إرسال الإيميل",
|
||||
|
||||
@@ -675,7 +675,6 @@
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} حساب ","{userCount} حساب ","{userCount} حساب ","{userCount} حسابات","{userCount} حساب ","{userCount} حساب "],
|
||||
"Total rows summary" : "ملخص مجموع الأسطر",
|
||||
"Scroll to load more rows" : "مرِّر على القائمة لتحميل المزيد من الصفوف",
|
||||
"Password or insufficient permissions message" : "رسالة حول كلمة المرور أو عدم كفاية الأذونات",
|
||||
"Avatar" : "صورة الملف الشخصي الرمزية",
|
||||
"Account name" : "اسم الحساب",
|
||||
"Group admin for" : "مدير المجموعة لـ",
|
||||
@@ -700,14 +699,10 @@
|
||||
"Account deletion" : "حذف حساب",
|
||||
"Delete {userid}'s account" : "حذف حساب {userid}",
|
||||
"Display name was successfully changed" : "تم تغيير اسم العرض بنجاح",
|
||||
"Password can't be empty" : "كلمة المرور لايمكن أن تكون فارغةً",
|
||||
"Password was successfully changed" : "تم تغيير كلمة المرور بنجاح",
|
||||
"Email can't be empty" : "البريد الإلكتروني لايمكن أن يكون فارغاً",
|
||||
"Email was successfully changed" : "تم تغيير البريد الإلكتروني بنجاح",
|
||||
"Welcome mail sent!" : "تمّ إرسال إيميل ترحيبي!",
|
||||
"Change display name" : "تعديل اسم العرض",
|
||||
"Set new password" : "تعيين كلمة مرور جديدة",
|
||||
"You do not have permissions to see the details of this account" : "ليس لديك الإذن بالاطلاع على تفاصيل هذا الحساب",
|
||||
"Set new email address" : "تعيين عنوان بريد الكتروني جديد",
|
||||
"Add account to group" : "إضافة حساب إلى مجموعة",
|
||||
"Set account as admin for" : "تعيين حساب كمدير على ",
|
||||
@@ -868,7 +863,12 @@
|
||||
"Loading accounts …" : "تحميل الحسابات ...",
|
||||
"Set account as admin for …" : "تعيين الحساب كمدير على ...",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} حساب …","{userCount} حساب …","{userCount} حساب …","{userCount} حسابات …","{userCount} حساب …","{userCount} حساب …"],
|
||||
"Password or insufficient permissions message" : "رسالة حول كلمة المرور أو عدم كفاية الأذونات",
|
||||
"Password can't be empty" : "كلمة المرور لايمكن أن تكون فارغةً",
|
||||
"Password was successfully changed" : "تم تغيير كلمة المرور بنجاح",
|
||||
"Loading account …" : "تحميل حسابات ...",
|
||||
"Set new password" : "تعيين كلمة مرور جديدة",
|
||||
"You do not have permissions to see the details of this account" : "ليس لديك الإذن بالاطلاع على تفاصيل هذا الحساب",
|
||||
"Adding your device …" : "إضافة جهازك جاريةٌ ...",
|
||||
"Sending…" : "الإرسال جارٍ …",
|
||||
"Email sent" : "تمّ إرسال الإيميل",
|
||||
|
||||
@@ -400,12 +400,9 @@ OC.L10N.register(
|
||||
"Account deletion" : "Desaniciu de la cuenta",
|
||||
"Delete {userid}'s account" : "Desaniciar la cuenta de: {userid}",
|
||||
"Display name was successfully changed" : "El nome visible camudó correutamente",
|
||||
"Password was successfully changed" : "La contraseña camudó correutamente",
|
||||
"Email was successfully changed" : "La direición de corréu electrónicu camudó correutamente",
|
||||
"Welcome mail sent!" : "¡Unvióse'l mensaxe d'acoyida!",
|
||||
"Change display name" : "Camudar el nome visible",
|
||||
"Set new password" : "Afitar una contraseña nueva",
|
||||
"You do not have permissions to see the details of this account" : "Nun tienes permisu pa ver los detalles d'esta cuenta",
|
||||
"Set new email address" : "Afitar una direición de corréu electrónicu nueva",
|
||||
"Add account to group" : "Amestar la cuenta al grupu",
|
||||
"Set the language" : "Afitar la llingua",
|
||||
@@ -527,7 +524,10 @@ OC.L10N.register(
|
||||
"Group list is empty" : "La llista de grupos ta balera",
|
||||
"Unable to retrieve the group list" : "Nun ye posible recuperar la llista de grupos",
|
||||
"Loading accounts …" : "Cargando les cuentes…",
|
||||
"Password was successfully changed" : "La contraseña camudó correutamente",
|
||||
"Loading account …" : "Cargando la cuenta…",
|
||||
"Set new password" : "Afitar una contraseña nueva",
|
||||
"You do not have permissions to see the details of this account" : "Nun tienes permisu pa ver los detalles d'esta cuenta",
|
||||
"Adding your device …" : "Amestando'l preséu…",
|
||||
"Sending…" : "Unviando…",
|
||||
"Email sent" : "Unvióse'l corréu electrónicu",
|
||||
|
||||
@@ -398,12 +398,9 @@
|
||||
"Account deletion" : "Desaniciu de la cuenta",
|
||||
"Delete {userid}'s account" : "Desaniciar la cuenta de: {userid}",
|
||||
"Display name was successfully changed" : "El nome visible camudó correutamente",
|
||||
"Password was successfully changed" : "La contraseña camudó correutamente",
|
||||
"Email was successfully changed" : "La direición de corréu electrónicu camudó correutamente",
|
||||
"Welcome mail sent!" : "¡Unvióse'l mensaxe d'acoyida!",
|
||||
"Change display name" : "Camudar el nome visible",
|
||||
"Set new password" : "Afitar una contraseña nueva",
|
||||
"You do not have permissions to see the details of this account" : "Nun tienes permisu pa ver los detalles d'esta cuenta",
|
||||
"Set new email address" : "Afitar una direición de corréu electrónicu nueva",
|
||||
"Add account to group" : "Amestar la cuenta al grupu",
|
||||
"Set the language" : "Afitar la llingua",
|
||||
@@ -525,7 +522,10 @@
|
||||
"Group list is empty" : "La llista de grupos ta balera",
|
||||
"Unable to retrieve the group list" : "Nun ye posible recuperar la llista de grupos",
|
||||
"Loading accounts …" : "Cargando les cuentes…",
|
||||
"Password was successfully changed" : "La contraseña camudó correutamente",
|
||||
"Loading account …" : "Cargando la cuenta…",
|
||||
"Set new password" : "Afitar una contraseña nueva",
|
||||
"You do not have permissions to see the details of this account" : "Nun tienes permisu pa ver los detalles d'esta cuenta",
|
||||
"Adding your device …" : "Amestando'l preséu…",
|
||||
"Sending…" : "Unviando…",
|
||||
"Email sent" : "Unvióse'l corréu electrónicu",
|
||||
|
||||
@@ -319,7 +319,6 @@ OC.L10N.register(
|
||||
"Display name was successfully changed" : "Імя для паказу паспяхова зменена",
|
||||
"Loading account …" : "Загрузка ўліковага запісу …",
|
||||
"Change display name" : "Змяніць імя для паказу",
|
||||
"Set new password" : "Задаць новы пароль",
|
||||
"Add account to group" : "Дадаць уліковы запіс у групу",
|
||||
"Select account quota" : "Выберыце квоту ўліковага запісу",
|
||||
"Set the language" : "Задайце мову",
|
||||
@@ -425,6 +424,7 @@ OC.L10N.register(
|
||||
"Set account as admin for …" : "Задаць уліковы запіс у якасці адміністратара для …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} уліковы запіс …","{userCount} уліковыя запісы …","{userCount} уліковых запісаў …","{userCount} уліковых запісаў …"],
|
||||
"Loading account …" : "Загрузка ўліковага запісу …",
|
||||
"Set new password" : "Задаць новы пароль",
|
||||
"Adding your device …" : "Дадаванне вашай прылады …",
|
||||
"Sending…" : "Адпраўка…",
|
||||
"SSL" : "SSL",
|
||||
|
||||
@@ -317,7 +317,6 @@
|
||||
"Display name was successfully changed" : "Імя для паказу паспяхова зменена",
|
||||
"Loading account …" : "Загрузка ўліковага запісу …",
|
||||
"Change display name" : "Змяніць імя для паказу",
|
||||
"Set new password" : "Задаць новы пароль",
|
||||
"Add account to group" : "Дадаць уліковы запіс у групу",
|
||||
"Select account quota" : "Выберыце квоту ўліковага запісу",
|
||||
"Set the language" : "Задайце мову",
|
||||
@@ -423,6 +422,7 @@
|
||||
"Set account as admin for …" : "Задаць уліковы запіс у якасці адміністратара для …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} уліковы запіс …","{userCount} уліковыя запісы …","{userCount} уліковых запісаў …","{userCount} уліковых запісаў …"],
|
||||
"Loading account …" : "Загрузка ўліковага запісу …",
|
||||
"Set new password" : "Задаць новы пароль",
|
||||
"Adding your device …" : "Дадаванне вашай прылады …",
|
||||
"Sending…" : "Адпраўка…",
|
||||
"SSL" : "SSL",
|
||||
|
||||
@@ -734,7 +734,6 @@ OC.L10N.register(
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} сметка","{userCount} сметки"],
|
||||
"Total rows summary" : "Обобщение на общия брой редове",
|
||||
"Scroll to load more rows" : "Превъртете за да заредите още редове",
|
||||
"Password or insufficient permissions message" : "Съобщение за парола или недостатъчни разрешения",
|
||||
"Avatar" : "Аватар",
|
||||
"Account name" : "Име на профил",
|
||||
"Group admin for" : "Групов администратор за",
|
||||
@@ -760,15 +759,11 @@ OC.L10N.register(
|
||||
"Account deletion" : "Изтриване на профил",
|
||||
"Delete {userid}'s account" : "Изтриване на профил на {userid}",
|
||||
"Display name was successfully changed" : "Показваното име беше успешно променено",
|
||||
"Password can't be empty" : "Паролата не може да бъде празна",
|
||||
"Password was successfully changed" : "Паролата бе променена успешно",
|
||||
"Email can't be empty" : "Имейлът не може да бъде празен",
|
||||
"Email was successfully changed" : "Имейлът бе променен успешно",
|
||||
"Welcome mail sent!" : "Изпратена е поща за добре дошли!",
|
||||
"Loading account …" : "Профилът се зарежда…",
|
||||
"Change display name" : "Промяна на показваното име",
|
||||
"Set new password" : "Задайте нова парола",
|
||||
"You do not have permissions to see the details of this account" : "Нямате разрешения да виждате подробностите за този акаунт",
|
||||
"Set new email address" : "Задайте нов имейл адрес",
|
||||
"Add account to group" : "Добавете акаунт към групата",
|
||||
"Set account as admin for" : "Задаване на акаунт като администратор за",
|
||||
@@ -946,7 +941,12 @@ OC.L10N.register(
|
||||
"Loading accounts …" : "Сметките се зареждат...",
|
||||
"Set account as admin for …" : "Задаване на акаунт като администратор за …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} сметка…","{userCount} сметки…"],
|
||||
"Password or insufficient permissions message" : "Съобщение за парола или недостатъчни разрешения",
|
||||
"Password can't be empty" : "Паролата не може да бъде празна",
|
||||
"Password was successfully changed" : "Паролата бе променена успешно",
|
||||
"Loading account …" : "Профилът се зарежда...",
|
||||
"Set new password" : "Задайте нова парола",
|
||||
"You do not have permissions to see the details of this account" : "Нямате разрешения да виждате подробностите за този акаунт",
|
||||
"Adding your device …" : "Вашето устройство се добавя …",
|
||||
"Sending…" : "Изпращане...",
|
||||
"Email sent" : "Имейлът е изпратен",
|
||||
|
||||
@@ -732,7 +732,6 @@
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} сметка","{userCount} сметки"],
|
||||
"Total rows summary" : "Обобщение на общия брой редове",
|
||||
"Scroll to load more rows" : "Превъртете за да заредите още редове",
|
||||
"Password or insufficient permissions message" : "Съобщение за парола или недостатъчни разрешения",
|
||||
"Avatar" : "Аватар",
|
||||
"Account name" : "Име на профил",
|
||||
"Group admin for" : "Групов администратор за",
|
||||
@@ -758,15 +757,11 @@
|
||||
"Account deletion" : "Изтриване на профил",
|
||||
"Delete {userid}'s account" : "Изтриване на профил на {userid}",
|
||||
"Display name was successfully changed" : "Показваното име беше успешно променено",
|
||||
"Password can't be empty" : "Паролата не може да бъде празна",
|
||||
"Password was successfully changed" : "Паролата бе променена успешно",
|
||||
"Email can't be empty" : "Имейлът не може да бъде празен",
|
||||
"Email was successfully changed" : "Имейлът бе променен успешно",
|
||||
"Welcome mail sent!" : "Изпратена е поща за добре дошли!",
|
||||
"Loading account …" : "Профилът се зарежда…",
|
||||
"Change display name" : "Промяна на показваното име",
|
||||
"Set new password" : "Задайте нова парола",
|
||||
"You do not have permissions to see the details of this account" : "Нямате разрешения да виждате подробностите за този акаунт",
|
||||
"Set new email address" : "Задайте нов имейл адрес",
|
||||
"Add account to group" : "Добавете акаунт към групата",
|
||||
"Set account as admin for" : "Задаване на акаунт като администратор за",
|
||||
@@ -944,7 +939,12 @@
|
||||
"Loading accounts …" : "Сметките се зареждат...",
|
||||
"Set account as admin for …" : "Задаване на акаунт като администратор за …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} сметка…","{userCount} сметки…"],
|
||||
"Password or insufficient permissions message" : "Съобщение за парола или недостатъчни разрешения",
|
||||
"Password can't be empty" : "Паролата не може да бъде празна",
|
||||
"Password was successfully changed" : "Паролата бе променена успешно",
|
||||
"Loading account …" : "Профилът се зарежда...",
|
||||
"Set new password" : "Задайте нова парола",
|
||||
"You do not have permissions to see the details of this account" : "Нямате разрешения да виждате подробностите за този акаунт",
|
||||
"Adding your device …" : "Вашето устройство се добавя …",
|
||||
"Sending…" : "Изпращане...",
|
||||
"Email sent" : "Имейлът е изпратен",
|
||||
|
||||
@@ -671,7 +671,6 @@ OC.L10N.register(
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} compte","{userCount} comptes"],
|
||||
"Total rows summary" : "Resum de totes les files",
|
||||
"Scroll to load more rows" : "Desplaceu-vos per carregar més files",
|
||||
"Password or insufficient permissions message" : "Contrasenya o missatge de permisos insuficients",
|
||||
"Avatar" : "Avatar",
|
||||
"Account name" : "Nom de compte",
|
||||
"Group admin for" : "Administrador de grup per",
|
||||
@@ -694,14 +693,10 @@ OC.L10N.register(
|
||||
"Account deletion" : "Supressió del compte",
|
||||
"Delete {userid}'s account" : "Suprimir el compte de {userid}",
|
||||
"Display name was successfully changed" : "El nom a mostrar s'ha canviat correctament",
|
||||
"Password can't be empty" : "La contrasenya no pot estar buida",
|
||||
"Password was successfully changed" : "La contrasenya s'ha canviat correctament",
|
||||
"Email can't be empty" : "El correu electrònic no pot estar buit",
|
||||
"Email was successfully changed" : "El correu electrònic s'ha canviat correctament",
|
||||
"Welcome mail sent!" : "S'ha enviat el correu electrònic de benvinguda!",
|
||||
"Change display name" : "Canvia el nom de visualització",
|
||||
"Set new password" : "Estableix una contrasenya nova",
|
||||
"You do not have permissions to see the details of this account" : "No teniu permís per veure els detalls d'aquest compte",
|
||||
"Set new email address" : "Estableix una nova adreça de correu electrònic",
|
||||
"Add account to group" : "Afegeix un compte al grup",
|
||||
"Set account as admin for" : "Estableix el compte com a administrador de",
|
||||
@@ -861,7 +856,12 @@ OC.L10N.register(
|
||||
"Loading accounts …" : "S'estan carregant els comptes …",
|
||||
"Set account as admin for …" : "Estableix el compte com a administrador de …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} compte…","{userCount} comptes…"],
|
||||
"Password or insufficient permissions message" : "Contrasenya o missatge de permisos insuficients",
|
||||
"Password can't be empty" : "La contrasenya no pot estar buida",
|
||||
"Password was successfully changed" : "La contrasenya s'ha canviat correctament",
|
||||
"Loading account …" : "S'està carregant el compte …",
|
||||
"Set new password" : "Estableix una contrasenya nova",
|
||||
"You do not have permissions to see the details of this account" : "No teniu permís per veure els detalls d'aquest compte",
|
||||
"Adding your device …" : "S'està afegint el vostre dispositiu …",
|
||||
"Sending…" : "S'està enviant…",
|
||||
"Email sent" : "S'ha enviat el correu electrònic",
|
||||
|
||||
@@ -669,7 +669,6 @@
|
||||
"_{userCount} account_::_{userCount} accounts_" : ["{userCount} compte","{userCount} comptes"],
|
||||
"Total rows summary" : "Resum de totes les files",
|
||||
"Scroll to load more rows" : "Desplaceu-vos per carregar més files",
|
||||
"Password or insufficient permissions message" : "Contrasenya o missatge de permisos insuficients",
|
||||
"Avatar" : "Avatar",
|
||||
"Account name" : "Nom de compte",
|
||||
"Group admin for" : "Administrador de grup per",
|
||||
@@ -692,14 +691,10 @@
|
||||
"Account deletion" : "Supressió del compte",
|
||||
"Delete {userid}'s account" : "Suprimir el compte de {userid}",
|
||||
"Display name was successfully changed" : "El nom a mostrar s'ha canviat correctament",
|
||||
"Password can't be empty" : "La contrasenya no pot estar buida",
|
||||
"Password was successfully changed" : "La contrasenya s'ha canviat correctament",
|
||||
"Email can't be empty" : "El correu electrònic no pot estar buit",
|
||||
"Email was successfully changed" : "El correu electrònic s'ha canviat correctament",
|
||||
"Welcome mail sent!" : "S'ha enviat el correu electrònic de benvinguda!",
|
||||
"Change display name" : "Canvia el nom de visualització",
|
||||
"Set new password" : "Estableix una contrasenya nova",
|
||||
"You do not have permissions to see the details of this account" : "No teniu permís per veure els detalls d'aquest compte",
|
||||
"Set new email address" : "Estableix una nova adreça de correu electrònic",
|
||||
"Add account to group" : "Afegeix un compte al grup",
|
||||
"Set account as admin for" : "Estableix el compte com a administrador de",
|
||||
@@ -859,7 +854,12 @@
|
||||
"Loading accounts …" : "S'estan carregant els comptes …",
|
||||
"Set account as admin for …" : "Estableix el compte com a administrador de …",
|
||||
"_{userCount} account …_::_{userCount} accounts …_" : ["{userCount} compte…","{userCount} comptes…"],
|
||||
"Password or insufficient permissions message" : "Contrasenya o missatge de permisos insuficients",
|
||||
"Password can't be empty" : "La contrasenya no pot estar buida",
|
||||
"Password was successfully changed" : "La contrasenya s'ha canviat correctament",
|
||||
"Loading account …" : "S'està carregant el compte …",
|
||||
"Set new password" : "Estableix una contrasenya nova",
|
||||
"You do not have permissions to see the details of this account" : "No teniu permís per veure els detalls d'aquest compte",
|
||||
"Adding your device …" : "S'està afegint el vostre dispositiu …",
|
||||
"Sending…" : "S'està enviant…",
|
||||
"Email sent" : "S'ha enviat el correu electrònic",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user