Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 691aedd13e |
+1
-1
@@ -55,7 +55,7 @@ package-lock.json @nextcloud/server-dependabot
|
||||
/apps/user_ldap/appinfo/info.xml @come-nc @blizzz
|
||||
/apps/user_status/appinfo/info.xml @Antreesy @nickvergessen
|
||||
/apps/weather_status/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/webhook_listeners/appinfo/info.xml @janepie @julien-nc
|
||||
/apps/webhook_listeners/appinfo/info.xml @come-nc @julien-nc
|
||||
/apps/workflowengine/appinfo/info.xml @blizzz @juliusknorr
|
||||
|
||||
# Files frontend expertise
|
||||
|
||||
@@ -9,7 +9,6 @@ on:
|
||||
- ".github/workflows/phpunit-32bits.yml"
|
||||
- "tests/phpunit-autotest.xml"
|
||||
- "lib/private/Snowflake/*"
|
||||
- "tests/lib/Preview/PreviewMapperTest.php"
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "15 1 * * 1-6"
|
||||
|
||||
@@ -129,6 +129,9 @@ jobs:
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
env:
|
||||
DB_ROOT_USER: root
|
||||
DB_ROOT_PASS: rootpassword
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
|
||||
@@ -129,6 +129,9 @@ jobs:
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
env:
|
||||
DB_ROOT_USER: root
|
||||
DB_ROOT_PASS: rootpassword
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
|
||||
@@ -13,34 +13,10 @@ concurrency:
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/lib/**'
|
||||
- '**/tests/**'
|
||||
- '**/vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
strict:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.src != 'false' && github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -67,17 +43,3 @@ jobs:
|
||||
- name: Show changes
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, strict]
|
||||
|
||||
if: always()
|
||||
|
||||
name: rector-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.strict.result != 'success' }}; then exit 1; fi
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: f257bfe47e...e1dc48ae9d
+27
-32
@@ -1,37 +1,32 @@
|
||||
OC.L10N.register(
|
||||
"comments",
|
||||
{
|
||||
"Comments" : "კომენტარები",
|
||||
"You commented" : "თქვენი კომენტარი",
|
||||
"{author} commented" : "{author}-ის კომენტარი",
|
||||
"You commented on %1$s" : "თქვენი კომენტარი %1$s-ზე",
|
||||
"You commented on {file}" : "თქვენი კომენტარი {file}-ზე",
|
||||
"%1$s commented on %2$s" : "%1$s-მა დატოვა კომენტარი %2$s-ზე",
|
||||
"{author} commented on {file}" : "{author}-მა დატოვა კომენტარი {file}-ზე",
|
||||
"<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებისთვის",
|
||||
"Files" : "ფაილები",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "თქვენ გახსენეს \"{file}\"-ის კომენტარში ანგარიშიდან, რომელიც მის შემდეგ წაიშალა",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user}-მა გახსენათ კომენტარში ფაილზე \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files აპის დამატება ფაილებზე კომენტარების დასამატებლად",
|
||||
"Edit comment" : "კომენტარის ჩასწორება",
|
||||
"Delete comment" : "კომენტარის წაშლა",
|
||||
"Cancel edit" : "ჩასწორების გაუქმება",
|
||||
"New comment" : "ახალი კომენტარი",
|
||||
"Write a comment …" : "კომენტარის დაწერა …",
|
||||
"Post comment" : "კომენტარის დაპოსტვა",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ ხსენებისთვის, : ემოჯისთვის, / ჭკვიანი ამრჩევისთვის",
|
||||
"Could not reload comments" : "კომენტარების თავიდან ჩატვირთვა შეუძლებელია",
|
||||
"Failed to mark comments as read" : "კომენტარების წაკითხულად მონიშვნა ჩავარდა",
|
||||
"Unable to load the comments list" : "კომენტარების სიის ჩატვირთვა ჩავარდა",
|
||||
"No comments yet, start the conversation!" : "ჯერ კომენტარები არაა. დაიწყეთ საუბარი!",
|
||||
"No more messages" : "მეტი შეტყობინება აღარაა",
|
||||
"Retry" : "თავიდან ცდა",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 ახალი კომენტარი","{unread} ახალი კომენტარი"],
|
||||
"Comment" : "კომენტარი",
|
||||
"An error occurred while trying to edit the comment" : "კომენტარის ჩასწორებისას აღმოჩენილია შეცდომა",
|
||||
"Comment deleted" : "კომენტარი წაიშალა",
|
||||
"An error occurred while trying to delete the comment" : "კომენტარის წაშლისას აღმოჩენილია შეცდომა",
|
||||
"An error occurred while trying to create the comment" : "კომენტარის შექმნისას აღმოჩენილია შეცდომა",
|
||||
"Write a comment …" : "კომენტარის დაწერა …"
|
||||
"Comments" : "Comments",
|
||||
"You commented" : "You commented",
|
||||
"{author} commented" : "{author} commented",
|
||||
"You commented on %1$s" : "You commented on %1$s",
|
||||
"You commented on {file}" : "You commented on {file}",
|
||||
"%1$s commented on %2$s" : "%1$s commented on %2$s",
|
||||
"{author} commented on {file}" : "{author} commented on {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mentioned you in a comment on \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files app plugin to add comments to files",
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
"Failed to mark comments as read" : "Failed to mark comments as read",
|
||||
"Unable to load the comments list" : "Unable to load the comments list",
|
||||
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
|
||||
"No more messages" : "No more messages",
|
||||
"Retry" : "Retry",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"],
|
||||
"Comment" : "Comment",
|
||||
"An error occurred while trying to edit the comment" : "An error occurred while trying to edit the comment",
|
||||
"Comment deleted" : "Comment deleted",
|
||||
"An error occurred while trying to delete the comment" : "An error occurred while trying to delete the comment",
|
||||
"An error occurred while trying to create the comment" : "An error occurred while trying to create the comment"
|
||||
},
|
||||
"nplurals=2; plural=(n!=1);");
|
||||
|
||||
+27
-32
@@ -1,35 +1,30 @@
|
||||
{ "translations": {
|
||||
"Comments" : "კომენტარები",
|
||||
"You commented" : "თქვენი კომენტარი",
|
||||
"{author} commented" : "{author}-ის კომენტარი",
|
||||
"You commented on %1$s" : "თქვენი კომენტარი %1$s-ზე",
|
||||
"You commented on {file}" : "თქვენი კომენტარი {file}-ზე",
|
||||
"%1$s commented on %2$s" : "%1$s-მა დატოვა კომენტარი %2$s-ზე",
|
||||
"{author} commented on {file}" : "{author}-მა დატოვა კომენტარი {file}-ზე",
|
||||
"<strong>Comments</strong> for files" : "<strong>კომენტარები</strong> ფაილებისთვის",
|
||||
"Files" : "ფაილები",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "თქვენ გახსენეს \"{file}\"-ის კომენტარში ანგარიშიდან, რომელიც მის შემდეგ წაიშალა",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user}-მა გახსენათ კომენტარში ფაილზე \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files აპის დამატება ფაილებზე კომენტარების დასამატებლად",
|
||||
"Edit comment" : "კომენტარის ჩასწორება",
|
||||
"Delete comment" : "კომენტარის წაშლა",
|
||||
"Cancel edit" : "ჩასწორების გაუქმება",
|
||||
"New comment" : "ახალი კომენტარი",
|
||||
"Write a comment …" : "კომენტარის დაწერა …",
|
||||
"Post comment" : "კომენტარის დაპოსტვა",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ ხსენებისთვის, : ემოჯისთვის, / ჭკვიანი ამრჩევისთვის",
|
||||
"Could not reload comments" : "კომენტარების თავიდან ჩატვირთვა შეუძლებელია",
|
||||
"Failed to mark comments as read" : "კომენტარების წაკითხულად მონიშვნა ჩავარდა",
|
||||
"Unable to load the comments list" : "კომენტარების სიის ჩატვირთვა ჩავარდა",
|
||||
"No comments yet, start the conversation!" : "ჯერ კომენტარები არაა. დაიწყეთ საუბარი!",
|
||||
"No more messages" : "მეტი შეტყობინება აღარაა",
|
||||
"Retry" : "თავიდან ცდა",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 ახალი კომენტარი","{unread} ახალი კომენტარი"],
|
||||
"Comment" : "კომენტარი",
|
||||
"An error occurred while trying to edit the comment" : "კომენტარის ჩასწორებისას აღმოჩენილია შეცდომა",
|
||||
"Comment deleted" : "კომენტარი წაიშალა",
|
||||
"An error occurred while trying to delete the comment" : "კომენტარის წაშლისას აღმოჩენილია შეცდომა",
|
||||
"An error occurred while trying to create the comment" : "კომენტარის შექმნისას აღმოჩენილია შეცდომა",
|
||||
"Write a comment …" : "კომენტარის დაწერა …"
|
||||
"Comments" : "Comments",
|
||||
"You commented" : "You commented",
|
||||
"{author} commented" : "{author} commented",
|
||||
"You commented on %1$s" : "You commented on %1$s",
|
||||
"You commented on {file}" : "You commented on {file}",
|
||||
"%1$s commented on %2$s" : "%1$s commented on %2$s",
|
||||
"{author} commented on {file}" : "{author} commented on {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mentioned you in a comment on \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Files app plugin to add comments to files",
|
||||
"Edit comment" : "Edit comment",
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
"Failed to mark comments as read" : "Failed to mark comments as read",
|
||||
"Unable to load the comments list" : "Unable to load the comments list",
|
||||
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
|
||||
"No more messages" : "No more messages",
|
||||
"Retry" : "Retry",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 new comment","{unread} new comments"],
|
||||
"Comment" : "Comment",
|
||||
"An error occurred while trying to edit the comment" : "An error occurred while trying to edit the comment",
|
||||
"Comment deleted" : "Comment deleted",
|
||||
"An error occurred while trying to delete the comment" : "An error occurred while trying to delete the comment",
|
||||
"An error occurred while trying to create the comment" : "An error occurred while trying to create the comment"
|
||||
},"pluralForm" :"nplurals=2; plural=(n!=1);"
|
||||
}
|
||||
@@ -34,8 +34,7 @@ class LoadSidebarScripts implements IEventListener {
|
||||
$this->commentsManager->load();
|
||||
|
||||
$this->initialState->provideInitialState('activityEnabled', $this->appManager->isEnabledForUser('activity'));
|
||||
// Add comments sidebar tab script/style
|
||||
Util::addStyle(Application::APP_ID, 'comments-tab');
|
||||
// Add comments sidebar tab script
|
||||
Util::addScript(Application::APP_ID, 'comments-tab', 'files');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import type { IFolder, IView } from '@nextcloud/files'
|
||||
|
||||
import { File, Permission } from '@nextcloud/files'
|
||||
import { describe, expect, test, vi } from 'vitest'
|
||||
import logger from '../logger.ts'
|
||||
import logger from '../logger.js'
|
||||
import { action } from './inlineUnreadCommentsAction.ts'
|
||||
|
||||
const view = {
|
||||
|
||||
@@ -8,8 +8,8 @@ import type { IFileAction } from '@nextcloud/files'
|
||||
import CommentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw'
|
||||
import { getSidebar } from '@nextcloud/files'
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import logger from '../logger.ts'
|
||||
import { isUsingActivityIntegration } from '../utils/activity.ts'
|
||||
import logger from '../logger.js'
|
||||
import { isUsingActivityIntegration } from '../utils/activity.js'
|
||||
|
||||
export const action: IFileAction = {
|
||||
id: 'comments-unread',
|
||||
|
||||
@@ -4,40 +4,46 @@
|
||||
*/
|
||||
|
||||
import type { INode } from '@nextcloud/files'
|
||||
import type { App } from 'vue'
|
||||
|
||||
import { createPinia } from 'pinia'
|
||||
import { createApp } from 'vue'
|
||||
import logger from './logger.ts'
|
||||
import { getComments } from './services/GetComments.ts'
|
||||
import moment from '@nextcloud/moment'
|
||||
import { createPinia, PiniaVuePlugin } from 'pinia'
|
||||
import Vue, { type ComponentPublicInstance } from 'vue'
|
||||
import logger from './logger.js'
|
||||
import { getComments } from './services/GetComments.js'
|
||||
|
||||
Vue.use(PiniaVuePlugin)
|
||||
|
||||
let ActivityTabPluginView
|
||||
let ActivityTabPluginInstance
|
||||
|
||||
/**
|
||||
* Register the comments plugins for the Activity sidebar
|
||||
*/
|
||||
export function registerCommentsPlugins() {
|
||||
let app: App
|
||||
|
||||
window.OCA.Activity.registerSidebarAction({
|
||||
mount: async (el: HTMLElement, { node, reload }: { node: INode, reload: () => void }) => {
|
||||
const pinia = createPinia()
|
||||
|
||||
if (!app) {
|
||||
if (!ActivityTabPluginView) {
|
||||
const { default: ActivityCommentAction } = await import('./views/ActivityCommentAction.vue')
|
||||
app = createApp(
|
||||
ActivityCommentAction,
|
||||
{
|
||||
reloadCallback: reload,
|
||||
resourceId: node.fileid,
|
||||
},
|
||||
)
|
||||
// @ts-expect-error Types are broken for Vue2
|
||||
ActivityTabPluginView = Vue.extend(ActivityCommentAction)
|
||||
}
|
||||
app.use(pinia)
|
||||
app.mount(el)
|
||||
ActivityTabPluginInstance = new ActivityTabPluginView({
|
||||
el,
|
||||
pinia,
|
||||
propsData: {
|
||||
reloadCallback: reload,
|
||||
resourceId: node.fileid,
|
||||
},
|
||||
})
|
||||
logger.info('Comments plugin mounted in Activity sidebar action', { node })
|
||||
},
|
||||
unmount: () => {
|
||||
// destroy previous instance if available
|
||||
app?.unmount()
|
||||
if (ActivityTabPluginInstance) {
|
||||
ActivityTabPluginInstance.$destroy()
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
@@ -51,26 +57,26 @@ export function registerCommentsPlugins() {
|
||||
)
|
||||
logger.debug('Loaded comments', { node, comments })
|
||||
const { default: CommentView } = await import('./views/ActivityCommentEntry.vue')
|
||||
// @ts-expect-error Types are broken for Vue2
|
||||
const CommentsViewObject = Vue.extend(CommentView)
|
||||
|
||||
return comments.map((comment) => ({
|
||||
_CommentsViewInstance: undefined as App | undefined,
|
||||
_CommentsViewInstance: undefined as ComponentPublicInstance | undefined,
|
||||
|
||||
timestamp: Date.parse(comment.props?.creationDateTime as string | undefined ?? ''),
|
||||
timestamp: moment(comment.props?.creationDateTime).toDate().getTime(),
|
||||
|
||||
mount(element: HTMLElement, { reload }) {
|
||||
const app = createApp(
|
||||
CommentView,
|
||||
{
|
||||
this._CommentsViewInstance = new CommentsViewObject({
|
||||
el: element,
|
||||
propsData: {
|
||||
comment,
|
||||
resourceId: node.fileid,
|
||||
reloadCallback: reload,
|
||||
},
|
||||
)
|
||||
app.mount(element)
|
||||
this._CommentsViewInstance = app
|
||||
})
|
||||
},
|
||||
unmount() {
|
||||
this._CommentsViewInstance?.unmount()
|
||||
this._CommentsViewInstance?.$destroy()
|
||||
},
|
||||
}))
|
||||
})
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import logger from './logger.ts'
|
||||
import CommentsInstance from './services/CommentsInstance.ts'
|
||||
import logger from './logger.js'
|
||||
import CommentsInstance from './services/CommentsInstance.js'
|
||||
|
||||
// Init Comments
|
||||
if (window.OCA && !window.OCA.Comments) {
|
||||
@@ -13,7 +13,7 @@
|
||||
<!-- Author -->
|
||||
<NcAvatar
|
||||
class="comment__avatar"
|
||||
:displayName="actorDisplayName"
|
||||
:display-name="actorDisplayName"
|
||||
:user="actorId"
|
||||
:size="32" />
|
||||
</div>
|
||||
@@ -26,7 +26,7 @@
|
||||
<NcActions v-if="isOwnComment && id && !loading" class="comment__actions">
|
||||
<template v-if="!editing">
|
||||
<NcActionButton
|
||||
closeAfterClick
|
||||
close-after-click
|
||||
@click="onEdit">
|
||||
<template #icon>
|
||||
<IconPencilOutline :size="20" />
|
||||
@@ -35,7 +35,7 @@
|
||||
</NcActionButton>
|
||||
<NcActionSeparator />
|
||||
<NcActionButton
|
||||
closeAfterClick
|
||||
close-after-click
|
||||
@click="onDeleteWithUndo">
|
||||
<template #icon>
|
||||
<IconTrashCanOutline :size="20" />
|
||||
@@ -60,7 +60,7 @@
|
||||
v-else-if="creationDateTime"
|
||||
class="comment__timestamp"
|
||||
:timestamp="timestamp"
|
||||
:ignoreSeconds="true" />
|
||||
:ignore-seconds="true" />
|
||||
</div>
|
||||
|
||||
<!-- Message editor -->
|
||||
@@ -68,14 +68,14 @@
|
||||
<div class="comment__editor-group">
|
||||
<NcRichContenteditable
|
||||
ref="editor"
|
||||
v-model="localMessage"
|
||||
:autoComplete
|
||||
:auto-complete="autoComplete"
|
||||
:contenteditable="!loading"
|
||||
:label="editor ? t('comments', 'New comment') : t('comments', 'Edit comment')"
|
||||
:placeholder="t('comments', 'Write a comment …')"
|
||||
:userData
|
||||
:model-value="localMessage"
|
||||
:user-data="userData"
|
||||
aria-describedby="tab-comments__editor-description"
|
||||
@update:modelValue="submitted = false"
|
||||
@update:value="updateLocalMessage"
|
||||
@submit="onSubmit" />
|
||||
<div class="comment__submit">
|
||||
<NcButton
|
||||
@@ -103,8 +103,8 @@
|
||||
:class="{ 'comment__message--expanded': expanded }"
|
||||
:text="richContent.message"
|
||||
:arguments="richContent.mentions"
|
||||
useMarkdown
|
||||
@click="onExpand" />
|
||||
use-markdown
|
||||
@click.native="onExpand" />
|
||||
</div>
|
||||
</component>
|
||||
</template>
|
||||
@@ -113,7 +113,6 @@
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { mapStores } from 'pinia'
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
import NcActionButton from '@nextcloud/vue/components/NcActionButton'
|
||||
import NcActions from '@nextcloud/vue/components/NcActions'
|
||||
import NcActionSeparator from '@nextcloud/vue/components/NcActionSeparator'
|
||||
@@ -126,12 +125,12 @@ import IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'
|
||||
import IconClose from 'vue-material-design-icons/Close.vue'
|
||||
import IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'
|
||||
import IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'
|
||||
import CommentMixin from '../mixins/CommentMixin.ts'
|
||||
import { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.ts'
|
||||
import CommentMixin from '../mixins/CommentMixin.js'
|
||||
import { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.js'
|
||||
|
||||
// Dynamic loading
|
||||
const NcRichContenteditable = defineAsyncComponent(() => import('@nextcloud/vue/components/NcRichContenteditable'))
|
||||
const NcRichText = defineAsyncComponent(() => import('@nextcloud/vue/components/NcRichText'))
|
||||
const NcRichContenteditable = () => import('@nextcloud/vue/components/NcRichContenteditable')
|
||||
const NcRichText = () => import('@nextcloud/vue/components/NcRichText')
|
||||
|
||||
export default {
|
||||
/* eslint vue/multi-word-component-names: "warn" */
|
||||
|
||||
@@ -4,13 +4,17 @@
|
||||
*/
|
||||
|
||||
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import { registerSidebarTab } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { createPinia } from 'pinia'
|
||||
import { defineCustomElement } from 'vue'
|
||||
import wrap from '@vue/web-component-wrapper'
|
||||
import { createPinia, PiniaVuePlugin } from 'pinia'
|
||||
import Vue from 'vue'
|
||||
import { registerCommentsPlugins } from './comments-activity-tab.ts'
|
||||
import { isUsingActivityIntegration } from './utils/activity.ts'
|
||||
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
const tagName = 'comments_files-sidebar-tab'
|
||||
|
||||
if (isUsingActivityIntegration()) {
|
||||
@@ -28,15 +32,17 @@ if (isUsingActivityIntegration()) {
|
||||
async onInit() {
|
||||
const { default: FilesSidebarTab } = await import('./views/FilesSidebarTab.vue')
|
||||
|
||||
const FilesSidebarTabElement = defineCustomElement(FilesSidebarTab, {
|
||||
configureApp(app) {
|
||||
const pinia = createPinia()
|
||||
app.use(pinia)
|
||||
},
|
||||
shadowRoot: false,
|
||||
Vue.use(PiniaVuePlugin)
|
||||
Vue.mixin({ pinia: createPinia() })
|
||||
const webComponent = wrap(Vue, FilesSidebarTab)
|
||||
// In Vue 2, wrap doesn't support disabling shadow. Disable with a hack
|
||||
Object.defineProperty(webComponent.prototype, 'attachShadow', {
|
||||
value() { return this },
|
||||
})
|
||||
|
||||
window.customElements.define(tagName, FilesSidebarTabElement)
|
||||
Object.defineProperty(webComponent.prototype, 'shadowRoot', {
|
||||
get() { return this },
|
||||
})
|
||||
window.customElements.define(tagName, webComponent)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
import { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'
|
||||
import { mapStores } from 'pinia'
|
||||
import logger from '../logger.ts'
|
||||
import DeleteComment from '../services/DeleteComment.ts'
|
||||
import EditComment from '../services/EditComment.ts'
|
||||
import NewComment from '../services/NewComment.ts'
|
||||
import { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.ts'
|
||||
import logger from '../logger.js'
|
||||
import DeleteComment from '../services/DeleteComment.js'
|
||||
import EditComment from '../services/EditComment.js'
|
||||
import NewComment from '../services/NewComment.js'
|
||||
import { useDeletedCommentLimbo } from '../store/deletedCommentLimbo.js'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getCSPNonce } from '@nextcloud/auth'
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import { createPinia, PiniaVuePlugin } from 'pinia'
|
||||
import Vue from 'vue'
|
||||
import CommentsApp from '../views/Comments.vue'
|
||||
import logger from '../logger.js'
|
||||
|
||||
Vue.use(PiniaVuePlugin)
|
||||
|
||||
__webpack_nonce__ = getCSPNonce()
|
||||
|
||||
// Add translates functions
|
||||
Vue.mixin({
|
||||
data() {
|
||||
return {
|
||||
logger,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
t,
|
||||
n,
|
||||
},
|
||||
})
|
||||
|
||||
export default class CommentInstance {
|
||||
/**
|
||||
* Initialize a new Comments instance for the desired type
|
||||
*
|
||||
* @param {string} resourceType the comments endpoint type
|
||||
* @param {object} options the vue options (propsData, parent, el...)
|
||||
*/
|
||||
constructor(resourceType = 'files', options = {}) {
|
||||
const pinia = createPinia()
|
||||
|
||||
// Merge options and set `resourceType` property
|
||||
options = {
|
||||
...options,
|
||||
propsData: {
|
||||
...(options.propsData ?? {}),
|
||||
resourceType,
|
||||
},
|
||||
pinia,
|
||||
}
|
||||
// Init Comments component
|
||||
const View = Vue.extend(CommentsApp)
|
||||
return new View(options)
|
||||
}
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
/*!
|
||||
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import type { App, ComponentPublicInstance } from 'vue'
|
||||
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import { createPinia } from 'pinia'
|
||||
import { createApp } from 'vue'
|
||||
import CommentsApp from '../views/CommentsApp.vue'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
export interface CommentsInstanceOptions {
|
||||
el?: HTMLElement
|
||||
|
||||
props?: Record<string, unknown>
|
||||
|
||||
/** @deprecated use `props` instead */
|
||||
propsData?: Record<string, unknown>
|
||||
}
|
||||
|
||||
export default class CommentInstance {
|
||||
private app: App
|
||||
private instance: ComponentPublicInstance<typeof CommentsApp> | undefined
|
||||
|
||||
/**
|
||||
* Initialize a new Comments instance for the desired type
|
||||
*
|
||||
* @param resourceType - The comments endpoint type
|
||||
* @param options - The vue options (props, parent, el...)
|
||||
*/
|
||||
constructor(resourceType = 'files', options: CommentsInstanceOptions = {}) {
|
||||
const pinia = createPinia()
|
||||
|
||||
this.app = createApp(
|
||||
CommentsApp,
|
||||
{
|
||||
...(options.propsData ?? {}),
|
||||
...(options.props ?? {}),
|
||||
resourceType,
|
||||
},
|
||||
)
|
||||
|
||||
// Add translates functions
|
||||
this.app.mixin({
|
||||
data() {
|
||||
return {
|
||||
logger,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
t,
|
||||
n,
|
||||
},
|
||||
})
|
||||
|
||||
this.app.use(pinia)
|
||||
if (options.el) {
|
||||
this.instance = this.app.mount(options.el)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mount the Comments instance to a new element.
|
||||
*
|
||||
* @param el - The element to mount the instance on
|
||||
*/
|
||||
$mount(el: HTMLElement | string) {
|
||||
if (this.instance) {
|
||||
this.app.unmount()
|
||||
}
|
||||
this.instance = this.app.mount(el)
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmount the Comments instance from the DOM and destroy it.
|
||||
*/
|
||||
$unmount() {
|
||||
this.app.unmount()
|
||||
this.instance = undefined
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current resource id.
|
||||
*
|
||||
* @param id - The new resource id to load the comments for
|
||||
*/
|
||||
update(id: string | number) {
|
||||
if (this.instance) {
|
||||
this.instance.update(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth'
|
||||
import { createClient } from 'webdav'
|
||||
import { getRootPath } from '../utils/davUtils.ts'
|
||||
import { getRootPath } from '../utils/davUtils.js'
|
||||
|
||||
// init webdav client
|
||||
const client = createClient(getRootPath())
|
||||
+5
-5
@@ -3,16 +3,16 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import client from './DavClient.ts'
|
||||
import client from './DavClient.js'
|
||||
|
||||
/**
|
||||
* Delete a comment
|
||||
*
|
||||
* @param resourceType the resource type
|
||||
* @param resourceId the resource ID
|
||||
* @param commentId the comment iD
|
||||
* @param {string} resourceType the resource type
|
||||
* @param {number} resourceId the resource ID
|
||||
* @param {number} commentId the comment iD
|
||||
*/
|
||||
export default async function(resourceType: string, resourceId: number, commentId: number) {
|
||||
export default async function(resourceType, resourceId, commentId) {
|
||||
const commentPath = ['', resourceType, resourceId, commentId].join('/')
|
||||
|
||||
// Fetch newly created comment data
|
||||
+6
-6
@@ -3,17 +3,17 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import client from './DavClient.ts'
|
||||
import client from './DavClient.js'
|
||||
|
||||
/**
|
||||
* Edit an existing comment
|
||||
*
|
||||
* @param resourceType the resource type
|
||||
* @param resourceId the resource ID
|
||||
* @param commentId the comment iD
|
||||
* @param message the message content
|
||||
* @param {string} resourceType the resource type
|
||||
* @param {number} resourceId the resource ID
|
||||
* @param {number} commentId the comment iD
|
||||
* @param {string} message the message content
|
||||
*/
|
||||
export default async function(resourceType: string, resourceId: number, commentId: number, message: string) {
|
||||
export default async function(resourceType, resourceId, commentId, message) {
|
||||
const commentPath = ['', resourceType, resourceId, commentId].join('/')
|
||||
|
||||
return await client.customRequest(commentPath, {
|
||||
@@ -8,7 +8,7 @@ import type { DAVResult, FileStat, ResponseDataDetailed } from 'webdav'
|
||||
import { parseXML } from 'webdav'
|
||||
import { processResponsePayload } from 'webdav/dist/node/response.js'
|
||||
import { prepareFileFromProps } from 'webdav/dist/node/tools/dav.js'
|
||||
import client from './DavClient.ts'
|
||||
import client from './DavClient.js'
|
||||
|
||||
export const DEFAULT_LIMIT = 20
|
||||
|
||||
|
||||
+10
-10
@@ -5,24 +5,24 @@
|
||||
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import axios from '@nextcloud/axios'
|
||||
import { getRootPath } from '../utils/davUtils.ts'
|
||||
import { decodeHtmlEntities } from '../utils/decodeHtmlEntities.ts'
|
||||
import client from './DavClient.ts'
|
||||
import { getRootPath } from '../utils/davUtils.js'
|
||||
import { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'
|
||||
import client from './DavClient.js'
|
||||
|
||||
/**
|
||||
* Retrieve the comments list
|
||||
*
|
||||
* @param resourceType the resource type
|
||||
* @param resourceId the resource ID
|
||||
* @param message the message
|
||||
* @return The new comment
|
||||
* @param {string} resourceType the resource type
|
||||
* @param {number} resourceId the resource ID
|
||||
* @param {string} message the message
|
||||
* @return {object} the new comment
|
||||
*/
|
||||
export default async function(resourceType: string, resourceId: number, message: string) {
|
||||
export default async function(resourceType, resourceId, message) {
|
||||
const resourcePath = ['', resourceType, resourceId].join('/')
|
||||
|
||||
const response = await axios.post(getRootPath() + resourcePath, {
|
||||
actorDisplayName: getCurrentUser()!.displayName,
|
||||
actorId: getCurrentUser()!.uid,
|
||||
actorDisplayName: getCurrentUser().displayName,
|
||||
actorId: getCurrentUser().uid,
|
||||
actorType: 'users',
|
||||
creationDateTime: (new Date()).toUTCString(),
|
||||
message,
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import type { Response } from 'webdav'
|
||||
|
||||
import client from './DavClient.ts'
|
||||
import client from './DavClient.js'
|
||||
|
||||
/**
|
||||
* Mark comments older than the date timestamp as read
|
||||
|
||||
+6
-6
@@ -6,20 +6,20 @@
|
||||
/**
|
||||
* Creates a cancelable axios 'request object'.
|
||||
*
|
||||
* @param request the axios promise request
|
||||
* @return
|
||||
* @param {Function} request the axios promise request
|
||||
* @return {object}
|
||||
*/
|
||||
function cancelableRequest(request: (url: string, options?: Record<string, unknown>) => Promise<unknown>) {
|
||||
function cancelableRequest(request) {
|
||||
const controller = new AbortController()
|
||||
const signal = controller.signal
|
||||
|
||||
/**
|
||||
* Execute the request
|
||||
*
|
||||
* @param url the url to send the request to
|
||||
* @param [options] optional config for the request
|
||||
* @param {string} url the url to send the request to
|
||||
* @param {object} [options] optional config for the request
|
||||
*/
|
||||
const fetch = async function(url: string, options?: Record<string, unknown>) {
|
||||
const fetch = async function(url, options) {
|
||||
const response = await request(
|
||||
url,
|
||||
{ signal, ...options },
|
||||
+3
-3
@@ -4,10 +4,10 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param value - the string to decode
|
||||
* @param passes - the number of times to decode the string, default is 1
|
||||
* @param {any} value -
|
||||
* @param {any} passes -
|
||||
*/
|
||||
export function decodeHtmlEntities(value: string, passes = 1) {
|
||||
export function decodeHtmlEntities(value, passes = 1) {
|
||||
const parser = new DOMParser()
|
||||
let decoded = value
|
||||
for (let i = 0; i < passes; i++) {
|
||||
@@ -6,11 +6,11 @@
|
||||
<template>
|
||||
<Comment
|
||||
v-bind="editorData"
|
||||
:autoComplete="autoComplete"
|
||||
:resourceType="resourceType"
|
||||
:auto-complete="autoComplete"
|
||||
:resource-type="resourceType"
|
||||
:editor="true"
|
||||
:userData="userData"
|
||||
:resourceId="resourceId"
|
||||
:user-data="userData"
|
||||
:resource-id="resourceId"
|
||||
class="comments-action"
|
||||
@new="onNewComment" />
|
||||
</template>
|
||||
@@ -20,8 +20,8 @@ import { showError } from '@nextcloud/dialogs'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { defineComponent } from 'vue'
|
||||
import Comment from '../components/Comment.vue'
|
||||
import logger from '../logger.ts'
|
||||
import CommentView from '../mixins/CommentView.ts'
|
||||
import logger from '../logger.js'
|
||||
import CommentView from '../mixins/CommentView.js'
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
ref="comment"
|
||||
tag="li"
|
||||
v-bind="comment.props"
|
||||
:autoComplete="autoComplete"
|
||||
:resourceType="resourceType"
|
||||
:auto-complete="autoComplete"
|
||||
:resource-type="resourceType"
|
||||
:message="commentMessage"
|
||||
:resourceId="resourceId"
|
||||
:userData="genMentionsData(comment.props.mentions)"
|
||||
:resource-id="resourceId"
|
||||
:user-data="genMentionsData(comment.props.mentions)"
|
||||
class="comments-activity"
|
||||
@delete="reloadCallback()" />
|
||||
</template>
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
<!-- Editor -->
|
||||
<Comment
|
||||
v-bind="editorData"
|
||||
editor
|
||||
:autoComplete
|
||||
:resourceType
|
||||
:userData
|
||||
:resourceId="currentResourceId"
|
||||
:auto-complete="autoComplete"
|
||||
:resource-type="resourceType"
|
||||
:editor="true"
|
||||
:user-data="userData"
|
||||
:resource-id="currentResourceId"
|
||||
class="comments__writer"
|
||||
@new="onNewComment" />
|
||||
|
||||
@@ -33,13 +33,13 @@
|
||||
<Comment
|
||||
v-for="comment in comments"
|
||||
:key="comment.props.id"
|
||||
v-model="comment.props.message"
|
||||
tag="li"
|
||||
v-bind="comment.props"
|
||||
:autoComplete
|
||||
:resourceType
|
||||
:resourceId="currentResourceId"
|
||||
:userData="genMentionsData(comment.props.mentions)"
|
||||
:auto-complete="autoComplete"
|
||||
:resource-type="resourceType"
|
||||
:message.sync="comment.props.message"
|
||||
:resource-id="currentResourceId"
|
||||
:user-data="genMentionsData(comment.props.mentions)"
|
||||
class="comments__list"
|
||||
@delete="onDelete" />
|
||||
</ul>
|
||||
@@ -79,14 +79,15 @@ import IconAlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline
|
||||
import IconMessageReplyTextOutline from 'vue-material-design-icons/MessageReplyTextOutline.vue'
|
||||
import IconRefresh from 'vue-material-design-icons/Refresh.vue'
|
||||
import Comment from '../components/Comment.vue'
|
||||
import logger from '../logger.ts'
|
||||
import logger from '../logger.js'
|
||||
import CommentView from '../mixins/CommentView.ts'
|
||||
import { DEFAULT_LIMIT, getComments } from '../services/GetComments.ts'
|
||||
import { markCommentsAsRead } from '../services/ReadComments.ts'
|
||||
import cancelableRequest from '../utils/cancelableRequest.ts'
|
||||
import cancelableRequest from '../utils/cancelableRequest.js'
|
||||
|
||||
export default {
|
||||
name: 'CommentsApp',
|
||||
/* eslint vue/multi-word-component-names: "warn" */
|
||||
name: 'Comments',
|
||||
|
||||
components: {
|
||||
Comment,
|
||||
@@ -103,8 +104,6 @@ export default {
|
||||
|
||||
mixins: [CommentView],
|
||||
|
||||
expose: ['update'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
error: '',
|
||||
@@ -7,7 +7,7 @@
|
||||
import type { IFolder, INode, IView } from '@nextcloud/files'
|
||||
|
||||
import { computed } from 'vue'
|
||||
import CommentsApp from './CommentsApp.vue'
|
||||
import Comments from './Comments.vue'
|
||||
|
||||
const props = defineProps<{
|
||||
node?: INode
|
||||
@@ -24,9 +24,9 @@ const resourceId = computed(() => props.node?.fileid)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<CommentsApp
|
||||
<Comments
|
||||
v-if="resourceId !== undefined"
|
||||
:key="resourceId"
|
||||
:resourceId="resourceId"
|
||||
resourceType="files" />
|
||||
:resource-id="resourceId"
|
||||
resource-type="files" />
|
||||
</template>
|
||||
|
||||
@@ -202,7 +202,6 @@ class DashboardApiController extends OCSController {
|
||||
#[NoAdminRequired]
|
||||
#[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
|
||||
public function updateLayout(array $layout): DataResponse {
|
||||
$layout = $this->service->sanitizeLayout($layout);
|
||||
$this->userConfig->setValueString($this->userId, 'dashboard', 'layout', implode(',', $layout));
|
||||
return new DataResponse(['layout' => $layout]);
|
||||
}
|
||||
|
||||
@@ -31,30 +31,12 @@ class DashboardService {
|
||||
*/
|
||||
public function getLayout(): array {
|
||||
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
|
||||
return $this->sanitizeLayout(
|
||||
return array_values(array_filter(
|
||||
explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault)),
|
||||
fn (string $value) => $value !== '')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param list<string> $layout
|
||||
* @return list<string>
|
||||
*/
|
||||
public function sanitizeLayout(array $layout): array {
|
||||
$seen = [];
|
||||
$result = [];
|
||||
foreach ($layout as $value) {
|
||||
if ($value === '' || isset($seen[$value])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$seen[$value] = true;
|
||||
$result[] = $value;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<template>
|
||||
<main id="app-dashboard">
|
||||
<h2>{{ greeting.text }}</h2>
|
||||
<ul v-if="sortedRegisteredStatus.length > 0" class="statuses">
|
||||
<ul class="statuses">
|
||||
<li
|
||||
v-for="status in sortedRegisteredStatus"
|
||||
:id="'status-' + status"
|
||||
|
||||
@@ -44,25 +44,6 @@ class DashboardServiceTest extends TestCase {
|
||||
);
|
||||
}
|
||||
|
||||
public function testGetLayoutRemovesEmptyAndDuplicateEntries(): void {
|
||||
$this->appConfig->method('getAppValueString')
|
||||
->with('layout', 'recommendations,spreed,mail,calendar')
|
||||
->willReturn('recommendations,spreed,mail,calendar');
|
||||
$this->userConfig->method('getValueString')
|
||||
->with('alice', 'dashboard', 'layout', 'recommendations,spreed,mail,calendar')
|
||||
->willReturn('spreed,,mail,mail,calendar,spreed');
|
||||
|
||||
$layout = $this->service->getLayout();
|
||||
|
||||
$this->assertSame(['spreed', 'mail', 'calendar'], $layout);
|
||||
}
|
||||
|
||||
public function testSanitizeLayoutRemovesEmptyAndDuplicateEntries(): void {
|
||||
$layout = $this->service->sanitizeLayout(['files', 'calendar', 'files', '', 'mail', 'calendar']);
|
||||
|
||||
$this->assertSame(['files', 'calendar', 'mail'], $layout);
|
||||
}
|
||||
|
||||
public function testGetBirthdate(): void {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$this->userManager->method('get')
|
||||
|
||||
@@ -204,8 +204,6 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Ezin izan da zati-fitxategiaren izena aldatu azken fitxategira, kakoak bertan behera utzi du",
|
||||
"Could not rename part file to final file" : "Ezin izan da zati-fitxategia azken fitxategira aldatu",
|
||||
"Failed to check file size: %1$s" : "Ezin izan da egiaztatu fitxategiaren tamaina:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Ezin da fitxategi hau ireki: %1$s (%2$d), fitxategia badagoela dirudi",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Ezin da fitxategi hau ireki: %1$s (%2$d), fitxategia ez dagoela dirudi",
|
||||
"Encryption not ready: %1$s" : "Enkriptatzea ez dago prest:%1$s",
|
||||
"Failed to open file: %1$s" : "Ezin izan da fitxategia ireki:%1$s",
|
||||
"Failed to unlink: %1$s" : "Ezin izan da deskonektatu:%1$s",
|
||||
@@ -222,7 +220,6 @@ OC.L10N.register(
|
||||
"Completed on %s" : "%s-an osatua",
|
||||
"Due on %s by %s" : "%s-(e)an epemuga %s-(e)k",
|
||||
"Due on %s" : "%s-(e)an epemuga",
|
||||
"This is an example contact" : "Hau kontaktu adibide bat da",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ongi etorri Nextcloud Egutegira!\n\nHau gertaera erakusgarria da - aztertu plangintzaren malgutasuna Nextcloud Egutegiarekin nahi dituzun edizioak eginez!\n\nNextcloud Egutegia aukerarekin, hau egin dezakezu:\n- Sortu, editatu eta kudeatu gertaerak esfortzurik gabe.\n- Egutegi ugari sortu eta taldekideekin, lagunekin edo familiarekin partekatu.\n- Egiaztatu libre egotea eta bistaratu zure laneko orduak beste batzuei.\n- Aplikazio eta gailuekin arazorik gabe integratzea CalDAV bidez.\n- Zure esperientzia pertsonalizatu: gertaera errepikariak programatu, jakinarazpenak doitu eta bestelako ezarpenak.",
|
||||
"Example event - open me!" : "Gertaera adibidea - ireki nazazu!",
|
||||
"System Address Book" : "Sistemaren helbide-liburua",
|
||||
|
||||
@@ -202,8 +202,6 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Ezin izan da zati-fitxategiaren izena aldatu azken fitxategira, kakoak bertan behera utzi du",
|
||||
"Could not rename part file to final file" : "Ezin izan da zati-fitxategia azken fitxategira aldatu",
|
||||
"Failed to check file size: %1$s" : "Ezin izan da egiaztatu fitxategiaren tamaina:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Ezin da fitxategi hau ireki: %1$s (%2$d), fitxategia badagoela dirudi",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Ezin da fitxategi hau ireki: %1$s (%2$d), fitxategia ez dagoela dirudi",
|
||||
"Encryption not ready: %1$s" : "Enkriptatzea ez dago prest:%1$s",
|
||||
"Failed to open file: %1$s" : "Ezin izan da fitxategia ireki:%1$s",
|
||||
"Failed to unlink: %1$s" : "Ezin izan da deskonektatu:%1$s",
|
||||
@@ -220,7 +218,6 @@
|
||||
"Completed on %s" : "%s-an osatua",
|
||||
"Due on %s by %s" : "%s-(e)an epemuga %s-(e)k",
|
||||
"Due on %s" : "%s-(e)an epemuga",
|
||||
"This is an example contact" : "Hau kontaktu adibide bat da",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ongi etorri Nextcloud Egutegira!\n\nHau gertaera erakusgarria da - aztertu plangintzaren malgutasuna Nextcloud Egutegiarekin nahi dituzun edizioak eginez!\n\nNextcloud Egutegia aukerarekin, hau egin dezakezu:\n- Sortu, editatu eta kudeatu gertaerak esfortzurik gabe.\n- Egutegi ugari sortu eta taldekideekin, lagunekin edo familiarekin partekatu.\n- Egiaztatu libre egotea eta bistaratu zure laneko orduak beste batzuei.\n- Aplikazio eta gailuekin arazorik gabe integratzea CalDAV bidez.\n- Zure esperientzia pertsonalizatu: gertaera errepikariak programatu, jakinarazpenak doitu eta bestelako ezarpenak.",
|
||||
"Example event - open me!" : "Gertaera adibidea - ireki nazazu!",
|
||||
"System Address Book" : "Sistemaren helbide-liburua",
|
||||
|
||||
+2
-3
@@ -250,10 +250,9 @@ OC.L10N.register(
|
||||
"Completed on %s" : "Completata il %s",
|
||||
"Due on %s by %s" : "Scade il %s per %s",
|
||||
"Due on %s" : "Scade il %s",
|
||||
"This is an example contact" : "Questo è un contatto d'esempio",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
|
||||
"Example event - open me!" : "Evento d'esempio - aprimi!",
|
||||
"System Address Book" : "Rubrica di sistema",
|
||||
"System Address Book" : "Rubrica di Sistema",
|
||||
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
|
||||
"Enable System Address Book" : "Abilita rubrica di sistema",
|
||||
"DAV system address book" : "Rubrica di sistema DAV",
|
||||
@@ -325,7 +324,7 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Example content" : "Contenuto di esempio",
|
||||
"Example content" : "Contenuto d'esempio",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
|
||||
"Availability" : "Disponibilità",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
|
||||
|
||||
@@ -248,10 +248,9 @@
|
||||
"Completed on %s" : "Completata il %s",
|
||||
"Due on %s by %s" : "Scade il %s per %s",
|
||||
"Due on %s" : "Scade il %s",
|
||||
"This is an example contact" : "Questo è un contatto d'esempio",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
|
||||
"Example event - open me!" : "Evento d'esempio - aprimi!",
|
||||
"System Address Book" : "Rubrica di sistema",
|
||||
"System Address Book" : "Rubrica di Sistema",
|
||||
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
|
||||
"Enable System Address Book" : "Abilita rubrica di sistema",
|
||||
"DAV system address book" : "Rubrica di sistema DAV",
|
||||
@@ -323,7 +322,7 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Example content" : "Contenuto di esempio",
|
||||
"Example content" : "Contenuto d'esempio",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
|
||||
"Availability" : "Disponibilità",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
|
||||
|
||||
@@ -148,7 +148,7 @@ OC.L10N.register(
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" foi cancelado",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "%1$s aceitou seu convite",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s aceitou seu convite como tentativa",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s aceitou provisoriamente seu convite",
|
||||
"%1$s has declined your invitation" : "%1$s recusou seu convite",
|
||||
"%1$s has responded to your invitation" : "%1$s respondeu ao seu convite",
|
||||
"Invitation updated: %1$s" : "Convite atualizado: %1$s",
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" foi cancelado",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "%1$s aceitou seu convite",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s aceitou seu convite como tentativa",
|
||||
"%1$s has tentatively accepted your invitation" : "%1$s aceitou provisoriamente seu convite",
|
||||
"%1$s has declined your invitation" : "%1$s recusou seu convite",
|
||||
"%1$s has responded to your invitation" : "%1$s respondeu ao seu convite",
|
||||
"Invitation updated: %1$s" : "Convite atualizado: %1$s",
|
||||
|
||||
@@ -49,7 +49,7 @@ class BlockLegacyClientPlugin extends ServerPlugin {
|
||||
return;
|
||||
}
|
||||
|
||||
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.1.83');
|
||||
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.1.81');
|
||||
$maximumSupportedDesktopVersion = $this->config->getSystemValueString('maximum.supported.desktop.version', '99.99.99');
|
||||
|
||||
// Check if the client is a desktop client
|
||||
|
||||
@@ -38,12 +38,6 @@ class ZipFolderPlugin extends ServerPlugin {
|
||||
*/
|
||||
private ?Server $server = null;
|
||||
|
||||
/**
|
||||
* Whether handleDownload has fully streamed an archive for the current request.
|
||||
* Used by afterDownload to decide whether to suppress sabre/dav's own response logic.
|
||||
*/
|
||||
private bool $streamed = false;
|
||||
|
||||
public function __construct(
|
||||
private Tree $tree,
|
||||
private LoggerInterface $logger,
|
||||
@@ -97,11 +91,10 @@ class ZipFolderPlugin extends ServerPlugin {
|
||||
* It is possible to filter / limit the files that should be downloaded,
|
||||
* either by passing (multiple) `X-NC-Files: the-file` headers
|
||||
* or by setting a `files=JSON_ARRAY_OF_FILES` URL query.
|
||||
*
|
||||
* @return false|null
|
||||
*/
|
||||
public function handleDownload(Request $request, Response $response): ?false {
|
||||
if ($request->getHeader('X-Sabre-Original-Method') === 'HEAD') {
|
||||
return null;
|
||||
}
|
||||
public function handleDownload(Request $request, Response $response): ?bool {
|
||||
$node = $this->tree->getNodeForPath($request->getPath());
|
||||
if (!($node instanceof Directory)) {
|
||||
// only handle directories
|
||||
@@ -186,23 +179,21 @@ class ZipFolderPlugin extends ServerPlugin {
|
||||
$this->streamNode($streamer, $node, $rootPath);
|
||||
}
|
||||
$streamer->finalize();
|
||||
$this->streamed = true; // archive fully streamed
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell sabre/dav not to trigger its own response sending logic as the handleDownload will have already sent the response
|
||||
* Tell sabre/dav not to trigger it's own response sending logic as the handleDownload will have already send the response
|
||||
*
|
||||
* @return false|null
|
||||
*/
|
||||
public function afterDownload(Request $request, Response $response): ?false {
|
||||
if ($request->getHeader('X-Sabre-Original-Method') === 'HEAD') {
|
||||
public function afterDownload(Request $request, Response $response): ?bool {
|
||||
$node = $this->tree->getNodeForPath($request->getPath());
|
||||
if (!($node instanceof Directory)) {
|
||||
// only handle directories
|
||||
return null;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$this->streamed) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,7 +343,6 @@ class FileSearchBackend implements ISearchBackend {
|
||||
}, $query->orderBy);
|
||||
|
||||
$limit = $query->limit;
|
||||
$maxResults = $limit->maxResults !== 0 ? (int)$limit->maxResults : 100;
|
||||
$offset = $limit->firstResult;
|
||||
|
||||
$limitHome = false;
|
||||
@@ -371,7 +370,7 @@ class FileSearchBackend implements ISearchBackend {
|
||||
|
||||
return new SearchQuery(
|
||||
$operators,
|
||||
$maxResults,
|
||||
(int)$limit->maxResults,
|
||||
$offset,
|
||||
$orders,
|
||||
$this->user,
|
||||
|
||||
@@ -43,14 +43,6 @@ use Test\TestCase;
|
||||
use Test\Traits\MountProviderTrait;
|
||||
use Test\Traits\UserTrait;
|
||||
|
||||
/**
|
||||
* Internal helper to mock legacy hook receiver.
|
||||
*/
|
||||
interface EventHandlerMock {
|
||||
public function writeCallback(): void;
|
||||
public function postWriteCallback(): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class File
|
||||
*
|
||||
@@ -830,7 +822,9 @@ class FileTest extends TestCase {
|
||||
|
||||
$wasLockedPre = false;
|
||||
$wasLockedPost = false;
|
||||
$eventHandler = $this->createMock(EventHandlerMock::class);
|
||||
$eventHandler = $this->getMockBuilder(\stdclass::class)
|
||||
->addMethods(['writeCallback', 'postWriteCallback'])
|
||||
->getMock();
|
||||
|
||||
// both pre and post hooks might need access to the file,
|
||||
// so only shared lock is acceptable
|
||||
|
||||
@@ -97,7 +97,7 @@ class FileSearchBackendTest extends TestCase {
|
||||
'name',
|
||||
'foo'
|
||||
),
|
||||
100,
|
||||
0,
|
||||
0,
|
||||
[],
|
||||
$this->user
|
||||
@@ -126,7 +126,7 @@ class FileSearchBackendTest extends TestCase {
|
||||
'mimetype',
|
||||
'foo'
|
||||
),
|
||||
100,
|
||||
0,
|
||||
0,
|
||||
[],
|
||||
$this->user
|
||||
@@ -155,7 +155,7 @@ class FileSearchBackendTest extends TestCase {
|
||||
'size',
|
||||
10
|
||||
),
|
||||
100,
|
||||
0,
|
||||
0,
|
||||
[],
|
||||
$this->user
|
||||
@@ -184,7 +184,7 @@ class FileSearchBackendTest extends TestCase {
|
||||
'mtime',
|
||||
10
|
||||
),
|
||||
100,
|
||||
0,
|
||||
0,
|
||||
[],
|
||||
$this->user
|
||||
@@ -213,7 +213,7 @@ class FileSearchBackendTest extends TestCase {
|
||||
'mimetype',
|
||||
FileInfo::MIMETYPE_FOLDER
|
||||
),
|
||||
100,
|
||||
0,
|
||||
0,
|
||||
[],
|
||||
$this->user
|
||||
|
||||
@@ -35,30 +35,21 @@ OC.L10N.register(
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan inte läsa denna filen, troligen är det en delad fil. Vänligen be ägaren att åter dela filen med dig.",
|
||||
"Default Encryption Module" : "Standardmodul för kryptering",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standardkrypteringsmodul för Nextcloud serverbaserad kryptering (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to\n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Denna app tillhandahåller den (standard) kryptografiska implementeringen för Nextclouds funktion för serversidig kryptering (SSE).\n\n**Krypteringsdetaljer**\n* **Krypteringsläge:** AES-256-CTR (standard)\n* **Autentisering:** HMAC-SHA256\n\n**Viktiga varningar**\n* **FARA:** Inaktivera inte denna applikation förrän alla filer har dekrypterats (`occ encryption:decrypt-all`).\n* **VARNING**: För att återgå till icke-krypterad fillagring efter aktivering krävs åtkomst via kommandoraden. Åtgärden är permanent via webbgränssnittet.\n\n**Anmärkningar för befintliga filer**\n* Som standard krypteras inte befintliga filer när SSE aktiveras; endast nya filer krypteras.\n* Använd kommandot `occ encryption:encrypt-all` för att kryptera alla befintliga filer.\n\n**Innan du börjar**\n* **Läs dokumentationen:** Innan du aktiverar SSE, krypterar befintliga filer eller inaktiverar SSE är det viktigt att\nläsa dokumentationen för att förstå konsekvenserna och de lämpliga procedurerna för att undvika dataförlust.",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
|
||||
"Encrypt the home storage" : "Kryptera alla filer i molnet",
|
||||
"Disable recovery key" : "Inaktivera återställningsnyckel",
|
||||
"Enable recovery key" : "Aktivera återställningsnyckel",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Återställningsnyckeln är en extra krypteringsnyckel som används för att kryptera filer. Den används för att återställa filer från ett konto om lösenordet glöms bort.",
|
||||
"Recovery key password" : "Ange lösenord",
|
||||
"Passwords fields do not match" : "Lösenorden matchar inte",
|
||||
"Repeat recovery key password" : "Repetera lösenord",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Ett fel uppstod vid uppdateringen av inställningarna för återställningsnyckeln. Försök igen.",
|
||||
"Change recovery key password" : "Ändra lösenordet för återställningsnyckeln",
|
||||
"Old recovery key password" : "Gammalt lösenord",
|
||||
"New recovery key password" : "Nytt lösenord",
|
||||
"Repeat new recovery key password" : "Repetera lösenord",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Ett fel uppstod när lösenordet för återställningsnyckeln skulle ändras. Försök igen.",
|
||||
"Update private key password" : "Uppdatera lösenordet för den privata nyckeln",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Lösenordet till din privata nyckel stämmer inte längre överens med ditt inloggningslösenord. Ändra lösenordet till din privata nyckel så att det blir detsamma som ditt nuvarande inloggningslösenord.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.",
|
||||
"Old log-in password" : "Gammalt inloggningslösenord",
|
||||
"Current log-in password" : "Nuvarande inloggningslösenord",
|
||||
"Update" : "Uppdatera",
|
||||
"Updating recovery keys. This can take some time…" : "Uppdaterar återställningsnycklar. Det kan ta en stund…",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Om du aktiverar det här alternativet kan du återställa åtkomst till dina krypterade filer vid lösenordsförlust",
|
||||
"Enable password recovery" : "Aktivera återställning av lösenord",
|
||||
"Default encryption module" : "Krypteringsfunktion",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsappen är aktiverad men dina krypteringsnycklar är inte initialiserade, vänligen logga ut och logga in igen.",
|
||||
"Basic encryption module" : "Kryptering",
|
||||
@@ -72,7 +63,6 @@ OC.L10N.register(
|
||||
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
|
||||
"Enable password recovery:" : "Aktivera lösenordsåterställning:",
|
||||
"Enabled" : "Aktiverad",
|
||||
"Disabled" : "Inaktiverad",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Denna app tillhandahåller den (standard) kryptografiska implementeringen för Nextclouds funktion för serversidig kryptering (SSE).\n\n**Krypteringsdetaljer**\n* **Krypteringsläge:** AES-256-CTR (standard)\n* **Autentisering:** HMAC-SHA256\n\n**Viktiga varningar**\n* **FARA:** Inaktivera inte denna applikation förrän alla filer har dekrypterats (`occ encryption:decrypt-all`).\n* **VARNING**: För att återgå till icke-krypterad fillagring efter aktivering krävs åtkomst via kommandoraden. Åtgärden är permanent via webbgränssnittet.\n\n**Anmärkningar för befintliga filer**\n* Som standard krypteras inte befintliga filer när SSE aktiveras; endast nya filer krypteras.\n* Använd kommandot `occ encryption:encrypt-all` för att kryptera alla befintliga filer.\n\n**Innan du börjar**\n* **Läs dokumentationen:** Innan du aktiverar SSE, krypterar befintliga filer eller inaktiverar SSE är det viktigt att \nläsa dokumentationen för att förstå konsekvenserna och de lämpliga procedurerna för att undvika dataförlust."
|
||||
"Disabled" : "Inaktiverad"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -33,30 +33,21 @@
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan inte läsa denna filen, troligen är det en delad fil. Vänligen be ägaren att åter dela filen med dig.",
|
||||
"Default Encryption Module" : "Standardmodul för kryptering",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standardkrypteringsmodul för Nextcloud serverbaserad kryptering (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to\n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Denna app tillhandahåller den (standard) kryptografiska implementeringen för Nextclouds funktion för serversidig kryptering (SSE).\n\n**Krypteringsdetaljer**\n* **Krypteringsläge:** AES-256-CTR (standard)\n* **Autentisering:** HMAC-SHA256\n\n**Viktiga varningar**\n* **FARA:** Inaktivera inte denna applikation förrän alla filer har dekrypterats (`occ encryption:decrypt-all`).\n* **VARNING**: För att återgå till icke-krypterad fillagring efter aktivering krävs åtkomst via kommandoraden. Åtgärden är permanent via webbgränssnittet.\n\n**Anmärkningar för befintliga filer**\n* Som standard krypteras inte befintliga filer när SSE aktiveras; endast nya filer krypteras.\n* Använd kommandot `occ encryption:encrypt-all` för att kryptera alla befintliga filer.\n\n**Innan du börjar**\n* **Läs dokumentationen:** Innan du aktiverar SSE, krypterar befintliga filer eller inaktiverar SSE är det viktigt att\nläsa dokumentationen för att förstå konsekvenserna och de lämpliga procedurerna för att undvika dataförlust.",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av det här alternativet krypterar alla filer som är lagrade på huvudlagringsplatsen, annars kommer bara filer på extern lagringsplats att krypteras",
|
||||
"Encrypt the home storage" : "Kryptera alla filer i molnet",
|
||||
"Disable recovery key" : "Inaktivera återställningsnyckel",
|
||||
"Enable recovery key" : "Aktivera återställningsnyckel",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Återställningsnyckeln är en extra krypteringsnyckel som används för att kryptera filer. Den används för att återställa filer från ett konto om lösenordet glöms bort.",
|
||||
"Recovery key password" : "Ange lösenord",
|
||||
"Passwords fields do not match" : "Lösenorden matchar inte",
|
||||
"Repeat recovery key password" : "Repetera lösenord",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Ett fel uppstod vid uppdateringen av inställningarna för återställningsnyckeln. Försök igen.",
|
||||
"Change recovery key password" : "Ändra lösenordet för återställningsnyckeln",
|
||||
"Old recovery key password" : "Gammalt lösenord",
|
||||
"New recovery key password" : "Nytt lösenord",
|
||||
"Repeat new recovery key password" : "Repetera lösenord",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Ett fel uppstod när lösenordet för återställningsnyckeln skulle ändras. Försök igen.",
|
||||
"Update private key password" : "Uppdatera lösenordet för den privata nyckeln",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Lösenordet till din privata nyckel stämmer inte längre överens med ditt inloggningslösenord. Ändra lösenordet till din privata nyckel så att det blir detsamma som ditt nuvarande inloggningslösenord.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.",
|
||||
"Old log-in password" : "Gammalt inloggningslösenord",
|
||||
"Current log-in password" : "Nuvarande inloggningslösenord",
|
||||
"Update" : "Uppdatera",
|
||||
"Updating recovery keys. This can take some time…" : "Uppdaterar återställningsnycklar. Det kan ta en stund…",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Om du aktiverar det här alternativet kan du återställa åtkomst till dina krypterade filer vid lösenordsförlust",
|
||||
"Enable password recovery" : "Aktivera återställning av lösenord",
|
||||
"Default encryption module" : "Krypteringsfunktion",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsappen är aktiverad men dina krypteringsnycklar är inte initialiserade, vänligen logga ut och logga in igen.",
|
||||
"Basic encryption module" : "Kryptering",
|
||||
@@ -70,7 +61,6 @@
|
||||
"Update Private Key Password" : "Uppdatera lösenordet för din privata nyckel",
|
||||
"Enable password recovery:" : "Aktivera lösenordsåterställning:",
|
||||
"Enabled" : "Aktiverad",
|
||||
"Disabled" : "Inaktiverad",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Denna app tillhandahåller den (standard) kryptografiska implementeringen för Nextclouds funktion för serversidig kryptering (SSE).\n\n**Krypteringsdetaljer**\n* **Krypteringsläge:** AES-256-CTR (standard)\n* **Autentisering:** HMAC-SHA256\n\n**Viktiga varningar**\n* **FARA:** Inaktivera inte denna applikation förrän alla filer har dekrypterats (`occ encryption:decrypt-all`).\n* **VARNING**: För att återgå till icke-krypterad fillagring efter aktivering krävs åtkomst via kommandoraden. Åtgärden är permanent via webbgränssnittet.\n\n**Anmärkningar för befintliga filer**\n* Som standard krypteras inte befintliga filer när SSE aktiveras; endast nya filer krypteras.\n* Använd kommandot `occ encryption:encrypt-all` för att kryptera alla befintliga filer.\n\n**Innan du börjar**\n* **Läs dokumentationen:** Innan du aktiverar SSE, krypterar befintliga filer eller inaktiverar SSE är det viktigt att \nläsa dokumentationen för att förstå konsekvenserna och de lämpliga procedurerna för att undvika dataförlust."
|
||||
"Disabled" : "Inaktiverad"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -244,7 +244,7 @@ OC.L10N.register(
|
||||
"Files settings" : "Ρυθμίσεις αρχείων",
|
||||
"Switch to list view" : "Αλλαγή σε προβολή λίστας",
|
||||
"Switch to grid view" : "Εναλλαγή σε προβολή πλέγματος",
|
||||
"The file could not be found" : "Το αρχείο δεν βρέθηκε",
|
||||
"The file could not be found" : "Το αρχείο δεν μπορούσε να βρεθεί",
|
||||
"Upload was cancelled by user" : "Η μεταφόρτωση ακυρώθηκε από τον χρήστη",
|
||||
"Not enough free space" : "Δεν επαρκεί ο ελεύθερος χώρος",
|
||||
"Operation is blocked by access control" : "Η λειτουργία μπλοκάρεται από τον έλεγχο πρόσβασης",
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
"Files settings" : "Ρυθμίσεις αρχείων",
|
||||
"Switch to list view" : "Αλλαγή σε προβολή λίστας",
|
||||
"Switch to grid view" : "Εναλλαγή σε προβολή πλέγματος",
|
||||
"The file could not be found" : "Το αρχείο δεν βρέθηκε",
|
||||
"The file could not be found" : "Το αρχείο δεν μπορούσε να βρεθεί",
|
||||
"Upload was cancelled by user" : "Η μεταφόρτωση ακυρώθηκε από τον χρήστη",
|
||||
"Not enough free space" : "Δεν επαρκεί ο ελεύθερος χώρος",
|
||||
"Operation is blocked by access control" : "Η λειτουργία μπλοκάρεται από τον έλεγχο πρόσβασης",
|
||||
|
||||
@@ -79,7 +79,6 @@ OC.L10N.register(
|
||||
"Go to the \"{dir}\" directory" : "Ugrás a(z) „{dir}” könyvtárhoz",
|
||||
"Current directory path" : "Jelenlegi könyvtár útvonala",
|
||||
"Share" : "Megosztás",
|
||||
"Reload content" : "Tartalom újratöltése",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Már felhasználta a tárhelykvótáját, így már nem tölthet fel fájlokat",
|
||||
"You do not have permission to upload or create files here." : "Nincs jogosultsága, hogy fájlokat töltsön fel és hozzon létre itt.",
|
||||
"Drag and drop files here to upload" : "Húzza ide a fájlokat a feltöltéshez",
|
||||
@@ -95,7 +94,6 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Már létezik ilyen nevű bejegyzés.",
|
||||
"Invalid filename." : "Érvénytelen fájlnév.",
|
||||
"Rename file" : "Fájl átnevezése",
|
||||
"Recently created" : "Nemrég létrehozva",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Ismeretlen fájltípus",
|
||||
"{ext} image" : "{ext}-kép",
|
||||
@@ -111,7 +109,6 @@ OC.L10N.register(
|
||||
"Last 30 days" : "Előző 30 nap",
|
||||
"This year ({year})" : "Idén ({year})",
|
||||
"Last year ({year})" : "Tavaly ({year})",
|
||||
"Custom range" : "Egyéni tartomány",
|
||||
"Custom date range" : "Egyéni dátumtartomány",
|
||||
"Search everywhere" : "Keresés mindenhol",
|
||||
"Documents" : "Dokumentumok",
|
||||
@@ -123,7 +120,6 @@ OC.L10N.register(
|
||||
"Images" : "Képek",
|
||||
"Videos" : "Videók",
|
||||
"Filters" : "Szűrők",
|
||||
"Back to filters" : "Vissza a szűrőkhöz",
|
||||
"Appearance" : "Megjelenés",
|
||||
"Show hidden files" : "Rejtett fájlok megjelenítése",
|
||||
"Show file type column" : "Fájltípus oszlop megjelenítése",
|
||||
@@ -235,9 +231,6 @@ OC.L10N.register(
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "A fájl „{old}” kiterjesztésének eltávolítása olvashatatlanná teheti azt.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "A fájl „{new}” kiterjesztésének hozzáadása olvashatatlanná teheti azt.",
|
||||
"Do not show this dialog again." : "Ne jelenítse meg újra ezt a párbeszédablakot.",
|
||||
"Rename file to hidden" : "Fájl átnevezése rejtettre",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "A fájlnév elé pont írása rejtetté teheti a fájlt.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Biztos, hogy átnevezi erre a fájlt: „{filename}”?",
|
||||
"Cancel" : "Mégse",
|
||||
"Rename" : "Átnevezés",
|
||||
"Select file or folder to link to" : "Válassza ki a hivatkozandó fájlt vagy mappát",
|
||||
@@ -252,7 +245,6 @@ OC.L10N.register(
|
||||
"Error during upload: {message}" : "Hiba a feltöltés során: {message}",
|
||||
"Error during upload, status code {status}" : "Hiba a feltöltés közben, állapotkód: {status}",
|
||||
"Unknown error during upload" : "Ismeretlen hiba a feltöltés során",
|
||||
"File list is reloading" : "A fájllista újratöltődik",
|
||||
"Loading current folder" : "Jelenlegi mappa betöltése",
|
||||
"Retry" : "Újra",
|
||||
"No files in here" : "Itt nincsenek fájlok",
|
||||
@@ -320,9 +312,7 @@ OC.L10N.register(
|
||||
"The files are locked" : "A fájlok zárolva vannak",
|
||||
"The file does not exist anymore" : "Ez a fájl már nem létezik",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
|
||||
"Moving {count} files to \"{destination}\" …" : "{count} fájl áthelyezési ide: „{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
|
||||
"Copying {count} files to \"{destination}\" …" : "{count} fájl másolása ide: „{destination}”…",
|
||||
"Choose destination" : "Válasszon célt",
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
@@ -337,7 +327,6 @@ OC.L10N.register(
|
||||
"Retry and close" : "Újrapróbálás és bezárás",
|
||||
"Open online" : "Megnyitás online",
|
||||
"Details" : "Részletek",
|
||||
"Open the details sidebar" : "Részletek oldalsáv megnyitása",
|
||||
"Unfavorite" : "Nem kedvenc",
|
||||
"View in folder" : "Megtekintés mappában",
|
||||
"Type" : "Típus",
|
||||
@@ -347,7 +336,6 @@ OC.L10N.register(
|
||||
"Templates" : "Sablonok",
|
||||
"New template folder" : "Új sablonmappa",
|
||||
"In folder" : "Könyvtárban",
|
||||
"Pick folder to search in" : "Válasszon mappát a kereséshez",
|
||||
"Search in all files" : "Keresés az összes fájlban",
|
||||
"Search in folder: {folder}" : "Keresés a mappában: {folder}",
|
||||
"One of the dropped files could not be processed" : "Egy vagy több idehúzott fájl nem dolgozható fel",
|
||||
|
||||
@@ -77,7 +77,6 @@
|
||||
"Go to the \"{dir}\" directory" : "Ugrás a(z) „{dir}” könyvtárhoz",
|
||||
"Current directory path" : "Jelenlegi könyvtár útvonala",
|
||||
"Share" : "Megosztás",
|
||||
"Reload content" : "Tartalom újratöltése",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Már felhasználta a tárhelykvótáját, így már nem tölthet fel fájlokat",
|
||||
"You do not have permission to upload or create files here." : "Nincs jogosultsága, hogy fájlokat töltsön fel és hozzon létre itt.",
|
||||
"Drag and drop files here to upload" : "Húzza ide a fájlokat a feltöltéshez",
|
||||
@@ -93,7 +92,6 @@
|
||||
"Another entry with the same name already exists." : "Már létezik ilyen nevű bejegyzés.",
|
||||
"Invalid filename." : "Érvénytelen fájlnév.",
|
||||
"Rename file" : "Fájl átnevezése",
|
||||
"Recently created" : "Nemrég létrehozva",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Ismeretlen fájltípus",
|
||||
"{ext} image" : "{ext}-kép",
|
||||
@@ -109,7 +107,6 @@
|
||||
"Last 30 days" : "Előző 30 nap",
|
||||
"This year ({year})" : "Idén ({year})",
|
||||
"Last year ({year})" : "Tavaly ({year})",
|
||||
"Custom range" : "Egyéni tartomány",
|
||||
"Custom date range" : "Egyéni dátumtartomány",
|
||||
"Search everywhere" : "Keresés mindenhol",
|
||||
"Documents" : "Dokumentumok",
|
||||
@@ -121,7 +118,6 @@
|
||||
"Images" : "Képek",
|
||||
"Videos" : "Videók",
|
||||
"Filters" : "Szűrők",
|
||||
"Back to filters" : "Vissza a szűrőkhöz",
|
||||
"Appearance" : "Megjelenés",
|
||||
"Show hidden files" : "Rejtett fájlok megjelenítése",
|
||||
"Show file type column" : "Fájltípus oszlop megjelenítése",
|
||||
@@ -233,9 +229,6 @@
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "A fájl „{old}” kiterjesztésének eltávolítása olvashatatlanná teheti azt.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "A fájl „{new}” kiterjesztésének hozzáadása olvashatatlanná teheti azt.",
|
||||
"Do not show this dialog again." : "Ne jelenítse meg újra ezt a párbeszédablakot.",
|
||||
"Rename file to hidden" : "Fájl átnevezése rejtettre",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "A fájlnév elé pont írása rejtetté teheti a fájlt.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Biztos, hogy átnevezi erre a fájlt: „{filename}”?",
|
||||
"Cancel" : "Mégse",
|
||||
"Rename" : "Átnevezés",
|
||||
"Select file or folder to link to" : "Válassza ki a hivatkozandó fájlt vagy mappát",
|
||||
@@ -250,7 +243,6 @@
|
||||
"Error during upload: {message}" : "Hiba a feltöltés során: {message}",
|
||||
"Error during upload, status code {status}" : "Hiba a feltöltés közben, állapotkód: {status}",
|
||||
"Unknown error during upload" : "Ismeretlen hiba a feltöltés során",
|
||||
"File list is reloading" : "A fájllista újratöltődik",
|
||||
"Loading current folder" : "Jelenlegi mappa betöltése",
|
||||
"Retry" : "Újra",
|
||||
"No files in here" : "Itt nincsenek fájlok",
|
||||
@@ -318,9 +310,7 @@
|
||||
"The files are locked" : "A fájlok zárolva vannak",
|
||||
"The file does not exist anymore" : "Ez a fájl már nem létezik",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
|
||||
"Moving {count} files to \"{destination}\" …" : "{count} fájl áthelyezési ide: „{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
|
||||
"Copying {count} files to \"{destination}\" …" : "{count} fájl másolása ide: „{destination}”…",
|
||||
"Choose destination" : "Válasszon célt",
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
@@ -335,7 +325,6 @@
|
||||
"Retry and close" : "Újrapróbálás és bezárás",
|
||||
"Open online" : "Megnyitás online",
|
||||
"Details" : "Részletek",
|
||||
"Open the details sidebar" : "Részletek oldalsáv megnyitása",
|
||||
"Unfavorite" : "Nem kedvenc",
|
||||
"View in folder" : "Megtekintés mappában",
|
||||
"Type" : "Típus",
|
||||
@@ -345,7 +334,6 @@
|
||||
"Templates" : "Sablonok",
|
||||
"New template folder" : "Új sablonmappa",
|
||||
"In folder" : "Könyvtárban",
|
||||
"Pick folder to search in" : "Válasszon mappát a kereséshez",
|
||||
"Search in all files" : "Keresés az összes fájlban",
|
||||
"Search in folder: {folder}" : "Keresés a mappában: {folder}",
|
||||
"One of the dropped files could not be processed" : "Egy vagy több idehúzott fájl nem dolgozható fel",
|
||||
|
||||
@@ -79,7 +79,6 @@ OC.L10N.register(
|
||||
"Go to the \"{dir}\" directory" : "Fara í heimamöppu",
|
||||
"Current directory path" : "Fyrirliggjandi slóð að möppu",
|
||||
"Share" : "Deila",
|
||||
"Reload content" : "Endurlesa efni",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Þú hefur fullnýtt geymslukvótann þinn og getur ekki lengur sent inn skrár",
|
||||
"You do not have permission to upload or create files here." : "Þú hefur ekki heimild til að senda inn eða búa til skrár hér.",
|
||||
"Drag and drop files here to upload" : "Dragðu og slepptu hér skrám til að senda inn",
|
||||
@@ -95,7 +94,6 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Önnur færsla með sama heiti er þegar til staðar.",
|
||||
"Invalid filename." : "Ógilt skráarheiti.",
|
||||
"Rename file" : "Endurnefna skrá",
|
||||
"Recently created" : "Nýlega útbúið",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Óþekkt skráartegund",
|
||||
"{ext} image" : "{ext} mynd",
|
||||
@@ -111,7 +109,6 @@ OC.L10N.register(
|
||||
"Last 30 days" : "Síðustu 30 daga",
|
||||
"This year ({year})" : "Þetta ár ({year})",
|
||||
"Last year ({year})" : "Síðasta ár ({year})",
|
||||
"Custom range" : "Sérsniðið bil",
|
||||
"Custom date range" : "Sérsniðið dagsetningabil",
|
||||
"Search everywhere" : "Leita allsstaðar",
|
||||
"Documents" : "Skjöl",
|
||||
@@ -123,7 +120,6 @@ OC.L10N.register(
|
||||
"Images" : "Myndir",
|
||||
"Videos" : "Myndskeið",
|
||||
"Filters" : "Síur",
|
||||
"Back to filters" : "Til baka í síur",
|
||||
"Appearance" : "Útlit",
|
||||
"Show hidden files" : "Sýna faldar skrár",
|
||||
"Show file type column" : "Sýna dálk fyrir skráategund",
|
||||
@@ -132,7 +128,6 @@ OC.L10N.register(
|
||||
"General" : "Almennt",
|
||||
"Sort favorites first" : "Raða eftirlætum fremst",
|
||||
"Sort folders before files" : "Raða möppum á undan skrám",
|
||||
"Enable folder tree view" : "Virkja möppugreinasýn",
|
||||
"Default view" : "Sjálfgefin sýn",
|
||||
"All files" : "Allar skrár",
|
||||
"Personal files" : "Einkaskrár",
|
||||
@@ -155,10 +150,7 @@ OC.L10N.register(
|
||||
"Show those shortcuts" : "Sýna þessa flýtilykla",
|
||||
"Warnings" : "Aðvaranir",
|
||||
"Warn before changing a file extension" : "Aðvara áður en skráarendingu er breytt",
|
||||
"Warn before deleting a file" : "Aðvara áður en skrá er eytt",
|
||||
"WebDAV URL" : "WebDAV-slóð",
|
||||
"Create an app password" : "Búa til lykilorð forrits",
|
||||
"Required for WebDAV authentication because Two-Factor Authentication is enabled for this account." : "Er krafist fyrir WebDAV-auðkenningu þar sem tveggja-þátta auðkenning er virkjuð fyrir þennan aðgang.",
|
||||
"How to access files using WebDAV" : "Hvernig á að nálgast skrár í gegnum WebDAV",
|
||||
"Total rows summary" : "Samantek á fjölda raða",
|
||||
"Toggle selection for all files and folders" : "Víxla vali af/á fyrir allar skrár og möppur",
|
||||
@@ -235,9 +227,6 @@ OC.L10N.register(
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Sé skráaendingin \"{old}\" fjarlægð, gæti skráin orðið ólæsileg.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Sé skráaendingunni \"{new}\" bætt við, gæti skráin orðið ólæsileg.",
|
||||
"Do not show this dialog again." : "Ekki sýna þennan glugga aftur.",
|
||||
"Rename file to hidden" : "Endurnefna skrá sem falda",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Sé settur punktur framan við skráaheiti, gæti skráin orðið falin.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Ertu viss um að þú viljir endurnefna skrána sem \"{filename}\"?",
|
||||
"Cancel" : "Hætta við",
|
||||
"Rename" : "Endurnefna",
|
||||
"Select file or folder to link to" : "Veldu skrá eða möppu til að tengja í",
|
||||
@@ -252,13 +241,11 @@ OC.L10N.register(
|
||||
"Error during upload: {message}" : "Villa við innsendingu: {message}",
|
||||
"Error during upload, status code {status}" : "Villa við innsendingu, stöðukóði: {status}",
|
||||
"Unknown error during upload" : "Óþekkt villa við innsendingu",
|
||||
"File list is reloading" : "Skráalisti er að hlaðast inn",
|
||||
"Loading current folder" : "Hleð inn núverandi möppu",
|
||||
"Retry" : "Reyna aftur",
|
||||
"No files in here" : "Engar skrár hér",
|
||||
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
|
||||
"Go back" : "Fara til baka",
|
||||
"Loading …" : "Hleð inn…",
|
||||
"Your files" : "Skrárnar þínar",
|
||||
"Open in files" : "Opna í skráaforritinu",
|
||||
"File cannot be accessed" : "Skráin er ekki aðgengileg",
|
||||
@@ -282,9 +269,6 @@ OC.L10N.register(
|
||||
"Failed to convert files: {message}" : "Mistókst að umbreyta skrám: {message}",
|
||||
"All files failed to be converted" : "Mistókst að umbreyta öllum skrám",
|
||||
"One file could not be converted: {message}" : "Ekki var hægt að umbreyta einni skrá: {message}",
|
||||
"_%n file could not be converted_::_%n files could not be converted_" : ["Ekki var hægt að umbreyta %n skrá","Ekki var hægt að umbreyta %n skrám"],
|
||||
"_%n file converted_::_%n files converted_" : ["%n skrá umbreytt","%n skrám umbreytt"],
|
||||
"Files converted" : "Skrám umbreytt",
|
||||
"Failed to convert files" : "Mistókst að umbreyta skrám",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"File successfully converted" : "Tókst að umbreyta skrá",
|
||||
@@ -320,9 +304,7 @@ OC.L10N.register(
|
||||
"The files are locked" : "Skrárnar eru læstar",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Færi {count} skrár í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Afrita {count} skrár í \"{destination}\" …",
|
||||
"Choose destination" : "Veldu áfangastað",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
@@ -337,8 +319,6 @@ OC.L10N.register(
|
||||
"Retry and close" : "Prófa aftur og loka",
|
||||
"Open online" : "Opna á netinu",
|
||||
"Details" : "Nánar",
|
||||
"Open the details sidebar" : "Opna hliðarspjald með ítarupplýsingum",
|
||||
"Unfavorite" : "Taka úr eftirlætum",
|
||||
"View in folder" : "Skoða í möppu",
|
||||
"Type" : "Tegund",
|
||||
"Created new folder \"{name}\"" : "Bjó til nýja möppu \"{name}\"",
|
||||
@@ -347,7 +327,6 @@ OC.L10N.register(
|
||||
"Templates" : "Sniðmát",
|
||||
"New template folder" : "Ný mappa fyrir sniðmát",
|
||||
"In folder" : "Í möppunni",
|
||||
"Pick folder to search in" : "Veldu möppu til að leita í",
|
||||
"Search in all files" : "Leita í öllum skrám",
|
||||
"Search in folder: {folder}" : "Leita í möppunni: {folder}",
|
||||
"One of the dropped files could not be processed" : "Ekki var hægt að vinna með eina af slepptu skránum",
|
||||
|
||||
@@ -77,7 +77,6 @@
|
||||
"Go to the \"{dir}\" directory" : "Fara í heimamöppu",
|
||||
"Current directory path" : "Fyrirliggjandi slóð að möppu",
|
||||
"Share" : "Deila",
|
||||
"Reload content" : "Endurlesa efni",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Þú hefur fullnýtt geymslukvótann þinn og getur ekki lengur sent inn skrár",
|
||||
"You do not have permission to upload or create files here." : "Þú hefur ekki heimild til að senda inn eða búa til skrár hér.",
|
||||
"Drag and drop files here to upload" : "Dragðu og slepptu hér skrám til að senda inn",
|
||||
@@ -93,7 +92,6 @@
|
||||
"Another entry with the same name already exists." : "Önnur færsla með sama heiti er þegar til staðar.",
|
||||
"Invalid filename." : "Ógilt skráarheiti.",
|
||||
"Rename file" : "Endurnefna skrá",
|
||||
"Recently created" : "Nýlega útbúið",
|
||||
"Folder" : "Mappa",
|
||||
"Unknown file type" : "Óþekkt skráartegund",
|
||||
"{ext} image" : "{ext} mynd",
|
||||
@@ -109,7 +107,6 @@
|
||||
"Last 30 days" : "Síðustu 30 daga",
|
||||
"This year ({year})" : "Þetta ár ({year})",
|
||||
"Last year ({year})" : "Síðasta ár ({year})",
|
||||
"Custom range" : "Sérsniðið bil",
|
||||
"Custom date range" : "Sérsniðið dagsetningabil",
|
||||
"Search everywhere" : "Leita allsstaðar",
|
||||
"Documents" : "Skjöl",
|
||||
@@ -121,7 +118,6 @@
|
||||
"Images" : "Myndir",
|
||||
"Videos" : "Myndskeið",
|
||||
"Filters" : "Síur",
|
||||
"Back to filters" : "Til baka í síur",
|
||||
"Appearance" : "Útlit",
|
||||
"Show hidden files" : "Sýna faldar skrár",
|
||||
"Show file type column" : "Sýna dálk fyrir skráategund",
|
||||
@@ -130,7 +126,6 @@
|
||||
"General" : "Almennt",
|
||||
"Sort favorites first" : "Raða eftirlætum fremst",
|
||||
"Sort folders before files" : "Raða möppum á undan skrám",
|
||||
"Enable folder tree view" : "Virkja möppugreinasýn",
|
||||
"Default view" : "Sjálfgefin sýn",
|
||||
"All files" : "Allar skrár",
|
||||
"Personal files" : "Einkaskrár",
|
||||
@@ -153,10 +148,7 @@
|
||||
"Show those shortcuts" : "Sýna þessa flýtilykla",
|
||||
"Warnings" : "Aðvaranir",
|
||||
"Warn before changing a file extension" : "Aðvara áður en skráarendingu er breytt",
|
||||
"Warn before deleting a file" : "Aðvara áður en skrá er eytt",
|
||||
"WebDAV URL" : "WebDAV-slóð",
|
||||
"Create an app password" : "Búa til lykilorð forrits",
|
||||
"Required for WebDAV authentication because Two-Factor Authentication is enabled for this account." : "Er krafist fyrir WebDAV-auðkenningu þar sem tveggja-þátta auðkenning er virkjuð fyrir þennan aðgang.",
|
||||
"How to access files using WebDAV" : "Hvernig á að nálgast skrár í gegnum WebDAV",
|
||||
"Total rows summary" : "Samantek á fjölda raða",
|
||||
"Toggle selection for all files and folders" : "Víxla vali af/á fyrir allar skrár og möppur",
|
||||
@@ -233,9 +225,6 @@
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Sé skráaendingin \"{old}\" fjarlægð, gæti skráin orðið ólæsileg.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Sé skráaendingunni \"{new}\" bætt við, gæti skráin orðið ólæsileg.",
|
||||
"Do not show this dialog again." : "Ekki sýna þennan glugga aftur.",
|
||||
"Rename file to hidden" : "Endurnefna skrá sem falda",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Sé settur punktur framan við skráaheiti, gæti skráin orðið falin.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Ertu viss um að þú viljir endurnefna skrána sem \"{filename}\"?",
|
||||
"Cancel" : "Hætta við",
|
||||
"Rename" : "Endurnefna",
|
||||
"Select file or folder to link to" : "Veldu skrá eða möppu til að tengja í",
|
||||
@@ -250,13 +239,11 @@
|
||||
"Error during upload: {message}" : "Villa við innsendingu: {message}",
|
||||
"Error during upload, status code {status}" : "Villa við innsendingu, stöðukóði: {status}",
|
||||
"Unknown error during upload" : "Óþekkt villa við innsendingu",
|
||||
"File list is reloading" : "Skráalisti er að hlaðast inn",
|
||||
"Loading current folder" : "Hleð inn núverandi möppu",
|
||||
"Retry" : "Reyna aftur",
|
||||
"No files in here" : "Engar skrár hér",
|
||||
"Upload some content or sync with your devices!" : "Sendu inn eitthvað efni eða samstilltu við tækin þín!",
|
||||
"Go back" : "Fara til baka",
|
||||
"Loading …" : "Hleð inn…",
|
||||
"Your files" : "Skrárnar þínar",
|
||||
"Open in files" : "Opna í skráaforritinu",
|
||||
"File cannot be accessed" : "Skráin er ekki aðgengileg",
|
||||
@@ -280,9 +267,6 @@
|
||||
"Failed to convert files: {message}" : "Mistókst að umbreyta skrám: {message}",
|
||||
"All files failed to be converted" : "Mistókst að umbreyta öllum skrám",
|
||||
"One file could not be converted: {message}" : "Ekki var hægt að umbreyta einni skrá: {message}",
|
||||
"_%n file could not be converted_::_%n files could not be converted_" : ["Ekki var hægt að umbreyta %n skrá","Ekki var hægt að umbreyta %n skrám"],
|
||||
"_%n file converted_::_%n files converted_" : ["%n skrá umbreytt","%n skrám umbreytt"],
|
||||
"Files converted" : "Skrám umbreytt",
|
||||
"Failed to convert files" : "Mistókst að umbreyta skrám",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"File successfully converted" : "Tókst að umbreyta skrá",
|
||||
@@ -318,9 +302,7 @@
|
||||
"The files are locked" : "Skrárnar eru læstar",
|
||||
"The file does not exist anymore" : "Skráin er ekki lengur til",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Færi {count} skrár í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Afrita {count} skrár í \"{destination}\" …",
|
||||
"Choose destination" : "Veldu áfangastað",
|
||||
"Copy to {target}" : "Afrita í {target}",
|
||||
"Move to {target}" : "Færa í {target}",
|
||||
@@ -335,8 +317,6 @@
|
||||
"Retry and close" : "Prófa aftur og loka",
|
||||
"Open online" : "Opna á netinu",
|
||||
"Details" : "Nánar",
|
||||
"Open the details sidebar" : "Opna hliðarspjald með ítarupplýsingum",
|
||||
"Unfavorite" : "Taka úr eftirlætum",
|
||||
"View in folder" : "Skoða í möppu",
|
||||
"Type" : "Tegund",
|
||||
"Created new folder \"{name}\"" : "Bjó til nýja möppu \"{name}\"",
|
||||
@@ -345,7 +325,6 @@
|
||||
"Templates" : "Sniðmát",
|
||||
"New template folder" : "Ný mappa fyrir sniðmát",
|
||||
"In folder" : "Í möppunni",
|
||||
"Pick folder to search in" : "Veldu möppu til að leita í",
|
||||
"Search in all files" : "Leita í öllum skrám",
|
||||
"Search in folder: {folder}" : "Leita í möppunni: {folder}",
|
||||
"One of the dropped files could not be processed" : "Ekki var hægt að vinna með eina af slepptu skránum",
|
||||
|
||||
+13
-13
@@ -131,8 +131,8 @@ OC.L10N.register(
|
||||
"Crop image previews" : "Ritaglia le anteprime delle immagini",
|
||||
"General" : "Generale",
|
||||
"Sort favorites first" : "Ordina prima i preferiti",
|
||||
"Sort folders before files" : "Ordina le cartelle prima dei file",
|
||||
"Enable folder tree view" : "Abilita vista ad albero delle cartelle",
|
||||
"Sort folders before files" : "Ordina cartelle prima dei files",
|
||||
"Enable folder tree view" : "Abilita visuale ad albero delle cartelle",
|
||||
"Default view" : "Vista predefinita",
|
||||
"All files" : "Tutti i file",
|
||||
"Personal files" : "File personali",
|
||||
@@ -151,9 +151,9 @@ OC.L10N.register(
|
||||
"Go left in grid" : "Vai a sinistra nella griglia",
|
||||
"Go right in grid" : "Vai a destra nella griglia",
|
||||
"View" : "Visualizza",
|
||||
"Toggle grid view" : "Attiva/disattiva la vista a griglia",
|
||||
"Show those shortcuts" : "Mostra scorciatoie",
|
||||
"Warnings" : "Avvisi",
|
||||
"Toggle grid view" : "Commuta la vista a griglia",
|
||||
"Show those shortcuts" : "Mostra quelle scorciatoie",
|
||||
"Warnings" : "Avvertenze",
|
||||
"Warn before changing a file extension" : "Avvisa prima di modificare l'estensione di un file",
|
||||
"Warn before deleting a file" : "Avvisa prima di eliminare un file",
|
||||
"WebDAV URL" : "URL WebDAV",
|
||||
@@ -243,8 +243,8 @@ OC.L10N.register(
|
||||
"Select file or folder to link to" : "Seleziona un file o una cartella da collegare",
|
||||
"Choose {file}" : "Scegli {file}",
|
||||
"Files settings" : "Impostazioni File",
|
||||
"Switch to list view" : "Passa alla vista a elenco",
|
||||
"Switch to grid view" : "Passa alla vista a griglia",
|
||||
"Switch to list view" : "Passa alla vista elenco",
|
||||
"Switch to grid view" : "Passa alla vista griglia",
|
||||
"The file could not be found" : "Il file non è stato trovato",
|
||||
"Upload was cancelled by user" : "Caricamento annullato dall'utente",
|
||||
"Not enough free space" : "Spazio libero insufficiente",
|
||||
@@ -259,16 +259,16 @@ OC.L10N.register(
|
||||
"Upload some content or sync with your devices!" : "Carica dei contenuti o sincronizza con i tuoi dispositivi!",
|
||||
"Go back" : "Indietro",
|
||||
"Loading …" : "Caricamento in corso...",
|
||||
"Your files" : "I tuoi file",
|
||||
"Your files" : "I tuoi files",
|
||||
"Open in files" : "Apri in file",
|
||||
"File cannot be accessed" : "Il file non possono essere acceduti",
|
||||
"The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Impossibile trovare il file oppure non disponi dei permessi per visualizzarlo. Chiedi al mittente di condividerlo.",
|
||||
"No search results for “{query}”" : "Nessun risultato di ricerca per “{query}”",
|
||||
"Search for files" : "Cerca file",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Consenti di limitare i nomi dei file per assicurarsi che questi ultimi possano essere sincronizzati con tutti i client. Per impostazione predefinita, tutti i nomi di file validi su sistemi POSIX (es. Linux o macOS) sono consentiti.",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Consenti di limitare i nomi di file per assicurarsi che i file vengano sincronizzati con tutti i client. In modo predefinito, tutti i nomi di file validi su POSIX (es. Linux o macOS) sono consentiti.",
|
||||
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Dopo aver abilitato i nomi file compatibili con Windows, i file esistenti non potranno più essere modificati, ma potranno essere rinominati con nuovi nomi validi dal rispettivo proprietario.",
|
||||
"Failed to toggle Windows filename support" : "Impossibile attivare il supporto per i nomi file di Windows",
|
||||
"Files compatibility" : "Compatibilità dei file",
|
||||
"Files compatibility" : "Compatibilità di File",
|
||||
"Enforce Windows compatibility" : "Imponi la compatibilità con Windows",
|
||||
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ciò bloccherà i nomi di file non validi sui sistemi Windows, come l'uso di nomi riservati o caratteri speciali. Tuttavia non verrà imposta la compatibilità con le maiuscole/minuscole.",
|
||||
"Blank" : "Vuoto",
|
||||
@@ -317,7 +317,7 @@ OC.L10N.register(
|
||||
"This file/folder is already in that directory" : "Questo file/cartella è già in quella cartella",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Non puoi spostare un file/cartella in se stesso o in una sottocartella di se stesso",
|
||||
"A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
|
||||
"The files are locked" : "I file sono bloccati",
|
||||
"The files are locked" : "I files sono bloccati",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Spostare \"{source}\" in \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Spostamento di {count} file in \"{destination}\" …",
|
||||
@@ -355,7 +355,7 @@ OC.L10N.register(
|
||||
"No files to upload" : "Nessun file da caricare",
|
||||
"Unable to create the directory {directory}" : "Impossibile creare la cartella {directory}",
|
||||
"Some files could not be uploaded" : "Alcuni file non possono essere caricati",
|
||||
"Files uploaded successfully" : "File caricati correttamente",
|
||||
"Files uploaded successfully" : "Files caricati correttamente",
|
||||
"No files to process" : "Nessun file da elaborare",
|
||||
"Files copied successfully" : "File copiati correttamente",
|
||||
"Files moved successfully" : "File spostati correttamente",
|
||||
@@ -382,7 +382,7 @@ OC.L10N.register(
|
||||
"No favorites yet" : "Nessun preferito ancora",
|
||||
"Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui",
|
||||
"List of your files and folders." : "Lista dei tuoi file e cartelle.",
|
||||
"Folder tree" : "Albero delle cartelle",
|
||||
"Folder tree" : "Albero delle cartella",
|
||||
"List of your files and folders that are not shared." : "Elenco dei file e delle cartelle che non sono condivisi.",
|
||||
"No personal files found" : "Nessun file personale trovato",
|
||||
"Files that are not shared will show up here." : "I file che non vengono condivisi verranno visualizzati qui.",
|
||||
|
||||
+13
-13
@@ -129,8 +129,8 @@
|
||||
"Crop image previews" : "Ritaglia le anteprime delle immagini",
|
||||
"General" : "Generale",
|
||||
"Sort favorites first" : "Ordina prima i preferiti",
|
||||
"Sort folders before files" : "Ordina le cartelle prima dei file",
|
||||
"Enable folder tree view" : "Abilita vista ad albero delle cartelle",
|
||||
"Sort folders before files" : "Ordina cartelle prima dei files",
|
||||
"Enable folder tree view" : "Abilita visuale ad albero delle cartelle",
|
||||
"Default view" : "Vista predefinita",
|
||||
"All files" : "Tutti i file",
|
||||
"Personal files" : "File personali",
|
||||
@@ -149,9 +149,9 @@
|
||||
"Go left in grid" : "Vai a sinistra nella griglia",
|
||||
"Go right in grid" : "Vai a destra nella griglia",
|
||||
"View" : "Visualizza",
|
||||
"Toggle grid view" : "Attiva/disattiva la vista a griglia",
|
||||
"Show those shortcuts" : "Mostra scorciatoie",
|
||||
"Warnings" : "Avvisi",
|
||||
"Toggle grid view" : "Commuta la vista a griglia",
|
||||
"Show those shortcuts" : "Mostra quelle scorciatoie",
|
||||
"Warnings" : "Avvertenze",
|
||||
"Warn before changing a file extension" : "Avvisa prima di modificare l'estensione di un file",
|
||||
"Warn before deleting a file" : "Avvisa prima di eliminare un file",
|
||||
"WebDAV URL" : "URL WebDAV",
|
||||
@@ -241,8 +241,8 @@
|
||||
"Select file or folder to link to" : "Seleziona un file o una cartella da collegare",
|
||||
"Choose {file}" : "Scegli {file}",
|
||||
"Files settings" : "Impostazioni File",
|
||||
"Switch to list view" : "Passa alla vista a elenco",
|
||||
"Switch to grid view" : "Passa alla vista a griglia",
|
||||
"Switch to list view" : "Passa alla vista elenco",
|
||||
"Switch to grid view" : "Passa alla vista griglia",
|
||||
"The file could not be found" : "Il file non è stato trovato",
|
||||
"Upload was cancelled by user" : "Caricamento annullato dall'utente",
|
||||
"Not enough free space" : "Spazio libero insufficiente",
|
||||
@@ -257,16 +257,16 @@
|
||||
"Upload some content or sync with your devices!" : "Carica dei contenuti o sincronizza con i tuoi dispositivi!",
|
||||
"Go back" : "Indietro",
|
||||
"Loading …" : "Caricamento in corso...",
|
||||
"Your files" : "I tuoi file",
|
||||
"Your files" : "I tuoi files",
|
||||
"Open in files" : "Apri in file",
|
||||
"File cannot be accessed" : "Il file non possono essere acceduti",
|
||||
"The file could not be found or you do not have permissions to view it. Ask the sender to share it." : "Impossibile trovare il file oppure non disponi dei permessi per visualizzarlo. Chiedi al mittente di condividerlo.",
|
||||
"No search results for “{query}”" : "Nessun risultato di ricerca per “{query}”",
|
||||
"Search for files" : "Cerca file",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Consenti di limitare i nomi dei file per assicurarsi che questi ultimi possano essere sincronizzati con tutti i client. Per impostazione predefinita, tutti i nomi di file validi su sistemi POSIX (es. Linux o macOS) sono consentiti.",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Consenti di limitare i nomi di file per assicurarsi che i file vengano sincronizzati con tutti i client. In modo predefinito, tutti i nomi di file validi su POSIX (es. Linux o macOS) sono consentiti.",
|
||||
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "Dopo aver abilitato i nomi file compatibili con Windows, i file esistenti non potranno più essere modificati, ma potranno essere rinominati con nuovi nomi validi dal rispettivo proprietario.",
|
||||
"Failed to toggle Windows filename support" : "Impossibile attivare il supporto per i nomi file di Windows",
|
||||
"Files compatibility" : "Compatibilità dei file",
|
||||
"Files compatibility" : "Compatibilità di File",
|
||||
"Enforce Windows compatibility" : "Imponi la compatibilità con Windows",
|
||||
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ciò bloccherà i nomi di file non validi sui sistemi Windows, come l'uso di nomi riservati o caratteri speciali. Tuttavia non verrà imposta la compatibilità con le maiuscole/minuscole.",
|
||||
"Blank" : "Vuoto",
|
||||
@@ -315,7 +315,7 @@
|
||||
"This file/folder is already in that directory" : "Questo file/cartella è già in quella cartella",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Non puoi spostare un file/cartella in se stesso o in una sottocartella di se stesso",
|
||||
"A file or folder with that name already exists in this folder" : "Esiste già un file o una cartella con quel nome in questa cartella",
|
||||
"The files are locked" : "I file sono bloccati",
|
||||
"The files are locked" : "I files sono bloccati",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Spostare \"{source}\" in \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Spostamento di {count} file in \"{destination}\" …",
|
||||
@@ -353,7 +353,7 @@
|
||||
"No files to upload" : "Nessun file da caricare",
|
||||
"Unable to create the directory {directory}" : "Impossibile creare la cartella {directory}",
|
||||
"Some files could not be uploaded" : "Alcuni file non possono essere caricati",
|
||||
"Files uploaded successfully" : "File caricati correttamente",
|
||||
"Files uploaded successfully" : "Files caricati correttamente",
|
||||
"No files to process" : "Nessun file da elaborare",
|
||||
"Files copied successfully" : "File copiati correttamente",
|
||||
"Files moved successfully" : "File spostati correttamente",
|
||||
@@ -380,7 +380,7 @@
|
||||
"No favorites yet" : "Nessun preferito ancora",
|
||||
"Files and folders you mark as favorite will show up here" : "I file e le cartelle che marchi come preferiti saranno mostrati qui",
|
||||
"List of your files and folders." : "Lista dei tuoi file e cartelle.",
|
||||
"Folder tree" : "Albero delle cartelle",
|
||||
"Folder tree" : "Albero delle cartella",
|
||||
"List of your files and folders that are not shared." : "Elenco dei file e delle cartelle che non sono condivisi.",
|
||||
"No personal files found" : "Nessun file personale trovato",
|
||||
"Files that are not shared will show up here." : "I file che non vengono condivisi verranno visualizzati qui.",
|
||||
|
||||
@@ -95,7 +95,6 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "En annan post med samma namn finns redan.",
|
||||
"Invalid filename." : "Ogiltigt filnamn.",
|
||||
"Rename file" : "Byt namn på fil",
|
||||
"Recently created" : "Nyligen skapade",
|
||||
"Folder" : "Mapp",
|
||||
"Unknown file type" : "Okänd filtyp",
|
||||
"{ext} image" : "{ext} bild",
|
||||
@@ -111,7 +110,6 @@ OC.L10N.register(
|
||||
"Last 30 days" : "Senaste 30 dagarna",
|
||||
"This year ({year})" : "I år ({year})",
|
||||
"Last year ({year})" : "Förra året ({year})",
|
||||
"Custom range" : "Anpassat intervall",
|
||||
"Custom date range" : "Anpassat datumintervall",
|
||||
"Search everywhere" : "Sök överallt",
|
||||
"Documents" : "Dokument",
|
||||
@@ -235,9 +233,6 @@ OC.L10N.register(
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Att ta bort filtillägget \"{old}\" kan göra filen oläsbar.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Att lägga till filtillägget \"{new}\" kan göra filen oläsbar.",
|
||||
"Do not show this dialog again." : "Visa inte denna dialog igen.",
|
||||
"Rename file to hidden" : "Byt namn på filen till ”hidden”",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Om man sätter en punkt framför ett filnamn kan filen bli dold.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Är du säker på att du vill byta namn på filen till \"{filename}\"?",
|
||||
"Cancel" : "Avbryt",
|
||||
"Rename" : "Byt namn",
|
||||
"Select file or folder to link to" : "Välj fil eller mapp att länka till",
|
||||
@@ -320,9 +315,7 @@ OC.L10N.register(
|
||||
"The files are locked" : "Filerna är låsta",
|
||||
"The file does not exist anymore" : "Filen finns inte längre",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Flyttar \"{source}\" till \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Flyttar {count}filer till \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopierar \"{source}\" till \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Kopierar {count} filer till \"{destination}\" …",
|
||||
"Choose destination" : "Välj destination",
|
||||
"Copy to {target}" : "Kopiera till {target}",
|
||||
"Move to {target}" : "Flytta till {target}",
|
||||
@@ -337,8 +330,6 @@ OC.L10N.register(
|
||||
"Retry and close" : "Försök igen och stäng",
|
||||
"Open online" : "Öppna online",
|
||||
"Details" : "Detaljer",
|
||||
"Open the details sidebar" : "Öppna informationsfältet",
|
||||
"Unfavorite" : "Ta bort från favoriter",
|
||||
"View in folder" : "Utforska i mapp",
|
||||
"Type" : "Typ",
|
||||
"Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
|
||||
@@ -347,7 +338,6 @@ OC.L10N.register(
|
||||
"Templates" : "Mallar",
|
||||
"New template folder" : "Ny mallmapp",
|
||||
"In folder" : "I mapp",
|
||||
"Pick folder to search in" : "Välj en mapp att söka i",
|
||||
"Search in all files" : "Sök i alla filer",
|
||||
"Search in folder: {folder}" : "Sök i mapp: {folder}",
|
||||
"One of the dropped files could not be processed" : "En av de släppta filerna kunde inte bearbetas",
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
"Another entry with the same name already exists." : "En annan post med samma namn finns redan.",
|
||||
"Invalid filename." : "Ogiltigt filnamn.",
|
||||
"Rename file" : "Byt namn på fil",
|
||||
"Recently created" : "Nyligen skapade",
|
||||
"Folder" : "Mapp",
|
||||
"Unknown file type" : "Okänd filtyp",
|
||||
"{ext} image" : "{ext} bild",
|
||||
@@ -109,7 +108,6 @@
|
||||
"Last 30 days" : "Senaste 30 dagarna",
|
||||
"This year ({year})" : "I år ({year})",
|
||||
"Last year ({year})" : "Förra året ({year})",
|
||||
"Custom range" : "Anpassat intervall",
|
||||
"Custom date range" : "Anpassat datumintervall",
|
||||
"Search everywhere" : "Sök överallt",
|
||||
"Documents" : "Dokument",
|
||||
@@ -233,9 +231,6 @@
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Att ta bort filtillägget \"{old}\" kan göra filen oläsbar.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Att lägga till filtillägget \"{new}\" kan göra filen oläsbar.",
|
||||
"Do not show this dialog again." : "Visa inte denna dialog igen.",
|
||||
"Rename file to hidden" : "Byt namn på filen till ”hidden”",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Om man sätter en punkt framför ett filnamn kan filen bli dold.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Är du säker på att du vill byta namn på filen till \"{filename}\"?",
|
||||
"Cancel" : "Avbryt",
|
||||
"Rename" : "Byt namn",
|
||||
"Select file or folder to link to" : "Välj fil eller mapp att länka till",
|
||||
@@ -318,9 +313,7 @@
|
||||
"The files are locked" : "Filerna är låsta",
|
||||
"The file does not exist anymore" : "Filen finns inte längre",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Flyttar \"{source}\" till \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Flyttar {count}filer till \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopierar \"{source}\" till \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Kopierar {count} filer till \"{destination}\" …",
|
||||
"Choose destination" : "Välj destination",
|
||||
"Copy to {target}" : "Kopiera till {target}",
|
||||
"Move to {target}" : "Flytta till {target}",
|
||||
@@ -335,8 +328,6 @@
|
||||
"Retry and close" : "Försök igen och stäng",
|
||||
"Open online" : "Öppna online",
|
||||
"Details" : "Detaljer",
|
||||
"Open the details sidebar" : "Öppna informationsfältet",
|
||||
"Unfavorite" : "Ta bort från favoriter",
|
||||
"View in folder" : "Utforska i mapp",
|
||||
"Type" : "Typ",
|
||||
"Created new folder \"{name}\"" : "Skapat ny mapp \"{name}\"",
|
||||
@@ -345,7 +336,6 @@
|
||||
"Templates" : "Mallar",
|
||||
"New template folder" : "Ny mallmapp",
|
||||
"In folder" : "I mapp",
|
||||
"Pick folder to search in" : "Välj en mapp att söka i",
|
||||
"Search in all files" : "Sök i alla filer",
|
||||
"Search in folder: {folder}" : "Sök i mapp: {folder}",
|
||||
"One of the dropped files could not be processed" : "En av de släppta filerna kunde inte bearbetas",
|
||||
|
||||
@@ -12,8 +12,8 @@ import { emit } from '@nextcloud/event-bus'
|
||||
import { n, t } from '@nextcloud/l10n'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import PQueue from 'p-queue'
|
||||
import logger from '../logger.ts'
|
||||
import { fetchNode } from '../services/WebdavClient.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
type ConversionResponse = {
|
||||
path: string
|
||||
|
||||
@@ -10,7 +10,7 @@ import * as capabilities from '@nextcloud/capabilities'
|
||||
import * as eventBus from '@nextcloud/event-bus'
|
||||
import { File, Folder, Permission } from '@nextcloud/files'
|
||||
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { action } from './deleteAction.ts'
|
||||
import { shouldAskForConfirmation } from './deleteUtils.ts'
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { Permission } from '@nextcloud/files'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import PQueue from 'p-queue'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { askConfirmation, canDisconnectOnly, canUnshareOnly, deleteNode, displayName, shouldAskForConfirmation } from './deleteUtils.ts'
|
||||
|
||||
// TODO: once the files app is migrated to the new frontend use the import instead:
|
||||
|
||||
@@ -11,10 +11,10 @@ import { showError } from '@nextcloud/dialogs'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { DefaultType, FileType } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { isDownloadable } from '../utils/permissions.ts'
|
||||
|
||||
export const action: IFileAction = {
|
||||
|
||||
@@ -9,7 +9,7 @@ import axios from '@nextcloud/axios'
|
||||
import * as eventBus from '@nextcloud/event-bus'
|
||||
import { File, Permission } from '@nextcloud/files'
|
||||
import { beforeAll, beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { action } from './favoriteAction.ts'
|
||||
import * as favoriteAction from './favoriteAction.ts'
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import { generateUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import PQueue from 'p-queue'
|
||||
import Vue from 'vue'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
const queue = new PQueue({ concurrency: 5 })
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ import { t } from '@nextcloud/l10n'
|
||||
import { getConflicts } from '@nextcloud/upload'
|
||||
import { basename, join } from 'path'
|
||||
import Vue from 'vue'
|
||||
import logger from '../logger.ts'
|
||||
import { getContents } from '../services/Files.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { canCopy, canMove, getQueue, MoveCopyAction } from './moveOrCopyActionUtils.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@ import { translate as t } from '@nextcloud/l10n'
|
||||
import { encodePath } from '@nextcloud/paths'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { isSyncable } from '../utils/permissions.ts'
|
||||
|
||||
export const action: IFileAction = {
|
||||
|
||||
@@ -7,7 +7,7 @@ import type { IView } from '@nextcloud/files'
|
||||
|
||||
import { File, Folder, Permission } from '@nextcloud/files'
|
||||
import { beforeEach, describe, expect, test, vi } from 'vitest'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { action } from './sidebarAction.ts'
|
||||
|
||||
const sidebar = vi.hoisted(() => ({
|
||||
|
||||
@@ -9,7 +9,7 @@ import InformationSvg from '@mdi/svg/svg/information-outline.svg?raw'
|
||||
import { getSidebar, Permission } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
export const ACTION_DETAILS = 'details'
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ import NcBreadcrumbs from '@nextcloud/vue/components/NcBreadcrumbs'
|
||||
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useViews } from '../composables/useViews.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { dataTransferToFileTree, onDropExternalFiles, onDropInternalFiles } from '../services/DropService.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useDragAndDropStore } from '../store/dragging.ts'
|
||||
@@ -83,7 +84,6 @@ import { useFilesStore } from '../store/files.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { useUploaderStore } from '../store/uploader.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'BreadCrumbs',
|
||||
|
||||
@@ -37,9 +37,9 @@ import { UploadStatus } from '@nextcloud/upload'
|
||||
import debounce from 'debounce'
|
||||
import { defineComponent } from 'vue'
|
||||
import TrayArrowDownIcon from 'vue-material-design-icons/TrayArrowDown.vue'
|
||||
import logger from '../logger.ts'
|
||||
import { dataTransferToFileTree, onDropExternalFiles } from '../services/DropService.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DragAndDropNotice',
|
||||
|
||||
@@ -136,10 +136,10 @@ import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import CustomElementRender from '../CustomElementRender.vue'
|
||||
import { useFileListWidth } from '../../composables/useFileListWidth.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import actionsMixins from '../../mixins/actionsMixin.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { executeAction } from '../../utils/actionUtils.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryActions',
|
||||
|
||||
@@ -27,10 +27,10 @@ import { useHotKey } from '@nextcloud/vue/composables/useHotKey'
|
||||
import { defineComponent } from 'vue'
|
||||
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useKeyboardStore } from '../../store/keyboard.ts'
|
||||
import { useSelectionStore } from '../../store/selection.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryCheckbox',
|
||||
|
||||
@@ -49,11 +49,11 @@ import { basename } from '@nextcloud/paths'
|
||||
import { defineComponent, inject } from 'vue'
|
||||
import NcTextField from '@nextcloud/vue/components/NcTextField'
|
||||
import { useFileListWidth } from '../../composables/useFileListWidth.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useRenamingStore } from '../../store/renaming.ts'
|
||||
import { useUserConfigStore } from '../../store/userconfig.ts'
|
||||
import { getFilenameValidity } from '../../utils/filenameValidity.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryName',
|
||||
|
||||
@@ -78,9 +78,9 @@ import CollectivesIcon from './CollectivesIcon.vue'
|
||||
import FavoriteIcon from './FavoriteIcon.vue'
|
||||
import RecentlyCreatedIcon from './RecentlyCreatedIcon.vue'
|
||||
import { usePreviewImage } from '../../composables/usePreviewImage.ts'
|
||||
import logger from '../../logger.ts'
|
||||
import { isLivePhoto } from '../../services/LivePhotos.ts'
|
||||
import { useUserConfigStore } from '../../store/userconfig.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FileEntryPreview',
|
||||
|
||||
@@ -14,13 +14,13 @@ import { generateUrl } from '@nextcloud/router'
|
||||
import { isPublicShare } from '@nextcloud/sharing/public'
|
||||
import { getConflicts, getUploader } from '@nextcloud/upload'
|
||||
import { vOnClickOutside } from '@vueuse/components'
|
||||
import { extname, relative } from 'path'
|
||||
import { extname } from 'path'
|
||||
import Vue, { computed, defineComponent } from 'vue'
|
||||
import { action as sidebarAction } from '../actions/sidebarAction.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { onDropInternalFiles } from '../services/DropService.ts'
|
||||
import { getDragAndDropPreview } from '../utils/dragUtils.ts'
|
||||
import { hashCode } from '../utils/hashUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { isDownloadable } from '../utils/permissions.ts'
|
||||
|
||||
Vue.directive('onClickOutside', vOnClickOutside)
|
||||
@@ -488,17 +488,12 @@ export default defineComponent({
|
||||
const items = Array.from(event.dataTransfer?.items || [])
|
||||
|
||||
if (selection.length === 0 && items.some((item) => item.kind === 'file')) {
|
||||
const files = items.filter((item) => item.kind === 'file')
|
||||
.map((item) => 'webkitGetAsEntry' in item ? item.webkitGetAsEntry() : item.getAsFile())
|
||||
.filter(Boolean) as (FileSystemEntry | File)[]
|
||||
const uploader = getUploader()
|
||||
const root = uploader.destination.path
|
||||
const relativePath = relative(root, this.source.path)
|
||||
logger.debug('Start uploading dropped files', { target: this.source.path, root, relativePath, files: files.map((file) => file.name) })
|
||||
|
||||
await uploader.batchUpload(
|
||||
relativePath,
|
||||
files,
|
||||
this.source.path,
|
||||
items.filter((item) => item.kind === 'file')
|
||||
.map((item) => 'webkitGetAsEntry' in item ? item.webkitGetAsEntry() : item.getAsFile())
|
||||
.filter(Boolean) as (FileSystemEntry | File)[],
|
||||
async (nodes, path) => {
|
||||
try {
|
||||
const { contents, folder } = await this.activeView!.getContents(path)
|
||||
@@ -541,7 +536,7 @@ export default defineComponent({
|
||||
const isCopy = event.ctrlKey
|
||||
this.dragover = false
|
||||
|
||||
logger.debug('Dropped', { event, folder: this.source, selection })
|
||||
logger.debug('Dropped', { event, folder: this.source, selection, fileTree })
|
||||
|
||||
const nodes = selection.map((source) => this.filesStore.getNode(source)) as Node[]
|
||||
await onDropInternalFiles(nodes, this.source, contents, isCopy)
|
||||
|
||||
@@ -13,7 +13,7 @@ import type { Folder, IFileListHeader, View } from '@nextcloud/files'
|
||||
import type { PropType } from 'vue'
|
||||
|
||||
import PQueue from 'p-queue'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
/**
|
||||
* This component is used to render custom
|
||||
|
||||
@@ -84,11 +84,11 @@ import { FILE_LIST_HEAD_FIRST_BATCH_ACTION_ID } from './FilesListTableHeaderActi
|
||||
import FilesListTableHeaderButton from './FilesListTableHeaderButton.vue'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useRouteParameters } from '../composables/useRouteParameters.ts'
|
||||
import logger from '../logger.ts'
|
||||
import filesSortingMixin from '../mixins/filesSorting.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export const FILES_LIST_HEADER_SELECT_ALL_CHECKBOX_ID = 'files-list-header-select-all-checkbox'
|
||||
|
||||
|
||||
@@ -88,12 +88,12 @@ import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import { FILES_LIST_HEADER_SELECT_ALL_CHECKBOX_ID } from './FilesListTableHeader.vue'
|
||||
import { useFileActions } from '../composables/useFileActions.ts'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import logger from '../logger.ts'
|
||||
import actionsMixins from '../mixins/actionsMixin.ts'
|
||||
import { useActionsMenuStore } from '../store/actionsmenu.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export const FILE_LIST_HEAD_FIRST_BATCH_ACTION_ID = 'files-list-head-first-batch-action'
|
||||
|
||||
|
||||
@@ -91,10 +91,10 @@ import { useEnabledFileActions } from '../composables/useFileActions.ts'
|
||||
import { useFileListHeaders } from '../composables/useFileListHeaders.ts'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { useRouteParameters } from '../composables/useRouteParameters.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { useActiveStore } from '../store/active.ts'
|
||||
import { useSelectionStore } from '../store/selection.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FilesListVirtual',
|
||||
|
||||
@@ -10,9 +10,9 @@ import { NcIconSvgWrapper, NcLoadingIcon } from '@nextcloud/vue'
|
||||
import { ref, toRef, watch } from 'vue'
|
||||
import NcAppSidebarTab from '@nextcloud/vue/components/NcAppSidebarTab'
|
||||
import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
|
||||
import logger from '../../logger.ts'
|
||||
import { useActiveStore } from '../../store/active.ts'
|
||||
import { useSidebarStore } from '../../store/sidebar.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
const props = defineProps<{
|
||||
/**
|
||||
|
||||
@@ -37,7 +37,7 @@ import { debounce, throttle } from 'throttle-debounce'
|
||||
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
|
||||
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
|
||||
import ChartPie from 'vue-material-design-icons/ChartPieOutline.vue'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
export default {
|
||||
name: 'NavigationQuota',
|
||||
|
||||
@@ -17,8 +17,8 @@ import NcInputField from '@nextcloud/vue/components/NcInputField'
|
||||
import NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'
|
||||
import NcNoteCard from '@nextcloud/vue/components/NcNoteCard'
|
||||
import NcProgressBar from '@nextcloud/vue/components/NcProgressBar'
|
||||
import logger from '../../logger.ts'
|
||||
import { SanitizeFilenameStatus } from '../../models/SanitizeFilenameStatus.ts'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
|
||||
type ApiStatus = { total: number, processed: number, errors?: Record<string, string[]>, status: SanitizeFilenameStatus }
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ import debounce from 'debounce'
|
||||
import Vue from 'vue'
|
||||
import NcButton from '@nextcloud/vue/components/NcButton'
|
||||
import NcSelect from '@nextcloud/vue/components/NcSelect'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
const picker = getFilePickerBuilder(t('files', 'Choose a file or folder to transfer'))
|
||||
.setMultiSelect(false)
|
||||
|
||||
@@ -77,7 +77,7 @@ import type { PropType } from 'vue'
|
||||
import debounce from 'debounce'
|
||||
import { defineComponent } from 'vue'
|
||||
import { useFileListWidth } from '../composables/useFileListWidth.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
interface RecycledPoolItem {
|
||||
key: string
|
||||
|
||||
@@ -7,9 +7,9 @@ import { getFileActions } from '@nextcloud/files'
|
||||
import { useHotKey } from '@nextcloud/vue/composables/useHotKey'
|
||||
import { dirname } from 'path'
|
||||
import { useRoute, useRouter } from 'vue-router/composables'
|
||||
import logger from '../logger.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { executeAction } from '../utils/actionUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { useRouteParameters } from './useRouteParameters.ts'
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,7 +11,7 @@ import { t } from '@nextcloud/l10n'
|
||||
import wrap from '@vue/web-component-wrapper'
|
||||
import Vue from 'vue'
|
||||
import FileListFilterType from '../components/FileListFilter/FileListFilterType.vue'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
export interface ITypePreset {
|
||||
id: string
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
/*!
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { getLoggerBuilder } from '@nextcloud/logger'
|
||||
|
||||
export const logger = getLoggerBuilder()
|
||||
export default getLoggerBuilder()
|
||||
.setApp('files')
|
||||
.detectUser()
|
||||
.build()
|
||||
@@ -13,7 +13,7 @@ import { emit } from '@nextcloud/event-bus'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { basename } from 'path'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { newNodeName } from '../utils/newNodeDialog.ts'
|
||||
|
||||
export const entry: NewMenuEntry = {
|
||||
|
||||
@@ -14,7 +14,7 @@ import { loadState } from '@nextcloud/initial-state'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { join } from 'path'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { newNodeName } from '../utils/newNodeDialog.ts'
|
||||
|
||||
const templatesEnabled = loadState<boolean>('files', 'templates_enabled', true)
|
||||
|
||||
@@ -9,7 +9,7 @@ import { getFilePickerBuilder } from '@nextcloud/dialogs'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { imagePath } from '@nextcloud/router'
|
||||
import { logger } from '../../utils/logger.ts'
|
||||
import logger from '../../logger.ts'
|
||||
|
||||
/**
|
||||
* Initialize the unified search plugin.
|
||||
|
||||
@@ -12,11 +12,11 @@ import { relative } from 'path'
|
||||
import queryString from 'query-string'
|
||||
import Vue from 'vue'
|
||||
import Router, { isNavigationFailure, NavigationFailureType } from 'vue-router'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { usePathsStore } from '../store/paths.ts'
|
||||
import { defaultView } from '../utils/filesViews.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import { join } from '@nextcloud/paths'
|
||||
import { getUploader, hasConflict } from '@nextcloud/upload'
|
||||
import { handleCopyMoveNodesTo, HintException } from '../actions/moveOrCopyAction.ts'
|
||||
import { MoveCopyAction } from '../actions/moveOrCopyActionUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { createDirectoryIfNotExists, Directory, resolveConflict, traverseTree } from './DropServiceUtils.ts'
|
||||
|
||||
/**
|
||||
@@ -123,7 +123,7 @@ export async function onDropExternalFiles(root: RootDirectory, destination: IFol
|
||||
// then browse its tree and upload its contents.
|
||||
if (file instanceof Directory) {
|
||||
try {
|
||||
logger.debug('Processing directory', { relativePath, destination })
|
||||
logger.debug('Processing directory', { relativePath })
|
||||
await createDirectoryIfNotExists(relativePath, destination)
|
||||
await uploadDirectoryContents(file, relativePath)
|
||||
} catch (error) {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { join } from 'node:path'
|
||||
import { beforeAll, describe, expect, it, vi } from 'vitest'
|
||||
import { DataTransferItem as DataTransferItemMock, FileSystemDirectoryEntry, fileSystemEntryToDataTransferItem, FileSystemFileEntry } from '../../../../__tests__/FileSystemAPIUtils.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { dataTransferToFileTree } from './DropService.ts'
|
||||
import { Directory, traverseTree } from './DropServiceUtils.ts'
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import { defaultRemoteURL, defaultRootPath, getClient, getDefaultPropfind, resul
|
||||
import { t } from '@nextcloud/l10n'
|
||||
import { join } from '@nextcloud/paths'
|
||||
import { openConflictPicker } from '@nextcloud/upload'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
|
||||
/**
|
||||
* This represents a Directory in the file tree
|
||||
|
||||
@@ -8,7 +8,7 @@ import type { ContentsWithRoot } from '@nextcloud/files'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { getFavoriteNodes, getRemoteURL, getRootPath } from '@nextcloud/files/dav'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import logger from '../logger.ts'
|
||||
import { getContents as filesContents } from './Files.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ import type { FileStat, ResponseDataDetailed } from 'webdav'
|
||||
|
||||
import { getDefaultPropfind, getRootPath, resultToNode } from '@nextcloud/files/dav'
|
||||
import { join } from 'path'
|
||||
import logger from '../logger.ts'
|
||||
import { useFilesStore } from '../store/files.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useSearchStore } from '../store/search.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
import { searchNodes } from './WebDavSearch.ts'
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@ import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { getRecentSearch, getRemoteURL, getRootPath, resultToNode } from '@nextcloud/files/dav'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
import logger from '../logger.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useUserConfigStore } from '../store/userconfig.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { client } from './WebdavClient.ts'
|
||||
|
||||
const lastTwoWeeksTimestamp = Math.round((Date.now() / 1000) - (60 * 60 * 24 * 14))
|
||||
|
||||
@@ -8,9 +8,9 @@ import type { ContentsWithRoot } from '@nextcloud/files'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { Folder, Permission } from '@nextcloud/files'
|
||||
import { defaultRemoteURL, getRootPath } from '@nextcloud/files/dav'
|
||||
import logger from '../logger.ts'
|
||||
import { getPinia } from '../store/index.ts'
|
||||
import { useSearchStore } from '../store/search.ts'
|
||||
import { logger } from '../utils/logger.ts'
|
||||
import { searchNodes } from './WebDavSearch.ts'
|
||||
|
||||
/**
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user