Merge branch 'master' into fix/llm-migration-not-executed

pull/39660/head
Julien Veyssier 10 months ago committed by GitHub
commit f099aa2714
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -11,6 +11,7 @@
/apps/federation/appinfo/info.xml @datenangebot
/apps/files/appinfo/info.xml @skjnldsv @Pytal @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @Fenn-CS
/apps/files_external/appinfo/info.xml @icewind1991 @artonge
/apps/files_reminders/appinfo/info.xml @Pytal
/apps/files_sharing/appinfo/info.xml @skjnldsv @come-nc
/apps/files_trashbin/appinfo/info.xml @Pytal @icewind1991
/apps/files_versions/appinfo/info.xml @artonge @icewind1991

@ -18,18 +18,23 @@ jobs:
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3.0.1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
reactions: "+1"
- name: Checkout the latest code
- name: Init branch
uses: xt0rted/pull-request-comment-branch@d97294d304604fa98a2600a6e2f916a84b596dc7 # v1
id: comment-branch
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
ref: ${{ steps.comment-branch.outputs.head_ref }}
- name: Setup git
run: |
@ -46,10 +51,10 @@ jobs:
git push
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa
uses: peter-evans/create-or-update-comment@c6c9a1a66007646a28c153e2a8580a5bad27bcfa # v3.0.1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"
reactions: "-1"

@ -0,0 +1,29 @@
name: 'Ask for feedback on PRs'
on:
schedule:
- cron: '30 1 * * *'
jobs:
pr-feedback:
runs-on: ubuntu-22.04
steps:
- name: The get-github-handles-from-website action
uses: marcelklehr/get-github-handles-from-website-action@a739600f6b91da4957f51db0792697afbb2f143c # v1.0.0
id: scrape
with:
website: 'https://nextcloud.com/team/'
- uses: marcelklehr/pr-feedback-action@601109aa729eb4c8d6d0ece7567b9d4901db4aef
with:
feedback-message: |
Hello there,
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
We hope that the reviewing process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR reviewing process.
Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6
Thank you for contributing to Nextcloud and we hope to hear from you soon!
days-before-feedback: 14
start-date: "2023-07-10"
exempt-authors: "${{ steps.scrape.outputs.users }}"
exempt-bots: true

1
.gitignore vendored

@ -24,6 +24,7 @@
!/apps/sharebymail
!/apps/encryption
!/apps/files_external
!/apps/files_reminders
!/apps/files_sharing
!/apps/files_trashbin
!/apps/files_versions

@ -1 +1 @@
Subproject commit 1ff71da76e24d442afab28586072409ef3b9660e
Subproject commit 08ec878b41f5e670af6ba85280d9298c454f81fb

@ -1,9 +1,7 @@
/**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author John Molakvoæ <skjnldsv@protonmail.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license AGPL-3.0-or-later
*
@ -21,3 +19,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
export const loadState = function(app: string, key: string, fallback?: any) {
return fallback
}

@ -0,0 +1,8 @@
OC.L10N.register(
"cloud_federation_api",
{
"Cloud Federation API" : "API فدراسیون ابری",
"Enable clouds to communicate with each other and exchange data" : "ابرها را فعال کنید تا با یکدیگر ارتباط برقرار کنند و داده ها را مبادله کنند",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API نمونه های مختلف Nextcloud را قادر می سازد تا با یکدیگر ارتباط برقرار کرده و داده ها را مبادله کنند."
},
"nplurals=2; plural=(n > 1);");

@ -0,0 +1,6 @@
{ "translations": {
"Cloud Federation API" : "API فدراسیون ابری",
"Enable clouds to communicate with each other and exchange data" : "ابرها را فعال کنید تا با یکدیگر ارتباط برقرار کنند و داده ها را مبادله کنند",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API نمونه های مختلف Nextcloud را قادر می سازد تا با یکدیگر ارتباط برقرار کرده و داده ها را مبادله کنند."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

@ -19,6 +19,7 @@ OC.L10N.register(
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"No more messages" : "Ikke flere beskeder",
"Retry" : "Prøv igen",
"Failed to mark comments as read" : "Kunne ikke markere kommentarer som læst",
"Unable to load the comments list" : "Kan ikke indlæse kommentarlisten",
"_%n unread comment_::_%n unread comments_" : ["%n ulæst kommentar","%n ulæste kommentarer"],
"_1 new comment_::_{unread} new comments_" : ["1 ny kommentar","{unread} nye kommentarer"],

@ -17,6 +17,7 @@
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"No more messages" : "Ikke flere beskeder",
"Retry" : "Prøv igen",
"Failed to mark comments as read" : "Kunne ikke markere kommentarer som læst",
"Unable to load the comments list" : "Kan ikke indlæse kommentarlisten",
"_%n unread comment_::_%n unread comments_" : ["%n ulæst kommentar","%n ulæste kommentarer"],
"_1 new comment_::_{unread} new comments_" : ["1 ny kommentar","{unread} nye kommentarer"],

@ -91,12 +91,13 @@
<!-- Message content -->
<!-- The html is escaped and sanitized before rendering -->
<!-- eslint-disable-next-line vue/no-v-html-->
<!-- eslint-disable vue/no-v-html-->
<div v-else
:class="{'comment__message--expanded': expanded}"
class="comment__message"
@click="onExpand"
v-html="renderedContent" />
<!-- eslint-enable vue/no-v-html-->
</div>
</component>
</template>

@ -22,9 +22,9 @@
-->
<template>
<div class="comments"
:class="{ 'icon-loading': isFirstLoading }"
v-observe-visibility="onVisibilityChange">
<div v-observe-visibility="onVisibilityChange"
class="comments"
:class="{ 'icon-loading': isFirstLoading }">
<!-- Editor -->
<Comment v-bind="editorData"
:auto-complete="autoComplete"
@ -37,7 +37,7 @@
<template v-if="!isFirstLoading">
<NcEmptyContent v-if="!hasComments && done"
class="comments__empty"
:title="t('comments', 'No comments yet, start the conversation!')">
:name="t('comments', 'No comments yet, start the conversation!')">
<template #icon>
<MessageReplyTextIcon />
</template>
@ -65,7 +65,7 @@
<!-- Error message -->
<template v-else-if="error">
<NcEmptyContent class="comments__error" :title="error">
<NcEmptyContent class="comments__error" :name="error">
<template #icon>
<AlertCircleOutlineIcon />
</template>
@ -191,8 +191,8 @@ export default {
/**
* Make sure we have all mentions as Array of objects
*
* @param {Array} mentions the mentions list
* @return {Object<string, object>}
* @param {any[]} mentions the mentions list
* @return {Record<string, object>}
*/
genMentionsData(mentions) {
Object.values(mentions)

@ -0,0 +1,9 @@
OC.L10N.register(
"contactsinteraction",
{
"Recently contacted" : "اخیراً تماس گرفته شده است",
"Contacts Interaction" : "تعامل با مخاطبین",
"Manages interaction between users and contacts" : "تعامل بین کاربران و مخاطبین را مدیریت می کند.",
"Collect data about user and contacts interactions and provide an address book for the data" : "اطلاعات مربوط به تعاملات کاربر و مخاطبین را جمع آوری کنید و یک دفترچه آدرس برای داده ها تهیه کنید."
},
"nplurals=2; plural=(n > 1);");

@ -0,0 +1,7 @@
{ "translations": {
"Recently contacted" : "اخیراً تماس گرفته شده است",
"Contacts Interaction" : "تعامل با مخاطبین",
"Manages interaction between users and contacts" : "تعامل بین کاربران و مخاطبین را مدیریت می کند.",
"Collect data about user and contacts interactions and provide an address book for the data" : "اطلاعات مربوط به تعاملات کاربر و مخاطبین را جمع آوری کنید و یک دفترچه آدرس برای داده ها تهیه کنید."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

@ -231,11 +231,15 @@
}
},
{
"name": "widgets",
"name": "widgets[]",
"in": "query",
"description": "Limit results to specific widgets",
"schema": {
"type": "string"
"type": "array",
"default": [],
"items": {
"type": "string"
}
}
},
{

@ -69,6 +69,7 @@ use OCA\DAV\Events\CardDeletedEvent;
use OCA\DAV\Events\CardUpdatedEvent;
use OCA\DAV\Events\SubscriptionCreatedEvent;
use OCA\DAV\Events\SubscriptionDeletedEvent;
use OCP\Accounts\UserUpdatedEvent;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Federation\Events\TrustedServerRemovedEvent;
use OCA\DAV\HookManager;
@ -224,13 +225,10 @@ class Application extends App implements IBootstrap {
}
});
$dispatcher->addListener('OC\AccountManager::userUpdated', function ($event) use ($container) {
if ($event instanceof GenericEvent) {
$user = $event->getSubject();
/** @var SyncService $syncService */
$syncService = $container->query(SyncService::class);
$syncService->updateUser($user);
}
$dispatcher->addListener(UserUpdatedEvent::class, function (UserUpdatedEvent $event) use ($container) {
/** @var SyncService $syncService */
$syncService = \OCP\Server::get(SyncService::class);
$syncService->updateUser($event->getUser());
});

@ -168,7 +168,7 @@ class ChunkingV2Plugin extends ServerPlugin {
[$destinationDir, $destinationName] = Uri\split($this->uploadPath);
/** @var Directory $destinationParent */
$destinationParent = $this->server->tree->getNodeForPath($destinationDir);
$free = $storage->free_space($destinationParent->getInternalPath());
$free = $destinationParent->getNode()->getFreeSpace();
$newSize = $tempTargetFile->getSize() + $additionalSize;
if ($free >= 0 && ($tempTargetFile->getSize() > $free || $newSize > $free)) {
throw new InsufficientStorage("Insufficient space in $this->uploadPath");
@ -225,7 +225,7 @@ class ChunkingV2Plugin extends ServerPlugin {
foreach ($parts as $part) {
$size += $part['Size'];
}
$free = $storage->free_space($destinationParent->getInternalPath());
$free = $destinationParent->getNode()->getFreeSpace();
if ($free >= 0 && ($size > $free)) {
throw new InsufficientStorage("Insufficient space in $this->uploadPath");
}

@ -1,5 +1,5 @@
<template>
<NcSettingsSection :title="$t('dav', 'Availability')"
<NcSettingsSection :name="$t('dav', 'Availability')"
:description="$t('dav', 'If you configure your working hours, other users will see when you are out of office when they book a meeting.')">
<div class="time-zone">
<strong>

@ -1,5 +1,5 @@
<template>
<NcSettingsSection :title="$t('dav', 'Calendar server')"
<NcSettingsSection :name="$t('dav', 'Calendar server')"
:doc-url="userSyncCalendarsDocUrl">
<!-- Can use v-html as:
- $t passes the translated string through DOMPurify.sanitize,

@ -4,11 +4,11 @@ exports[`CalDavSettings interactions 1`] = `
<div>
<div
class="settings-section settings-section--limit-width"
data-v-3896af2a=""
data-v-7c88e201=""
>
<h2
class="settings-section__title"
data-v-3896af2a=""
class="settings-section__name"
data-v-7c88e201=""
>
Calendar server
@ -16,7 +16,7 @@ exports[`CalDavSettings interactions 1`] = `
<a
aria-label="External documentation for Calendar server"
class="settings-section__info"
data-v-3896af2a=""
data-v-7c88e201=""
href="https://docs.nextcloud.com/server/23/go.php?to=user-sync-calendars"
rel="noreferrer nofollow"
role="note"
@ -26,7 +26,7 @@ exports[`CalDavSettings interactions 1`] = `
<span
aria-hidden="true"
class="material-design-icon help-circle-icon"
data-v-3896af2a=""
data-v-7c88e201=""
role="img"
>
<svg
@ -50,7 +50,7 @@ exports[`CalDavSettings interactions 1`] = `
<p
class="settings-hint"
data-v-3896af2a=""
data-v-7c88e201=""
>
Also install the
<a
@ -71,55 +71,66 @@ exports[`CalDavSettings interactions 1`] = `
</p>
<p
data-v-3896af2a=""
data-v-7c88e201=""
>
<span
class="checkbox-radio-switch checkbox-radio-switch-switch checkbox-radio-switch--checked"
data-v-3896af2a=""
data-v-781f2f28=""
data-v-7c88e201=""
data-v-dec41432=""
style="--icon-size: 36px;"
>
<input
class="checkbox-radio-switch__input"
data-v-dec41432=""
id="caldavSendInvitations"
type="checkbox"
value=""
/>
<label
class="checkbox-radio-switch__label"
data-v-781f2f28=""
data-v-dec41432=""
for="caldavSendInvitations"
>
<input
class="checkbox-radio-switch__input"
data-v-781f2f28=""
id="caldavSendInvitations"
type="checkbox"
value=""
/>
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon checkbox-radio-switch__icon"
data-v-781f2f28=""
role="img"
<div
class="checkbox-radio-switch__icon"
data-v-dec41432=""
>
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon"
data-v-dec41432=""
role="img"
>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
>
<!---->
</path>
</svg>
</span>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
>
<!---->
</path>
</svg>
</span>
</div>
<span
class="checkbox-radio-switch__label-text"
data-v-dec41432=""
>
Send invitations to attendees
</span>
</label>
</span>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Please make sure to properly set up
<a
@ -132,55 +143,66 @@ exports[`CalDavSettings interactions 1`] = `
</p>
<p
data-v-3896af2a=""
data-v-7c88e201=""
>
<span
class="checkbox-radio-switch checkbox checkbox-radio-switch-switch checkbox-radio-switch--checked"
data-v-3896af2a=""
data-v-781f2f28=""
data-v-7c88e201=""
data-v-dec41432=""
style="--icon-size: 36px;"
>
<input
class="checkbox-radio-switch__input"
data-v-dec41432=""
id="caldavGenerateBirthdayCalendar"
type="checkbox"
value=""
/>
<label
class="checkbox-radio-switch__label"
data-v-781f2f28=""
data-v-dec41432=""
for="caldavGenerateBirthdayCalendar"
>
<input
class="checkbox-radio-switch__input"
data-v-781f2f28=""
id="caldavGenerateBirthdayCalendar"
type="checkbox"
value=""
/>
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon checkbox-radio-switch__icon"
data-v-781f2f28=""
role="img"
<div
class="checkbox-radio-switch__icon"
data-v-dec41432=""
>
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon"
data-v-dec41432=""
role="img"
>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
>
<!---->
</path>
</svg>
</span>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
>
<!---->
</path>
</svg>
</span>
</div>
<span
class="checkbox-radio-switch__label-text"
data-v-dec41432=""
>
Automatically generate a birthday calendar
</span>
</label>
</span>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Birthday calendars will be generated by a background job.
@ -188,11 +210,11 @@ exports[`CalDavSettings interactions 1`] = `
</em>
<br
data-v-3896af2a=""
data-v-7c88e201=""
/>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Hence they will not be available immediately after enabling but will show up after some time.
@ -201,55 +223,66 @@ exports[`CalDavSettings interactions 1`] = `
</p>
<p
data-v-3896af2a=""
data-v-7c88e201=""
>
<span
class="checkbox-radio-switch checkbox-radio-switch-switch checkbox-radio-switch--checked"
data-v-3896af2a=""
data-v-781f2f28=""
data-v-7c88e201=""
data-v-dec41432=""
style="--icon-size: 36px;"
>
<input
class="checkbox-radio-switch__input"
data-v-dec41432=""
id="caldavSendEventReminders"
type="checkbox"
value=""
/>
<label
class="checkbox-radio-switch__label"
data-v-781f2f28=""
data-v-dec41432=""
for="caldavSendEventReminders"
>
<input
class="checkbox-radio-switch__input"
data-v-781f2f28=""
id="caldavSendEventReminders"
type="checkbox"
value=""
/>
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon checkbox-radio-switch__icon"
data-v-781f2f28=""
role="img"
<div
class="checkbox-radio-switch__icon"
data-v-dec41432=""
>
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon"
data-v-dec41432=""
role="img"
>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
>
<!---->
</path>
</svg>
</span>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
>
<!---->
</path>
</svg>
</span>
</div>
<span
class="checkbox-radio-switch__label-text"
data-v-dec41432=""
>
Send notifications for events
</span>
</label>
</span>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Please make sure to properly set up
<a
@ -261,11 +294,11 @@ exports[`CalDavSettings interactions 1`] = `
</em>
<br
data-v-3896af2a=""
data-v-7c88e201=""
/>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Notifications are sent via background jobs, so these must occur often enough.
@ -275,55 +308,66 @@ exports[`CalDavSettings interactions 1`] = `
<p
class="indented"
data-v-3896af2a=""
data-v-7c88e201=""
>
<span
class="checkbox-radio-switch checkbox-radio-switch-switch checkbox-radio-switch--checked"
data-v-3896af2a=""
data-v-781f2f28=""
data-v-7c88e201=""
data-v-dec41432=""
style="--icon-size: 36px;"
>
<input
class="checkbox-radio-switch__input"
data-v-dec41432=""
id="caldavSendEventRemindersToSharedGroupMembers"
type="checkbox"
value=""
/>
<label
class="checkbox-radio-switch__label"
data-v-781f2f28=""
data-v-dec41432=""
for="caldavSendEventRemindersToSharedGroupMembers"
>
<input
class="checkbox-radio-switch__input"
data-v-781f2f28=""
id="caldavSendEventRemindersToSharedGroupMembers"
type="checkbox"
value=""
/>
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon checkbox-radio-switch__icon"
data-v-781f2f28=""
role="img"
<div
class="checkbox-radio-switch__icon"
data-v-dec41432=""
>
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon"
data-v-dec41432=""
role="img"
>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
>
<!---->
</path>
</svg>
</span>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
>
<!---->
</path>
</svg>
</span>
</div>
<span
class="checkbox-radio-switch__label-text"
data-v-dec41432=""
>
Send reminder notifications to calendar sharees as well
</span>
</label>
</span>
<em
data-v-3896af2a=""
data-v-7c88e201=""
>
Reminders are always sent to organizers and attendees.
@ -333,50 +377,61 @@ exports[`CalDavSettings interactions 1`] = `
<p
class="indented"
data-v-3896af2a=""
data-v-7c88e201=""
>
<span
class="checkbox-radio-switch checkbox-radio-switch-switch checkbox-radio-switch--checked"
data-v-3896af2a=""
data-v-781f2f28=""
data-v-7c88e201=""
data-v-dec41432=""
style="--icon-size: 36px;"
>
<input
class="checkbox-radio-switch__input"
data-v-dec41432=""
id="caldavSendEventRemindersPush"
type="checkbox"
value=""
/>
<label
class="checkbox-radio-switch__label"
data-v-781f2f28=""
data-v-dec41432=""
for="caldavSendEventRemindersPush"
>
<input
class="checkbox-radio-switch__input"
data-v-781f2f28=""
id="caldavSendEventRemindersPush"
type="checkbox"
value=""
/>
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon checkbox-radio-switch__icon"
data-v-781f2f28=""
role="img"
<div
class="checkbox-radio-switch__icon"
data-v-dec41432=""
>
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
<span
aria-hidden="true"
class="material-design-icon toggle-switch-icon"
data-v-dec41432=""
role="img"
>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
<svg
class="material-design-icon__svg"
fill="currentColor"
height="36"
viewBox="0 0 24 24"
width="36"
>
<!---->
</path>
</svg>
</span>
<path
d="M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z"
>
<!---->
</path>
</svg>
</span>
</div>
<span
class="checkbox-radio-switch__label-text"
data-v-dec41432=""
>
Enable notifications for events via push
</span>
</label>
</span>
</p>

@ -21,7 +21,7 @@
-->
<template>
<NcSettingsSection :title="t('federatedfilesharing', 'Federated Cloud Sharing')"
<NcSettingsSection :name="t('federatedfilesharing', 'Federated Cloud Sharing')"
:description="t('federatedfilesharing', 'Adjust how people can share between servers. This includes shares between users on this server as well if they are using federated sharing.')"
:doc-url="sharingFederatedDocUrl">
<NcCheckboxRadioSwitch type="switch"

@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<template>
<NcSettingsSection :title="t('federatedfilesharing', 'Federated Cloud')"
<NcSettingsSection :name="t('federatedfilesharing', 'Federated Cloud')"
:description="t('federatedfilesharing', 'You can share with anyone who uses a Nextcloud server or other Open Cloud Mesh (OCM) compatible servers and services! Just put their Federated Cloud ID in the share dialog. It looks like person@cloud.example.com')"
:doc-url="docUrlFederated">
<p class="cloud-id-text">

@ -57,7 +57,6 @@ return array(
'OCA\\Files\\Event\\LoadSidebar' => $baseDir . '/../lib/Event/LoadSidebar.php',
'OCA\\Files\\Exception\\TransferOwnershipException' => $baseDir . '/../lib/Exception/TransferOwnershipException.php',
'OCA\\Files\\Helper' => $baseDir . '/../lib/Helper.php',
'OCA\\Files\\Listener\\LegacyLoadAdditionalScriptsAdapter' => $baseDir . '/../lib/Listener/LegacyLoadAdditionalScriptsAdapter.php',
'OCA\\Files\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files\\Listener\\RenderReferenceEventListener' => $baseDir . '/../lib/Listener/RenderReferenceEventListener.php',
'OCA\\Files\\Migration\\Version11301Date20191205150729' => $baseDir . '/../lib/Migration/Version11301Date20191205150729.php',

@ -72,7 +72,6 @@ class ComposerStaticInitFiles
'OCA\\Files\\Event\\LoadSidebar' => __DIR__ . '/..' . '/../lib/Event/LoadSidebar.php',
'OCA\\Files\\Exception\\TransferOwnershipException' => __DIR__ . '/..' . '/../lib/Exception/TransferOwnershipException.php',
'OCA\\Files\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
'OCA\\Files\\Listener\\LegacyLoadAdditionalScriptsAdapter' => __DIR__ . '/..' . '/../lib/Listener/LegacyLoadAdditionalScriptsAdapter.php',
'OCA\\Files\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files\\Listener\\RenderReferenceEventListener' => __DIR__ . '/..' . '/../lib/Listener/RenderReferenceEventListener.php',
'OCA\\Files\\Migration\\Version11301Date20191205150729' => __DIR__ . '/..' . '/../lib/Migration/Version11301Date20191205150729.php',

@ -20,7 +20,6 @@
"newfilemenu.js",
"operationprogressbar.js",
"recentfilelist.js",
"recentplugin.js",
"semaphore.js",
"sidebarpreviewmanager.js",
"sidebarpreviewtext.js",

@ -1,121 +0,0 @@
/*
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function (OCA) {
/**
* Registers the recent file list from the files app sidebar.
*
* @namespace OCA.Files.RecentPlugin
*/
OCA.Files.RecentPlugin = {
name: 'Recent',
/**
* @type OCA.Files.RecentFileList
*/
recentFileList: null,
attach: function () {
var self = this;
$('#app-content-recent').on('show.plugin-recent', function (e) {
self.showFileList($(e.target));
});
$('#app-content-recent').on('hide.plugin-recent', function () {
self.hideFileList();
});
},
detach: function () {
if (this.recentFileList) {
this.recentFileList.destroy();
OCA.Files.fileActions.off('setDefault.plugin-recent', this._onActionsUpdated);
OCA.Files.fileActions.off('registerAction.plugin-recent', this._onActionsUpdated);
$('#app-content-recent').off('.plugin-recent');
this.recentFileList = null;
}
},
showFileList: function ($el) {
if (!this.recentFileList) {
this.recentFileList = this._createRecentFileList($el);
}
return this.recentFileList;
},
hideFileList: function () {
if (this.recentFileList) {
this.recentFileList.$fileList.empty();
}
},
/**
* Creates the recent file list.
*
* @param $el container for the file list
* @return {OCA.Files.RecentFileList} file list
*/
_createRecentFileList: function ($el) {
var fileActions = this._createFileActions();
// register recent list for sidebar section
return new OCA.Files.RecentFileList(
$el, {
fileActions: fileActions,
// The file list is created when a "show" event is handled,
// so it should be marked as "shown" like it would have been
// done if handling the event with the file list already
// created.
shown: true
}
);
},
_createFileActions: function () {
// inherit file actions from the files app
var fileActions = new OCA.Files.FileActions();
// note: not merging the legacy actions because legacy apps are not
// compatible with the sharing overview and need to be adapted first
fileActions.registerDefaultActions();
fileActions.merge(OCA.Files.fileActions);
if (!this._globalActionsInitialized) {
// in case actions are registered later
this._onActionsUpdated = _.bind(this._onActionsUpdated, this);
OCA.Files.fileActions.on('setDefault.plugin-recent', this._onActionsUpdated);
OCA.Files.fileActions.on('registerAction.plugin-recent', this._onActionsUpdated);
this._globalActionsInitialized = true;
}
// when the user clicks on a folder, redirect to the corresponding
// folder in the files app instead of opening it directly
fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) {
OCA.Files.App.setActiveView('files', {silent: true});
var path = OC.joinPaths(context.$file.attr('data-path'), filename);
OCA.Files.App.fileList.changeDirectory(path, true, true);
});
fileActions.setDefault('dir', 'Open');
return fileActions;
},
_onActionsUpdated: function (ev) {
if (ev.action) {
this.recentFileList.fileActions.registerAction(ev.action);
} else if (ev.defaultAction) {
this.recentFileList.fileActions.setDefault(
ev.defaultAction.mime,
ev.defaultAction.name
);
}
}
};
})(OCA);
OC.Plugins.register('OCA.Files.App', OCA.Files.RecentPlugin);

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "تنازلياً",
"Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"List of files and folders." : "قائمة الملفات و المجلدات",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.",
"Storage informations" : "معلومات التخزين",
"{usedQuotaByte} used" : "{usedQuotaByte} مستخدمة",
"{relative}% used" : "{relative}% مستخدمة",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "تعذر إنشاء الملف الجديد من القالب",
"Delete permanently" : "حذف بشكل دائم",
"Open folder {displayName}" : "إفتح المجلد {displayName}",
"Open in Files" : "إفتَح في \"الملفات\"",
"Open details" : "افتح التفاصيل",
"Set up templates folder" : "إعداد مجلد القوالب",
"Templates" : "القوالب",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "قائمة الملفات والمجلدات المفضلة.",
"No favorites yet" : "ليست عندك مفضلات بعد",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"List of recently modified files and folders." : "قائمة بالملفات و المجلدات التي تمّ تعديلها مؤخراً.",
"No recently modified files" : "لا توجد أيّ ملفات تمّ تعديلها مؤخراً",
"Files and folders you recently modified will show up here." : "الملفات و المجلدات التي تمّ تعديلها مؤخراً ستظهر هنا.",
"Toggle %1$s sublist" : "تبديل %1$s قائمة فرعية",
"Toggle grid view" : "تفعيل/تعطيل القائمة",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "تم حذف المشاركات",
"Pending shares" : "انتظار المشاركات",
"Open folder {name}" : "إفتح المجلد {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"Search for an account" : "البحث عن حساب",
"No files or folders have been deleted yet" : "لم يتم حذف أي ملفات أو مجلدات بعدُ"
},

@ -192,7 +192,7 @@
"descending" : "تنازلياً",
"Sort list by {column} ({direction})" : "ترتيب القائمة بحسب {column} ({direction})",
"List of files and folders." : "قائمة الملفات و المجلدات",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "لم يتم عرض هذه القائمة بالكامل لأسباب تتعلق بالأداء. سيتم عرض الملفات تباعاً أثناء التنقل عبر القائمة.",
"Storage informations" : "معلومات التخزين",
"{usedQuotaByte} used" : "{usedQuotaByte} مستخدمة",
"{relative}% used" : "{relative}% مستخدمة",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "تعذر إنشاء الملف الجديد من القالب",
"Delete permanently" : "حذف بشكل دائم",
"Open folder {displayName}" : "إفتح المجلد {displayName}",
"Open in Files" : "إفتَح في \"الملفات\"",
"Open details" : "افتح التفاصيل",
"Set up templates folder" : "إعداد مجلد القوالب",
"Templates" : "القوالب",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "قائمة الملفات والمجلدات المفضلة.",
"No favorites yet" : "ليست عندك مفضلات بعد",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"List of recently modified files and folders." : "قائمة بالملفات و المجلدات التي تمّ تعديلها مؤخراً.",
"No recently modified files" : "لا توجد أيّ ملفات تمّ تعديلها مؤخراً",
"Files and folders you recently modified will show up here." : "الملفات و المجلدات التي تمّ تعديلها مؤخراً ستظهر هنا.",
"Toggle %1$s sublist" : "تبديل %1$s قائمة فرعية",
"Toggle grid view" : "تفعيل/تعطيل القائمة",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@ -269,6 +273,7 @@
"Deleted shares" : "تم حذف المشاركات",
"Pending shares" : "انتظار المشاركات",
"Open folder {name}" : "إفتح المجلد {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "لم يمكن عرض هذه القائمة بالكامل بسبب إشكالية في الأداء. سيتم عرض الملفات عندما تمر عليها في القائمة",
"Search for an account" : "البحث عن حساب",
"No files or folders have been deleted yet" : "لم يتم حذف أي ملفات أو مجلدات بعدُ"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"

@ -182,7 +182,6 @@ OC.L10N.register(
"ascending" : "възходящо",
"descending" : "низходящо",
"Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Storage informations" : "Хранилище на информация",
"{usedQuotaByte} used" : "{usedQuotaByte} използвано",
"{relative}% used" : "{relative}% използвано",
@ -256,6 +255,7 @@ OC.L10N.register(
"Deleted shares" : "Изтрити",
"Pending shares" : "Чакащи споделяния",
"Open folder {name}" : "Отваряне на папка {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Search for an account" : "Търсене на профил",
"No files or folders have been deleted yet" : "Все още няма изтрити файлове или папки"
},

@ -180,7 +180,6 @@
"ascending" : "възходящо",
"descending" : "низходящо",
"Sort list by {column} ({direction})" : "Сортиране на списъка по {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Storage informations" : "Хранилище на информация",
"{usedQuotaByte} used" : "{usedQuotaByte} използвано",
"{relative}% used" : "{relative}% използвано",
@ -254,6 +253,7 @@
"Deleted shares" : "Изтрити",
"Pending shares" : "Чакащи споделяния",
"Open folder {name}" : "Отваряне на папка {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Този списък не е напълно рендиран поради причини, свързани с производителността. Файловете ще бъдат рендирани, докато навигирате из списъка.",
"Search for an account" : "Търсене на профил",
"No files or folders have been deleted yet" : "Все още няма изтрити файлове или папки"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "descendent",
"Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"List of files and folders." : "Llista de fitxers i carpetes.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Storage informations" : "Informació d'emmagatzematge",
"{usedQuotaByte} used" : "{usedQuotaByte} en ús",
"{relative}% used" : "{relative}% en ús",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla",
"Delete permanently" : "Suprimeix permanentment",
"Open folder {displayName}" : "Obre la carpeta {displayName}",
"Open in Files" : "Obre a Fitxers",
"Open details" : "Obre els detalls",
"Set up templates folder" : "Configura la carpeta de plantilles",
"Templates" : "Plantilles",
@ -247,7 +248,10 @@ OC.L10N.register(
"Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles",
"List of favorites files and folders." : "Llista de fitxers i carpetes preferits.",
"No favorites yet" : "Encara no teniu preferits",
"Files and folders you mark as favorite will show up here" : "Aquí apareixeran els fitxers i carpetes que marqueu com a preferits",
"Files and folders you mark as favorite will show up here" : "Els fitxers i les carpetes que marqueu com a preferits es mostraran aquí",
"List of recently modified files and folders." : "Llista de fitxers i carpetes modificats recentment.",
"No recently modified files" : "No hi ha cap fitxer modificat recentment",
"Files and folders you recently modified will show up here." : "Els fitxers i les carpetes que heu modificat recentment es mostraran aquí",
"Toggle %1$s sublist" : "Canvia la subllista de %1$s",
"Toggle grid view" : "Canvia la visualització de quadrícula",
"No entries found in this folder" : "No s'ha trobat cap entrada en aquesta carpeta",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Suprimit",
"Pending shares" : "Pendent",
"Open folder {name}" : "Obre la carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Search for an account" : "Cerqueu un compte",
"No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta"
},

@ -192,7 +192,7 @@
"descending" : "descendent",
"Sort list by {column} ({direction})" : "Ordena la llista per {column} ({direction})",
"List of files and folders." : "Llista de fitxers i carpetes.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Storage informations" : "Informació d'emmagatzematge",
"{usedQuotaByte} used" : "{usedQuotaByte} en ús",
"{relative}% used" : "{relative}% en ús",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "No s'ha pogut crear el fitxer a partir de la plantilla",
"Delete permanently" : "Suprimeix permanentment",
"Open folder {displayName}" : "Obre la carpeta {displayName}",
"Open in Files" : "Obre a Fitxers",
"Open details" : "Obre els detalls",
"Set up templates folder" : "Configura la carpeta de plantilles",
"Templates" : "Plantilles",
@ -245,7 +246,10 @@
"Unable to initialize the templates directory" : "No s'ha pogut inicialitzar la carpeta de plantilles",
"List of favorites files and folders." : "Llista de fitxers i carpetes preferits.",
"No favorites yet" : "Encara no teniu preferits",
"Files and folders you mark as favorite will show up here" : "Aquí apareixeran els fitxers i carpetes que marqueu com a preferits",
"Files and folders you mark as favorite will show up here" : "Els fitxers i les carpetes que marqueu com a preferits es mostraran aquí",
"List of recently modified files and folders." : "Llista de fitxers i carpetes modificats recentment.",
"No recently modified files" : "No hi ha cap fitxer modificat recentment",
"Files and folders you recently modified will show up here." : "Els fitxers i les carpetes que heu modificat recentment es mostraran aquí",
"Toggle %1$s sublist" : "Canvia la subllista de %1$s",
"Toggle grid view" : "Canvia la visualització de quadrícula",
"No entries found in this folder" : "No s'ha trobat cap entrada en aquesta carpeta",
@ -269,6 +273,7 @@
"Deleted shares" : "Suprimit",
"Pending shares" : "Pendent",
"Open folder {name}" : "Obre la carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Aquesta llista no es mostra completament per raons de rendiment. Es mostraran els fitxers a mesura que navegueu per la llista.",
"Search for an account" : "Cerqueu un compte",
"No files or folders have been deleted yet" : "Encara no s'ha suprimit cap fitxer o carpeta"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "sestupně",
"Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"List of files and folders." : "Seznam souborů a složek.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Storage informations" : "Informace o úložišti",
"{usedQuotaByte} used" : "{usedQuotaByte} využito",
"{relative}% used" : "{relative}% využito",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Nedaří se vytvořit soubor ze šablony",
"Delete permanently" : "Nadobro smazat",
"Open folder {displayName}" : "Otevřít složku {displayName}",
"Open in Files" : "Otevřít v Souborech",
"Open details" : "Otevřít podorobnosti",
"Set up templates folder" : "Vytvořit složku pro šablony",
"Templates" : "Šablony",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Seznam oblíbených souborů a složek.",
"No favorites yet" : "Zatím nic oblíbeného",
"Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené",
"List of recently modified files and folders." : "Seznam nedávno změněných souborů a složek.",
"No recently modified files" : "Žádné nedávno změněné soubory.",
"Files and folders you recently modified will show up here." : "Zde budou zobrazeny soubory a složky, které jste nedávno změnili.",
"Toggle %1$s sublist" : "Přepnout %1$s podseznam",
"Toggle grid view" : "Vyp/zap. zobrazení v mřížce",
"No entries found in this folder" : "V této složce nebylo nic nalezeno",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Smazaná sdílení",
"Pending shares" : "Čekající sdílení",
"Open folder {name}" : "Otevřít složku {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Search for an account" : "Hledat účet",
"No files or folders have been deleted yet" : "Zatím nebyly smazány žádné soubory či složky"
},

@ -192,7 +192,7 @@
"descending" : "sestupně",
"Sort list by {column} ({direction})" : "Seřadit seznam podle {column} ({direction})",
"List of files and folders." : "Seznam souborů a složek.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Storage informations" : "Informace o úložišti",
"{usedQuotaByte} used" : "{usedQuotaByte} využito",
"{relative}% used" : "{relative}% využito",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Nedaří se vytvořit soubor ze šablony",
"Delete permanently" : "Nadobro smazat",
"Open folder {displayName}" : "Otevřít složku {displayName}",
"Open in Files" : "Otevřít v Souborech",
"Open details" : "Otevřít podorobnosti",
"Set up templates folder" : "Vytvořit složku pro šablony",
"Templates" : "Šablony",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Seznam oblíbených souborů a složek.",
"No favorites yet" : "Zatím nic oblíbeného",
"Files and folders you mark as favorite will show up here" : "Zde budou zobrazeny soubory a složky, které označíte jako oblíbené",
"List of recently modified files and folders." : "Seznam nedávno změněných souborů a složek.",
"No recently modified files" : "Žádné nedávno změněné soubory.",
"Files and folders you recently modified will show up here." : "Zde budou zobrazeny soubory a složky, které jste nedávno změnili.",
"Toggle %1$s sublist" : "Přepnout %1$s podseznam",
"Toggle grid view" : "Vyp/zap. zobrazení v mřížce",
"No entries found in this folder" : "V této složce nebylo nic nalezeno",
@ -269,6 +273,7 @@
"Deleted shares" : "Smazaná sdílení",
"Pending shares" : "Čekající sdílení",
"Open folder {name}" : "Otevřít složku {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam není vykreslen celý z důvodu nároků na výkon. Soubory budou dokreslovány, jak se budete posouvat seznamem.",
"Search for an account" : "Hledat účet",
"No files or folders have been deleted yet" : "Zatím nebyly smazány žádné soubory či složky"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"

@ -182,7 +182,6 @@ OC.L10N.register(
"ascending" : "Aufsteigend",
"descending" : "Absteigend",
"Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@ -255,6 +254,7 @@ OC.L10N.register(
"Deleted shares" : "Gelöschte Freigaben",
"Pending shares" : "Ausstehende Freigaben",
"Open folder {name}" : "Ordner {name} öffnen",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Search for an account" : "Nach einem Konto suchen",
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht"
},

@ -180,7 +180,6 @@
"ascending" : "Aufsteigend",
"descending" : "Absteigend",
"Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@ -253,6 +252,7 @@
"Deleted shares" : "Gelöschte Freigaben",
"Pending shares" : "Ausstehende Freigaben",
"Open folder {name}" : "Ordner {name} öffnen",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn du durch die Liste navigierst.",
"Search for an account" : "Nach einem Konto suchen",
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "Absteigend",
"Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"List of files and folders." : "Liste der Dateien und Ordner.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Neue Datei kann nicht aus Vorlage erstellt werden",
"Delete permanently" : "Endgültig löschen",
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In Dateien öffnen",
"Open details" : "Details öffnen",
"Set up templates folder" : "Vorlagenordner einrichten",
"Templates" : "Vorlagen",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien.",
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
"List of recently modified files and folders." : "Liste der zuletzt geänderten Dateien und Ordner.",
"No recently modified files" : "Keine kürzlich geänderten Dateien",
"Files and folders you recently modified will show up here." : "Die von Ihnen kürzlich geänderten Dateien und Ordner werden hier angezeigt.",
"Toggle %1$s sublist" : "Unterliste %1$s umschalten",
"Toggle grid view" : "Rasteransicht umschalten",
"No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Gelöschte Freigaben",
"Pending shares" : "Ausstehende Freigaben",
"Open folder {name}" : "Ordner {name} öffnen",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Search for an account" : "Nach einem Konto suchen",
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht"
},

@ -192,7 +192,7 @@
"descending" : "Absteigend",
"Sort list by {column} ({direction})" : "Liste sortieren nach {column} ({direction})",
"List of files and folders." : "Liste der Dateien und Ordner.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Storage informations" : "Speicherinformationen",
"{usedQuotaByte} used" : "{usedQuotaByte} verwendet",
"{relative}% used" : "{relative}% verwendet",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Neue Datei kann nicht aus Vorlage erstellt werden",
"Delete permanently" : "Endgültig löschen",
"Open folder {displayName}" : "Ordner {displayName} öffnen",
"Open in Files" : "In Dateien öffnen",
"Open details" : "Details öffnen",
"Set up templates folder" : "Vorlagenordner einrichten",
"Templates" : "Vorlagen",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Liste der favorisierten Ordner und Dateien.",
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
"List of recently modified files and folders." : "Liste der zuletzt geänderten Dateien und Ordner.",
"No recently modified files" : "Keine kürzlich geänderten Dateien",
"Files and folders you recently modified will show up here." : "Die von Ihnen kürzlich geänderten Dateien und Ordner werden hier angezeigt.",
"Toggle %1$s sublist" : "Unterliste %1$s umschalten",
"Toggle grid view" : "Rasteransicht umschalten",
"No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden",
@ -269,6 +273,7 @@
"Deleted shares" : "Gelöschte Freigaben",
"Pending shares" : "Ausstehende Freigaben",
"Open folder {name}" : "Ordner {name} öffnen",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Diese Liste ist aus Performance-Gründen nicht vollständig gerendert. Die Dateien werden gerendert, wenn Sie durch die Liste navigieren.",
"Search for an account" : "Nach einem Konto suchen",
"No files or folders have been deleted yet" : "Es wurden noch keine Dateien oder Ordner gelöscht"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "descending",
"Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"List of files and folders." : "List of files and folders.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
"Storage informations" : "Storage informations",
"{usedQuotaByte} used" : "{usedQuotaByte} used",
"{relative}% used" : "{relative}% used",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Unable to create new file from template",
"Delete permanently" : "Delete permanently",
"Open folder {displayName}" : "Open folder {displayName}",
"Open in Files" : "Open in Files",
"Open details" : "Open details",
"Set up templates folder" : "Set up templates folder",
"Templates" : "Templates",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "List of favourites files and folders.",
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
"List of recently modified files and folders." : "List of recently modified files and folders.",
"No recently modified files" : "No recently modified files",
"Files and folders you recently modified will show up here." : "Files and folders you recently modified will show up here.",
"Toggle %1$s sublist" : "Toggle %1$s sublist",
"Toggle grid view" : "Toggle grid view",
"No entries found in this folder" : "No entries found in this folder",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Deleted shares",
"Pending shares" : "Pending shares",
"Open folder {name}" : "Open folder {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"Search for an account" : "Search for an account",
"No files or folders have been deleted yet" : "No files or folders have been deleted yet"
},

@ -192,7 +192,7 @@
"descending" : "descending",
"Sort list by {column} ({direction})" : "Sort list by {column} ({direction})",
"List of files and folders." : "List of files and folders.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
"Storage informations" : "Storage informations",
"{usedQuotaByte} used" : "{usedQuotaByte} used",
"{relative}% used" : "{relative}% used",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Unable to create new file from template",
"Delete permanently" : "Delete permanently",
"Open folder {displayName}" : "Open folder {displayName}",
"Open in Files" : "Open in Files",
"Open details" : "Open details",
"Set up templates folder" : "Set up templates folder",
"Templates" : "Templates",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "List of favourites files and folders.",
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
"List of recently modified files and folders." : "List of recently modified files and folders.",
"No recently modified files" : "No recently modified files",
"Files and folders you recently modified will show up here." : "Files and folders you recently modified will show up here.",
"Toggle %1$s sublist" : "Toggle %1$s sublist",
"Toggle grid view" : "Toggle grid view",
"No entries found in this folder" : "No entries found in this folder",
@ -269,6 +273,7 @@
"Deleted shares" : "Deleted shares",
"Pending shares" : "Pending shares",
"Open folder {name}" : "Open folder {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.",
"Search for an account" : "Search for an account",
"No files or folders have been deleted yet" : "No files or folders have been deleted yet"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -193,7 +193,8 @@ OC.L10N.register(
"ascending" : "ascendente",
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"List of files and folders." : "Lista de archivos y carpetas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.",
"Storage informations" : "Informaciones de almacenamiento",
"{usedQuotaByte} used" : "{usedQuotaByte} utilizados",
"{relative}% used" : "{relative}% utilizado",
@ -239,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Eliminar de forma definitiva",
"Open folder {displayName}" : "Abrir carpeta {displayName}",
"Open in Files" : "Abrir en Archivos",
"Open details" : "Abrir detalles",
"Set up templates folder" : "Configura una carpeta para plantillas",
"Templates" : "Plantillas",
@ -247,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
"List of recently modified files and folders." : "Lista de archivos y carpetas modificados recientemente.",
"No recently modified files" : "No hay archivos modificados recientemente.",
"Files and folders you recently modified will show up here." : "Los archivos y carpetas que ha modificado recientemente aparecerán aquí.",
"Toggle %1$s sublist" : "Alternar %1$s sublista",
"Toggle grid view" : "Alternar vista de cuadrícula",
"No entries found in this folder" : "No hay entradas en esta carpeta",
@ -270,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Recursos compartidos eliminados",
"Pending shares" : "Recursos compartidos pendientes",
"Open folder {name}" : "Abrir carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"Search for an account" : "Buscar una cuenta",
"No files or folders have been deleted yet" : "No se han borrado archivos o carpetas todavía"
},

@ -191,7 +191,8 @@
"ascending" : "ascendente",
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"List of files and folders." : "Lista de archivos y carpetas.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navega por la lista.",
"Storage informations" : "Informaciones de almacenamiento",
"{usedQuotaByte} used" : "{usedQuotaByte} utilizados",
"{relative}% used" : "{relative}% utilizado",
@ -237,6 +238,7 @@
"Unable to create new file from template" : "No se ha podido crear un nuevo archivo desde la plantilla",
"Delete permanently" : "Eliminar de forma definitiva",
"Open folder {displayName}" : "Abrir carpeta {displayName}",
"Open in Files" : "Abrir en Archivos",
"Open details" : "Abrir detalles",
"Set up templates folder" : "Configura una carpeta para plantillas",
"Templates" : "Plantillas",
@ -245,6 +247,9 @@
"List of favorites files and folders." : "Lista de archivos y carpetas favoritos.",
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
"List of recently modified files and folders." : "Lista de archivos y carpetas modificados recientemente.",
"No recently modified files" : "No hay archivos modificados recientemente.",
"Files and folders you recently modified will show up here." : "Los archivos y carpetas que ha modificado recientemente aparecerán aquí.",
"Toggle %1$s sublist" : "Alternar %1$s sublista",
"Toggle grid view" : "Alternar vista de cuadrícula",
"No entries found in this folder" : "No hay entradas en esta carpeta",
@ -268,6 +273,7 @@
"Deleted shares" : "Recursos compartidos eliminados",
"Pending shares" : "Recursos compartidos pendientes",
"Open folder {name}" : "Abrir carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se renderiza completa por razones de rendimiento. Los archivos serán renderizados mientras ud. navegue por la lista.",
"Search for an account" : "Buscar una cuenta",
"No files or folders have been deleted yet" : "No se han borrado archivos o carpetas todavía"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

@ -194,7 +194,6 @@ OC.L10N.register(
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"List of files and folders." : "Lista de archivos y carpetas. ",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Storage informations" : "Información de almacenamiento.",
"{usedQuotaByte} used" : "{usedQuotaByte} usados.",
"{relative}% used" : "{relative}% usados.",
@ -271,6 +270,7 @@ OC.L10N.register(
"Deleted shares" : "Comparticiones eliminadas",
"Pending shares" : "Comparticiones pendientes",
"Open folder {name}" : "Abrir carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Search for an account" : "Buscar una cuenta",
"No files or folders have been deleted yet" : "No se han eliminado archivos o carpetas todavía."
},

@ -192,7 +192,6 @@
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar lista por {column} ({direction}).",
"List of files and folders." : "Lista de archivos y carpetas. ",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Storage informations" : "Información de almacenamiento.",
"{usedQuotaByte} used" : "{usedQuotaByte} usados.",
"{relative}% used" : "{relative}% usados.",
@ -269,6 +268,7 @@
"Deleted shares" : "Comparticiones eliminadas",
"Pending shares" : "Comparticiones pendientes",
"Open folder {name}" : "Abrir carpeta {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista no se muestra completamente por motivos de rendimiento. Los archivos se mostrarán a medida que navegas por la lista.",
"Search for an account" : "Buscar una cuenta",
"No files or folders have been deleted yet" : "No se han eliminado archivos o carpetas todavía."
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

@ -193,7 +193,6 @@ OC.L10N.register(
"ascending" : "goranzkoa",
"descending" : "beheranzkoa",
"Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Storage informations" : "Biltegiaren informazioak",
"{usedQuotaByte} used" : "{usedQuotaByte} erabilita",
"{relative}% used" : "%{relative} erabilita",
@ -270,6 +269,7 @@ OC.L10N.register(
"Deleted shares" : "Ezabatutako partekatzeak",
"Pending shares" : "Zain dauden partekatzeak",
"Open folder {name}" : "Ireki {name} karpeta",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Search for an account" : "Bilatu kontu bat",
"No files or folders have been deleted yet" : "Oraindik ez da ezabatu fitxategirik edo karpetarik"
},

@ -191,7 +191,6 @@
"ascending" : "goranzkoa",
"descending" : "beheranzkoa",
"Sort list by {column} ({direction})" : "Ordenatu zerrenda {zutabea} ({norabidea}) arabera",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Storage informations" : "Biltegiaren informazioak",
"{usedQuotaByte} used" : "{usedQuotaByte} erabilita",
"{relative}% used" : "%{relative} erabilita",
@ -268,6 +267,7 @@
"Deleted shares" : "Ezabatutako partekatzeak",
"Pending shares" : "Zain dauden partekatzeak",
"Open folder {name}" : "Ireki {name} karpeta",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Zerrenda hau ez da guztiz ikusten errendimendu arrazoiengatik. Fitxategiak zerrendan zehar nabigatzen duten heinean bistaratuko dira.",
"Search for an account" : "Bilatu kontu bat",
"No files or folders have been deleted yet" : "Oraindik ez da ezabatu fitxategirik edo karpetarik"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -186,7 +186,6 @@ OC.L10N.register(
"descending" : "laskevasti",
"Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
"List of files and folders." : "Luettelo tiedostoista ja kansioista.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Storage informations" : "Tallennustilan tietoja",
"{usedQuotaByte} used" : "{usedQuotaByte} käytetty",
"{relative}% used" : "{relative} % käytetty",
@ -262,6 +261,7 @@ OC.L10N.register(
"Deleted shares" : "Poistetut jaot",
"Pending shares" : "Odottavat jaot",
"Open folder {name}" : "Avaa kansio {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Search for an account" : "Etsi tiliä",
"No files or folders have been deleted yet" : "Tiedostoja tai kansioita ei ole vielä poistettu"
},

@ -184,7 +184,6 @@
"descending" : "laskevasti",
"Sort list by {column} ({direction})" : "Järjestä luettelo sarakkeen {column} mukaan ({direction})",
"List of files and folders." : "Luettelo tiedostoista ja kansioista.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Storage informations" : "Tallennustilan tietoja",
"{usedQuotaByte} used" : "{usedQuotaByte} käytetty",
"{relative}% used" : "{relative} % käytetty",
@ -260,6 +259,7 @@
"Deleted shares" : "Poistetut jaot",
"Pending shares" : "Odottavat jaot",
"Open folder {name}" : "Avaa kansio {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Tätä luetteloa ei ole esitetty täysin suorituskykyyn liittyvistä syistä. Tiedostot esitetään sitä mukaa, kun selaat luetteloa.",
"Search for an account" : "Etsi tiliä",
"No files or folders have been deleted yet" : "Tiedostoja tai kansioita ei ole vielä poistettu"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "descendant",
"Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"List of files and folders." : "Liste des fichiers et dossiers.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.",
"Storage informations" : "Informations sur le stockage",
"{usedQuotaByte} used" : "{usedQuotaByte} utilisés",
"{relative}% used" : "{relative}% utilisés",
@ -271,6 +271,7 @@ OC.L10N.register(
"Deleted shares" : "Partages supprimés",
"Pending shares" : "Partages en attente",
"Open folder {name}" : "Ouvrir le dossier {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"Search for an account" : "Chercher un compte",
"No files or folders have been deleted yet" : "Aucun fichier ou dossier n'a encore été supprimé"
},

@ -192,7 +192,7 @@
"descending" : "descendant",
"Sort list by {column} ({direction})" : "Trier la liste par {column} ({direction})",
"List of files and folders." : "Liste des fichiers et dossiers.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas entièrement affichée pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous naviguerez dans la liste.",
"Storage informations" : "Informations sur le stockage",
"{usedQuotaByte} used" : "{usedQuotaByte} utilisés",
"{relative}% used" : "{relative}% utilisés",
@ -269,6 +269,7 @@
"Deleted shares" : "Partages supprimés",
"Pending shares" : "Partages en attente",
"Open folder {name}" : "Ouvrir le dossier {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Cette liste n'est pas affichée en totalité pour des raisons de performances. Les fichiers seront affichés au fur et à mesure que vous parcourrez la liste.",
"Search for an account" : "Chercher un compte",
"No files or folders have been deleted yet" : "Aucun fichier ou dossier n'a encore été supprimé"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"List of files and folders." : "Lista de ficheiros e cartafoles",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.",
"Storage informations" : "Información de almacenamento",
"{usedQuotaByte} used" : "{usedQuotaByte} usado",
"{relative}% used" : "{relative}% usado",
@ -217,7 +217,7 @@ OC.L10N.register(
"Go to the previous folder" : "Ir ao cartafol anterior",
"Go back" : "Volver",
"Open the files app settings" : "Abrir os axustes da aplicación de ficheiros",
"Files settings" : "Axustes de ficheiros",
"Files settings" : "Axustes de Ficheiros",
"File cannot be accessed" : "Non é posíbel acceder ao ficheiro",
"You might not have have permissions to view it, ask the sender to share it" : "É posíbel que non teña permisos para velo, pídalle ao remitente que o comparta",
"Sort favorites first" : "Ordene antes os favoritos",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo",
"Delete permanently" : "Eliminar definitivamente",
"Open folder {displayName}" : "Abrir o cartafol {displayName}",
"Open in Files" : "Abrir en Ficheiros",
"Open details" : "Abrir detalles",
"Set up templates folder" : "Estabelecer un cartafol de modelos",
"Templates" : "Modelos",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Lista de ficheiros e cartafoles favoritos.",
"No favorites yet" : "Aínda non hai favoritos",
"Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí",
"List of recently modified files and folders." : "Lista de ficheiros e cartafoles modificados recentemente.",
"No recently modified files" : "Non hai ficheiros modificados recentemente",
"Files and folders you recently modified will show up here." : "Os ficheiros e cartafoles que modificou recentemente amosaranse aquí.",
"Toggle %1$s sublist" : "Alternar %1$s sublista",
"Toggle grid view" : "Alternar a vista como grella",
"No entries found in this folder" : "Non se atoparon entradas neste cartafol",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Comparticións eliminadas",
"Pending shares" : "Comparticións pendentes",
"Open folder {name}" : "Abrir o cartafol {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.",
"Search for an account" : "Buscar por unha conta",
"No files or folders have been deleted yet" : "Aínda non se eliminou ningún ficheiro nin cartafol"
},

@ -192,7 +192,7 @@
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Ordenar a lista por {column} ({direction})",
"List of files and folders." : "Lista de ficheiros e cartafoles",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres se despraza pola lista.",
"Storage informations" : "Información de almacenamento",
"{usedQuotaByte} used" : "{usedQuotaByte} usado",
"{relative}% used" : "{relative}% usado",
@ -215,7 +215,7 @@
"Go to the previous folder" : "Ir ao cartafol anterior",
"Go back" : "Volver",
"Open the files app settings" : "Abrir os axustes da aplicación de ficheiros",
"Files settings" : "Axustes de ficheiros",
"Files settings" : "Axustes de Ficheiros",
"File cannot be accessed" : "Non é posíbel acceder ao ficheiro",
"You might not have have permissions to view it, ask the sender to share it" : "É posíbel que non teña permisos para velo, pídalle ao remitente que o comparta",
"Sort favorites first" : "Ordene antes os favoritos",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Non é posíbel crear un novo ficheiro a partir do modelo",
"Delete permanently" : "Eliminar definitivamente",
"Open folder {displayName}" : "Abrir o cartafol {displayName}",
"Open in Files" : "Abrir en Ficheiros",
"Open details" : "Abrir detalles",
"Set up templates folder" : "Estabelecer un cartafol de modelos",
"Templates" : "Modelos",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Lista de ficheiros e cartafoles favoritos.",
"No favorites yet" : "Aínda non hai favoritos",
"Files and folders you mark as favorite will show up here" : "Os ficheiros e cartafoles que marque como favoritos amosaranse aquí",
"List of recently modified files and folders." : "Lista de ficheiros e cartafoles modificados recentemente.",
"No recently modified files" : "Non hai ficheiros modificados recentemente",
"Files and folders you recently modified will show up here." : "Os ficheiros e cartafoles que modificou recentemente amosaranse aquí.",
"Toggle %1$s sublist" : "Alternar %1$s sublista",
"Toggle grid view" : "Alternar a vista como grella",
"No entries found in this folder" : "Non se atoparon entradas neste cartafol",
@ -269,6 +273,7 @@
"Deleted shares" : "Comparticións eliminadas",
"Pending shares" : "Comparticións pendentes",
"Open folder {name}" : "Abrir o cartafol {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista non se representa de xeito completo por mor do rendemento. Os ficheiros represéntanse mentres navega pola lista.",
"Search for an account" : "Buscar por unha conta",
"No files or folders have been deleted yet" : "Aínda non se eliminou ningún ficheiro nin cartafol"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -184,7 +184,6 @@ OC.L10N.register(
"ascending" : "növekvő",
"descending" : "csökkenő",
"Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Storage informations" : "Tárhely-információk",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
"{relative}% used" : "{relative}% felhasználva",
@ -259,6 +258,7 @@ OC.L10N.register(
"Deleted shares" : "Törölt megosztások",
"Pending shares" : "Függőben lévő megosztások",
"Open folder {name}" : "A(z) {name} mappa megnyitása",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Search for an account" : "Fiók keresése",
"No files or folders have been deleted yet" : "Még nem lettek fájlok vagy mappák törölve"
},

@ -182,7 +182,6 @@
"ascending" : "növekvő",
"descending" : "csökkenő",
"Sort list by {column} ({direction})" : "Lista rendezése {column} alapján ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Storage informations" : "Tárhely-információk",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
"{relative}% used" : "{relative}% felhasználva",
@ -257,6 +256,7 @@
"Deleted shares" : "Törölt megosztások",
"Pending shares" : "Függőben lévő megosztások",
"Open folder {name}" : "A(z) {name} mappa megnyitása",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg, ",
"Search for an account" : "Fiók keresése",
"No files or folders have been deleted yet" : "Még nem lettek fájlok vagy mappák törölve"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,6 @@ OC.L10N.register(
"descending" : "decrescente",
"Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"List of files and folders." : "Lista di file e cartelle.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Storage informations" : "Informazioni di archiviazione",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{relative}% used" : "{relative}% usato",
@ -271,6 +270,7 @@ OC.L10N.register(
"Deleted shares" : "Condivisioni eliminate",
"Pending shares" : "Condivisioni in corso",
"Open folder {name}" : "Apri la cartella {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Search for an account" : "Cerca un account",
"No files or folders have been deleted yet" : "Nessun file o cartella è stato ancora eliminato"
},

@ -192,7 +192,6 @@
"descending" : "decrescente",
"Sort list by {column} ({direction})" : "Ordina la lista per {column} ({direction})",
"List of files and folders." : "Lista di file e cartelle.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Storage informations" : "Informazioni di archiviazione",
"{usedQuotaByte} used" : "{usedQuotaByte} usato",
"{relative}% used" : "{relative}% usato",
@ -269,6 +268,7 @@
"Deleted shares" : "Condivisioni eliminate",
"Pending shares" : "Condivisioni in corso",
"Open folder {name}" : "Apri la cartella {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Questa lista non è stata mostrata completamente per ragioni di performances. I file verranno mostrati durante la navigazione della lista.",
"Search for an account" : "Cerca un account",
"No files or folders have been deleted yet" : "Nessun file o cartella è stato ancora eliminato"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

@ -183,7 +183,6 @@ OC.L10N.register(
"ascending" : "오름차순",
"descending" : "내림차순",
"Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
"{relative}% used" : "{relative}% 사용",
@ -255,6 +254,7 @@ OC.L10N.register(
"Deleted shares" : "삭제된 공유",
"Pending shares" : "진행중인 공유",
"Open folder {name}" : "{name} 폴더 열기",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Search for an account" : "계정 검색",
"No files or folders have been deleted yet" : "아직 삭제된 파일이나 폴더가 없습니다."
},

@ -181,7 +181,6 @@
"ascending" : "오름차순",
"descending" : "내림차순",
"Sort list by {column} ({direction})" : "{column} ({direction})으로 목록 정렬",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Storage informations" : "저장소 정보",
"{usedQuotaByte} used" : "{usedQuotaByte} 사용",
"{relative}% used" : "{relative}% 사용",
@ -253,6 +252,7 @@
"Deleted shares" : "삭제된 공유",
"Pending shares" : "진행중인 공유",
"Open folder {name}" : "{name} 폴더 열기",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "이 목록은 성능 상의 이유로 완전히 표시되지 않았습니다. 목록을 탐색하면 파일이 표시됩니다.",
"Search for an account" : "계정 검색",
"No files or folders have been deleted yet" : "아직 삭제된 파일이나 폴더가 없습니다."
},"pluralForm" :"nplurals=1; plural=0;"

@ -184,7 +184,6 @@ OC.L10N.register(
"ascending" : "rosnąco",
"descending" : "malejąco",
"Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Storage informations" : "Informacje o przechowywaniu",
"{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}",
"{relative}% used" : "Wykorzystano {relative}%",
@ -258,6 +257,7 @@ OC.L10N.register(
"Deleted shares" : "Usunięte udostępnienia",
"Pending shares" : "Oczekujące udostępnienia",
"Open folder {name}" : "Otwórz katalog {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Search for an account" : "Wyszukaj konto",
"No files or folders have been deleted yet" : "Żadne pliki ani katalogi nie zostały jeszcze usunięte"
},

@ -182,7 +182,6 @@
"ascending" : "rosnąco",
"descending" : "malejąco",
"Sort list by {column} ({direction})" : "Sortuj listę według {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Storage informations" : "Informacje o przechowywaniu",
"{usedQuotaByte} used" : "Wykorzystano {usedQuotaByte}",
"{relative}% used" : "Wykorzystano {relative}%",
@ -256,6 +255,7 @@
"Deleted shares" : "Usunięte udostępnienia",
"Pending shares" : "Oczekujące udostępnienia",
"Open folder {name}" : "Otwórz katalog {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ta lista nie jest w pełni renderowana ze względu na wydajność. Pliki będą renderowane podczas poruszania się po liście.",
"Search for an account" : "Wyszukaj konto",
"No files or folders have been deleted yet" : "Żadne pliki ani katalogi nie zostały jeszcze usunięte"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"List of files and folders." : "Lista de arquivos e pastas.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Essa lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Storage informations" : "Informações de armazenamento",
"{usedQuotaByte} used" : "{usedQuotaByte} usado",
"{relative}% used" : "{relative}% usado",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Incapaz de criar novo arquivo a partir do modelo",
"Delete permanently" : "Remover permanentemente",
"Open folder {displayName}" : "Abra a pasta {displayName}",
"Open in Files" : "Abrir em arquivos",
"Open details" : "Abrir detalhes",
"Set up templates folder" : "Configurar pasta de modelos",
"Templates" : "Modelos",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Lista de arquivos e pastas favoritos.",
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
"List of recently modified files and folders." : "Lista de arquivos e pastas modificados recentemente.",
"No recently modified files" : "Nenhum arquivo modificado recentemente",
"Files and folders you recently modified will show up here." : "Arquivos e pastas que você modificou recentemente aparecerão aqui.",
"Toggle %1$s sublist" : "Alternar a sublista %1$s",
"Toggle grid view" : "Alternar a visão em grade",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Compartilhamentos apagados",
"Pending shares" : "Compartilhamentos pendentes",
"Open folder {name}" : "Abra a pasta {nome}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Search for an account" : "Pesquisar uma conta",
"No files or folders have been deleted yet" : "Nenhum arquivo ou pasta foi excluído ainda"
},

@ -192,7 +192,7 @@
"descending" : "descendente",
"Sort list by {column} ({direction})" : "Classificar lista por {column} ({direction})",
"List of files and folders." : "Lista de arquivos e pastas.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Essa lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Storage informations" : "Informações de armazenamento",
"{usedQuotaByte} used" : "{usedQuotaByte} usado",
"{relative}% used" : "{relative}% usado",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Incapaz de criar novo arquivo a partir do modelo",
"Delete permanently" : "Remover permanentemente",
"Open folder {displayName}" : "Abra a pasta {displayName}",
"Open in Files" : "Abrir em arquivos",
"Open details" : "Abrir detalhes",
"Set up templates folder" : "Configurar pasta de modelos",
"Templates" : "Modelos",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Lista de arquivos e pastas favoritos.",
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
"List of recently modified files and folders." : "Lista de arquivos e pastas modificados recentemente.",
"No recently modified files" : "Nenhum arquivo modificado recentemente",
"Files and folders you recently modified will show up here." : "Arquivos e pastas que você modificou recentemente aparecerão aqui.",
"Toggle %1$s sublist" : "Alternar a sublista %1$s",
"Toggle grid view" : "Alternar a visão em grade",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
@ -269,6 +273,7 @@
"Deleted shares" : "Compartilhamentos apagados",
"Pending shares" : "Compartilhamentos pendentes",
"Open folder {name}" : "Abra a pasta {nome}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Esta lista não é totalmente renderizada por motivos de desempenho. Os arquivos serão renderizados conforme você navega pela lista.",
"Search for an account" : "Pesquisar uma conta",
"No files or folders have been deleted yet" : "Nenhum arquivo ou pasta foi excluído ainda"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

@ -194,7 +194,6 @@ OC.L10N.register(
"descending" : "нисходящий",
"Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"List of files and folders." : "Список файлов и каталогов.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Storage informations" : "Сведения о хранилище",
"{usedQuotaByte} used" : "Использовано {usedQuotaByte}",
"{relative}% used" : "Использовано {relative}%",
@ -271,6 +270,7 @@ OC.L10N.register(
"Deleted shares" : "Удалённые общие ресурсы",
"Pending shares" : "Ожидающие общие ресурсы",
"Open folder {name}" : "Открыть папку {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Search for an account" : "Поиск по учетной записи",
"No files or folders have been deleted yet" : "Файлы или папки еще не удалены"
},

@ -192,7 +192,6 @@
"descending" : "нисходящий",
"Sort list by {column} ({direction})" : "Сортировать список по {column} ({direction})",
"List of files and folders." : "Список файлов и каталогов.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Storage informations" : "Сведения о хранилище",
"{usedQuotaByte} used" : "Использовано {usedQuotaByte}",
"{relative}% used" : "Использовано {relative}%",
@ -269,6 +268,7 @@
"Deleted shares" : "Удалённые общие ресурсы",
"Pending shares" : "Ожидающие общие ресурсы",
"Open folder {name}" : "Открыть папку {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Этот список отображается не полностью из соображений производительности. Файлы будут отображаться по мере перемещения по списку.",
"Search for an account" : "Поиск по учетной записи",
"No files or folders have been deleted yet" : "Файлы или папки еще не удалены"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"

@ -184,7 +184,6 @@ OC.L10N.register(
"ascending" : "naraščajoče",
"descending" : "padajoče",
"Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Storage informations" : "Podrobnosti shrambe",
"{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}",
"{relative}% used" : "Zasedeno {relative} %",
@ -259,6 +258,7 @@ OC.L10N.register(
"Deleted shares" : "Izbrisana mesta souporabe",
"Pending shares" : "Predmeti za souporabo na čakanju",
"Open folder {name}" : "Odpri mapo {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Search for an account" : "Poišči račun",
"No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map"
},

@ -182,7 +182,6 @@
"ascending" : "naraščajoče",
"descending" : "padajoče",
"Sort list by {column} ({direction})" : "Razvrsti seznam po stolpcu {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Storage informations" : "Podrobnosti shrambe",
"{usedQuotaByte} used" : "Zasedeno {usedQuotaByte}",
"{relative}% used" : "Zasedeno {relative} %",
@ -257,6 +256,7 @@
"Deleted shares" : "Izbrisana mesta souporabe",
"Pending shares" : "Predmeti za souporabo na čakanju",
"Open folder {name}" : "Odpri mapo {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Seznam datotek ni v celoti izpisan zaradi zagotavljanja hitrosti in odzivnosti sistema. Predmeti se bodo dopolnjevali ob brskanju.",
"Search for an account" : "Poišči račun",
"No files or folders have been deleted yet" : "Ni še izbrisanih datotek in map"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"

@ -194,7 +194,6 @@ OC.L10N.register(
"descending" : "опадајуће",
"Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"List of files and folders." : "Листа фајлова и фолдера.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Storage informations" : "Информације о складишту`",
"{usedQuotaByte} used" : "{usedQuotaByte} искоришћено",
"{relative}% used" : "{relative}% искоришћено",
@ -271,6 +270,7 @@ OC.L10N.register(
"Deleted shares" : "Обрисана дељења",
"Pending shares" : "Дељења на чекању",
"Open folder {name}" : "Отвори фолдер {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Search for an account" : "Претражите налог",
"No files or folders have been deleted yet" : "Још увек није обрисан ниједан фајл или фолдер"
},

@ -192,7 +192,6 @@
"descending" : "опадајуће",
"Sort list by {column} ({direction})" : "Поређај листу по {column} ({direction})",
"List of files and folders." : "Листа фајлова и фолдера.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Storage informations" : "Информације о складишту`",
"{usedQuotaByte} used" : "{usedQuotaByte} искоришћено",
"{relative}% used" : "{relative}% искоришћено",
@ -269,6 +268,7 @@
"Deleted shares" : "Обрисана дељења",
"Pending shares" : "Дељења на чекању",
"Open folder {name}" : "Отвори фолдер {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Ова листа није у потпуности приказана из разлога перформанси. Фајлови ће се приказивати како се крећете кроз листу.",
"Search for an account" : "Претражите налог",
"No files or folders have been deleted yet" : "Још увек није обрисан ниједан фајл или фолдер"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "fallande",
"Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"List of files and folders." : "Lista över filer och mappar.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Storage informations" : "Lagringsinformation",
"{usedQuotaByte} used" : "{usedQuotaByte} använt",
"{relative}% used" : "{relative}% använt",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Kunde inte skapa fil från mall",
"Delete permanently" : "Ta bort permanent",
"Open folder {displayName}" : "Öppna mappen {displayName}",
"Open in Files" : "Öppna i Filer",
"Open details" : "Öppna detaljer",
"Set up templates folder" : "Skapa en mapp för mallar",
"Templates" : "Mallar",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Lista över favoritfiler och mappar.",
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"List of recently modified files and folders." : "Lista över nyligen ändrade filer och mappar.",
"No recently modified files" : "Inga nyligen ändrade filer",
"Files and folders you recently modified will show up here." : "Filer och mappar som du nyligen ändrat kommer att visas här.",
"Toggle %1$s sublist" : "Växla %1$s sublista",
"Toggle grid view" : "Växla rutnätsvy",
"No entries found in this folder" : "Inget innehåll hittades i denna mapp",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Borttagna delningar",
"Pending shares" : "Väntande delningar",
"Open folder {name}" : "Öppna mappen {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Search for an account" : "Sök efter ett konto",
"No files or folders have been deleted yet" : "Inga filer eller mappar har tagits bort än"
},

@ -192,7 +192,7 @@
"descending" : "fallande",
"Sort list by {column} ({direction})" : "Sortera listan efter {column} ({direction})",
"List of files and folders." : "Lista över filer och mappar.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Storage informations" : "Lagringsinformation",
"{usedQuotaByte} used" : "{usedQuotaByte} använt",
"{relative}% used" : "{relative}% använt",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Kunde inte skapa fil från mall",
"Delete permanently" : "Ta bort permanent",
"Open folder {displayName}" : "Öppna mappen {displayName}",
"Open in Files" : "Öppna i Filer",
"Open details" : "Öppna detaljer",
"Set up templates folder" : "Skapa en mapp för mallar",
"Templates" : "Mallar",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Lista över favoritfiler och mappar.",
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"List of recently modified files and folders." : "Lista över nyligen ändrade filer och mappar.",
"No recently modified files" : "Inga nyligen ändrade filer",
"Files and folders you recently modified will show up here." : "Filer och mappar som du nyligen ändrat kommer att visas här.",
"Toggle %1$s sublist" : "Växla %1$s sublista",
"Toggle grid view" : "Växla rutnätsvy",
"No entries found in this folder" : "Inget innehåll hittades i denna mapp",
@ -269,6 +273,7 @@
"Deleted shares" : "Borttagna delningar",
"Pending shares" : "Väntande delningar",
"Open folder {name}" : "Öppna mappen {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Denna lista är inte helt återgiven av prestandaskäl. Filerna kommer att renderas när du navigerar genom listan.",
"Search for an account" : "Sök efter ett konto",
"No files or folders have been deleted yet" : "Inga filer eller mappar har tagits bort än"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "Azalan",
"Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"List of files and folders." : "Doys ave klasörleri listesi.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarım nedeniyle listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Storage informations" : "Depolama bilgileri",
"{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış",
"{relative}% used" : "%{relative} kullanılmış",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "Kalıptan yeni dosya eklenemedi",
"Delete permanently" : "Kalıcı olarak sil",
"Open folder {displayName}" : "{displayName} klasörünü aç",
"Open in Files" : "Dosyalar uygulamasında aç",
"Open details" : "Ayrıntıları aç",
"Set up templates folder" : "Kalıp klasörünü ayarlayın",
"Templates" : "Kalıplar",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.",
"No favorites yet" : "Henüz sık kullanılan bir öge yok",
"Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir",
"List of recently modified files and folders." : "Son değiştirilen dosya ve klasörlerin listesi.",
"No recently modified files" : "Yakınlarda değiştirilmiş bir dosya yok",
"Files and folders you recently modified will show up here." : "Son zamanlarda değiştirdiğiniz dosya ve klasörler burada görüntülenir.",
"Toggle %1$s sublist" : "%1$s alt listesini aç/kapat",
"Toggle grid view" : "Tablo görünümünü değiştir",
"No entries found in this folder" : "Bu klasörde herhangi bir kayıt bulunamadı",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "Silinmiş paylaşımlar",
"Pending shares" : "Bekleyen paylaşımlar",
"Open folder {name}" : "{name} klasörünü aç",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Search for an account" : "Hesap ara",
"No files or folders have been deleted yet" : "Henüz silinmiş bir dosya ya da klasör yok"
},

@ -192,7 +192,7 @@
"descending" : "Azalan",
"Sort list by {column} ({direction})" : "Listeyi {column} sütununa göre sırala ({direction})",
"List of files and folders." : "Doys ave klasörleri listesi.",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarım nedeniyle listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Storage informations" : "Depolama bilgileri",
"{usedQuotaByte} used" : "{usedQuotaByte} kullanılmış",
"{relative}% used" : "%{relative} kullanılmış",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "Kalıptan yeni dosya eklenemedi",
"Delete permanently" : "Kalıcı olarak sil",
"Open folder {displayName}" : "{displayName} klasörünü aç",
"Open in Files" : "Dosyalar uygulamasında aç",
"Open details" : "Ayrıntıları aç",
"Set up templates folder" : "Kalıp klasörünü ayarlayın",
"Templates" : "Kalıplar",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "Sık kullanılan dosya ve klasör listesi.",
"No favorites yet" : "Henüz sık kullanılan bir öge yok",
"Files and folders you mark as favorite will show up here" : "Sık kullanılanlara eklediğiniz dosya ve klasörler burada görüntülenir",
"List of recently modified files and folders." : "Son değiştirilen dosya ve klasörlerin listesi.",
"No recently modified files" : "Yakınlarda değiştirilmiş bir dosya yok",
"Files and folders you recently modified will show up here." : "Son zamanlarda değiştirdiğiniz dosya ve klasörler burada görüntülenir.",
"Toggle %1$s sublist" : "%1$s alt listesini aç/kapat",
"Toggle grid view" : "Tablo görünümünü değiştir",
"No entries found in this folder" : "Bu klasörde herhangi bir kayıt bulunamadı",
@ -269,6 +273,7 @@
"Deleted shares" : "Silinmiş paylaşımlar",
"Pending shares" : "Bekleyen paylaşımlar",
"Open folder {name}" : "{name} klasörünü aç",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Başarımı olumsuz etkilememek için listenin tümü görüntülenmiyor. Listede ilerledikçe dosyalar görüntülenecek.",
"Search for an account" : "Hesap ara",
"No files or folders have been deleted yet" : "Henüz silinmiş bir dosya ya da klasör yok"
},"pluralForm" :"nplurals=2; plural=(n > 1);"

@ -193,7 +193,6 @@ OC.L10N.register(
"ascending" : "за зростанням",
"descending" : "за спаданням",
"Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Storage informations" : "Інформація про сховище",
"{usedQuotaByte} used" : "{usedQuotaByte} використано",
"{relative}% used" : "{relative}% використано",
@ -270,6 +269,7 @@ OC.L10N.register(
"Deleted shares" : "Більше недоступні",
"Pending shares" : "Запити на доступ",
"Open folder {name}" : "Відкрити каталог {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Search for an account" : "Пошук облікового запису",
"No files or folders have been deleted yet" : "Поки жодного каталогу чи файлу не було вилучено"
},

@ -191,7 +191,6 @@
"ascending" : "за зростанням",
"descending" : "за спаданням",
"Sort list by {column} ({direction})" : "Впорядкувати список за {column} ({direction})",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Storage informations" : "Інформація про сховище",
"{usedQuotaByte} used" : "{usedQuotaByte} використано",
"{relative}% used" : "{relative}% використано",
@ -268,6 +267,7 @@
"Deleted shares" : "Більше недоступні",
"Pending shares" : "Запити на доступ",
"Open folder {name}" : "Відкрити каталог {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "Через обмеження, пов'язані з потужністю, список не показується повністю. Файли показуватимуться, щойно ви рухатиметеся списком.",
"Search for an account" : "Пошук облікового запису",
"No files or folders have been deleted yet" : "Поки жодного каталогу чи файлу не було вилучено"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"

@ -193,7 +193,6 @@ OC.L10N.register(
"ascending" : "升序",
"descending" : "降序",
"Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Storage informations" : "存储信息",
"{usedQuotaByte} used" : "{usedQuotaByte} 已使用",
"{relative}% used" : "{relative}% 已使用",
@ -270,6 +269,7 @@ OC.L10N.register(
"Deleted shares" : "已删除的共享",
"Pending shares" : "待定共享",
"Open folder {name}" : "打开文件夹 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Search for an account" : "搜索一个账户",
"No files or folders have been deleted yet" : "尚未删除任何文件或文件夹"
},

@ -191,7 +191,6 @@
"ascending" : "升序",
"descending" : "降序",
"Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序列表",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Storage informations" : "存储信息",
"{usedQuotaByte} used" : "{usedQuotaByte} 已使用",
"{relative}% used" : "{relative}% 已使用",
@ -268,6 +267,7 @@
"Deleted shares" : "已删除的共享",
"Pending shares" : "待定共享",
"Open folder {name}" : "打开文件夹 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "因为性能原因,该列表没有完全加载。这些文件将会在您浏览列表的时候加载。",
"Search for an account" : "搜索一个账户",
"No files or folders have been deleted yet" : "尚未删除任何文件或文件夹"
},"pluralForm" :"nplurals=1; plural=0;"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "降",
"Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Storage informations" : "儲存資訊",
"{usedQuotaByte} used" : "已使用 {usedQuotaByte} ",
"{relative}% used" : "已使用 {relative}%",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "無法從模板創建新檔案",
"Delete permanently" : "永久刪除",
"Open folder {displayName}" : "打開資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中打開",
"Open details" : "開啟細節",
"Set up templates folder" : "設定範本資料夾",
"Templates" : "模板",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of recently modified files and folders." : "最近修改的檔案和資料夾的清單。",
"No recently modified files" : "近期無修改檔案",
"Files and folders you recently modified will show up here." : "您最近修改的檔案和資料夾將顯示在此處。",
"Toggle %1$s sublist" : "切換 %1$s 子列表",
"Toggle grid view" : "切換網格檢視",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "已刪除的分享",
"Pending shares" : "等待分享",
"Open folder {name}" : "打開資料夾 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋賬號",
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾"
},

@ -192,7 +192,7 @@
"descending" : "降",
"Sort list by {column} ({direction})" : "按 {column} ({direction}) 排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Storage informations" : "儲存資訊",
"{usedQuotaByte} used" : "已使用 {usedQuotaByte} ",
"{relative}% used" : "已使用 {relative}%",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "無法從模板創建新檔案",
"Delete permanently" : "永久刪除",
"Open folder {displayName}" : "打開資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中打開",
"Open details" : "開啟細節",
"Set up templates folder" : "設定範本資料夾",
"Templates" : "模板",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of recently modified files and folders." : "最近修改的檔案和資料夾的清單。",
"No recently modified files" : "近期無修改檔案",
"Files and folders you recently modified will show up here." : "您最近修改的檔案和資料夾將顯示在此處。",
"Toggle %1$s sublist" : "切換 %1$s 子列表",
"Toggle grid view" : "切換網格檢視",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
@ -269,6 +273,7 @@
"Deleted shares" : "已刪除的分享",
"Pending shares" : "等待分享",
"Open folder {name}" : "打開資料夾 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於性能考慮,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋賬號",
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾"
},"pluralForm" :"nplurals=1; plural=0;"

@ -194,7 +194,7 @@ OC.L10N.register(
"descending" : "遞減",
"Sort list by {column} ({direction})" : "按 {column}{direction})排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Storage informations" : "儲存空間資訊",
"{usedQuotaByte} used" : "已使用 {usedQuotaByte}",
"{relative}% used" : "已使用 {relative}%",
@ -240,6 +240,7 @@ OC.L10N.register(
"Unable to create new file from template" : "無法從範本建立新檔案",
"Delete permanently" : "永久刪除",
"Open folder {displayName}" : "開啟資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中開啟",
"Open details" : "開啟細節",
"Set up templates folder" : "設定範本資料夾",
"Templates" : "範本",
@ -248,6 +249,9 @@ OC.L10N.register(
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of recently modified files and folders." : "最近修改的檔案與資料夾的清單。",
"No recently modified files" : "近期無修改檔案",
"Files and folders you recently modified will show up here." : "您最近修改的檔案與資料夾將會顯示在此處。",
"Toggle %1$s sublist" : "切換 %1$s 子列表",
"Toggle grid view" : "切換網格檢視",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
@ -271,6 +275,7 @@ OC.L10N.register(
"Deleted shares" : "已刪除的分享",
"Pending shares" : "等待分享",
"Open folder {name}" : "開啟資料夾 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋帳號",
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾"
},

@ -192,7 +192,7 @@
"descending" : "遞減",
"Sort list by {column} ({direction})" : "按 {column}{direction})排序清單",
"List of files and folders." : "檔案與資料夾清單。",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Storage informations" : "儲存空間資訊",
"{usedQuotaByte} used" : "已使用 {usedQuotaByte}",
"{relative}% used" : "已使用 {relative}%",
@ -238,6 +238,7 @@
"Unable to create new file from template" : "無法從範本建立新檔案",
"Delete permanently" : "永久刪除",
"Open folder {displayName}" : "開啟資料夾 {displayName}",
"Open in Files" : "在「檔案」應用程式中開啟",
"Open details" : "開啟細節",
"Set up templates folder" : "設定範本資料夾",
"Templates" : "範本",
@ -246,6 +247,9 @@
"List of favorites files and folders." : "最愛檔案與資料夾的清單。",
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of recently modified files and folders." : "最近修改的檔案與資料夾的清單。",
"No recently modified files" : "近期無修改檔案",
"Files and folders you recently modified will show up here." : "您最近修改的檔案與資料夾將會顯示在此處。",
"Toggle %1$s sublist" : "切換 %1$s 子列表",
"Toggle grid view" : "切換網格檢視",
"No entries found in this folder" : "在此資料夾中沒有任何項目",
@ -269,6 +273,7 @@
"Deleted shares" : "已刪除的分享",
"Pending shares" : "等待分享",
"Open folder {name}" : "開啟資料夾 {name}",
"This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list." : "出於效能考量,此清單未完全呈現。檔案將在您瀏覽清單時呈現。",
"Search for an account" : "搜尋帳號",
"No files or folders have been deleted yet" : "尚未刪除任何檔案或資料夾"
},"pluralForm" :"nplurals=1; plural=0;"

@ -42,7 +42,6 @@ use OCA\Files\Controller\ApiController;
use OCA\Files\DirectEditingCapabilities;
use OCA\Files\Event\LoadAdditionalScriptsEvent;
use OCA\Files\Event\LoadSidebar;
use OCA\Files\Listener\LegacyLoadAdditionalScriptsAdapter;
use OCA\Files\Listener\LoadSidebarListener;
use OCA\Files\Listener\RenderReferenceEventListener;
use OCA\Files\Notification\Notifier;
@ -57,6 +56,7 @@ use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\Collaboration\Reference\RenderReferenceEvent;
use OCP\Collaboration\Resources\IProviderManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IPreview;
@ -110,7 +110,7 @@ class Application extends App implements IBootstrap {
$c->get(IActivityManager::class),
$c->get(ITagManager::class)->load(self::APP_ID),
$server->getUserFolder(),
$server->getEventDispatcher()
$c->get(IEventDispatcher::class),
);
});
@ -120,7 +120,6 @@ class Application extends App implements IBootstrap {
$context->registerCapability(Capabilities::class);
$context->registerCapability(DirectEditingCapabilities::class);
$context->registerEventListener(LoadAdditionalScriptsEvent::class, LegacyLoadAdditionalScriptsAdapter::class);
$context->registerEventListener(LoadSidebar::class, LoadSidebarListener::class);
$context->registerEventListener(RenderReferenceEvent::class, RenderReferenceEventListener::class);
@ -163,15 +162,6 @@ class Application extends App implements IBootstrap {
'name' => $l10n->t('All files')
];
});
\OCA\Files\App::getNavigationManager()->add(function () use ($l10n) {
return [
'id' => 'recent',
'appname' => 'files',
'script' => 'recentlist.php',
'order' => 2,
'name' => $l10n->t('Recent')
];
});
}
private function registerHooks(): void {

@ -28,12 +28,15 @@ namespace OCA\Files\Collaboration\Resources;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Server;
use OCP\Collaboration\Resources\IManager;
use OCP\Share\Events\ShareCreatedEvent;
use OCP\Share\Events\ShareDeletedEvent;
use OCP\Share\Events\ShareDeletedFromSelfEvent;
class Listener {
public static function register(IEventDispatcher $dispatcher): void {
$dispatcher->addListener('OCP\Share::postShare', [self::class, 'shareModification']);
$dispatcher->addListener('OCP\Share::postUnshare', [self::class, 'shareModification']);
$dispatcher->addListener('OCP\Share::postUnshareFromSelf', [self::class, 'shareModification']);
$dispatcher->addListener(ShareCreatedEvent::class, [self::class, 'shareModification']);
$dispatcher->addListener(ShareDeletedEvent::class, [self::class, 'shareModification']);
$dispatcher->addListener(ShareDeletedFromSelfEvent::class, [self::class, 'shareModification']);
}
public static function shareModification(): void {

@ -35,10 +35,9 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
class Delete extends Command {
private FileUtils $fileUtils;
public function __construct(FileUtils $fileUtils) {
$this->fileUtils = $fileUtils;
public function __construct(
private FileUtils $fileUtils,
) {
parent::__construct();
}
@ -58,7 +57,7 @@ class Delete extends Command {
if (!$node) {
$output->writeln("<error>file $fileInput not found</error>");
return 1;
return self::FAILURE;
}
$deleteConfirmed = $force;
@ -72,7 +71,7 @@ class Delete extends Command {
$question = new ConfirmationQuestion("<info>$fileInput</info> in a shared file, do you want to unshare the file from <info>$user</info> instead of deleting the source file? [Y/n] ", true);
if ($helper->ask($input, $output, $question)) {
$storage->unshareStorage();
return 0;
return self::SUCCESS;
} else {
$node = $storage->getShare()->getNode();
$output->writeln("");
@ -110,7 +109,6 @@ class Delete extends Command {
}
}
return 0;
return self::SUCCESS;
}
}

@ -35,17 +35,13 @@ use Symfony\Component\Console\Output\OutputInterface;
class DeleteOrphanedFiles extends Command {
public const CHUNK_SIZE = 200;
/**
* @var IDBConnection
*/
protected $connection;
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
public function __construct(
protected IDBConnection $connection,
) {
parent::__construct();
}
protected function configure() {
protected function configure(): void {
$this
->setName('files:cleanup')
->setDescription('cleanup filecache');
@ -81,10 +77,10 @@ class DeleteOrphanedFiles extends Command {
$deletedMounts = $this->cleanupOrphanedMounts();
$output->writeln("$deletedMounts orphaned mount entries deleted");
return 0;
return self::SUCCESS;
}
private function cleanupOrphanedMounts() {
private function cleanupOrphanedMounts(): int {
$deletedEntries = 0;
$query = $this->connection->getQueryBuilder();

@ -32,10 +32,9 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Get extends Command {
private FileUtils $fileUtils;
public function __construct(FileUtils $fileUtils) {
$this->fileUtils = $fileUtils;
public function __construct(
private FileUtils $fileUtils,
) {
parent::__construct();
}
@ -54,36 +53,35 @@ class Get extends Command {
if (!$node) {
$output->writeln("<error>file $fileInput not found</error>");
return 1;
return self::FAILURE;
}
if ($node instanceof File) {
$isTTY = stream_isatty(STDOUT);
if ($outputName === null && $isTTY && $node->getMimePart() !== 'text') {
$output->writeln([
"<error>Warning: Binary output can mess up your terminal</error>",
" Use <info>occ files:get $fileInput -</info> to output it to the terminal anyway",
" Or <info>occ files:get $fileInput <FILE></info> to save to a file instead"
]);
return 1;
}
$source = $node->fopen('r');
if (!$source) {
$output->writeln("<error>Failed to open $fileInput for reading</error>");
return 1;
}
$target = ($outputName === null || $outputName === '-') ? STDOUT : fopen($outputName, 'w');
if (!$target) {
$output->writeln("<error>Failed to open $outputName for reading</error>");
return 1;
}
stream_copy_to_stream($source, $target);
return 0;
} else {
if (!($node instanceof File)) {
$output->writeln("<error>$fileInput is a directory</error>");
return 1;
return self::FAILURE;
}
$isTTY = stream_isatty(STDOUT);
if ($outputName === null && $isTTY && $node->getMimePart() !== 'text') {
$output->writeln([
"<error>Warning: Binary output can mess up your terminal</error>",
" Use <info>occ files:get $fileInput -</info> to output it to the terminal anyway",
" Or <info>occ files:get $fileInput <FILE></info> to save to a file instead"
]);
return self::FAILURE;
}
$source = $node->fopen('r');
if (!$source) {
$output->writeln("<error>Failed to open $fileInput for reading</error>");
return self::FAILURE;
}
$target = ($outputName === null || $outputName === '-') ? STDOUT : fopen($outputName, 'w');
if (!$target) {
$output->writeln("<error>Failed to open $outputName for reading</error>");
return self::FAILURE;
}
}
stream_copy_to_stream($source, $target);
return self::SUCCESS;
}
}

@ -34,10 +34,9 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
class Delete extends Command {
private ObjectUtil $objectUtils;
public function __construct(ObjectUtil $objectUtils) {
$this->objectUtils = $objectUtils;
public function __construct(
private ObjectUtil $objectUtils,
) {
parent::__construct();
}
@ -73,6 +72,6 @@ class Delete extends Command {
if ($helper->ask($input, $output, $question)) {
$objectStore->deleteObject($object);
}
return 0;
return self::SUCCESS;
}
}

@ -31,10 +31,9 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Get extends Command {
private ObjectUtil $objectUtils;
public function __construct(ObjectUtil $objectUtils) {
$this->objectUtils = $objectUtils;
public function __construct(
private ObjectUtil $objectUtils,
) {
parent::__construct();
}
@ -52,29 +51,29 @@ class Get extends Command {
$outputName = $input->getArgument('output');
$objectStore = $this->objectUtils->getObjectStore($input->getOption("bucket"), $output);
if (!$objectStore) {
return 1;
return self::FAILURE;
}
if (!$objectStore->objectExists($object)) {
$output->writeln("<error>Object $object does not exist</error>");
return 1;
} else {
try {
$source = $objectStore->readObject($object);
} catch (\Exception $e) {
$msg = $e->getMessage();
$output->writeln("<error>Failed to read $object from object store: $msg</error>");
return 1;
}
$target = $outputName === '-' ? STDOUT : fopen($outputName, 'w');
if (!$target) {
$output->writeln("<error>Failed to open $outputName for writing</error>");
return 1;
}
return self::FAILURE;
}
stream_copy_to_stream($source, $target);
return 0;
try {
$source = $objectStore->readObject($object);
} catch (\Exception $e) {
$msg = $e->getMessage();
$output->writeln("<error>Failed to read $object from object store: $msg</error>");
return self::FAILURE;
}
$target = $outputName === '-' ? STDOUT : fopen($outputName, 'w');
if (!$target) {
$output->writeln("<error>Failed to open $outputName for writing</error>");
return self::FAILURE;
}
stream_copy_to_stream($source, $target);
return self::SUCCESS;
}
}

@ -30,12 +30,10 @@ use OCP\IDBConnection;
use Symfony\Component\Console\Output\OutputInterface;
class ObjectUtil {
private IConfig $config;
private IDBConnection $connection;
public function __construct(IConfig $config, IDBConnection $connection) {
$this->config = $config;
$this->connection = $connection;
public function __construct(
private IConfig $config,
private IDBConnection $connection,
) {
}
private function getObjectStoreConfig(): ?array {
@ -50,9 +48,9 @@ class ObjectUtil {
$config['multibucket'] = false;
}
return $config;
} else {
return null;
}
return null;
}
public function getObjectStore(?string $bucket, OutputInterface $output): ?IObjectStore {
@ -91,20 +89,21 @@ class ObjectUtil {
* Check if an object is referenced in the database
*/
public function objectExistsInDb(string $object): int|false {
if (str_starts_with($object, 'urn:oid:')) {
$fileId = (int)substr($object, strlen('urn:oid:'));
$query = $this->connection->getQueryBuilder();
$query->select('fileid')
->from('filecache')
->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)));
$result = $query->executeQuery();
if ($result->fetchOne() !== false) {
return $fileId;
} else {
return false;
}
} else {
if (!str_starts_with($object, 'urn:oid:')) {
return false;
}
$fileId = (int)substr($object, strlen('urn:oid:'));
$query = $this->connection->getQueryBuilder();
$query->select('fileid')
->from('filecache')
->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)));
$result = $query->executeQuery();
if ($result->fetchOne() === false) {
return false;
}
return $fileId;
}
}

@ -33,12 +33,10 @@ use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Question\ConfirmationQuestion;
class Put extends Command {
private ObjectUtil $objectUtils;
private IMimeTypeDetector $mimeTypeDetector;
public function __construct(ObjectUtil $objectUtils, IMimeTypeDetector $mimeTypeDetector) {
$this->objectUtils = $objectUtils;
$this->mimeTypeDetector = $mimeTypeDetector;
public function __construct(
private ObjectUtil $objectUtils,
private IMimeTypeDetector $mimeTypeDetector,
) {
parent::__construct();
}
@ -75,10 +73,10 @@ class Put extends Command {
$source = $inputName === '-' ? STDIN : fopen($inputName, 'r');
if (!$source) {
$output->writeln("<error>Failed to open $inputName</error>");
return 1;
return self::FAILURE;
}
$objectStore->writeObject($object, $source, $this->mimeTypeDetector->detectPath($inputName));
return 0;
return self::SUCCESS;
}
}

@ -34,12 +34,10 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Put extends Command {
private FileUtils $fileUtils;
private IRootFolder $rootFolder;
public function __construct(FileUtils $fileUtils, IRootFolder $rootFolder) {
$this->fileUtils = $fileUtils;
$this->rootFolder = $rootFolder;
public function __construct(
private FileUtils $fileUtils,
private IRootFolder $rootFolder,
) {
parent::__construct();
}
@ -58,29 +56,28 @@ class Put extends Command {
if ($node instanceof Folder) {
$output->writeln("<error>$fileOutput is a folder</error>");
return 1;
return self::FAILURE;
}
if (!$node and is_numeric($fileOutput)) {
$output->writeln("<error>$fileOutput not found</error>");
return 1;
return self::FAILURE;
}
$source = ($inputName === null || $inputName === '-') ? STDIN : fopen($inputName, 'r');
if (!$source) {
$output->writeln("<error>Failed to open $inputName</error>");
return 1;
return self::FAILURE;
}
if ($node instanceof File) {
$target = $node->fopen('w');
if (!$target) {
$output->writeln("<error>Failed to open $fileOutput</error>");
return 1;
return self::FAILURE;
}
stream_copy_to_stream($source, $target);
} else {
$this->rootFolder->newFile($fileOutput, $source);
}
return 0;
return self::SUCCESS;
}
}

@ -33,17 +33,13 @@ use Symfony\Component\Console\Output\OutputInterface;
class RepairTree extends Command {
public const CHUNK_SIZE = 200;
/**
* @var IDBConnection
*/
protected $connection;
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
public function __construct(
protected IDBConnection $connection,
) {
parent::__construct();
}
protected function configure() {
protected function configure(): void {
$this
->setName('files:repair-tree')
->setDescription('Try and repair malformed filesystem tree structures')
@ -90,7 +86,7 @@ class RepairTree extends Command {
$this->connection->commit();
}
return 0;
return self::SUCCESS;
}
private function getFileId(int $storage, string $path) {
@ -102,7 +98,7 @@ class RepairTree extends Command {
return $query->execute()->fetch(\PDO::FETCH_COLUMN);
}
private function deleteById(int $fileId) {
private function deleteById(int $fileId): void {
$query = $this->connection->getQueryBuilder();
$query->delete('filecache')
->where($query->expr()->eq('fileid', $query->createNamedParameter($fileId)));

@ -57,7 +57,6 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Scan extends Base {
private IUserManager $userManager;
protected float $execTime = 0;
protected int $foldersCounter = 0;
protected int $filesCounter = 0;
@ -65,27 +64,18 @@ class Scan extends Base {
protected int $newCounter = 0;
protected int $updatedCounter = 0;
protected int $removedCounter = 0;
private IRootFolder $root;
private MetadataManager $metadataManager;
private IEventDispatcher $eventDispatcher;
private LoggerInterface $logger;
public function __construct(
IUserManager $userManager,
IRootFolder $rootFolder,
MetadataManager $metadataManager,
IEventDispatcher $eventDispatcher,
LoggerInterface $logger
private IUserManager $userManager,
private IRootFolder $rootFolder,
private MetadataManager $metadataManager,
private IEventDispatcher $eventDispatcher,
private LoggerInterface $logger,
) {
$this->userManager = $userManager;
parent::__construct();
$this->root = $rootFolder;
$this->metadataManager = $metadataManager;
$this->eventDispatcher = $eventDispatcher;
$this->logger = $logger;
}
protected function configure() {
protected function configure(): void {
parent::configure();
$this
@ -146,7 +136,7 @@ class Scan extends Base {
++$this->filesCounter;
$this->abortIfInterrupted();
if ($scanMetadata) {
$node = $this->root->get($path);
$node = $this->rootFolder->get($path);
if ($node instanceof File) {
$this->metadataManager->generateMetadata($node, false);
}
@ -203,7 +193,7 @@ class Scan extends Base {
}
}
public function filterHomeMount(IMountPoint $mountPoint) {
public function filterHomeMount(IMountPoint $mountPoint): bool {
// any mountpoint inside '/$user/files/'
return substr_count($mountPoint->getMountPoint(), '/') <= 3;
}
@ -224,7 +214,7 @@ class Scan extends Base {
$users_total = count($users);
if ($users_total === 0) {
$output->writeln('<error>Please specify the user id to scan, --all to scan for all users or --path=...</error>');
return 1;
return self::FAILURE;
}
$this->initTools($output);
@ -234,7 +224,7 @@ class Scan extends Base {
if (is_object($user)) {
$user = $user->getUID();
}
$path = $inputPath ? $inputPath : '/' . $user;
$path = $inputPath ?: '/' . $user;
++$user_count;
if ($this->userManager->userExists($user)) {
$output->writeln("Starting scan for user $user_count out of $users_total ($user)");
@ -253,13 +243,13 @@ class Scan extends Base {
}
$this->presentStats($output);
return 0;
return self::SUCCESS;
}
/**
* Initialises some useful tools for the Command
*/
protected function initTools(OutputInterface $output) {
protected function initTools(OutputInterface $output): void {
// Start the timer
$this->execTime = -microtime(true);
// Convert PHP errors to exceptions
@ -292,10 +282,7 @@ class Scan extends Base {
return true;
}
/**
* @param OutputInterface $output
*/
protected function presentStats(OutputInterface $output) {
protected function presentStats(OutputInterface $output): void {
// Stop the timer
$this->execTime += microtime(true);
@ -329,11 +316,9 @@ class Scan extends Base {
/**
* Formats microtime into a human readable format
*
* @return string
* Formats microtime into a human-readable format
*/
protected function formatExecTime() {
protected function formatExecTime(): string {
$secs = (int)round($this->execTime);
# convert seconds into HH:MM:SS form
return sprintf('%02d:%02d:%02d', (int)($secs / 3600), ((int)($secs / 60) % 60), $secs % 60);

@ -36,6 +36,7 @@ use OC\DB\ConnectionAdapter;
use OC\ForbiddenException;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\Files\StorageNotAvailableException;
use OCP\IConfig;
@ -46,26 +47,20 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class ScanAppData extends Base {
protected float $execTime = 0;
/** @var IRootFolder */
protected $root;
/** @var IConfig */
protected $config;
/** @var float */
protected $execTime = 0;
/** @var int */
protected $foldersCounter = 0;
/** @var int */
protected $filesCounter = 0;
public function __construct(IRootFolder $rootFolder, IConfig $config) {
parent::__construct();
protected int $foldersCounter = 0;
protected int $filesCounter = 0;
$this->root = $rootFolder;
$this->config = $config;
public function __construct(
protected IRootFolder $rootFolder,
protected IConfig $config,
) {
parent::__construct();
}
protected function configure() {
protected function configure(): void {
parent::configure();
$this
@ -77,10 +72,11 @@ class ScanAppData extends Base {
protected function scanFiles(OutputInterface $output, string $folder): int {
try {
/** @var \OCP\Files\Folder $appData */
$appData = $this->getAppDataFolder();
} catch (NotFoundException $e) {
$output->writeln('<error>NoAppData folder found</error>');
return 1;
return self::FAILURE;
}
if ($folder !== '') {
@ -88,7 +84,7 @@ class ScanAppData extends Base {
$appData = $appData->get($folder);
} catch (NotFoundException $e) {
$output->writeln('<error>Could not find folder: ' . $folder . '</error>');
return 1;
return self::FAILURE;
}
}
@ -126,21 +122,21 @@ class ScanAppData extends Base {
} catch (ForbiddenException $e) {
$output->writeln('<error>Storage not writable</error>');
$output->writeln('<info>Make sure you\'re running the scan command only as the user the web server runs as</info>');
return 1;
return self::FAILURE;
} catch (InterruptedException $e) {
# exit the function if ctrl-c has been pressed
$output->writeln('<info>Interrupted by user</info>');
return 1;
return self::FAILURE;
} catch (NotFoundException $e) {
$output->writeln('<error>Path not found: ' . $e->getMessage() . '</error>');
return 1;
return self::FAILURE;
} catch (\Exception $e) {
$output->writeln('<error>Exception during scan: ' . $e->getMessage() . '</error>');
$output->writeln('<error>' . $e->getTraceAsString() . '</error>');
return 1;
return self::FAILURE;
}
return 0;
return self::SUCCESS;
}
@ -167,7 +163,7 @@ class ScanAppData extends Base {
/**
* Initialises some useful tools for the Command
*/
protected function initTools() {
protected function initTools(): void {
// Start the timer
$this->execTime = -microtime(true);
// Convert PHP errors to exceptions
@ -194,10 +190,7 @@ class ScanAppData extends Base {
throw new \ErrorException($message, 0, $severity, $file, $line);
}
/**
* @param OutputInterface $output
*/
protected function presentStats(OutputInterface $output) {
protected function presentStats(OutputInterface $output): void {
// Stop the timer
$this->execTime += microtime(true);
@ -213,9 +206,8 @@ class ScanAppData extends Base {
*
* @param string[] $headers
* @param string[] $rows
* @param OutputInterface $output
*/
protected function showSummary($headers, $rows, OutputInterface $output) {
protected function showSummary($headers, $rows, OutputInterface $output): void {
$niceDate = $this->formatExecTime();
if (!$rows) {
$rows = [
@ -233,11 +225,9 @@ class ScanAppData extends Base {
/**
* Formats microtime into a human readable format
*
* @return string
* Formats microtime into a human-readable format
*/
protected function formatExecTime() {
protected function formatExecTime(): string {
$secs = round($this->execTime);
# convert seconds into HH:MM:SS form
return sprintf('%02d:%02d:%02d', (int)($secs / 3600), ((int)($secs / 60) % 60), (int)$secs % 60);
@ -263,16 +253,15 @@ class ScanAppData extends Base {
}
/**
* @return \OCP\Files\Folder
* @throws NotFoundException
*/
private function getAppDataFolder() {
private function getAppDataFolder(): Node {
$instanceId = $this->config->getSystemValue('instanceid', null);
if ($instanceId === null) {
throw new NotFoundException();
}
return $this->root->get('appdata_'.$instanceId);
return $this->rootFolder->get('appdata_'.$instanceId);
}
}

@ -46,26 +46,15 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class TransferOwnership extends Command {
/** @var IUserManager */
private $userManager;
/** @var OwnershipTransferService */
private $transferService;
/** @var IConfig */
private $config;
public function __construct(IUserManager $userManager,
OwnershipTransferService $transferService,
IConfig $config) {
public function __construct(
private IUserManager $userManager,
private OwnershipTransferService $transferService,
private IConfig $config,
) {
parent::__construct();
$this->userManager = $userManager;
$this->transferService = $transferService;
$this->config = $config;
}
protected function configure() {
protected function configure(): void {
$this
->setName('files:transfer-ownership')
->setDescription('All files and folders are moved to another user - outgoing shares and incoming user file shares (optionally) are moved as well.')
@ -107,7 +96,7 @@ class TransferOwnership extends Command {
if ($input->getArgument(('source-user')) === $input->getArgument('destination-user')) {
$output->writeln("<error>Ownership can't be transferred when Source and Destination users are the same user. Please check your input.</error>");
return 1;
return self::FAILURE;
}
$sourceUserObject = $this->userManager->get($input->getArgument('source-user'));
@ -115,12 +104,12 @@ class TransferOwnership extends Command {
if (!$sourceUserObject instanceof IUser) {
$output->writeln("<error>Unknown source user " . $input->getArgument('source-user') . "</error>");
return 1;
return self::FAILURE;
}
if (!$destinationUserObject instanceof IUser) {
$output->writeln("<error>Unknown destination user " . $input->getArgument('destination-user') . "</error>");
return 1;
return self::FAILURE;
}
try {
@ -137,13 +126,12 @@ class TransferOwnership extends Command {
$includeIncoming = $this->config->getSystemValue('transferIncomingShares', false);
if (gettype($includeIncoming) !== 'boolean') {
$output->writeln("<error> config.php: 'transfer-incoming-shares': wrong usage. Transfer aborted.</error>");
return 1;
return self::FAILURE;
}
break;
default:
$output->writeln("<error>Option --transfer-incoming-shares: wrong usage. Transfer aborted.</error>");
return 1;
break;
return self::FAILURE;
}
$this->transferService->transfer(
@ -157,9 +145,9 @@ class TransferOwnership extends Command {
);
} catch (TransferOwnershipException $e) {
$output->writeln("<error>" . $e->getMessage() . "</error>");
return $e->getCode() !== 0 ? $e->getCode() : 1;
return $e->getCode() !== 0 ? $e->getCode() : self::FAILURE;
}
return 0;
return self::SUCCESS;
}
}

@ -26,12 +26,13 @@ namespace OCA\Files\Service;
use OCA\Files\Activity\FavoriteProvider;
use OCP\Activity\IManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\NodeAddedToFavorite;
use OCP\Files\Events\NodeRemovedFromFavorite;
use OCP\Files\Folder;
use OCP\ITags;
use OCP\IUser;
use OCP\IUserSession;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Service class to manage tags on files.
@ -46,7 +47,7 @@ class TagService {
private $tagger;
/** @var Folder|null */
private $homeFolder;
/** @var EventDispatcherInterface */
/** @var IEventDispatcher */
private $dispatcher;
public function __construct(
@ -54,7 +55,7 @@ class TagService {
IManager $activityManager,
?ITags $tagger,
?Folder $homeFolder,
EventDispatcherInterface $dispatcher
IEventDispatcher $dispatcher,
) {
$this->userSession = $userSession;
$this->activityManager = $activityManager;
@ -120,12 +121,12 @@ class TagService {
return;
}
$eventName = $addToFavorite ? 'addFavorite' : 'removeFavorite';
$this->dispatcher->dispatch(self::class . '::' . $eventName, new GenericEvent(null, [
'userId' => $user->getUID(),
'fileId' => $fileId,
'path' => $path,
]));
if ($addToFavorite) {
$event = new NodeAddedToFavorite($user, $fileId, $path);
} else {
$event = new NodeRemovedFromFavorite($user, $fileId, $path);
}
$this->dispatcher->dispatchTyped($event);
$event = $this->activityManager->generateEvent();
try {

@ -0,0 +1,103 @@
/**
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import { action } from './openInFilesAction'
import { expect } from '@jest/globals'
import { File, Folder, Permission } from '@nextcloud/files'
import { DefaultType, FileAction } from '../../../files/src/services/FileAction'
import type { Navigation } from '../../../files/src/services/Navigation'
const view = {
id: 'files',
name: 'Files',
} as Navigation
const recentView = {
id: 'recent',
name: 'Recent',
} as Navigation
describe('Open in files action conditions tests', () => {
test('Default values', () => {
expect(action).toBeInstanceOf(FileAction)
expect(action.id).toBe('open-in-files-recent')
expect(action.displayName([], recentView)).toBe('Open in Files')
expect(action.iconSvgInline([], recentView)).toBe('')
expect(action.default).toBe(DefaultType.HIDDEN)
expect(action.order).toBe(-1000)
expect(action.inline).toBeUndefined()
})
})
describe('Open in files action enabled tests', () => {
test('Enabled with on valid view', () => {
expect(action.enabled).toBeDefined()
expect(action.enabled!([], recentView)).toBe(true)
})
test('Disabled on wrong view', () => {
expect(action.enabled).toBeDefined()
expect(action.enabled!([], view)).toBe(false)
})
})
describe('Open in files action execute tests', () => {
test('Open in files', async () => {
const goToRouteMock = jest.fn()
window.OCP = { Files: { Router: { goToRoute: goToRouteMock } } }
const file = new File({
id: 1,
source: 'https://cloud.domain.com/remote.php/dav/files/admin/Foo/foobar.txt',
owner: 'admin',
mime: 'text/plain',
root: '/files/admin',
permissions: Permission.ALL,
})
const exec = await action.exec(file, view, '/')
// Silent action
expect(exec).toBe(null)
expect(goToRouteMock).toBeCalledTimes(1)
expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { fileid: 1, dir: '/Foo', openfile: true })
})
test('Open in files with folder', async () => {
const goToRouteMock = jest.fn()
window.OCP = { Files: { Router: { goToRoute: goToRouteMock } } }
const file = new Folder({
id: 1,
source: 'https://cloud.domain.com/remote.php/dav/files/admin/Foo/Bar',
owner: 'admin',
root: '/files/admin',
permissions: Permission.ALL,
})
const exec = await action.exec(file, view, '/')
// Silent action
expect(exec).toBe(null)
expect(goToRouteMock).toBeCalledTimes(1)
expect(goToRouteMock).toBeCalledWith(null, { fileid: 1, view: 'files' }, { fileid: 1, dir: '/Foo/Bar', openfile: true })
})
})

@ -0,0 +1,57 @@
/**
* @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
import { translate as t } from '@nextcloud/l10n'
import { FileType, type Node } from '@nextcloud/files'
import { registerFileAction, FileAction, DefaultType } from '../../../files/src/services/FileAction'
/**
* TODO: Move away from a redirect and handle
* navigation straight out of the recent view
*/
export const action = new FileAction({
id: 'open-in-files-recent',
displayName: () => t('files', 'Open in Files'),
iconSvgInline: () => '',
enabled: (nodes, view) => view.id === 'recent',
async exec(node: Node) {
let dir = node.dirname
if (node.type === FileType.Folder) {
dir = dir + '/' + node.basename
}
window.OCP.Files.Router.goToRoute(
null, // use default route
{ view: 'files', fileid: node.fileid },
{ dir, fileid: node.fileid, openfile: true },
)
return null
},
// Before openFolderAction
order: -1000,
default: DefaultType.HIDDEN,
})
registerFileAction(action)

@ -23,7 +23,7 @@
<span />
</template>
<script>
<script lang="ts">
/**
* This component is used to render custom
* elements provided by an API. Vue doesn't allow
@ -46,20 +46,29 @@ export default {
required: true,
},
},
computed: {
element() {
return this.render(this.source, this.currentView)
},
},
watch: {
element() {
this.$el.replaceWith(this.element)
this.$el = this.element
source() {
this.updateRootElement()
},
currentView() {
this.updateRootElement()
},
},
mounted() {
this.$el.replaceWith(this.element)
this.$el = this.element
this.updateRootElement()
},
methods: {
async updateRootElement() {
const span = document.createElement('span') as HTMLSpanElement
this.$el.replaceWith(span)
this.$el = span
const element = await this.render(this.source, this.currentView)
if (element) {
this.$el.replaceWith(element)
this.$el = element
}
},
},
}
</script>

@ -78,21 +78,26 @@
<a v-show="!isRenaming"
ref="basename"
:aria-hidden="isRenaming"
class="files-list__row-name-link"
v-bind="linkTo"
@click="execDefaultAction">
<!-- File name -->
<span class="files-list__row-name-text">
<!-- Keep the displayName stuck to the extension to avoid whitespace rendering issues-->
<span class="files-list__row-name-" v-text="displayName" />
<span class="files-list__row-name-ext" v-text="source.extension" />
<span class="files-list__row-name-ext" v-text="extension" />
</span>
</a>
</td>
<!-- Actions -->
<td v-show="!isRenamingSmallScreen" :class="`files-list__row-actions-${uniqueId}`" class="files-list__row-actions">
<!-- Inline actions -->
<!-- TODO: implement CustomElementRender -->
<!-- Render actions -->
<CustomElementRender v-for="action in enabledRenderActions"
:key="action.id"
:current-view="currentView"
:render="action.renderInline"
:source="source" />
<!-- Menu actions -->
<NcActions v-if="active"
@ -100,7 +105,7 @@
:boundaries-element="boundariesElement"
:container="boundariesElement"
:disabled="source._loading"
:force-title="true"
:force-name="true"
:force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
:inline="enabledInlineActions.length"
:open.sync="openedMenu">
@ -152,8 +157,10 @@ import { debounce } from 'debounce'
import { emit } from '@nextcloud/event-bus'
import { formatFileSize, Permission } from '@nextcloud/files'
import { Fragment } from 'vue-frag'
import { extname } from 'path'
import { showError, showSuccess } from '@nextcloud/dialogs'
import { translate } from '@nextcloud/l10n'
import { generateUrl } from '@nextcloud/router'
import { vOnClickOutside } from '@vueuse/components'
import axios from '@nextcloud/axios'
import CancelablePromise from 'cancelable-promise'
@ -284,8 +291,15 @@ export default Vue.extend({
fileid() {
return this.source?.fileid?.toString?.()
},
extension() {
if (this.source.attributes?.displayName) {
return extname(this.source.attributes.displayName)
}
return this.source.extension || ''
},
displayName() {
const ext = (this.source.extension || '')
const ext = this.extension
const name = (this.source.attributes.displayName
|| this.source.basename)
@ -301,15 +315,16 @@ export default Vue.extend({
return formatFileSize(size, true)
},
sizeOpacity() {
const size = parseInt(this.source.size, 10) || 0
if (!size || size < 0) {
return 1
}
// Whatever theme is active, the contrast will pass WCAG AA
// with color main text over main background and an opacity of 0.7
const minOpacity = 0.7
const maxOpacitySize = 10 * 1024 * 1024
const size = parseInt(this.source.size, 10) || 0
if (!size || size < 0) {
return minOpacity
}
return minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)
},
@ -361,10 +376,16 @@ export default Vue.extend({
},
previewUrl() {
try {
const url = new URL(window.location.origin + this.source.attributes.previewUrl)
const previewUrl = this.source.attributes.previewUrl
|| generateUrl('/core/preview?fileId={fileid}', {
fileid: this.source.fileid,
})
const url = new URL(window.location.origin + previewUrl)
// Request tiny previews
url.searchParams.set('x', '32')
url.searchParams.set('y', '32')
// Handle cropping
url.searchParams.set('a', this.cropPreviews === true ? '0' : '1')
return url.href
@ -396,9 +417,17 @@ export default Vue.extend({
return this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))
},
// Enabled action that are displayed inline with a custom render function
enabledRenderActions() {
if (!this.active) {
return []
}
return this.enabledActions.filter(action => typeof action.renderInline === 'function')
},
// Default actions
enabledDefaultActions() {
return this.enabledActions.filter(action => !!action.default)
return this.enabledActions.filter(action => !!action?.default)
},
// Actions shown in the menu
@ -407,7 +436,7 @@ export default Vue.extend({
// Showing inline first for the NcActions inline prop
...this.enabledInlineActions,
// Then the rest
...this.enabledActions.filter(action => action.default !== DefaultType.HIDDEN),
...this.enabledActions.filter(action => action.default !== DefaultType.HIDDEN && typeof action.renderInline !== 'function'),
].filter((value, index, self) => {
// Then we filter duplicates to prevent inline actions to be shown twice
return index === self.findIndex(action => action.id === value.id)

@ -23,9 +23,9 @@
<th class="files-list__column files-list__row-actions-batch" colspan="2">
<NcActions ref="actionsMenu"
:disabled="!!loading || areSomeNodesLoading"
:force-title="true"
:force-name="true"
:inline="inlineActions"
:menu-title="inlineActions <= 1 ? t('files', 'Actions') : null"
:menu-name="inlineActions <= 1 ? t('files', 'Actions') : null"
:open.sync="openedMenu">
<NcActionButton v-for="action in enabledActions"
:key="action.id"

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save