mirror of https://gitee.com/openkylin/kdav.git
Import Upstream version 5.92.0
This commit is contained in:
commit
22bd54a0e9
|
@ -0,0 +1,26 @@
|
||||||
|
# Ignore the following files
|
||||||
|
*~
|
||||||
|
*.[oa]
|
||||||
|
*.diff
|
||||||
|
*.kate-swp
|
||||||
|
*.kdev4
|
||||||
|
.kdev_include_paths
|
||||||
|
*.kdevelop.pcs
|
||||||
|
*.moc
|
||||||
|
*.moc.cpp
|
||||||
|
*.orig
|
||||||
|
*.user
|
||||||
|
.*.swp
|
||||||
|
.swp.*
|
||||||
|
Doxyfile
|
||||||
|
Makefile
|
||||||
|
/build*/
|
||||||
|
.cmake/
|
||||||
|
CMakeLists.txt.user*
|
||||||
|
*.unc-backup*
|
||||||
|
/.clang-format
|
||||||
|
/compile_commands.json
|
||||||
|
.clangd
|
||||||
|
.idea
|
||||||
|
/cmake-build*
|
||||||
|
.cache
|
|
@ -0,0 +1,9 @@
|
||||||
|
# SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
include:
|
||||||
|
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
|
||||||
|
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml
|
||||||
|
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
|
||||||
|
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml
|
||||||
|
- https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android-qt6.yml
|
|
@ -0,0 +1,8 @@
|
||||||
|
Dependencies:
|
||||||
|
- 'on': ['@all']
|
||||||
|
'require':
|
||||||
|
'frameworks/extra-cmake-modules': '@same'
|
||||||
|
'frameworks/kio' : '@same'
|
||||||
|
|
||||||
|
Options:
|
||||||
|
test-before-installing: True
|
|
@ -0,0 +1,94 @@
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
set(KF_VERSION "5.92.0") # handled by release scripts
|
||||||
|
set(KF_DEP_VERSION "5.92.0") # handled by release scripts
|
||||||
|
|
||||||
|
project(libkdav VERSION ${KF_VERSION})
|
||||||
|
|
||||||
|
find_package(ECM 5.92.0 CONFIG REQUIRED)
|
||||||
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
|
|
||||||
|
include(KDEInstallDirs)
|
||||||
|
include(KDECMakeSettings)
|
||||||
|
include(KDEGitCommitHooks)
|
||||||
|
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
||||||
|
|
||||||
|
include(CMakeFindDependencyMacro)
|
||||||
|
include(ECMSetupVersion)
|
||||||
|
include(GenerateExportHeader)
|
||||||
|
include(ECMGenerateHeaders)
|
||||||
|
include(ECMGeneratePriFile)
|
||||||
|
include(FeatureSummary)
|
||||||
|
include(ECMAddQch)
|
||||||
|
include(ECMAddTests)
|
||||||
|
include(ECMInstallIcons)
|
||||||
|
include(ECMQtDeclareLoggingCategory)
|
||||||
|
|
||||||
|
|
||||||
|
set(REQUIRED_QT_VERSION 5.15.2)
|
||||||
|
find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core Gui Test)
|
||||||
|
|
||||||
|
find_package(KF5 ${KF_DEP_VERSION} REQUIRED CoreAddons KIO I18n)
|
||||||
|
|
||||||
|
# setup lib
|
||||||
|
|
||||||
|
add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050f02)
|
||||||
|
add_definitions(-DKF_DISABLE_DEPRECATED_BEFORE_AND_AT=0x055900)
|
||||||
|
|
||||||
|
option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF)
|
||||||
|
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
|
||||||
|
|
||||||
|
|
||||||
|
ecm_setup_version(PROJECT VARIABLE_PREFIX KDAV
|
||||||
|
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kdav_version.h"
|
||||||
|
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5DAVConfigVersion.cmake"
|
||||||
|
SOVERSION 5
|
||||||
|
)
|
||||||
|
|
||||||
|
ki18n_install(po)
|
||||||
|
|
||||||
|
add_subdirectory(src)
|
||||||
|
if(BUILD_TESTING)
|
||||||
|
add_subdirectory(autotests)
|
||||||
|
add_subdirectory(test)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5DAV")
|
||||||
|
|
||||||
|
if (BUILD_QCH)
|
||||||
|
ecm_install_qch_export(
|
||||||
|
TARGETS KF5DAV_QCH
|
||||||
|
FILE KF5DAVQchTargets.cmake
|
||||||
|
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5DAVQchTargets.cmake\")")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
configure_package_config_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/KF5DAVConfig.cmake.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF5DAVConfig.cmake"
|
||||||
|
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF5DAVConfig.cmake"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/KF5DAVConfigVersion.cmake"
|
||||||
|
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
|
||||||
|
install(EXPORT KF5DAVTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5DAVTargets.cmake NAMESPACE KF5::)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/kdav_version.h
|
||||||
|
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF} COMPONENT Devel
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
feature_summary(WHAT ALL
|
||||||
|
INCLUDE_QUIET_PACKAGES
|
||||||
|
FATAL_ON_MISSING_REQUIRED_PACKAGES
|
||||||
|
)
|
||||||
|
|
||||||
|
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
|
|
@ -0,0 +1,7 @@
|
||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
include(CMakeFindDependencyMacro)
|
||||||
|
find_dependency(KF5CoreAddons "@KF_DEP_VERSION@")
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/KF5DAVTargets.cmake")
|
||||||
|
@PACKAGE_INCLUDE_QCHTARGETS@
|
|
@ -0,0 +1,121 @@
|
||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
|
@ -0,0 +1,319 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||||
|
document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your freedom to share
|
||||||
|
and change it. By contrast, the GNU General Public License is intended to
|
||||||
|
guarantee your freedom to share and change free software--to make sure the
|
||||||
|
software is free for all its users. This General Public License applies to
|
||||||
|
most of the Free Software Foundation's software and to any other program whose
|
||||||
|
authors commit to using it. (Some other Free Software Foundation software
|
||||||
|
is covered by the GNU Lesser General Public License instead.) You can apply
|
||||||
|
it to your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not price. Our
|
||||||
|
General Public Licenses are designed to make sure that you have the freedom
|
||||||
|
to distribute copies of free software (and charge for this service if you
|
||||||
|
wish), that you receive source code or can get it if you want it, that you
|
||||||
|
can change the software or use pieces of it in new free programs; and that
|
||||||
|
you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid anyone to
|
||||||
|
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||||
|
translate to certain responsibilities for you if you distribute copies of
|
||||||
|
the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether gratis or
|
||||||
|
for a fee, you must give the recipients all the rights that you have. You
|
||||||
|
must make sure that they, too, receive or can get the source code. And you
|
||||||
|
must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||||
|
offer you this license which gives you legal permission to copy, distribute
|
||||||
|
and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain that
|
||||||
|
everyone understands that there is no warranty for this free software. If
|
||||||
|
the software is modified by someone else and passed on, we want its recipients
|
||||||
|
to know that what they have is not the original, so that any problems introduced
|
||||||
|
by others will not reflect on the original authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software patents. We
|
||||||
|
wish to avoid the danger that redistributors of a free program will individually
|
||||||
|
obtain patent licenses, in effect making the program proprietary. To prevent
|
||||||
|
this, we have made it clear that any patent must be licensed for everyone's
|
||||||
|
free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and modification
|
||||||
|
follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains a notice
|
||||||
|
placed by the copyright holder saying it may be distributed under the terms
|
||||||
|
of this General Public License. The "Program", below, refers to any such program
|
||||||
|
or work, and a "work based on the Program" means either the Program or any
|
||||||
|
derivative work under copyright law: that is to say, a work containing the
|
||||||
|
Program or a portion of it, either verbatim or with modifications and/or translated
|
||||||
|
into another language. (Hereinafter, translation is included without limitation
|
||||||
|
in the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not covered
|
||||||
|
by this License; they are outside its scope. The act of running the Program
|
||||||
|
is not restricted, and the output from the Program is covered only if its
|
||||||
|
contents constitute a work based on the Program (independent of having been
|
||||||
|
made by running the Program). Whether that is true depends on what the Program
|
||||||
|
does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's source code
|
||||||
|
as you receive it, in any medium, provided that you conspicuously and appropriately
|
||||||
|
publish on each copy an appropriate copyright notice and disclaimer of warranty;
|
||||||
|
keep intact all the notices that refer to this License and to the absence
|
||||||
|
of any warranty; and give any other recipients of the Program a copy of this
|
||||||
|
License along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and you
|
||||||
|
may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion of it,
|
||||||
|
thus forming a work based on the Program, and copy and distribute such modifications
|
||||||
|
or work under the terms of Section 1 above, provided that you also meet all
|
||||||
|
of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices stating that
|
||||||
|
you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in whole or
|
||||||
|
in part contains or is derived from the Program or any part thereof, to be
|
||||||
|
licensed as a whole at no charge to all third parties under the terms of this
|
||||||
|
License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively when run,
|
||||||
|
you must cause it, when started running for such interactive use in the most
|
||||||
|
ordinary way, to print or display an announcement including an appropriate
|
||||||
|
copyright notice and a notice that there is no warranty (or else, saying that
|
||||||
|
you provide a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this License.
|
||||||
|
(Exception: if the Program itself is interactive but does not normally print
|
||||||
|
such an announcement, your work based on the Program is not required to print
|
||||||
|
an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If identifiable
|
||||||
|
sections of that work are not derived from the Program, and can be reasonably
|
||||||
|
considered independent and separate works in themselves, then this License,
|
||||||
|
and its terms, do not apply to those sections when you distribute them as
|
||||||
|
separate works. But when you distribute the same sections as part of a whole
|
||||||
|
which is a work based on the Program, the distribution of the whole must be
|
||||||
|
on the terms of this License, whose permissions for other licensees extend
|
||||||
|
to the entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest your
|
||||||
|
rights to work written entirely by you; rather, the intent is to exercise
|
||||||
|
the right to control the distribution of derivative or collective works based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program with
|
||||||
|
the Program (or with a work based on the Program) on a volume of a storage
|
||||||
|
or distribution medium does not bring the other work under the scope of this
|
||||||
|
License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it, under Section
|
||||||
|
2) in object code or executable form under the terms of Sections 1 and 2 above
|
||||||
|
provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable source code,
|
||||||
|
which must be distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three years, to give
|
||||||
|
any third party, for a charge no more than your cost of physically performing
|
||||||
|
source distribution, a complete machine-readable copy of the corresponding
|
||||||
|
source code, to be distributed under the terms of Sections 1 and 2 above on
|
||||||
|
a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer to distribute
|
||||||
|
corresponding source code. (This alternative is allowed only for noncommercial
|
||||||
|
distribution and only if you received the program in object code or executable
|
||||||
|
form with such an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for making
|
||||||
|
modifications to it. For an executable work, complete source code means all
|
||||||
|
the source code for all modules it contains, plus any associated interface
|
||||||
|
definition files, plus the scripts used to control compilation and installation
|
||||||
|
of the executable. However, as a special exception, the source code distributed
|
||||||
|
need not include anything that is normally distributed (in either source or
|
||||||
|
binary form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component itself
|
||||||
|
accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering access to
|
||||||
|
copy from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place counts as distribution of the source code,
|
||||||
|
even though third parties are not compelled to copy the source along with
|
||||||
|
the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program except
|
||||||
|
as expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||||
|
sublicense or distribute the Program is void, and will automatically terminate
|
||||||
|
your rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses terminated
|
||||||
|
so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not signed
|
||||||
|
it. However, nothing else grants you permission to modify or distribute the
|
||||||
|
Program or its derivative works. These actions are prohibited by law if you
|
||||||
|
do not accept this License. Therefore, by modifying or distributing the Program
|
||||||
|
(or any work based on the Program), you indicate your acceptance of this License
|
||||||
|
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the Program),
|
||||||
|
the recipient automatically receives a license from the original licensor
|
||||||
|
to copy, distribute or modify the Program subject to these terms and conditions.
|
||||||
|
You may not impose any further restrictions on the recipients' exercise of
|
||||||
|
the rights granted herein. You are not responsible for enforcing compliance
|
||||||
|
by third parties to this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent infringement
|
||||||
|
or for any other reason (not limited to patent issues), conditions are imposed
|
||||||
|
on you (whether by court order, agreement or otherwise) that contradict the
|
||||||
|
conditions of this License, they do not excuse you from the conditions of
|
||||||
|
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||||
|
obligations under this License and any other pertinent obligations, then as
|
||||||
|
a consequence you may not distribute the Program at all. For example, if a
|
||||||
|
patent license would not permit royalty-free redistribution of the Program
|
||||||
|
by all those who receive copies directly or indirectly through you, then the
|
||||||
|
only way you could satisfy both it and this License would be to refrain entirely
|
||||||
|
from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply and
|
||||||
|
the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any patents
|
||||||
|
or other property right claims or to contest validity of any such claims;
|
||||||
|
this section has the sole purpose of protecting the integrity of the free
|
||||||
|
software distribution system, which is implemented by public license practices.
|
||||||
|
Many people have made generous contributions to the wide range of software
|
||||||
|
distributed through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing to
|
||||||
|
distribute software through any other system and a licensee cannot impose
|
||||||
|
that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to be a
|
||||||
|
consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in certain
|
||||||
|
countries either by patents or by copyrighted interfaces, the original copyright
|
||||||
|
holder who places the Program under this License may add an explicit geographical
|
||||||
|
distribution limitation excluding those countries, so that distribution is
|
||||||
|
permitted only in or among countries not thus excluded. In such case, this
|
||||||
|
License incorporates the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the General Public License from time to time. Such new versions will be similar
|
||||||
|
in spirit to the present version, but may differ in detail to address new
|
||||||
|
problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program specifies
|
||||||
|
a version number of this License which applies to it and "any later version",
|
||||||
|
you have the option of following the terms and conditions either of that version
|
||||||
|
or of any later version published by the Free Software Foundation. If the
|
||||||
|
Program does not specify a version number of this License, you may choose
|
||||||
|
any version ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free programs
|
||||||
|
whose distribution conditions are different, write to the author to ask for
|
||||||
|
permission. For software which is copyrighted by the Free Software Foundation,
|
||||||
|
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||||
|
Our decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing and reuse
|
||||||
|
of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||||
|
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||||
|
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
|
||||||
|
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||||
|
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||||
|
OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||||
|
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||||
|
OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
|
||||||
|
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest possible
|
||||||
|
use to the public, the best way to achieve this is to make it free software
|
||||||
|
which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest to attach
|
||||||
|
them to the start of each source file to most effectively convey the exclusion
|
||||||
|
of warranty; and each file should have at least the "copyright" line and a
|
||||||
|
pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and an idea of what it does.>
|
||||||
|
|
||||||
|
Copyright (C) <yyyy> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
||||||
|
Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this when
|
||||||
|
it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||||
|
with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software,
|
||||||
|
and you are welcome to redistribute it under certain conditions; type `show
|
||||||
|
c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may be
|
||||||
|
called something other than `show w' and `show c'; they could even be mouse-clicks
|
||||||
|
or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||||
|
is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision'
|
||||||
|
(which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General
|
||||||
|
Public License does not permit incorporating your program into proprietary
|
||||||
|
programs. If your program is a subroutine library, you may consider it more
|
||||||
|
useful to permit linking proprietary applications with the library. If this
|
||||||
|
is what you want to do, use the GNU Lesser General Public License instead
|
||||||
|
of this License.
|
|
@ -0,0 +1,446 @@
|
||||||
|
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||||
|
|
||||||
|
Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||||
|
document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the library GPL. It is numbered 2 because
|
||||||
|
it goes with version 2 of the ordinary GPL.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your freedom to share
|
||||||
|
and change it. By contrast, the GNU General Public Licenses are intended to
|
||||||
|
guarantee your freedom to share and change free software--to make sure the
|
||||||
|
software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Library General Public License, applies to some specially
|
||||||
|
designated Free Software Foundation software, and to any other libraries whose
|
||||||
|
authors decide to use it. You can use it for your libraries, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not price. Our
|
||||||
|
General Public Licenses are designed to make sure that you have the freedom
|
||||||
|
to distribute copies of free software (and charge for this service if you
|
||||||
|
wish), that you receive source code or can get it if you want it, that you
|
||||||
|
can change the software or use pieces of it in new free programs; and that
|
||||||
|
you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid anyone to
|
||||||
|
deny you these rights or to ask you to surrender the rights. These restrictions
|
||||||
|
translate to certain responsibilities for you if you distribute copies of
|
||||||
|
the library, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis or for
|
||||||
|
a fee, you must give the recipients all the rights that we gave you. You must
|
||||||
|
make sure that they, too, receive or can get the source code. If you link
|
||||||
|
a program with the library, you must provide complete object files to the
|
||||||
|
recipients so that they can relink them with the library, after making changes
|
||||||
|
to the library and recompiling it. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
|
Our method of protecting your rights has two steps: (1) copyright the library,
|
||||||
|
and (2) offer you this license which gives you legal permission to copy, distribute
|
||||||
|
and/or modify the library.
|
||||||
|
|
||||||
|
Also, for each distributor's protection, we want to make certain that everyone
|
||||||
|
understands that there is no warranty for this free library. If the library
|
||||||
|
is modified by someone else and passed on, we want its recipients to know
|
||||||
|
that what they have is not the original version, so that any problems introduced
|
||||||
|
by others will not reflect on the original authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software patents. We
|
||||||
|
wish to avoid the danger that companies distributing free software will individually
|
||||||
|
obtain patent licenses, thus in effect transforming the program into proprietary
|
||||||
|
software. To prevent this, we have made it clear that any patent must be licensed
|
||||||
|
for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||||
|
General Public License, which was designed for utility programs. This license,
|
||||||
|
the GNU Library General Public License, applies to certain designated libraries.
|
||||||
|
This license is quite different from the ordinary one; be sure to read it
|
||||||
|
in full, and don't assume that anything in it is the same as in the ordinary
|
||||||
|
license.
|
||||||
|
|
||||||
|
The reason we have a separate public license for some libraries is that they
|
||||||
|
blur the distinction we usually make between modifying or adding to a program
|
||||||
|
and simply using it. Linking a program with a library, without changing the
|
||||||
|
library, is in some sense simply using the library, and is analogous to running
|
||||||
|
a utility program or application program. However, in a textual and legal
|
||||||
|
sense, the linked executable is a combined work, a derivative of the original
|
||||||
|
library, and the ordinary General Public License treats it as such.
|
||||||
|
|
||||||
|
Because of this blurred distinction, using the ordinary General Public License
|
||||||
|
for libraries did not effectively promote software sharing, because most developers
|
||||||
|
did not use the libraries. We concluded that weaker conditions might promote
|
||||||
|
sharing better.
|
||||||
|
|
||||||
|
However, unrestricted linking of non-free programs would deprive the users
|
||||||
|
of those programs of all benefit from the free status of the libraries themselves.
|
||||||
|
This Library General Public License is intended to permit developers of non-free
|
||||||
|
programs to use free libraries, while preserving your freedom as a user of
|
||||||
|
such programs to change the free libraries that are incorporated in them.
|
||||||
|
(We have not seen how to achieve this as regards changes in header files,
|
||||||
|
but we have achieved it as regards changes in the actual functions of the
|
||||||
|
Library.) The hope is that this will lead to faster development of free libraries.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and modification
|
||||||
|
follow. Pay close attention to the difference between a "work based on the
|
||||||
|
library" and a "work that uses the library". The former contains code derived
|
||||||
|
from the library, while the latter only works together with the library.
|
||||||
|
|
||||||
|
Note that it is possible for a library to be covered by the ordinary General
|
||||||
|
Public License rather than by this special one.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library which contains a
|
||||||
|
notice placed by the copyright holder or other authorized party saying it
|
||||||
|
may be distributed under the terms of this Library General Public License
|
||||||
|
(also called "this License"). Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data prepared
|
||||||
|
so as to be conveniently linked with application programs (which use some
|
||||||
|
of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work which has
|
||||||
|
been distributed under these terms. A "work based on the Library" means either
|
||||||
|
the Library or any derivative work under copyright law: that is to say, a
|
||||||
|
work containing the Library or a portion of it, either verbatim or with modifications
|
||||||
|
and/or translated straightforwardly into another language. (Hereinafter, translation
|
||||||
|
is included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for making modifications
|
||||||
|
to it. For a library, complete source code means all the source code for all
|
||||||
|
modules it contains, plus any associated interface definition files, plus
|
||||||
|
the scripts used to control compilation and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not covered
|
||||||
|
by this License; they are outside its scope. The act of running a program
|
||||||
|
using the Library is not restricted, and output from such a program is covered
|
||||||
|
only if its contents constitute a work based on the Library (independent of
|
||||||
|
the use of the Library in a tool for writing it). Whether that is true depends
|
||||||
|
on what the Library does and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's complete source
|
||||||
|
code as you receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice and disclaimer
|
||||||
|
of warranty; keep intact all the notices that refer to this License and to
|
||||||
|
the absence of any warranty; and distribute a copy of this License along with
|
||||||
|
the Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and you
|
||||||
|
may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion of it,
|
||||||
|
thus forming a work based on the Library, and copy and distribute such modifications
|
||||||
|
or work under the terms of Section 1 above, provided that you also meet all
|
||||||
|
of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices stating that
|
||||||
|
you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no charge to all
|
||||||
|
third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a table of
|
||||||
|
data to be supplied by an application program that uses the facility, other
|
||||||
|
than as an argument passed when the facility is invoked, then you must make
|
||||||
|
a good faith effort to ensure that, in the event an application does not supply
|
||||||
|
such function or table, the facility still operates, and performs whatever
|
||||||
|
part of its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has a purpose
|
||||||
|
that is entirely well-defined independent of the application. Therefore, Subsection
|
||||||
|
2d requires that any application-supplied function or table used by this function
|
||||||
|
must be optional: if the application does not supply it, the square root function
|
||||||
|
must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If identifiable
|
||||||
|
sections of that work are not derived from the Library, and can be reasonably
|
||||||
|
considered independent and separate works in themselves, then this License,
|
||||||
|
and its terms, do not apply to those sections when you distribute them as
|
||||||
|
separate works. But when you distribute the same sections as part of a whole
|
||||||
|
which is a work based on the Library, the distribution of the whole must be
|
||||||
|
on the terms of this License, whose permissions for other licensees extend
|
||||||
|
to the entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest your
|
||||||
|
rights to work written entirely by you; rather, the intent is to exercise
|
||||||
|
the right to control the distribution of derivative or collective works based
|
||||||
|
on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library with
|
||||||
|
the Library (or with a work based on the Library) on a volume of a storage
|
||||||
|
or distribution medium does not bring the other work under the scope of this
|
||||||
|
License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public License
|
||||||
|
instead of this License to a given copy of the Library. To do this, you must
|
||||||
|
alter all the notices that refer to this License, so that they refer to the
|
||||||
|
ordinary GNU General Public License, version 2, instead of to this License.
|
||||||
|
(If a newer version than version 2 of the ordinary GNU General Public License
|
||||||
|
has appeared, then you can specify that version instead if you wish.) Do not
|
||||||
|
make any other change in these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for that copy,
|
||||||
|
so the ordinary GNU General Public License applies to all subsequent copies
|
||||||
|
and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of the Library
|
||||||
|
into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or derivative of
|
||||||
|
it, under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you accompany it with the complete corresponding
|
||||||
|
machine-readable source code, which must be distributed under the terms of
|
||||||
|
Sections 1 and 2 above on a medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy from a designated
|
||||||
|
place, then offering equivalent access to copy the source code from the same
|
||||||
|
place satisfies the requirement to distribute the source code, even though
|
||||||
|
third parties are not compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the Library, but
|
||||||
|
is designed to work with the Library by being compiled or linked with it,
|
||||||
|
is called a "work that uses the Library". Such a work, in isolation, is not
|
||||||
|
a derivative work of the Library, and therefore falls outside the scope of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library creates an
|
||||||
|
executable that is a derivative of the Library (because it contains portions
|
||||||
|
of the Library), rather than a "work that uses the library". The executable
|
||||||
|
is therefore covered by this License. Section 6 states terms for distribution
|
||||||
|
of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file that
|
||||||
|
is part of the Library, the object code for the work may be a derivative work
|
||||||
|
of the Library even though the source code is not. Whether this is true is
|
||||||
|
especially significant if the work can be linked without the Library, or if
|
||||||
|
the work is itself a library. The threshold for this to be true is not precisely
|
||||||
|
defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data structure layouts
|
||||||
|
and accessors, and small macros and small inline functions (ten lines or less
|
||||||
|
in length), then the use of the object file is unrestricted, regardless of
|
||||||
|
whether it is legally a derivative work. (Executables containing this object
|
||||||
|
code plus portions of the Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may distribute
|
||||||
|
the object code for the work under the terms of Section 6. Any executables
|
||||||
|
containing that work also fall under Section 6, whether or not they are linked
|
||||||
|
directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also compile or link a "work
|
||||||
|
that uses the Library" with the Library to produce a work containing portions
|
||||||
|
of the Library, and distribute that work under terms of your choice, provided
|
||||||
|
that the terms permit modification of the work for the customer's own use
|
||||||
|
and reverse engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the Library
|
||||||
|
is used in it and that the Library and its use are covered by this License.
|
||||||
|
You must supply a copy of this License. If the work during execution displays
|
||||||
|
copyright notices, you must include the copyright notice for the Library among
|
||||||
|
them, as well as a reference directing the user to the copy of this License.
|
||||||
|
Also, you must do one of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding machine-readable source
|
||||||
|
code for the Library including whatever changes were used in the work (which
|
||||||
|
must be distributed under Sections 1 and 2 above); and, if the work is an
|
||||||
|
executable linked with the Library, with the complete machine-readable "work
|
||||||
|
that uses the Library", as object code and/or source code, so that the user
|
||||||
|
can modify the Library and then relink to produce a modified executable containing
|
||||||
|
the modified Library. (It is understood that the user who changes the contents
|
||||||
|
of definitions files in the Library will not necessarily be able to recompile
|
||||||
|
the application to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Accompany the work with a written offer, valid for at least three years,
|
||||||
|
to give the same user the materials specified in Subsection 6a, above, for
|
||||||
|
a charge no more than the cost of performing this distribution.
|
||||||
|
|
||||||
|
c) If distribution of the work is made by offering access to copy from a designated
|
||||||
|
place, offer equivalent access to copy the above specified materials from
|
||||||
|
the same place.
|
||||||
|
|
||||||
|
d) Verify that the user has already received a copy of these materials or
|
||||||
|
that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the Library" must
|
||||||
|
include any data and utility programs needed for reproducing the executable
|
||||||
|
from it. However, as a special exception, the source code distributed need
|
||||||
|
not include anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the operating
|
||||||
|
system on which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license restrictions of
|
||||||
|
other proprietary libraries that do not normally accompany the operating system.
|
||||||
|
Such a contradiction means you cannot use both them and the Library together
|
||||||
|
in an executable that you distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the Library side-by-side
|
||||||
|
in a single library together with other library facilities not covered by
|
||||||
|
this License, and distribute such a combined library, provided that the separate
|
||||||
|
distribution of the work based on the Library and of the other library facilities
|
||||||
|
is otherwise permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based on the
|
||||||
|
Library, uncombined with any other library facilities. This must be distributed
|
||||||
|
under the terms of the Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact that part of
|
||||||
|
it is a work based on the Library, and explaining where to find the accompanying
|
||||||
|
uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute the Library
|
||||||
|
except as expressly provided under this License. Any attempt otherwise to
|
||||||
|
copy, modify, sublicense, link with, or distribute the Library is void, and
|
||||||
|
will automatically terminate your rights under this License. However, parties
|
||||||
|
who have received copies, or rights, from you under this License will not
|
||||||
|
have their licenses terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not signed
|
||||||
|
it. However, nothing else grants you permission to modify or distribute the
|
||||||
|
Library or its derivative works. These actions are prohibited by law if you
|
||||||
|
do not accept this License. Therefore, by modifying or distributing the Library
|
||||||
|
(or any work based on the Library), you indicate your acceptance of this License
|
||||||
|
to do so, and all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the Library),
|
||||||
|
the recipient automatically receives a license from the original licensor
|
||||||
|
to copy, distribute, link with or modify the Library subject to these terms
|
||||||
|
and conditions. You may not impose any further restrictions on the recipients'
|
||||||
|
exercise of the rights granted herein. You are not responsible for enforcing
|
||||||
|
compliance by third parties to this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent infringement
|
||||||
|
or for any other reason (not limited to patent issues), conditions are imposed
|
||||||
|
on you (whether by court order, agreement or otherwise) that contradict the
|
||||||
|
conditions of this License, they do not excuse you from the conditions of
|
||||||
|
this License. If you cannot distribute so as to satisfy simultaneously your
|
||||||
|
obligations under this License and any other pertinent obligations, then as
|
||||||
|
a consequence you may not distribute the Library at all. For example, if a
|
||||||
|
patent license would not permit royalty-free redistribution of the Library
|
||||||
|
by all those who receive copies directly or indirectly through you, then the
|
||||||
|
only way you could satisfy both it and this License would be to refrain entirely
|
||||||
|
from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any patents
|
||||||
|
or other property right claims or to contest validity of any such claims;
|
||||||
|
this section has the sole purpose of protecting the integrity of the free
|
||||||
|
software distribution system which is implemented by public license practices.
|
||||||
|
Many people have made generous contributions to the wide range of software
|
||||||
|
distributed through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing to
|
||||||
|
distribute software through any other system and a licensee cannot impose
|
||||||
|
that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to be a
|
||||||
|
consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in certain
|
||||||
|
countries either by patents or by copyrighted interfaces, the original copyright
|
||||||
|
holder who places the Library under this License may add an explicit geographical
|
||||||
|
distribution limitation excluding those countries, so that distribution is
|
||||||
|
permitted only in or among countries not thus excluded. In such case, this
|
||||||
|
License incorporates the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the Library General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to address
|
||||||
|
new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library specifies
|
||||||
|
a version number of this License which applies to it and "any later version",
|
||||||
|
you have the option of following the terms and conditions either of that version
|
||||||
|
or of any later version published by the Free Software Foundation. If the
|
||||||
|
Library does not specify a license version number, you may choose any version
|
||||||
|
ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free programs
|
||||||
|
whose distribution conditions are incompatible with these, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free Software
|
||||||
|
Foundation, write to the Free Software Foundation; we sometimes make exceptions
|
||||||
|
for this. Our decision will be guided by the two goals of preserving the free
|
||||||
|
status of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||||
|
THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||||
|
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY
|
||||||
|
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
|
||||||
|
OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||||
|
THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
|
||||||
|
OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
|
||||||
|
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES
|
||||||
|
OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
|
||||||
|
HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest possible
|
||||||
|
use to the public, we recommend making it free software that everyone can
|
||||||
|
redistribute and change. You can do so by permitting redistribution under
|
||||||
|
these terms (or, alternatively, under the terms of the ordinary General Public
|
||||||
|
License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively convey
|
||||||
|
the exclusion of warranty; and each file should have at least the "copyright"
|
||||||
|
line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
one line to give the library's name and an idea of what it does.
|
||||||
|
|
||||||
|
Copyright (C) year name of author
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU Library General Public License as published by the Free
|
||||||
|
Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the library, if necessary. Here
|
||||||
|
is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||||
|
|
||||||
|
the library `Frob' (a library for tweaking knobs) written
|
||||||
|
|
||||||
|
by James Random Hacker.
|
||||||
|
|
||||||
|
signature of Ty Coon, 1 April 1990
|
||||||
|
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
|
@ -0,0 +1,56 @@
|
||||||
|
# KDAV
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This is an DAV protocol implementation with KJobs.
|
||||||
|
|
||||||
|
Calendars and todos are supported, using either GroupDAV
|
||||||
|
or CalDAV, and contacts are supported using GroupDAV or
|
||||||
|
CardDAV.
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
It should be pretty straightforward. The URL to use should be, if possible,
|
||||||
|
the principals URL for your server (CalDAV / CardDAV) or the parent
|
||||||
|
collection of your calendars to allow discovery.
|
||||||
|
|
||||||
|
|
||||||
|
## Tested with / known bugs
|
||||||
|
|
||||||
|
Here is a list of servers tested with this resource with the URLs used.
|
||||||
|
Feel free to contact the author(s) if you successfully tested a configuration
|
||||||
|
not listed here.
|
||||||
|
|
||||||
|
* Egroupware (1.6.002)
|
||||||
|
https://host/groupdav.php
|
||||||
|
- GroupDAV working.
|
||||||
|
- CalDAV working.
|
||||||
|
- CardDAV working.
|
||||||
|
|
||||||
|
* SOGo (version 1.0.4, 1.1.0 and version at http://sogo-demo.inverse.ca/)
|
||||||
|
https://host/SOGo/dav/<USER>/Calendar and https://host/SOGo/dav/<USER>/Contacts
|
||||||
|
- GroupDAV calendar working, but the timezone data in the ICalendar
|
||||||
|
generated by KCal seems misinterpreted by SOGo : every event is
|
||||||
|
shifted by the timezone offset (at least test with TZ Europe/Paris,
|
||||||
|
feel free to send your results to the author(s). This seems resolved
|
||||||
|
with the demo version made available by Inverse.ca.
|
||||||
|
- CalDAV working, with the same bug.
|
||||||
|
- CardDAV working.
|
||||||
|
|
||||||
|
* Davical (version 0.9.7.6)
|
||||||
|
https://host/caldav.php/principals/users/<USER>
|
||||||
|
- CalDAV working.
|
||||||
|
|
||||||
|
* Zimbra Open-Source edition (version 5.0.18),
|
||||||
|
https://host/principals/users/<USER>
|
||||||
|
- Caldav mostly working : retrieval of shared calendars that contain a lot
|
||||||
|
of events fails with a 500 server error.
|
||||||
|
|
||||||
|
* Google calendar
|
||||||
|
https://www.google.com/calendar/dav/<CALENDAR_ID>/events
|
||||||
|
- CalDAV working.
|
||||||
|
|
||||||
|
* iCloud
|
||||||
|
https://caldav.icloud.com/
|
||||||
|
- CalDAV working ([App-specific password required](https://support.apple.com/en-us/HT204397)).
|
|
@ -0,0 +1,38 @@
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
add_definitions(-DAUTOTEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data")
|
||||||
|
|
||||||
|
ecm_add_test(davcollectiontest.cpp
|
||||||
|
TEST_NAME davcollection
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Gui
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_add_test(davitemtest.cpp
|
||||||
|
TEST_NAME davitem
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_add_test(davurltest.cpp
|
||||||
|
TEST_NAME davurl
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_add_test(davcollectionsmultifetchjobtest.cpp fakeserver.cpp
|
||||||
|
TEST_NAME davcollectionsmultifetchjobtest
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Network
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_add_test(davitemfetchjobtest.cpp fakeserver.cpp
|
||||||
|
TEST_NAME davitemfetchjob
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Network
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_add_test(davitemslistjobtest.cpp fakeserver.cpp
|
||||||
|
TEST_NAME davitemslistjob
|
||||||
|
NAME_PREFIX "kdav-"
|
||||||
|
LINK_LIBRARIES KF5::DAV Qt${QT_MAJOR_VERSION}::Test Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Network
|
||||||
|
)
|
|
@ -0,0 +1,17 @@
|
||||||
|
C: GET /item HTTP/1.1
|
||||||
|
C: User-Agent: KDE DAV groupware client
|
||||||
|
S: HTTP/1.0 200 OK
|
||||||
|
S: Date: Wed, 04 Jan 2017 18:26:48 GMT
|
||||||
|
S: Last-Modified: Wed, 04 Jan 2017 18:26:47 GMT
|
||||||
|
S: ETag: 7a33141f192d904d-47
|
||||||
|
S: Content-Type: text/x-vcard; charset=utf-8
|
||||||
|
D: BEGIN:VCARD
|
||||||
|
D: VERSION:3.0
|
||||||
|
D: PRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject 2.1.7//EN
|
||||||
|
D: UID:12345678-1234-1234-1234-123456789abc
|
||||||
|
D: FN:John2 Doe
|
||||||
|
D: N:Doe;John2;;;
|
||||||
|
D: EMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com
|
||||||
|
D: REV;VALUE=DATE-TIME:20170104T182647Z
|
||||||
|
D: END:VCARD
|
||||||
|
X
|
|
@ -0,0 +1,37 @@
|
||||||
|
C: PROPFIND /caldav/dfaure%40example.com/ HTTP/1.1
|
||||||
|
S: HTTP/1.1 207 Multi-Status
|
||||||
|
S: Date: Wed, 04 Jan 2017 18:26:48 GMT
|
||||||
|
S: Last-Modified: Wed, 04 Jan 2017 18:26:47 GMT
|
||||||
|
S: DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-access, calendar-proxy, calendar-schedule, calendar-auto-schedule, addressbook, 2
|
||||||
|
S: Content-Type: application/xml; charset=utf-8
|
||||||
|
D: <?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
D: <multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
D: <response xmlns="DAV:">
|
||||||
|
D: <href xmlns="DAV:">/caldav.php/test1.user/home/</href>
|
||||||
|
D: <propstat xmlns="DAV:">
|
||||||
|
D: <prop xmlns="DAV:">
|
||||||
|
D: <C:supported-calendar-component-set xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
D: <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VEVENT"/>
|
||||||
|
D: <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VTODO"/>
|
||||||
|
D: <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VJOURNAL"/>
|
||||||
|
D: <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VTIMEZONE"/>
|
||||||
|
D: <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VFREEBUSY"/>
|
||||||
|
D: </C:supported-calendar-component-set>
|
||||||
|
D: <resourcetype xmlns="DAV:">
|
||||||
|
D: <collection xmlns="DAV:"/>
|
||||||
|
D: <C:calendar xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||||||
|
D: <C:schedule-calendar xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||||||
|
D: </resourcetype>
|
||||||
|
D: <displayname xmlns="DAV:">Test1 User</displayname>
|
||||||
|
D: <current-user-privilege-set xmlns="DAV:">
|
||||||
|
D: <privilege xmlns="DAV:">
|
||||||
|
D: <read xmlns="DAV:"/>
|
||||||
|
D: </privilege>
|
||||||
|
D: </current-user-privilege-set>
|
||||||
|
D: <getctag xmlns="http://calendarserver.org/ns/">12345</getctag>
|
||||||
|
D: </prop>
|
||||||
|
D: <status xmlns="DAV:">HTTP/1.1 200 OK</status>
|
||||||
|
D: </propstat>
|
||||||
|
D: </response>
|
||||||
|
D: </multistatus>
|
||||||
|
X
|
|
@ -0,0 +1,21 @@
|
||||||
|
C: PROPFIND /caldav HTTP/1.1
|
||||||
|
S: HTTP/1.1 207 Multi-Status
|
||||||
|
S: Date: Wed, 04 Jan 2017 18:26:48 GMT
|
||||||
|
S: Last-Modified: Wed, 04 Jan 2017 18:26:47 GMT
|
||||||
|
S: DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-access, calendar-proxy, calendar-schedule, calendar-auto-schedule, addressbook, 2
|
||||||
|
S: Content-Type: application/xml; charset=utf-8
|
||||||
|
D: <?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
D: <multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
D: <response>
|
||||||
|
D: <href>/principals/users/dfaure%40example.com/</href>
|
||||||
|
D: <propstat>
|
||||||
|
D: <prop>
|
||||||
|
D: <C:calendar-home-set>
|
||||||
|
D: <href>/caldav/dfaure%40example.com/</href>
|
||||||
|
D: </C:calendar-home-set>
|
||||||
|
D: </prop>
|
||||||
|
D: <status>HTTP/1.1 200 OK</status>
|
||||||
|
D: </propstat>
|
||||||
|
D: </response>
|
||||||
|
D: </multistatus>
|
||||||
|
X
|
|
@ -0,0 +1,24 @@
|
||||||
|
C: PROPFIND /carddav/dfaure%40example.com/ HTTP/1.1
|
||||||
|
S: HTTP/1.1 207 Multi-Status
|
||||||
|
S: Date: Wed, 04 Jan 2017 18:26:48 GMT
|
||||||
|
S: Last-Modified: Wed, 04 Jan 2017 18:26:47 GMT
|
||||||
|
S: DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-access, calendar-proxy, calendar-schedule, calendar-auto-schedule, addressbook, 2
|
||||||
|
S: Content-Type: application/xml; charset=utf-8
|
||||||
|
D: <?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
D: <multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
|
||||||
|
D: <response xmlns="DAV:">
|
||||||
|
D: <href xmlns="DAV:">/carddav.php/test1.user/home/</href>
|
||||||
|
D: <propstat xmlns="DAV:">
|
||||||
|
D: <prop xmlns="DAV:">
|
||||||
|
D: <resourcetype xmlns="DAV:">
|
||||||
|
D: <collection xmlns="DAV:"/>
|
||||||
|
D: <C:addressbook xmlns:C="urn:ietf:params:xml:ns:carddav"/>
|
||||||
|
D: </resourcetype>
|
||||||
|
D: <displayname xmlns="DAV:">My Address Book</displayname>
|
||||||
|
D: <getctag xmlns="http://calendarserver.org/ns/">3145</getctag>
|
||||||
|
D: </prop>
|
||||||
|
D: <status xmlns="DAV:">HTTP/1.1 200 OK</status>
|
||||||
|
D: </propstat>
|
||||||
|
D: </response>
|
||||||
|
D: </multistatus>
|
||||||
|
X
|
|
@ -0,0 +1,21 @@
|
||||||
|
C: PROPFIND /carddav HTTP/1.1
|
||||||
|
S: HTTP/1.1 207 Multi-Status
|
||||||
|
S: Date: Wed, 04 Jan 2017 18:26:48 GMT
|
||||||
|
S: Last-Modified: Wed, 04 Jan 2017 18:26:47 GMT
|
||||||
|
S: DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-access, calendar-proxy, calendar-schedule, calendar-auto-schedule, addressbook, 2
|
||||||
|
S: Content-Type: application/xml; charset=utf-8
|
||||||
|
D: <?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
D: <multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
|
||||||
|
D: <response>
|
||||||
|
D: <href>/principals/users/dfaure%40example.com/</href>
|
||||||
|
D: <propstat>
|
||||||
|
D: <prop>
|
||||||
|
D: <C:addressbook-home-set>
|
||||||
|
D: <href>/carddav/dfaure%40example.com/</href>
|
||||||
|
D: </C:addressbook-home-set>
|
||||||
|
D: </prop>
|
||||||
|
D: <status>HTTP/1.1 200 OK</status>
|
||||||
|
D: </propstat>
|
||||||
|
D: </response>
|
||||||
|
D: </multistatus>
|
||||||
|
X
|
|
@ -0,0 +1,3 @@
|
||||||
|
C: PROPFIND /does_not_exist HTTP/1.1
|
||||||
|
S: HTTP/1.1 404 Not found
|
||||||
|
X
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2020 David Faure <faure@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectionsmultifetchjobtest.h"
|
||||||
|
#include "fakeserver.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavCollectionsMultiFetchJob>
|
||||||
|
|
||||||
|
#include <QSignalSpy>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
using KDAV::DavCollection;
|
||||||
|
Q_DECLARE_METATYPE(KDAV::Protocol)
|
||||||
|
|
||||||
|
void DavCollectionsMultiFetchJobTest::initTestCase()
|
||||||
|
{
|
||||||
|
// To avoid a runtime dependency on klauncher
|
||||||
|
qputenv("KDE_FORK_SLAVES", "yes");
|
||||||
|
// To let ctest exit, we shouldn't start kio_http_cache_cleaner
|
||||||
|
qputenv("KIO_DISABLE_CACHE_CLEANER", "yes");
|
||||||
|
|
||||||
|
qRegisterMetaType<KDAV::Protocol>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsMultiFetchJobTest::runSuccessfullTest()
|
||||||
|
{
|
||||||
|
FakeServer fakeServer(5990);
|
||||||
|
QUrl url(QStringLiteral("http://localhost/caldav"));
|
||||||
|
url.setPort(fakeServer.port());
|
||||||
|
KDAV::DavUrl davUrl1(url, KDAV::CalDav);
|
||||||
|
QUrl url2(url);
|
||||||
|
url2.setPath(QStringLiteral("/carddav"));
|
||||||
|
KDAV::DavUrl davUrl2(url2, KDAV::CardDav);
|
||||||
|
|
||||||
|
auto job = new KDAV::DavCollectionsMultiFetchJob({davUrl1, davUrl2});
|
||||||
|
|
||||||
|
QSignalSpy spy(job, &KDAV::DavCollectionsMultiFetchJob::collectionDiscovered);
|
||||||
|
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav.txt"));
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav-collections.txt"));
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-carddav.txt"));
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-carddav-collections.txt"));
|
||||||
|
fakeServer.startAndWait();
|
||||||
|
job->exec();
|
||||||
|
|
||||||
|
QVERIFY(fakeServer.isAllScenarioDone());
|
||||||
|
QCOMPARE(job->error(), 0);
|
||||||
|
|
||||||
|
const KDAV::DavCollection::List collections = job->collections();
|
||||||
|
QCOMPARE(collections.count(), 2);
|
||||||
|
|
||||||
|
const KDAV::DavCollection calendar = collections.at(0);
|
||||||
|
QCOMPARE(calendar.displayName(), QStringLiteral("Test1 User"));
|
||||||
|
QCOMPARE(calendar.contentTypes(), DavCollection::Events | DavCollection::Todos | DavCollection::FreeBusy | DavCollection::Journal);
|
||||||
|
QCOMPARE(calendar.url().url().path(), QStringLiteral("/caldav.php/test1.user/home/"));
|
||||||
|
QCOMPARE(calendar.CTag(), QStringLiteral("12345"));
|
||||||
|
QCOMPARE(calendar.privileges(), KDAV::Read);
|
||||||
|
|
||||||
|
const KDAV::DavCollection addressbook = collections.at(1);
|
||||||
|
QCOMPARE(addressbook.displayName(), QStringLiteral("My Address Book"));
|
||||||
|
QCOMPARE(addressbook.contentTypes(), DavCollection::Contacts);
|
||||||
|
QCOMPARE(addressbook.url().url().path(), QStringLiteral("/carddav.php/test1.user/home/"));
|
||||||
|
QCOMPARE(addressbook.CTag(), QStringLiteral("3145"));
|
||||||
|
QCOMPARE(addressbook.privileges(), KDAV::All);
|
||||||
|
|
||||||
|
QCOMPARE(spy.count(), 2);
|
||||||
|
QCOMPARE(int(spy.at(0).at(0).value<KDAV::Protocol>()), int(KDAV::CalDav));
|
||||||
|
QCOMPARE(spy.at(0).at(1).toString(), calendar.url().url().toString());
|
||||||
|
QCOMPARE(spy.at(0).at(2).toString(), url.toString());
|
||||||
|
|
||||||
|
QCOMPARE(int(spy.at(1).at(0).value<KDAV::Protocol>()), int(KDAV::CardDav));
|
||||||
|
QCOMPARE(spy.at(1).at(1).toString(), addressbook.url().url().toString());
|
||||||
|
QCOMPARE(spy.at(1).at(2).toString(), url2.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsMultiFetchJobTest::shouldFailOnError()
|
||||||
|
{
|
||||||
|
FakeServer fakeServer(5990);
|
||||||
|
QUrl url(QStringLiteral("http://localhost/caldav"));
|
||||||
|
url.setPort(fakeServer.port());
|
||||||
|
KDAV::DavUrl davUrl1(url, KDAV::CalDav);
|
||||||
|
QUrl urlError(url);
|
||||||
|
urlError.setPath(QStringLiteral("/does_not_exist"));
|
||||||
|
KDAV::DavUrl davUrlError(urlError, KDAV::CalDav);
|
||||||
|
|
||||||
|
auto job = new KDAV::DavCollectionsMultiFetchJob({davUrl1, davUrlError});
|
||||||
|
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav.txt"));
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav-collections.txt"));
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-error.txt"));
|
||||||
|
fakeServer.startAndWait();
|
||||||
|
job->exec();
|
||||||
|
|
||||||
|
QVERIFY(fakeServer.isAllScenarioDone());
|
||||||
|
QCOMPARE(job->error(), 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavCollectionsMultiFetchJobTest)
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2020 David Faure <faure@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVITEMFETCHJOB_TEST_H
|
||||||
|
#define DAVITEMFETCHJOB_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavCollectionsMultiFetchJobTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void initTestCase();
|
||||||
|
void runSuccessfullTest();
|
||||||
|
void shouldFailOnError();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectiontest.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavCollection>
|
||||||
|
#include <KDAV/DavUrl>
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
void DavCollectionTest::createEmpty()
|
||||||
|
{
|
||||||
|
KDAV::DavCollection davCollection;
|
||||||
|
|
||||||
|
QCOMPARE(davCollection.url().protocol(), KDAV::CalDav);
|
||||||
|
QCOMPARE(davCollection.CTag(), QString());
|
||||||
|
QCOMPARE(davCollection.displayName(), QString());
|
||||||
|
QCOMPARE(davCollection.color(), QColor());
|
||||||
|
QCOMPARE(davCollection.contentTypes(), KDAV::DavCollection::ContentTypes());
|
||||||
|
QCOMPARE(davCollection.privileges(), KDAV::Privileges());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionTest::storeTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::DavCollection davCollection(davUrl, QStringLiteral("myname"), KDAV::DavCollection::Events | KDAV::DavCollection::Todos);
|
||||||
|
|
||||||
|
QCOMPARE(davCollection.url().protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davCollection.url().url(), url);
|
||||||
|
QCOMPARE(davCollection.CTag(), QString());
|
||||||
|
QCOMPARE(davCollection.displayName(), QStringLiteral("myname"));
|
||||||
|
QCOMPARE(davCollection.color(), QColor());
|
||||||
|
QCOMPARE(davCollection.contentTypes(), KDAV::DavCollection::Events | KDAV::DavCollection::Todos);
|
||||||
|
QCOMPARE(davCollection.privileges(), KDAV::All);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionTest::setTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::DavCollection davCollection;
|
||||||
|
|
||||||
|
davCollection.setUrl(davUrl);
|
||||||
|
davCollection.setCTag(QStringLiteral("ctag"));
|
||||||
|
davCollection.setDisplayName(QStringLiteral("myname"));
|
||||||
|
davCollection.setColor(QColor(1, 2, 3));
|
||||||
|
davCollection.setContentTypes(KDAV::DavCollection::Events | KDAV::DavCollection::Todos);
|
||||||
|
davCollection.setPrivileges(KDAV::Read | KDAV::Write);
|
||||||
|
|
||||||
|
QCOMPARE(davCollection.url().protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davCollection.url().url(), url);
|
||||||
|
QCOMPARE(davCollection.CTag(), QStringLiteral("ctag"));
|
||||||
|
QCOMPARE(davCollection.displayName(), QStringLiteral("myname"));
|
||||||
|
QCOMPARE(davCollection.color(), QColor(1, 2, 3));
|
||||||
|
QCOMPARE(davCollection.contentTypes(), KDAV::DavCollection::Events | KDAV::DavCollection::Todos);
|
||||||
|
QCOMPARE(davCollection.privileges(), KDAV::Read | KDAV::Write);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionTest::copyTest()
|
||||||
|
{
|
||||||
|
KDAV::DavCollection davCollection;
|
||||||
|
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
|
||||||
|
davCollection.setUrl(davUrl);
|
||||||
|
davCollection.setCTag(QStringLiteral("ctag"));
|
||||||
|
davCollection.setDisplayName(QStringLiteral("myname"));
|
||||||
|
davCollection.setColor(QColor(1, 2, 3));
|
||||||
|
davCollection.setContentTypes(KDAV::DavCollection::Events | KDAV::DavCollection::Todos);
|
||||||
|
davCollection.setPrivileges(KDAV::Read | KDAV::Write);
|
||||||
|
|
||||||
|
KDAV::DavCollection copy1(davCollection);
|
||||||
|
QCOMPARE(copy1.url().protocol(), davCollection.url().protocol());
|
||||||
|
QCOMPARE(copy1.url().url(), davCollection.url().url());
|
||||||
|
QCOMPARE(copy1.CTag(), davCollection.CTag());
|
||||||
|
QCOMPARE(copy1.displayName(), davCollection.displayName());
|
||||||
|
QCOMPARE(copy1.color(), davCollection.color());
|
||||||
|
QCOMPARE(copy1.contentTypes(), davCollection.contentTypes());
|
||||||
|
QCOMPARE(copy1.privileges(), davCollection.privileges());
|
||||||
|
|
||||||
|
KDAV::DavCollection copy2;
|
||||||
|
copy2 = davCollection;
|
||||||
|
|
||||||
|
QCOMPARE(copy2.url().protocol(), davCollection.url().protocol());
|
||||||
|
QCOMPARE(copy2.url().url(), davCollection.url().url());
|
||||||
|
QCOMPARE(copy2.CTag(), davCollection.CTag());
|
||||||
|
QCOMPARE(copy2.displayName(), davCollection.displayName());
|
||||||
|
QCOMPARE(copy2.color(), davCollection.color());
|
||||||
|
QCOMPARE(copy2.contentTypes(), davCollection.contentTypes());
|
||||||
|
QCOMPARE(copy2.privileges(), davCollection.privileges());
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavCollectionTest)
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVCOLLECTION_TEST_H
|
||||||
|
#define DAVCOLLECTION_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavCollectionTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void createEmpty();
|
||||||
|
void storeTest();
|
||||||
|
void setTest();
|
||||||
|
void copyTest();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemfetchjobtest.h"
|
||||||
|
#include "fakeserver.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavItemFetchJob>
|
||||||
|
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
void DavItemFetchJobTest::initTestCase()
|
||||||
|
{
|
||||||
|
// To avoid a runtime dependency on klauncher
|
||||||
|
qputenv("KDE_FORK_SLAVES", "yes");
|
||||||
|
// To let ctest exit, we shouldn't start kio_http_cache_cleaner
|
||||||
|
qputenv("KIO_DISABLE_CACHE_CLEANER", "yes");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemFetchJobTest::runSuccessfullTest()
|
||||||
|
{
|
||||||
|
FakeServer fakeServer(5989);
|
||||||
|
QUrl url(QStringLiteral("http://localhost/item"));
|
||||||
|
url.setPort(fakeServer.port());
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
|
||||||
|
KDAV::DavItem item(davUrl, QString(), QByteArray(), QString());
|
||||||
|
|
||||||
|
auto job = new KDAV::DavItemFetchJob(item);
|
||||||
|
|
||||||
|
fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemfetchjob.txt"));
|
||||||
|
fakeServer.startAndWait();
|
||||||
|
job->exec();
|
||||||
|
|
||||||
|
QVERIFY(fakeServer.isAllScenarioDone());
|
||||||
|
QCOMPARE(job->error(), 0);
|
||||||
|
|
||||||
|
QCOMPARE(item.data(), QByteArray());
|
||||||
|
QCOMPARE(item.etag(), QString());
|
||||||
|
QCOMPARE(item.contentType(), QString());
|
||||||
|
|
||||||
|
item = job->item();
|
||||||
|
QByteArray data(
|
||||||
|
"BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject "
|
||||||
|
"2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John2 "
|
||||||
|
"Doe\r\nN:Doe;John2;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com\r\nREV;VALUE=DATE-TIME:20170104T182647Z\r\nEND:VCARD\r\n");
|
||||||
|
QCOMPARE(item.data(), data);
|
||||||
|
QCOMPARE(item.etag(), QStringLiteral("7a33141f192d904d-47"));
|
||||||
|
QCOMPARE(item.contentType(), QStringLiteral("text/x-vcard"));
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavItemFetchJobTest)
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVITEMFETCHJOB_TEST_H
|
||||||
|
#define DAVITEMFETCHJOB_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavItemFetchJobTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void initTestCase();
|
||||||
|
void runSuccessfullTest();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemslistjobtest.h"
|
||||||
|
#include "fakeserver.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavError>
|
||||||
|
#include <KDAV/DavItemsListJob>
|
||||||
|
#include <KDAV/DavUrl>
|
||||||
|
#include <KDAV/EtagCache>
|
||||||
|
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
void DavItemsListJobTest::noMatchingMimetype()
|
||||||
|
{
|
||||||
|
std::shared_ptr<KDAV::EtagCache> cache(new KDAV::EtagCache());
|
||||||
|
|
||||||
|
QUrl url(QStringLiteral("http://localhost/collection"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::Error error(KDAV::ErrorNumber::ERR_ITEMLIST_NOMIMETYPE, 0, QString(), 0);
|
||||||
|
|
||||||
|
auto job = new KDAV::DavItemsListJob(davUrl, cache);
|
||||||
|
job->setContentMimeTypes(QStringList() << QStringLiteral("mime/invalid1") << QStringLiteral("mime/invalid2"));
|
||||||
|
job->exec();
|
||||||
|
|
||||||
|
QCOMPARE(job->error(), static_cast<int>(KDAV::ErrorNumber::ERR_ITEMLIST_NOMIMETYPE));
|
||||||
|
QCOMPARE(job->errorText(), error.errorText());
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavItemsListJobTest)
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVITEMSLISTJOB_TEST_H
|
||||||
|
#define DAVITEMSLISTJOB_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavItemsListJobTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void noMatchingMimetype();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemtest.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavItem>
|
||||||
|
#include <KDAV/DavUrl>
|
||||||
|
|
||||||
|
#include <QDataStream>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
void DavItemTest::createEmpty()
|
||||||
|
{
|
||||||
|
KDAV::DavItem davItem;
|
||||||
|
|
||||||
|
QCOMPARE(davItem.url().toDisplayString(), QString());
|
||||||
|
QCOMPARE(davItem.contentType(), QString());
|
||||||
|
QCOMPARE(davItem.data(), QByteArray());
|
||||||
|
QCOMPARE(davItem.etag(), QString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemTest::storeTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::DavItem davItem(davUrl, QStringLiteral("text/test"), QByteArray("data"), QStringLiteral("991233434-234345"));
|
||||||
|
|
||||||
|
QCOMPARE(davItem.url().protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davItem.contentType(), QStringLiteral("text/test"));
|
||||||
|
QCOMPARE(davItem.data(), QByteArray("data"));
|
||||||
|
QCOMPARE(davItem.etag(), QStringLiteral("991233434-234345"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemTest::setTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::DavItem davItem;
|
||||||
|
|
||||||
|
davItem.setUrl(davUrl);
|
||||||
|
davItem.setContentType(QStringLiteral("text/test"));
|
||||||
|
davItem.setData(QByteArray("data"));
|
||||||
|
davItem.setEtag(QStringLiteral("991233434-234345"));
|
||||||
|
|
||||||
|
QCOMPARE(davItem.url().protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davItem.contentType(), QStringLiteral("text/test"));
|
||||||
|
QCOMPARE(davItem.data(), QByteArray("data"));
|
||||||
|
QCOMPARE(davItem.etag(), QStringLiteral("991233434-234345"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemTest::copyTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
KDAV::DavItem davItem(davUrl, QStringLiteral("text/test"), QByteArray("data"), QStringLiteral("991233434-234345"));
|
||||||
|
|
||||||
|
KDAV::DavItem davItemCopy1(davItem);
|
||||||
|
QCOMPARE(davItemCopy1.url().protocol(), davItem.url().protocol());
|
||||||
|
QCOMPARE(davItemCopy1.url().url(), davItem.url().url());
|
||||||
|
QCOMPARE(davItemCopy1.contentType(), davItem.contentType());
|
||||||
|
QCOMPARE(davItemCopy1.data(), davItem.data());
|
||||||
|
QCOMPARE(davItemCopy1.etag(), davItem.etag());
|
||||||
|
|
||||||
|
KDAV::DavItem davItemCopy2;
|
||||||
|
davItemCopy2 = davItem;
|
||||||
|
QCOMPARE(davItemCopy2.url().protocol(), davItem.url().protocol());
|
||||||
|
QCOMPARE(davItemCopy2.url().url(), davItem.url().url());
|
||||||
|
QCOMPARE(davItemCopy2.contentType(), davItem.contentType());
|
||||||
|
QCOMPARE(davItemCopy2.data(), davItem.data());
|
||||||
|
QCOMPARE(davItemCopy2.etag(), davItem.etag());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemTest::serializeTest()
|
||||||
|
{
|
||||||
|
KDAV::DavItem davItem1;
|
||||||
|
KDAV::DavItem davItem2;
|
||||||
|
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
|
||||||
|
davItem1.setUrl(davUrl);
|
||||||
|
davItem1.setContentType(QStringLiteral("text/test"));
|
||||||
|
davItem1.setData(QByteArray("data"));
|
||||||
|
davItem1.setEtag(QStringLiteral("991233434-234345"));
|
||||||
|
|
||||||
|
QByteArray data;
|
||||||
|
QDataStream s(&data, QIODevice::WriteOnly);
|
||||||
|
s << davItem1;
|
||||||
|
|
||||||
|
QDataStream t(&data, QIODevice::ReadOnly);
|
||||||
|
t >> davItem2;
|
||||||
|
|
||||||
|
QCOMPARE(davItem2.url().protocol(), davItem1.url().protocol());
|
||||||
|
QCOMPARE(davItem2.url().url(), davItem1.url().url());
|
||||||
|
QCOMPARE(davItem2.contentType(), davItem1.contentType());
|
||||||
|
QCOMPARE(davItem2.data(), davItem1.data());
|
||||||
|
QCOMPARE(davItem2.etag(), davItem1.etag());
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavItemTest)
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVITEM_TEST_H
|
||||||
|
#define DAVITEM_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavItemTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void createEmpty();
|
||||||
|
void storeTest();
|
||||||
|
void setTest();
|
||||||
|
void copyTest();
|
||||||
|
|
||||||
|
void serializeTest();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davurltest.h"
|
||||||
|
|
||||||
|
#include <KDAV/DavUrl>
|
||||||
|
|
||||||
|
#include <QDataStream>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
void DavUrlTest::createEmpty()
|
||||||
|
{
|
||||||
|
KDAV::DavUrl davUrl;
|
||||||
|
|
||||||
|
QCOMPARE(davUrl.protocol(), KDAV::CalDav);
|
||||||
|
QCOMPARE(davUrl.url(), QUrl());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavUrlTest::storeTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
|
||||||
|
QCOMPARE(davUrl.protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davUrl.url(), url);
|
||||||
|
QCOMPARE(davUrl.toDisplayString(), QStringLiteral("test://test"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavUrlTest::setTest()
|
||||||
|
{
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
KDAV::DavUrl davUrl;
|
||||||
|
|
||||||
|
davUrl.setProtocol(KDAV::CardDav);
|
||||||
|
davUrl.setUrl(url);
|
||||||
|
|
||||||
|
QCOMPARE(davUrl.protocol(), KDAV::CardDav);
|
||||||
|
QCOMPARE(davUrl.url(), url);
|
||||||
|
QCOMPARE(davUrl.toDisplayString(), QStringLiteral("test://test"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavUrlTest::serializeTest()
|
||||||
|
{
|
||||||
|
KDAV::DavUrl davUrl1;
|
||||||
|
KDAV::DavUrl davUrl2;
|
||||||
|
|
||||||
|
QUrl url(QStringLiteral("test://me:pw@test"));
|
||||||
|
davUrl1.setProtocol(KDAV::CardDav);
|
||||||
|
davUrl1.setUrl(url);
|
||||||
|
|
||||||
|
QByteArray data;
|
||||||
|
QDataStream s(&data, QIODevice::WriteOnly);
|
||||||
|
s << davUrl1;
|
||||||
|
|
||||||
|
QDataStream t(&data, QIODevice::ReadOnly);
|
||||||
|
t >> davUrl2;
|
||||||
|
|
||||||
|
QCOMPARE(davUrl2.protocol(), davUrl1.protocol());
|
||||||
|
QCOMPARE(davUrl2.url(), davUrl1.url());
|
||||||
|
}
|
||||||
|
|
||||||
|
QTEST_MAIN(DavUrlTest)
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DAVURL_TEST_H
|
||||||
|
#define DAVURL_TEST_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class DavUrlTest : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void createEmpty();
|
||||||
|
void storeTest();
|
||||||
|
void setTest();
|
||||||
|
|
||||||
|
void serializeTest();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,219 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2008 Omat Holding B .V. <info@omat.nl>
|
||||||
|
SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB , a KDAB Group company <info@kdab.com>
|
||||||
|
SPDX-FileContributor: Kevin Ottens <kevin@kdab.com>
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Kanuß <knauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Own
|
||||||
|
#include "fakeserver.h"
|
||||||
|
|
||||||
|
// Qt
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
FakeServer::FakeServer(int port, QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, m_thread(new QThread)
|
||||||
|
, m_port(port)
|
||||||
|
{
|
||||||
|
moveToThread(m_thread);
|
||||||
|
}
|
||||||
|
|
||||||
|
FakeServer::~FakeServer()
|
||||||
|
{
|
||||||
|
QMetaObject::invokeMethod(this, &FakeServer::cleanup);
|
||||||
|
m_thread->quit();
|
||||||
|
m_thread->wait();
|
||||||
|
delete m_thread;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::startAndWait()
|
||||||
|
{
|
||||||
|
m_thread->start();
|
||||||
|
// this will block until the init code happens and the event queue starts
|
||||||
|
QMetaObject::invokeMethod(this, &FakeServer::init, Qt::BlockingQueuedConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::dataAvailable()
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
|
||||||
|
Q_ASSERT(socket != nullptr);
|
||||||
|
|
||||||
|
int scenarioNumber = -1;
|
||||||
|
readClientPart(socket, &scenarioNumber);
|
||||||
|
if (scenarioNumber >= 0) {
|
||||||
|
Q_ASSERT(scenarioNumber < m_scenarios.count());
|
||||||
|
writeServerPart(socket, scenarioNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::newConnection()
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
m_clientSockets << m_tcpServer->nextPendingConnection();
|
||||||
|
connect(m_clientSockets.last(), &QTcpSocket::readyRead, this, &FakeServer::dataAvailable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::init()
|
||||||
|
{
|
||||||
|
m_tcpServer = new QTcpServer();
|
||||||
|
|
||||||
|
if (!m_tcpServer->listen(QHostAddress(QHostAddress::LocalHost), m_port)) {
|
||||||
|
qFatal("Unable to start the server");
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_tcpServer, &QTcpServer::newConnection, this, &FakeServer::newConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::cleanup()
|
||||||
|
{
|
||||||
|
qDeleteAll(m_clientSockets);
|
||||||
|
delete m_tcpServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::setScenario(const QList<QByteArray> &scenario)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
m_scenarios.clear();
|
||||||
|
m_scenarios << scenario;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::addScenario(const QList<QByteArray> &scenario)
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
m_scenarios << scenario;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::addScenarioFromFile(const QString &fileName)
|
||||||
|
{
|
||||||
|
QFile file(fileName);
|
||||||
|
file.open(QFile::ReadOnly);
|
||||||
|
|
||||||
|
QList<QByteArray> scenario;
|
||||||
|
|
||||||
|
while (!file.atEnd()) {
|
||||||
|
scenario << file.readLine().trimmed();
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
addScenario(scenario);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FakeServer::isScenarioDone(int scenarioNumber) const
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
if (scenarioNumber < m_scenarios.size()) {
|
||||||
|
return m_scenarios[scenarioNumber].isEmpty();
|
||||||
|
} else {
|
||||||
|
return true; // Non existent hence empty, right?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FakeServer::isAllScenarioDone() const
|
||||||
|
{
|
||||||
|
QMutexLocker locker(&m_mutex);
|
||||||
|
|
||||||
|
for (const QList<QByteArray> &scenario : std::as_const(m_scenarios)) {
|
||||||
|
if (!scenario.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::writeServerPart(QTcpSocket *clientSocket, int scenarioNumber)
|
||||||
|
{
|
||||||
|
QList<QByteArray> scenario = m_scenarios[scenarioNumber];
|
||||||
|
|
||||||
|
while (!scenario.isEmpty() && scenario.first().startsWith("S: ")) {
|
||||||
|
QByteArray rule = scenario.takeFirst();
|
||||||
|
|
||||||
|
QByteArray payload = rule.mid(3);
|
||||||
|
clientSocket->write(payload + "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray data;
|
||||||
|
|
||||||
|
while (!scenario.isEmpty() && scenario.first().startsWith("D: ")) {
|
||||||
|
QByteArray rule = scenario.takeFirst();
|
||||||
|
|
||||||
|
QByteArray payload = rule.mid(3);
|
||||||
|
data.append(payload + "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
clientSocket->write(QStringLiteral("Content-Length: %1\r\n\r\n").arg(data.length()).toLatin1());
|
||||||
|
clientSocket->write(data);
|
||||||
|
|
||||||
|
if (!scenario.isEmpty() && scenario.first().startsWith("X")) {
|
||||||
|
scenario.takeFirst();
|
||||||
|
clientSocket->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!scenario.isEmpty()) {
|
||||||
|
QVERIFY(scenario.first().startsWith("C: "));
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scenarios[scenarioNumber] = scenario;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FakeServer::readClientPart(QTcpSocket *socket, int *scenarioNumber)
|
||||||
|
{
|
||||||
|
QByteArray line = socket->readLine();
|
||||||
|
qDebug() << "Read client request" << line;
|
||||||
|
const auto it = std::find_if(m_scenarios.begin(), m_scenarios.end(), [&](const QList<QByteArray> &scenario) {
|
||||||
|
return !scenario.isEmpty() && scenario.at(0).mid(3) + "\r\n" == line;
|
||||||
|
});
|
||||||
|
if (it == m_scenarios.end()) {
|
||||||
|
qWarning() << "No server response available for" << line;
|
||||||
|
QFAIL("Unexpected request");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QList<QByteArray> scenario = *it;
|
||||||
|
QVector<QByteArray> header;
|
||||||
|
|
||||||
|
while (line != "\r\n") {
|
||||||
|
header << line;
|
||||||
|
if (socket->bytesAvailable() == 0 && !socket->waitForReadyRead()) {
|
||||||
|
qDebug() << header;
|
||||||
|
QFAIL("could not read all headers");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
line = socket->readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!scenario.isEmpty() && scenario.first().startsWith("C: ")) {
|
||||||
|
QByteArray expected = scenario.takeFirst().mid(3) + "\r\n";
|
||||||
|
|
||||||
|
if (!header.contains(expected)) {
|
||||||
|
qWarning() << expected << "not found in header. Here's what we got:";
|
||||||
|
qWarning() << header;
|
||||||
|
QVERIFY(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!scenario.isEmpty()) {
|
||||||
|
QVERIFY(scenario.first().startsWith("S: "));
|
||||||
|
}
|
||||||
|
|
||||||
|
*it = scenario;
|
||||||
|
*scenarioNumber = std::distance(m_scenarios.begin(), it);
|
||||||
|
QVERIFY(*scenarioNumber < m_scenarios.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
int FakeServer::port() const
|
||||||
|
{
|
||||||
|
return m_port;
|
||||||
|
}
|
|
@ -0,0 +1,177 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2008 Omat Holding B .V. <info@omat.nl>
|
||||||
|
SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB , a KDAB Group company <info@kdab.com>
|
||||||
|
SPDX-FileContributor: Kevin Ottens <kevin@kdab.com>
|
||||||
|
SPDX-FileCopyrightText: 2017 Sandro Kanuß <knauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FAKESERVER_H
|
||||||
|
#define FAKESERVER_H
|
||||||
|
|
||||||
|
#include <QMutex>
|
||||||
|
#include <QTcpServer>
|
||||||
|
#include <QTcpSocket>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(QList<QByteArray>)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pretends to be an DAV server for the purposes of unit tests.
|
||||||
|
*
|
||||||
|
* FakeServer does not really understand the DAV protocol. Instead,
|
||||||
|
* you give it a script, or scenario, that lists how an DAV session
|
||||||
|
* exchange should go. When it receives the client parts of the
|
||||||
|
* scenario, it will respond with the following server parts.
|
||||||
|
*
|
||||||
|
* The server can be furnished with several scenarios. The first
|
||||||
|
* scenario will be played out to the first client that connects, the
|
||||||
|
* second scenario to the second client connection and so on.
|
||||||
|
*
|
||||||
|
* The fake server runs as a separate thread in the same process it
|
||||||
|
* is started from, and listens for connections (see port() method) on the
|
||||||
|
* local machine.
|
||||||
|
*
|
||||||
|
* Scenarios are in the form of protocol messages, with a tag at the
|
||||||
|
* start to indicate whether it is message that will be sent by the
|
||||||
|
* client ("C: ") or a response that should be sent by the server
|
||||||
|
* ("S: "). Or ("D: ") for the exchanged data. Content-length header is added
|
||||||
|
* automatically with the current length and also the empty line between Header
|
||||||
|
* and Content. For example:
|
||||||
|
* @code
|
||||||
|
* C: GET /item HTTP/1.1
|
||||||
|
* S: HTTP/1.0 200 OK
|
||||||
|
* D: much data
|
||||||
|
* D: more data
|
||||||
|
* X
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* A line starting with X indicates that the connection should be
|
||||||
|
* closed by the server. This should be the last line in the
|
||||||
|
* scenario.
|
||||||
|
|
||||||
|
* A typical usage is something like
|
||||||
|
* @code
|
||||||
|
* QList<QByteArray> scenario;
|
||||||
|
* scenario << "C: GET /item HTTP/1.1"
|
||||||
|
* << "S: HTTP/1.0 200 OK"
|
||||||
|
* << "D: much data"
|
||||||
|
* << "D: more data"
|
||||||
|
* << "X";
|
||||||
|
*
|
||||||
|
* FakeServer fakeServer;
|
||||||
|
* fakeServer.setScenario(scenario);
|
||||||
|
* fakeServer.startAndWait();
|
||||||
|
*
|
||||||
|
* QUrl url(QStringLiteral("http://localhost/item"));
|
||||||
|
* url.setPort(fakeServer.port());
|
||||||
|
* KDAV::DavUrl davUrl(url, KDAV::CardDav);
|
||||||
|
* KDAV::DavItem item(davUrl, QString(), QByteArray(), QString());
|
||||||
|
*
|
||||||
|
* auto job = new KDAV::DavItemFetchJob(item);
|
||||||
|
* job->exec();
|
||||||
|
* fakeServer.quit();
|
||||||
|
* QVERIFY(fakeServer.isAllScenarioDone());
|
||||||
|
* @endcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
class FakeServer : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Each unittest should use a different port so that they can be run in parallel
|
||||||
|
*/
|
||||||
|
FakeServer(int port = 5989, QObject *parent = nullptr);
|
||||||
|
~FakeServer() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the server and waits for it to be ready
|
||||||
|
*
|
||||||
|
* You should use this instead of start() to avoid race conditions.
|
||||||
|
*/
|
||||||
|
void startAndWait();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes any previously-added scenarios, and adds a new one
|
||||||
|
*
|
||||||
|
* After this, there will only be one scenario, and so the fake
|
||||||
|
* server will only be able to service a single request. More
|
||||||
|
* scenarios can be added with addScenario, though.
|
||||||
|
*
|
||||||
|
* @see addScenario()\n
|
||||||
|
* addScenarioFromFile()
|
||||||
|
*/
|
||||||
|
void setScenario(const QList<QByteArray> &scenario);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new scenario
|
||||||
|
*
|
||||||
|
* Note that scenarios will be used in the order that clients
|
||||||
|
* connect. If this is the 5th scenario that has been added
|
||||||
|
* (bearing in mind that setScenario() resets the scenario
|
||||||
|
* count), it will be used to service the 5th client that
|
||||||
|
* connects.
|
||||||
|
*
|
||||||
|
* @see addScenarioFromFile()
|
||||||
|
*
|
||||||
|
* @param scenario the scenario as a list of messages
|
||||||
|
*/
|
||||||
|
void addScenario(const QList<QByteArray> &scenario);
|
||||||
|
/**
|
||||||
|
* Adds a new scenario from a local file
|
||||||
|
*
|
||||||
|
* Note that scenarios will be used in the order that clients
|
||||||
|
* connect. If this is the 5th scenario that has been added
|
||||||
|
* (bearing in mind that setScenario() resets the scenario
|
||||||
|
* count), it will be used to service the 5th client that
|
||||||
|
* connects.
|
||||||
|
*
|
||||||
|
* @see addScenario()
|
||||||
|
*
|
||||||
|
* @param fileName the name of the file that contains the
|
||||||
|
* scenario; it will be split at line
|
||||||
|
* boundaries, and excess whitespace will
|
||||||
|
* be trimmed from the start and end of lines
|
||||||
|
*/
|
||||||
|
void addScenarioFromFile(const QString &fileName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether a particular scenario has completed
|
||||||
|
*
|
||||||
|
* @param scenarioNumber the number of the scenario to check,
|
||||||
|
* in order of addition/client connection
|
||||||
|
*/
|
||||||
|
bool isScenarioDone(int scenarioNumber) const;
|
||||||
|
/**
|
||||||
|
* Whether all the scenarios that were added to the fake
|
||||||
|
* server have been completed.
|
||||||
|
*/
|
||||||
|
bool isAllScenarioDone() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the port where the fake server is listening.
|
||||||
|
*/
|
||||||
|
int port() const;
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void newConnection();
|
||||||
|
void dataAvailable();
|
||||||
|
void init();
|
||||||
|
void cleanup();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void writeServerPart(QTcpSocket *clientSocket, int scenarioNumber);
|
||||||
|
void readClientPart(QTcpSocket *socket, int *scenarioNumber);
|
||||||
|
|
||||||
|
QList<QList<QByteArray>> m_scenarios;
|
||||||
|
QTcpServer *m_tcpServer = nullptr;
|
||||||
|
mutable QMutex m_mutex;
|
||||||
|
QList<QTcpSocket *> m_clientSockets;
|
||||||
|
QThread *m_thread;
|
||||||
|
int m_port;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,18 @@
|
||||||
|
maintainer:
|
||||||
|
fancyname: KDAV
|
||||||
|
description: An DAV protocol implementation with KJobs
|
||||||
|
tier: 3
|
||||||
|
type: functional
|
||||||
|
platforms:
|
||||||
|
- name: All
|
||||||
|
portingAid: false
|
||||||
|
deprecated: false
|
||||||
|
release: true
|
||||||
|
libraries:
|
||||||
|
- qmake: KDAV
|
||||||
|
cmake: "KF5::DAV"
|
||||||
|
cmakename: KF5DAV
|
||||||
|
|
||||||
|
public_lib: true
|
||||||
|
group: Frameworks
|
||||||
|
subgroup: Tier 3
|
|
@ -0,0 +1,158 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2018.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-01-31 22:49+0300\n"
|
||||||
|
"Last-Translator: Safa Alfulaij <safa1996alfulaij@gmail.com>\n"
|
||||||
|
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||||
|
"Language: ar\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||||
|
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "اسم المستخدم/كلمة السّرّ غير صالحة"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "النّفاذ ممنوع"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "لم يُعثر على المورد"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "خطأ HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "لا يدعم ميفاق التّجميعات MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "واجه الخادوم خطأً منعه من إكمال الطّلب: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب. لم تُحذف التّجميعة من الخادوم.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "ردود غير صالحة من السّند"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "خطأ في ضبط التّركيز على XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "أرسل تنفيذ DAV استعلام XQuery غير صالح"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب. لم تُعدّل التّجميعة في الخادوم.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "لا خصائص لتغييرها أو إزالتها"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "حدث خطأ أثناء تعديل الخصائص"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"أعاد الخادوم معلومات أكثر:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب. لم يُنشأ العنصر في الخادوم.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب. لم يُحذف العنصر من الخادوم.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"حدثت مشكلة بالطّلب. لم يُعدّل العنصر في الخادوم.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "حدثت مشكلة بالطّلب."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "حدثت مشكلة بالطّلب. أنواع MIME المطلوبة غير مدعومة."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# Kheyyam Gojayev <xxmn77@gmail.com>, 2021.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2021-02-08 17:35+0400\n"
|
||||||
|
"Last-Translator: Kheyyam Gojayev <xxmn77@gmail.com>\n"
|
||||||
|
"Language-Team: Azerbaijani <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: az\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 20.12.2\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "İstifadəçi adı və ya şifrə səhvdir"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Giriş qadağandır"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resurs tapılmadı"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP xətası"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Kolleksiya üçün protokol MULTIGET dəstəkləmir"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Server, sorğunuzun yerinə yetirməsinə mane olan bir səhvlə qarşılaşdı: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var. Bu kolleksiya serverdən silinə bilmədi\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Server tərəfdən səhv cavablar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "XQuery üçün fokus qurulmasında xəta"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV tətbiqi tərəfindən göndərilən etibarsız XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var. Bu kolleksiya serverdə dəyişdirilə bilmədi\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Dəyişdirmək və silmək xüsusiyyətlərinə malik deyil"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Xüsusiyyətləri dəyişdirərkən xəta baş verdi"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server daha çox məlumat qaytardı:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var. Bu kolleksiya serverdə yaradıla bilmədi\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var. Bu element serverdən silinə bilmədi\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Tələb ilə bağlı problem var. Bu element serverdə dəyişdirilə bilmədi\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Tələb ilə bağlı problem var."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Tələb ilə bağlı problem var. Tələb olunnan MİME növləri dəstəklənmədi."
|
|
@ -0,0 +1,171 @@
|
||||||
|
# Translation of libkdav.po to Catalan
|
||||||
|
# Copyright (C) 2009-2017 This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the license LGPL version 2.1 or
|
||||||
|
# version 3 or later versions approved by the membership of KDE e.V.
|
||||||
|
#
|
||||||
|
# Manuel Tortosa Moreno <manutortosa@gmail.com>, 2009, 2010.
|
||||||
|
# Josep M. Ferrer <txemaq@gmail.com>, 2010, 2011, 2012, 2015, 2017.
|
||||||
|
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2012, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-12 12:17+0100\n"
|
||||||
|
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
|
||||||
|
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Nom d'usuari o contrasenya no vàlids"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Accés prohibit"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "No s'ha trobat el recurs"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Error d'HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "El protocol per a la col·lecció no permet MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"El servidor ha trobat un error que impedeix completar la vostra sol·licitud: "
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. La col·lecció no ha estat "
|
||||||
|
"eliminada del servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Respostes no vàlides del dorsal"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Error en establir el focus a XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery no vàlida enviada per la implementació DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. La col·lecció no ha estat "
|
||||||
|
"modificada en el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "No hi ha cap propietat a canviar o eliminar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "S'ha produït un error en modificar les propietats"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"El servidor ha retornat més informació:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat creat en "
|
||||||
|
"el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat eliminat "
|
||||||
|
"del servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat modificat "
|
||||||
|
"en el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "S'ha produït un problema amb la sol·licitud."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. Els tipus MIME requerits no "
|
||||||
|
"estan implementats."
|
|
@ -0,0 +1,171 @@
|
||||||
|
# Translation of libkdav.po to Catalan (Valencian)
|
||||||
|
# Copyright (C) 2009-2017 This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the license LGPL version 2.1 or
|
||||||
|
# version 3 or later versions approved by the membership of KDE e.V.
|
||||||
|
#
|
||||||
|
# Manuel Tortosa Moreno <manutortosa@gmail.com>, 2009, 2010.
|
||||||
|
# Josep M. Ferrer <txemaq@gmail.com>, 2010, 2011, 2012, 2015, 2017.
|
||||||
|
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2012, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-12 12:17+0100\n"
|
||||||
|
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
|
||||||
|
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
|
||||||
|
"Language: ca@valencia\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Nom d'usuari o contrasenya no vàlids"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Accés prohibit"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "No s'ha trobat el recurs"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Error d'HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "El protocol per a la col·lecció no permet MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"El servidor ha trobat un error que impedeix completar la vostra sol·licitud: "
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. La col·lecció no ha estat "
|
||||||
|
"eliminada del servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Respostes no vàlides del dorsal"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Error en establir el focus a XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery no vàlida enviada per la implementació DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. La col·lecció no ha estat "
|
||||||
|
"modificada en el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "No hi ha cap propietat a canviar o eliminar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "S'ha produït un error en modificar les propietats"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"El servidor ha retornat més informació:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat creat en "
|
||||||
|
"el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat eliminat "
|
||||||
|
"del servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. L'element no ha estat modificat "
|
||||||
|
"en el servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "S'ha produït un problema amb la sol·licitud."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"S'ha produït un problema amb la sol·licitud. Els tipus MIME requerits no "
|
||||||
|
"estan implementats."
|
|
@ -0,0 +1,146 @@
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Vít Pelčák <vit@pelcak.org>, 2010, 2011, 2013, 2016, 2017, 2018.
|
||||||
|
# Tomáš Chvátal <tomas.chvatal@gmail.com>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-02-27 13:49+0100\n"
|
||||||
|
"Last-Translator: Vít Pelčák <vit@pelcak.org>\n"
|
||||||
|
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: cs\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Neplatné uživatelské jméno nebo heslo"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Přístup zakázán"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Zdroj nebyl nalezen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Chyba HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server navrátil více informací:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "V požadavku nastal problém."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,168 @@
|
||||||
|
# Burkhard Lück <lueck@hube-lueck.de>, 2009, 2011, 2013, 2014, 2015, 2017, 2018, 2020, 2021.
|
||||||
|
# Frederik Schwarzer <schwarzer@kde.org>, 2010, 2011, 2016, 2020.
|
||||||
|
# Panagiotis Papadopoulos <pano_90@gmx.net>, 2010.
|
||||||
|
# Peter Rüthemann <peter.ruethemann@gmx.ch>, 2010.
|
||||||
|
# Torbjörn Klatt <opensource@torbjoern-klatt.de>, 2011.
|
||||||
|
# Rolf Eike Beer <kde@opensource.sf-tec.de>, 2011.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: akonadi_davgroupware_resource\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2021-05-31 15:13+0200\n"
|
||||||
|
"Last-Translator: Burkhard Lück <lueck@hube-lueck.de>\n"
|
||||||
|
"Language-Team: German <kde-i18n-de@kde.org>\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Ungültiger Benutzername/Passwort"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Zugriff unzulässig"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Die Ressource wurde nicht gefunden"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-Fehler"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Das Protokoll für die Sammlung unterstützt MULTIGET nicht."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Der Server hat einen Fehler festgestellt, der die Fertigstellung Ihrer "
|
||||||
|
"Abfrage verhindert: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Die Sammlung wurde nicht vom "
|
||||||
|
"Server gelöscht.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Ungültige Antwort des Treibers"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Fehler beim Bestimmen des Fokus für XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV-Implementation hat ungültige XQuery übermittelt"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Die Sammlung wurde auf dem "
|
||||||
|
"Server nicht verändert.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr ""
|
||||||
|
"Keine Eigenschaften vorhanden, die verändert oder gelöscht werden können."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Problem beim Anpassen der Eigenschaften"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Der Server hat weitere Informationen zurückgegeben:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Der Eintrag wurde auf dem "
|
||||||
|
"Server nicht erstellt\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Der Eintrag wurde nicht vom "
|
||||||
|
"Server gelöscht\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Der Eintrag wurde auf dem "
|
||||||
|
"Server nicht verändert\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Bei der Abfrage ist ein Problem aufgetreten"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Bei der Abfrage ist ein Problem aufgetreten. Die angeforderte MIME-Typen "
|
||||||
|
"werden nicht unterstützt."
|
|
@ -0,0 +1,165 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# Stelios <sstavra@gmail.com>, 2020.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-09-13 16:21+0300\n"
|
||||||
|
"Last-Translator: Stelios <sstavra@gmail.com>\n"
|
||||||
|
"Language-Team: Greek <kde-i18n-el@kde.org>\n"
|
||||||
|
"Language: el\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 20.04.2\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Μη έγκυρα όνομα χρήστη ή κωδικός πρόσβασης"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Η πρόσβαση απαγορεύεται"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ο πόρος δε βρέθηκε"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP σφάλμα"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Παρουσιάστηκε κάποιο πρόβλημα με την αίτηση.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Το πρωτόκολλο για τη συλλογή δεν υποστηρίζει MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Ο εξυπηρετητής αντιμετώπισε κάποιο σφάλμα που τον εμπόδισε να ολοκληρώσει "
|
||||||
|
"την αίτησή σας: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Η συλλογή δεν έχει διαγραφεί από τον "
|
||||||
|
"εξυπηρετητή.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Μη έγκυρες αποκρίσεις από το σύστημα υποστήριξης"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Σφάλμα ρύθμισης της εστίασης για το XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Μη έγκυρο XQuery υποβλήθηκε από DAV υλοποίηση"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Η συλλογή δεν έχει τροποποιηθεί στον "
|
||||||
|
"εξυπηρετητή.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Δεν υπάρχουν ιδιότητες για αλλαγή ή διαγραφή"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Παρουσιάστηκε σφάλμα κατά την τροποποίηση των ιδιοτήτων"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Ο εξυπηρετητής επίστρεψε και άλλη πληροφορία:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Το αντικείμενο δεν έχει δημιουργηθεί στον "
|
||||||
|
"εξυπηρετητή.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Το αντικείμενο δεν έχει διαγραφεί από τον "
|
||||||
|
"εξυπηρετητή.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Το αντικείμενο δεν έχει τροποποιηθεί στον "
|
||||||
|
"εξυπηρετητή.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Υπήρξε πρόβλημα με την αίτηση."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Υπήρξε πρόβλημα με την αίτηση. Οι αιτούμενοι τύποι MIME δεν υποστηρίζονται."
|
|
@ -0,0 +1,166 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Steve Allewell <steve.allewell@gmail.com>, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-22 15:41+0000\n"
|
||||||
|
"Last-Translator: Steve Allewell <steve.allewell@gmail.com>\n"
|
||||||
|
"Language-Team: British English <kde-l10n-en_gb@kde.org>\n"
|
||||||
|
"Language: en_GB\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Invalid username/password"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Access forbidden"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resource not found"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP error"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protocol for the collection does not support MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Invalid responses from backend"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Error setting focus for XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Invalid XQuery submitted by DAV implementation"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "No properties to change or remove"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "There was an error when modifying the properties"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "There was a problem with the request."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
|
@ -0,0 +1,166 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-14 09:10+0100\n"
|
||||||
|
"Last-Translator: Javier Viñal <fjvinal@gmail.com>\n"
|
||||||
|
"Language-Team: Spanish <l10n-kde-es@kde.org>\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.3\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Usuario/contraseña inválidos"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Acceso prohíbido"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Recurso no encontrado"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Error HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "El protocolo para la colección no implementa MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"El servidor encontró un error que le impide completar la petición: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. La colección no se ha borrado del "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Respuesta inválida desde el motor"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Error al establecer el foco para XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery inválido enviado por la implementación de DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. La colección no se ha modificado del "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ninguna propiedad que cambiar o eliminar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Ha habido un error al modificar las propiedades"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"El servidor ha devuelto más información:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. El elemento no se ha creado en el "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. El elemento no se ha borrado desde el "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. El elemento no se ha modificado en el "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Ha habido un problema con la petición."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Ha habido un problema con la petición. El tipo MIME solicitado no está "
|
||||||
|
"implementado."
|
|
@ -0,0 +1,157 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# Marek Laane <qiilaq69@gmail.com>, 2019.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2019-11-16 21:51+0200\n"
|
||||||
|
"Last-Translator: Marek Laane <qiilaq69@gmail.com>\n"
|
||||||
|
"Language-Team: Estonian <kde-et@lists.linux.ee>\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 19.08.1\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Vigane kasutajanimi/parool"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Juurdepääs keelatud"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ressurssi ei leitud"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP tõrge"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Kogumise protokollis ei ole MULTIGET toetatud"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "Serveris tekkis tõrge, mis takistas sinu päringu täitmist: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem. Kogu ei ole serverist kustutatud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Vigased vastused taustaprogrammilt"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Tõrge fookuse määramisel XQueryle"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV-i teostus edastas vigase XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem. Kogu ei oldud serveris muudetud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Pole omadusi, mida muuta või eemaldada"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Omaduste muutmisel tekkis tõrge"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server tagastas rohkem teavet:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem. Elementi ei ole serveris loodud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem. Elementi ei ole serverist kustutatud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Päringuga tekkis probleem. Elementi ei oldud serveris muudetud.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Päringuga tekkis probleem."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Päringuga tekkis probleem. Nõutavad MIME tüübid ei ole toetatud."
|
|
@ -0,0 +1,163 @@
|
||||||
|
# Translation for libkdav.po to Euskara/Basque (eu).
|
||||||
|
# Copyright (C) 2021, This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
# KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Iñigo Salvador Azurmendi <xalba@ni.eus>, 2021.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2021-07-30 21:09+0200\n"
|
||||||
|
"Last-Translator: Iñigo Salvador Azurmendi <xalba@ni.eus>\n"
|
||||||
|
"Language-Team: Basque <kde-i18n-eu@kde.org>\n"
|
||||||
|
"Language: eu\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 21.04.3\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Erabiltzaile-izen/pasahitz baliogabea"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Sarrera debekatua"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Baliabidea ez da aurkitu"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP errorea"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Bildumarako protokoloak ez du MULTIGET onartzen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Zerbitzariak zure eskaria betetzea eragozten duen errore bat aurkitu du: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Bilduma ez da zerbitzaritik ezabatu.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Bizkarraldekoaren erantzun baliogabeak"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "«XQuery»rako arreta ezartzeko errorea"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV inplementazioak «XQuery» baliogabea bidali du "
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Bilduma ez da aldatu zerbitzarian.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ez dago aldatzeko edo kentzeko propietaterik"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Errore bat gertatu da propietateak aldatzean"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Zerbitzariak informazio gehiago itzuli du:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Elementua ez da sortu zerbitzarian.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Elementua ez da zerbitzaritik ezabatu.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Elementua ez da aldatu zerbitzarian.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Eskaerarekin arazo bat egon da."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Eskaerarekin arazo bat egon da. Eskatutako MIME-motak ez dira onartzen."
|
|
@ -0,0 +1,164 @@
|
||||||
|
# Copyright © 2011, 2012 This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the kdepim-runtime package.
|
||||||
|
# Tommi Nieminen <translator@legisign.org>, 2011, 2012, 2013, 2015, 2016, 2017.
|
||||||
|
# Lasse Liehu <lasse.liehu@gmail.com>, 2012, 2013, 2014, 2015.
|
||||||
|
# Jiri Grönroos <jiri.gronroos+kde@iki.fi>, 2012.
|
||||||
|
#
|
||||||
|
# KDE Finnish translation sprint participants:
|
||||||
|
# Author: Artnay
|
||||||
|
# Author: Lliehu
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: akonadi_davgroupware_resource\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-25 20:33+0200\n"
|
||||||
|
"Last-Translator: Tommi Nieminen <translator@legisign.org>\n"
|
||||||
|
"Language-Team: Finnish <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-POT-Import-Date: 2012-12-01 22:24:46+0000\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Virheellinen käyttäjätunnus tai salasana"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Saanti estetty"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resurssia ei löydy"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-virhe"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Kokoelman yhteyskäytäntö ei tue MULTIGETiä"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Palvelin kohtasi virheen, joka esti sitä toteuttamasta pyyntöäsi: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia eikä kokoelmaa poistettu palvelimelta.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Taustaosa vastaa virheellisesti"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Virhe asetettaessa XQueryn kohdistusta"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV-toteutus lähetti virheellisen XQueryn"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia eikä kokoelmaa muutettu palvelimella.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ei muutettavia tai poistettavia ominaisuuksia"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Ominaisuuksia muutettaessa sattui virhe"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Palvelin palautti lisätietoa:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia eikä merkintää luotu palvelimeen.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia eikä merkintää poistettu palvelimelta.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pyynnössä oli ongelmia eikä merkintää muutettu palvelimella.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Pyynnössä oli ongelmia."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Pyynnössä oli ongelmia: pyydettyjä MIME-tyyppejä ei tueta."
|
|
@ -0,0 +1,175 @@
|
||||||
|
# translation of akonadi_davgroupware_resource.po to Français
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Guillaume Pujol <guill.p@gmail.com>, 2009, 2010.
|
||||||
|
# Geoffray Levasseur <geoffray.levasseurbrandin@numericable.fr>, 2012, 2013, 2014.
|
||||||
|
# xavier <xavier.besnard@neuf.fr>, 2013.
|
||||||
|
# Joëlle Cornavin <jcornavin@laposte.net>, 2011.
|
||||||
|
# Sebastien Renard <renard@kde.org>, 2013.
|
||||||
|
# Vincent Pinon <vpinon@kde.org>, 2017, 2018.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: akonadi_davgroupware_resource\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-01-11 17:51+0100\n"
|
||||||
|
"Last-Translator: Vincent Pinon <vpinon@kde.org>\n"
|
||||||
|
"Language-Team: French <kde-francophone@kde.org>\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Nom d'utilisateur ou mot de passe non valable"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Accès refusé"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Impossible de trouver la ressource"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Erreur « HTTP »"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Le protocole pour la collection ne prend pas en charge MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Le serveur a rencontré une erreur l'empêchant de mener à bien votre "
|
||||||
|
"requête : %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. La collection n'a pas été supprimée "
|
||||||
|
"du serveur.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Réponses non valables provenant du moteur"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Problème lors de la définition du focus pour « XQuery »"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "« XQuery » non valable soumise par l'implémentation de DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. La collection n'a pas été modifié sur "
|
||||||
|
"le serveur.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Aucune propriété à modifier ou supprimer"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Une erreur est survenue lors de la modification des propriétés"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Le serveur a retourné plus d'informations :\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. L'élément n'a pas été créé sur le "
|
||||||
|
"serveur.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. L'élément n'a pas été supprimé du "
|
||||||
|
"serveur.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. L'élément n'a pas été modifié sur le "
|
||||||
|
"serveur.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Il y a eu un problème avec la requête."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Il y a eu un problème avec la requête. Les types MIME demandés ne sont pas "
|
||||||
|
"pris en charge."
|
|
@ -0,0 +1,164 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Xosé <xosecalvo@gmail.com>, 2009, 2010, 2013.
|
||||||
|
# Adrian Chaves Fernandez <adriyetichaves@gmail.com>, 2013, 2015, 2017.
|
||||||
|
# Marce Villarino <mvillarino@kde-espana.org>, 2014.
|
||||||
|
# Adrián Chaves (Gallaecio) <adrian@chaves.io>, 2017, 2018, 2019.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2019-03-16 19:40+0100\n"
|
||||||
|
"Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n"
|
||||||
|
"Language-Team: Galician <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: gl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "O nome de usuario ou o contrasinal son incorrectos"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Denegouse o acceso"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Non se atopou o recurso."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Erro de HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "O protocolo da colección non admite MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"O servidor atopouse cun erro que evitou que realizase a súa solicitude: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Produciuse un problema coa solicitude. A colección non se eliminou do "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Responsas incorrectas da infraestrutura"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Produciuse un erro ao configurar o foco de XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "A realización de DAV enviou unha XQuery incorrecta"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude. A colección non se modificou no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Non hai propiedades que cambiar ou retirar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Produciuse un erro ao modificar as propiedades."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"O servidor devolveu máis información:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude. O elemento non se creou no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude. O elemento non se eliminou do servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude. O elemento non se modificou no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Houbo un problema coa solicitude."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Houbo un problema coa solicitude. O tipos MIME solicitados non son "
|
||||||
|
"compatíbeis."
|
|
@ -0,0 +1,158 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# Sameer Singh <lumarzeli30@gmail.com>, 2021.
|
||||||
|
# Raghavendra Kamath <raghu@raghukamath.com>, 2021.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2021-06-27 10:10+0530\n"
|
||||||
|
"Last-Translator: Raghavendra Kamath <raghu@raghukamath.com>\n"
|
||||||
|
"Language-Team: kde-hindi\n"
|
||||||
|
"Language: hi\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||||
|
"X-Generator: Lokalize 21.04.2\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "अवैध उपयोक्ता नाम/कूटशब्द"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "प्रवेश निषेध"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "कोई संसाधन नहीं मिला"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "एचटीटीपी त्रुटि"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी।\n"
|
||||||
|
"%1 (%2) ।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "संग्रह का प्रोटोकॉल मल्टीगेट का समर्थन नहीं करता है।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "सर्वर किसी समस्या के कारण आपकी याचिका को पूरा नहीं कर सका: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी। संग्रह को सर्वर से हटा दिया गया है।\n"
|
||||||
|
"%1 (%2)।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "पृष्ठभाग से अवैध उत्तर"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "एक्सक्वैरी में फ़ोकस सेट करने में त्रुटि"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "डीएवी कार्यान्वयन ने अवैध एक्सक्वैरी प्रस्तुत की"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी। सर्वर में संग्रह का परिवर्तिन नहीं किया गया है।\n"
|
||||||
|
"%1 (%2)।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "कोई गुण परिवर्तिन या हटाने के लिए नहीं है"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "गुणों को परिवर्तित करते समय त्रुटि हुई"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"सर्वर नें अतिरिक्त जानकारी प्रदान की है:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी। वस्तु सर्वर में सृजित नहीं की गई।\n"
|
||||||
|
"%1 (%2)।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी। वस्तु सर्वर से हटाई नहीं गई।\n"
|
||||||
|
"%1 (%2)।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"याचिका में कोई समस्या थी। वस्तु सर्वर में परिवर्तित नहीं हुई।\n"
|
||||||
|
"%1 (%2)।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "याचिका में कोई समस्या थी।"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "याचिका में कोई समस्या थी। प्राथित माईम प्रकार समर्थित नहीं हैं।"
|
|
@ -0,0 +1,166 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# giovanni <g.sora@tiscali.it>, 2020.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-02-12 14:05+0100\n"
|
||||||
|
"Last-Translator: giovanni <g.sora@tiscali.it>\n"
|
||||||
|
"Language-Team: Interlingua <kde-i18n-it@kde.org>\n"
|
||||||
|
"Language: ia\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 18.12.3\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Invalide nomine de usator / contrasigno"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Accesso prohibite"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Il non trovava ressource"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Error HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta.\n"
|
||||||
|
" %1(%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Le protocollo pro le collection non supporta MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Le servitor incontrava un error que impediva ex completar tu requesta: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le collection non ha essite delite ex "
|
||||||
|
"le servitor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Responsas invalide ex retro-administration"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Error durante que il fixava foco per XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery invalide submittite per implementation de DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le collection non ha essite "
|
||||||
|
"modificate sur le servitor \n"
|
||||||
|
" %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nulle proprietates de modificar o remover"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Il haveba un error durante que on modificava le proprietates"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Le servitor retornava plure de information:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le elemento non ha essite create sur "
|
||||||
|
"le servitor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le elemento non ha essite delite ex "
|
||||||
|
"le servitor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le elemento non esseva modificate sur "
|
||||||
|
"le servitor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Il habeva un problema con le requesta."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Il habeva un problema con le requesta. Le requirite typos MIME non es "
|
||||||
|
"supportate."
|
|
@ -0,0 +1,158 @@
|
||||||
|
# translation of akonadi_davgroupware_resource.po to Italian
|
||||||
|
#
|
||||||
|
# Vincenzo Reale <smart2128vr@gmail.com>, 2009, 2010.
|
||||||
|
# Nicola Ruggero <nicola@nxnt.org>, 2010, 2011.
|
||||||
|
# Luigi Toscano <luigi.toscano@tiscali.it>, 2012, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: akonadi_davgroupware_resource\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-14 21:04+0100\n"
|
||||||
|
"Last-Translator: Luigi Toscano <luigi.toscano@tiscali.it>\n"
|
||||||
|
"Language-Team: Italian <kde-i18n-it@kde.org>\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Username o password non validi"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Accesso vietato"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Risorsa non trovata"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Errore HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Il protocollo della collezione non supporta MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "Errore nel server. Impossibile completare la richiesta: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta. La collezione non è stata eliminata dal server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Risposta non valida dal backend"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Errore impostando il fuoco su XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery non valida inviata dall'implementazione DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta. La collezione non è stata modificata sul server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nessuna proprietà da cambiare o rimuovere"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Errore nella modifica delle proprietà"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Il server ha fornito ulteriori informazioni:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta. L'elemento non è stato creato sul server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta. L'elemento non è stato eliminato dal server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problema con la richiesta. L'elemento non è stato modificato sul server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Problema con la richiesta."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Problema con la richiesta. I tipi MIME richiesti non sono supportati."
|
|
@ -0,0 +1,139 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: akonadi_davcalendar_resource\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2009-11-04 20:48+0900\n"
|
||||||
|
"Last-Translator: Japanese KDE translation team <kde-jp@kde.org>\n"
|
||||||
|
"Language-Team: Japanese <kde-jp@kde.org>\n"
|
||||||
|
"Language: ja\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,157 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Shinjo Park <kde@peremen.name>, 2013, 2014, 2015, 2016, 2017, 2018.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-08-15 12:26+0100\n"
|
||||||
|
"Last-Translator: Shinjo Park <kde@peremen.name>\n"
|
||||||
|
"Language-Team: Korean <kde-kr@kde.org>\n"
|
||||||
|
"Language: ko\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "잘못된 사용자 이름 및 암호"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "접근 거부됨"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "자원을 찾을 수 없음"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP 오류"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "모음집에 대한 프로토콜이 MULTIGET을 지원하지 않음"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "서버에서 요청을 처리할 수 없는 오류가 발생했습니다: %1(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다. 서버에서 모음집이 삭제되지 않았습니다:\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "백엔드에서 잘못된 응답이 돌아옴"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "XQuery 초점 설정 오류"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV 구현에서 잘못된 XQuery를 보냄"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다. 서버에서 모음집이 수정되지 않았습니다:\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "변경하거나 삭제할 속성 없음"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "속성을 수정하는 중 오류가 발생함"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"서버에서 부가 정보를 돌려 줌:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다. 서버에서 모음집이 생성되지 않았습니다:\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다. 서버에서 항목이 삭제되지 않았습니다:\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"요청에 문제가 있습니다. 서버에서 항목이 수정되지 않았습니다:\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "요청에 문제가 있습니다."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "요청에 문제가 있습니다. 지정한 MIME 형식을 지원하지 않습니다."
|
|
@ -0,0 +1,143 @@
|
||||||
|
# Lithuanian translations for kdav package.
|
||||||
|
# Copyright (C) 2019 This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
# Automatically generated, 2019.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-08-16 09:12+0200\n"
|
||||||
|
"Last-Translator: Automatically generated\n"
|
||||||
|
"Language-Team: lt\n"
|
||||||
|
"Language: lt\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n"
|
||||||
|
"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,158 @@
|
||||||
|
# Translation of libkdav to Norwegian Bokmål
|
||||||
|
#
|
||||||
|
# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2010, 2011, 2013, 2014.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2014-09-19 22:47+0200\n"
|
||||||
|
"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
|
||||||
|
"Language-Team: Norwegian Bokmål <l10n-no@lister.huftis.org>\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 1.5\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Ugyldig brukernavn/passord"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Adgang forbudt"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Fant ikke ressurs"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-feil"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var et problem med forespørselen.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokollen for samlingen støtter ikke MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var et problem med forespørselen. Samlingen er ikke slettet fra "
|
||||||
|
"tjeneren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Ugyldige svar fra bakgrunnsmotor"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Feil ved fokussetting for XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Ugyldig XQuery sendt inn av DAV-implementasjon"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ingen egenskaper som skal endres eller fjernes"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Det oppsto en feil ved endring av egenskapene"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var et problem med forespørselen. Elementet er ikke opprettet på "
|
||||||
|
"tjeneren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var et problem med forespørselen. Elementet er ikke slettet fra "
|
||||||
|
"tjeneren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var et problem med forespørselen. Elementet ble ikke endret på "
|
||||||
|
"tjeneren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,166 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Freek de Kruijf <freekdekruijf@kde.nl>, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-12 22:49+0100\n"
|
||||||
|
"Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n"
|
||||||
|
"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Ongeldige gebruikersnaam/wachtwoord"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Toegang verboden"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Hulpbron niet gevonden"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-fout"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protocol voor de verzameling ondersteunt geen MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"De server kwam een fout tegen, waardoor deze uw verzoek niet kon afhandelen: "
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. De verzameling is niet van de server "
|
||||||
|
"verwijderd.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Ongeldige antwoorden van backend"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Fout bij het instellen van de focus voor XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Ongeldige Xquery ingediend door DAV-implementatie"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. De verzameling is niet gewijzigd op de "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Er zijn geen eigenschappen te wijzigen of te verwijderen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Er trad een fout op bij het wijzigen van de eigenschappen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"De server gaf meer informatie terug:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. Het item is niet aangemaakt op de "
|
||||||
|
"server\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. Het item is niet van de server "
|
||||||
|
"verwijderd.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. Het item is niet gewijzigd op de "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Er was een probleem met het verzoek."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Er was een probleem met het verzoek. De gevraagde MIME-typen worden niet "
|
||||||
|
"ondersteund."
|
|
@ -0,0 +1,163 @@
|
||||||
|
# Translation of libkdav to Norwegian Nynorsk
|
||||||
|
#
|
||||||
|
# Karl Ove Hufthammer <karl@huftis.org>, 2020.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdepim-runtime\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-10-24 14:20+0200\n"
|
||||||
|
"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
|
||||||
|
"Language-Team: Norwegian Nynorsk <l10n-no@lister.huftis.org>\n"
|
||||||
|
"Language: nn\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 20.08.2\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Ugyldig brukarnamn/passord"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Nekta tilgang"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Fann ikkje ressursen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-feil"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokoll for samlinga støttar ikkje MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Tenaren støytte på ein feil som hindra han i å fullføra førespurnaden: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Samlinga er ikkje sletta frå tenaren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Ugyldig svar frå bakgrunnsmotoren"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Feil ved fokusval for XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Ugyldig XQuery send av DAV-implementasjon"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Samlinga er ikkje endra på tenaren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ingen eigenskapar å endra eller fjerna"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Det oppstod ein feil ved endring av eigenskapar"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Tenaren returnerte meir informasjon:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Elementet er ikkje oppretta på tenaren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Elementet er ikkje sletta frå tenaren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Elementet er ikkje endra på tenaren.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Det var problem med førespurnaden."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Det var problem med førespurnaden. Dei førespurde MIME-typane er ikkje "
|
||||||
|
"støtta."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>, 2018.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-01-28 06:08+0100\n"
|
||||||
|
"Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>\n"
|
||||||
|
"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: pl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||||
|
"|| n%100>=20) ? 1 : 2);\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Nieprawidłowa nazwa użytkownika/hasło"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Dostęp wzbroniony"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Nie znaleziono zasobu"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Błąd HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokół dla zbioru nie obsługuje MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Serwer napotkał błąd który uniemożliwił spełnienie twojego żądania: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem. Zbiór nie został usunięty z serwera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Nieprawidłowa odpowiedź z modułu obsługi"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Błąd ustawiania ostrości dla XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Nieprawidłowe XQuery wykonane przez DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem. Zbiór nie został zmieniony na serwerze.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nie ma właściwości, aby zmienić lub usunąć"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Wystąpił błąd w trakcje zmiany właściwości"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Serwer zwrócił więcej informacji:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem. Element nie został stworzona na serwerze.\n"
|
||||||
|
" %1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem. Element nie został usunięty na serwerze.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Wystąpił problem z żądaniem. Element nie został zmieniony na serwerze.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Wystąpił problem z żądaniem."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Wystąpił problem z żądaniem. Żądane typy MIME nie są obsługiwane."
|
|
@ -0,0 +1,156 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-04 11:32+0000\n"
|
||||||
|
"Last-Translator: José Nuno Coelho Pires <zepires@gmail.com>\n"
|
||||||
|
"Language-Team: Portuguese <kde-i18n-pt@kde.org>\n"
|
||||||
|
"Language: pt\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-POFile-SpellExtra: XQuery MULTIGET DAV\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Utilizador/senha inválidos"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Acesso proibido"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Recurso não encontrado"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Erro de HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "O protocolo da colecção não suporta o MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"O servidor encontrou um erro que o impediu de terminar o seu pedido: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido. A colecção não foi apagada no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Foi obtida uma resposta inválida da infra-estrutura"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Ocorreu um erro na atribuição do XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Foi enviado um pedido de XQuery inválido pela implementação do DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido. A colecção não foi modificada no "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Não existem propriedades para alterar ou remover"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Ocorreu um erro ao modificar as propriedades"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"O servidor devolveu mais informações:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido - O item não foi criado no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido - o item não foi apagado no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido. O item não foi modificado no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Ocorreu um problema com o pedido."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com o pedido. Os tipos MIME pedidos não são suportados."
|
|
@ -0,0 +1,166 @@
|
||||||
|
# Translation of libkdav.po to Brazilian Portuguese
|
||||||
|
# Copyright (C) 2018 This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# André Marcelo Alvarenga <alvarenga@kde.org>, 2018.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-07-24 22:45-0300\n"
|
||||||
|
"Last-Translator: André Marcelo Alvarenga <alvarenga@kde.org>\n"
|
||||||
|
"Language-Team: Brazilian Portuguese <kde-i18n-pt_br@kde.org>\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Usuário/senha inválidos"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Acesso proibido"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Recurso não encontrado"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Erro de HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "O protocolo da coleção não tem suporte ao MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"O servidor encontrou um erro que o impediu de concluir a sua solicitação: %1 "
|
||||||
|
"(%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. A coleção não foi excluída no "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Foi obtida uma resposta inválida da infraestrutura"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Ocorreu um erro na configuração do XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr ""
|
||||||
|
"Foi enviada uma solicitação de XQuery inválida pela implementação do DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. A coleção não foi modificada no "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nenhuma propriedade para alterar ou remover"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Ocorreu um erro ao modificar as propriedades"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"O servidor retornou mais informações:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. O item não foi criado no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. O item não foi excluído no servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. O item não foi modificado no "
|
||||||
|
"servidor.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Ocorreu um problema com a solicitação."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Ocorreu um problema com a solicitação. Não há suporte para os tipos MIME "
|
||||||
|
"solicitados."
|
|
@ -0,0 +1,161 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdepim-runtime package.
|
||||||
|
# Sergiu Bivol <sergiu@cip.md>, 2020.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdepim-runtime\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-09-27 12:44+0100\n"
|
||||||
|
"Last-Translator: Sergiu Bivol <sergiu@cip.md>\n"
|
||||||
|
"Language-Team: Romanian\n"
|
||||||
|
"Language: ro\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||||
|
"20)) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Lokalize 19.12.3\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Utilizator/parolă nevalide"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Acces interzis"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resursa nu a fost găsită"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Eroare HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protocolul pentru colecție nu susține MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Serverul a întâmpinat o eroare ce l-a împiedicat să vă completeze cererea: "
|
||||||
|
"%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Colecția nu a fost ștearsă de pe server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Răspunsuri nevalide de la platformă"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Eroare la stabilirea focalizării pentru XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "XQuery nevalid transmis de implementarea DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Colecția nu a fost modificată pe server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nu sunt proprietăți de schimbat sau eliminat"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "A apărut o eroare la modificarea proprietăților"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Serverul a întors mai multă informație:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Elementul nu a fost creat pe server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Elementul nu a fost șters de pe server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Elementul nu a fost modificat pe server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "A apărut o problemă cu cererea."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"A apărut o problemă cu cererea. Tipurile MIME cerute nu sunt susținute."
|
|
@ -0,0 +1,165 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Alexander Potashev <aspotashev@gmail.com>, 2017.
|
||||||
|
# Alexander Yavorsky <kekcuha@gmail.com>, 2018.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-07-16 21:52+0300\n"
|
||||||
|
"Last-Translator: Alexander Yavorsky <kekcuha@gmail.com>\n"
|
||||||
|
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Неправильное имя пользователя или пароль"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Доступ запрещён"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ресурс не найден"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Ошибка HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Протокол для этой коллекции не поддерживает MULTIGET."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"На сервере произошла ошибка, из-за чего он не смог завершить выполнение "
|
||||||
|
"запроса: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Коллекция не была удалена с "
|
||||||
|
"сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Неверный ответ сервера"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Ошибка установки фокуса для XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Неверный XQuery, представленный реализацией DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Коллекция не была изменена на "
|
||||||
|
"сервере.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Нет свойств для изменения или удаления"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "При изменении свойств произошла ошибка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Сервер вернул расширенные сведения:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Объект не был создан на сервере.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Объект не был удалён с сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Объект не был изменён на сервере.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "При выполнении запроса произошла ошибка."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"При выполнении запроса произошла ошибка. Запрошенные типы MIME не "
|
||||||
|
"поддерживаются."
|
|
@ -0,0 +1,158 @@
|
||||||
|
# translation of libkdav.po to Slovak
|
||||||
|
# Roman Paholík <wizzardsk@gmail.com>, 2017.
|
||||||
|
# Matej Mrenica <matejm98mthw@gmail.com>, 2022.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2022-02-14 19:47+0100\n"
|
||||||
|
"Last-Translator: Matej Mrenica <matejm98mthw@gmail.com>\n"
|
||||||
|
"Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: sk\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 21.12.2\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Neplatné užívateľské meno/heslo"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Prístup zamietnutý"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Zdroj nenájdený"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP chyba"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Bol problém s požiadavkou.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokol pre kolekciu nepodporuje MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba servera, ktorá znemožnila vykonať vašu požiadavku: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba s požiadavkou. Kolekcia nebola vymazaná zo servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Neplatná odpoveď z backendu"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Chyba nastavenia zamerania na XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Neplatná XQuery poslaná implementáciou DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba s požiadavkou. Položka nebola zmenená na serveri.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Žiadne vlastnosti na zmenu alebo odstránenie"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Nastala chyba počas zmeny vlastností"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server vrátil viac informácií:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba s požiadavkou. Položka nebola vytvorená na serveri.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba s požiadavkou. Položka nebola vymazaná zo servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Nastala chyba s požiadavkou. Položka nebola zmenená na serveri.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Bol problém s požiadavkou."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Vyskytol sa problém so žiadosťou. Požadované typy MIME nie sú podporované."
|
|
@ -0,0 +1,161 @@
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
#
|
||||||
|
# Matjaž Jeran <matjaz.jeran@amis.net>, 2020.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2020-06-09 07:29+0200\n"
|
||||||
|
"Last-Translator: Matjaž Jeran <matjaz.jeran@amis.net>\n"
|
||||||
|
"Language-Team: Slovenian <lugos-slo@lugos.si>\n"
|
||||||
|
"Language: sl\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 19.12.2\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
|
||||||
|
"%100==4 ? 3 : 0);\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Neveljavno uporabniško ime/geslo"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Dostop prepovedan"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Vira ni mogoče najti"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Napaka HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Problem pri zahtevku.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokol za zbiranje ne podpira MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Strežnik je naletel na napako, ki mu je preprečila dokončanje vašega "
|
||||||
|
"zahtevka: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pri zahtevku je prišlo do težave. Zbirka ni bila izbrisana s strežnika.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Neveljavni odzivi iz zaledja"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Napaka pri postavitvi osredotočenja na XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Neveljavna poizvedba XQuery, poslana iz implementacije DAV"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pri zahtevku je prišlo do težave. Zbirka ni na strežniku bila spremenjena.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Ni lastnosti za spremembo ali odstranitev"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Pri spreminjanju lastnosti je prišlo do napake"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Strežnik je vrnil več informacij:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pri zahtevku je prišlo do težave. Na strežniku ni bilo ustvarjenega "
|
||||||
|
"elementa.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pri zahtevku je prišlo do težave. Na strežniku element ni bil izbrisan.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Pri zahtevku je prišlo do težave. Na strežniku element ni bil spremenjen.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Pri zahtevku je prišlo do težave."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Pri zahtevku je prišlo do težave. Zahtevane vrste Mime niso podprte."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Translation of libkdav.po into Serbian.
|
||||||
|
# Chusslove Illich <caslav.ilic@gmx.net>, 2011, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2020-04-06 03:29+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-12-17 18:01+0100\n"
|
||||||
|
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||||
|
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||||
|
"Language: sr\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:87
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Лоше корисничко име или лозинка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:89
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Приступ забрањен"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:91
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ресурс није нађен"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:93
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "ХТТП грешка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:95
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Протокол за збирке не подржава MULTIGET."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Сервер је наишао на грешку која га је спречила да доврши ваш захтев: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Збирка није обрисана са сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:109
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Неисправни одговори из позадине."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:112
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Грешка у постављању фокуса за икс‑упит."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:115
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Изведба ДАВ‑а предала је лош икс‑упит."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Збирка није измењена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:122
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Нема својстава за мењање или уклањање."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:125
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Грешка при мењању својстава."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Сервер је вратио још података:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:131
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Ставка није створена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:135
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Ставка није обрисана са сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом, ставка није измењена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:144
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Дошло је до проблема са захтевом."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:148
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Дошло је до проблема са захтевом. Тражени МИМЕ типови нису подржани."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Translation of libkdav.po into Serbian.
|
||||||
|
# Chusslove Illich <caslav.ilic@gmx.net>, 2011, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2020-04-06 03:29+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-12-17 18:01+0100\n"
|
||||||
|
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||||
|
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||||
|
"Language: sr@ijekavian\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:87
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Лоше корисничко име или лозинка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:89
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Приступ забрањен"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:91
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ресурс није нађен"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:93
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "ХТТП грешка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:95
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Протокол за збирке не подржава MULTIGET."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Сервер је наишао на грешку која га је спречила да доврши ваш захтев: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Збирка није обрисана са сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:109
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Неисправни одговори из позадине."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:112
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Грешка у постављању фокуса за икс‑упит."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:115
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Изведба ДАВ‑а предала је лош икс‑упит."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Збирка није измењена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:122
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Нема својстава за мењање или уклањање."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:125
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Грешка при мењању својстава."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Сервер је вратио још података:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:131
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Ставка није створена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:135
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом. Ставка није обрисана са сервера.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Дошло је до проблема са захтевом, ставка није измењена на серверу.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:144
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Дошло је до проблема са захтевом."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:148
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Дошло је до проблема са захтевом. Тражени МИМЕ типови нису подржани."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Translation of libkdav.po into Serbian.
|
||||||
|
# Chusslove Illich <caslav.ilic@gmx.net>, 2011, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2020-04-06 03:29+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-12-17 18:01+0100\n"
|
||||||
|
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||||
|
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||||
|
"Language: sr@ijekavianlatin\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:87
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Loše korisničko ime ili lozinka"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:89
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Pristup zabranjen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:91
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resurs nije nađen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:93
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP greška"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:95
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokol za zbirke ne podržava MULTIGET."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Server je naišao na grešku koja ga je sprečila da dovrši vaš zahtev: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Zbirka nije obrisana sa servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:109
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Neispravni odgovori iz pozadine."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:112
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Greška u postavljanju fokusa za XQuery."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:115
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Izvedba DAV‑a predala je loš XQuery."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Zbirka nije izmenjena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:122
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nema svojstava za menjanje ili uklanjanje."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:125
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Greška pri menjanju svojstava."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server je vratio još podataka:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:131
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Stavka nije stvorena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:135
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Stavka nije obrisana sa servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom, stavka nije izmenjena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:144
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Došlo je do problema sa zahtevom."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:148
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Došlo je do problema sa zahtevom. Traženi MIME tipovi nisu podržani."
|
|
@ -0,0 +1,159 @@
|
||||||
|
# Translation of libkdav.po into Serbian.
|
||||||
|
# Chusslove Illich <caslav.ilic@gmx.net>, 2011, 2013, 2014, 2015, 2016, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2020-04-06 03:29+0200\n"
|
||||||
|
"PO-Revision-Date: 2017-12-17 18:01+0100\n"
|
||||||
|
"Last-Translator: Chusslove Illich <caslav.ilic@gmx.net>\n"
|
||||||
|
"Language-Team: Serbian <kde-i18n-sr@kde.org>\n"
|
||||||
|
"Language: sr@latin\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Accelerator-Marker: &\n"
|
||||||
|
"X-Text-Markup: kde4\n"
|
||||||
|
"X-Environment: kde\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:87
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Loše korisničko ime ili lozinka"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:89
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Pristup zabranjen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:91
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resurs nije nađen"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:93
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP greška"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:95
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokol za zbirke ne podržava MULTIGET."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Server je naišao na grešku koja ga je sprečila da dovrši vaš zahtev: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Zbirka nije obrisana sa servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:109
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Neispravni odgovori iz pozadine."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:112
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Greška u postavljanju fokusa za XQuery."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:115
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Izvedba DAV‑a predala je loš XQuery."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Zbirka nije izmenjena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:122
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Nema svojstava za menjanje ili uklanjanje."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:125
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Greška pri menjanju svojstava."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Server je vratio još podataka:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:131
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Stavka nije stvorena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:135
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom. Stavka nije obrisana sa servera.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Došlo je do problema sa zahtevom, stavka nije izmenjena na serveru.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:144
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Došlo je do problema sa zahtevom."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:148
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Došlo je do problema sa zahtevom. Traženi MIME tipovi nisu podržani."
|
|
@ -0,0 +1,161 @@
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Stefan Asserhäll <stefan.asserhall@bredband.net>, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-12 19:37+0100\n"
|
||||||
|
"Last-Translator: Stefan Asserhäll <stefan.asserhall@bredband.net>\n"
|
||||||
|
"Language-Team: Swedish <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: sv\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Ogiltigt användarnamn eller lösenord"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Åtkomst nekas"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Resurs hittades inte"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP-fel"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "Protokoll för samlingen stöder inte MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"Servern råkade ut för ett fel som förhindrade den att färdigställa din "
|
||||||
|
"begäran: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran. Samlingen har inte tagits bort från "
|
||||||
|
"servern.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Felaktigt svar från gränssnitt"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Fel när fokus skulle ställas in för XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Felaktig XQuery skickades av DAV-implementering"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran. Samlingen har inte ändrats på servern.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Inga egenskaper att ändra eller ta bort"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Ett fel uppstod när egenskaperna skulle ändras"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Servern returnerade mer information:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran. Objektet har inte skapats på servern.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran. Objektet har inte tagits bort från "
|
||||||
|
"servern.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Ett problem uppstod med begäran. Objektet ändrades inte på servern.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Ett problem uppstod med begäran."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "Ett problem uppstod med begäran. De begärda Mime-typerna stöds inte."
|
|
@ -0,0 +1,169 @@
|
||||||
|
# Translation of libkdav.po to Ukrainian
|
||||||
|
# Copyright (C) 2017 This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the license LGPL version 2.1 or
|
||||||
|
# version 3 or later versions approved by the membership of KDE e.V.
|
||||||
|
#
|
||||||
|
# Yuri Chornoivan <yurchor@ukr.net>, 2017.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: libkdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2017-12-12 08:38+0200\n"
|
||||||
|
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
||||||
|
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
|
||||||
|
"Language: uk\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||||
|
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"X-Generator: Lokalize 2.0\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "Некоректне ім’я користувача чи пароль"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "Доступ заборонено"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "Ресурс не знайдено"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "Помилка HTTP"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "У протоколі для роботи з цією збіркою не передбачено команди MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
"На сервері сталася помилка, через яку він не зміг завершити виконання вашого "
|
||||||
|
"запиту: %1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Збірку на сервері не було "
|
||||||
|
"вилучено.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "Отримано некоректні відповіді сервера"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "Помилка під час спроби встановлення фокусу для XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "Реалізацією DAV було надіслано некоректні дані XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Збірку на сервері не було "
|
||||||
|
"змінено.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "Немає властивостей для зміни або вилучення"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "Під час спроби зміни властивостей сталася помилка"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"Сервером було повернуто додаткову інформацію:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Запис на сервері не було "
|
||||||
|
"створено.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Запис на сервері не було "
|
||||||
|
"вилучено.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Запис на сервері не було "
|
||||||
|
"змінено.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "Під час виконання запиту виникла проблема."
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
||||||
|
"Під час виконання запиту виникла проблема. Підтримки потрібних вам типів "
|
||||||
|
"MIME не передбачено."
|
|
@ -0,0 +1,160 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR This_file_is_part_of_KDE
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdeorg\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: 2022-02-26 05:16\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: Chinese Simplified\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Crowdin-Project: kdeorg\n"
|
||||||
|
"X-Crowdin-Project-ID: 269464\n"
|
||||||
|
"X-Crowdin-Language: zh-CN\n"
|
||||||
|
"X-Crowdin-File: /kf5-trunk/messages/kdav/libkdav.pot\n"
|
||||||
|
"X-Crowdin-File-ID: 6689\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr "无效的用户名或密码"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr "禁止访问"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr "找不到资源"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr "HTTP 错误"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr "请求出错。\\n%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr "集合的协议不支持 MULTIGET"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr "服务器出现错误,无法完成您的请求:%1 (%2)"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"请求出错。服务器上的项目未删除。\n"
|
||||||
|
"%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr "无效的后端应答"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr "设置 XQuery 焦点时发生错误"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr "DAV 实现提交了无效的 XQuery"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"请求出错。服务器上的项目未修改。\n"
|
||||||
|
"%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr "没有要更改或删除的属性"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr "修改属性时出错"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"服务器返回更多信息:\n"
|
||||||
|
"%1"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"请求出错。服务器上的项目未创建。\n"
|
||||||
|
"%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"请求出错。服务器上的项目未删除。\n"
|
||||||
|
"%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
"请求出错。服务器上的项目未修改。\n"
|
||||||
|
"%1 (%2)。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr "请求出错。"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr "请求出错。服务器上的项目未创建。"
|
|
@ -0,0 +1,142 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR This file is copyright:
|
||||||
|
# This file is distributed under the same license as the kdav package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: kdav\n"
|
||||||
|
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
|
||||||
|
"POT-Creation-Date: 2021-03-09 02:40+0100\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Chinese <kde-i18n-doc@kde.org>\n"
|
||||||
|
"Language: zh_TW\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: common/daverror.cpp:88
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid username/password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:90
|
||||||
|
#, kde-format
|
||||||
|
msgid "Access forbidden"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:92
|
||||||
|
#, kde-format
|
||||||
|
msgid "Resource not found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:94
|
||||||
|
#, kde-format
|
||||||
|
msgid "HTTP error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:96
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:99
|
||||||
|
#, kde-format
|
||||||
|
msgid "Protocol for the collection does not support MULTIGET"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:102
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"The server encountered an error that prevented it from completing your "
|
||||||
|
"request: %1 (%2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:105
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been deleted "
|
||||||
|
"from the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:108
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid responses from backend"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:111
|
||||||
|
#, kde-format
|
||||||
|
msgid "Error setting focus for XQuery"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:114
|
||||||
|
#, kde-format
|
||||||
|
msgid "Invalid XQuery submitted by DAV implementation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:118
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The collection has not been modified "
|
||||||
|
"on the server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:124
|
||||||
|
#, kde-format
|
||||||
|
msgid "No properties to change or remove"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:127
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was an error when modifying the properties"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:129
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"\n"
|
||||||
|
"The server returned more information:\n"
|
||||||
|
"%1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:133
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been created on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:136
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item has not been deleted from the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:139
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The item was not modified on the "
|
||||||
|
"server.\n"
|
||||||
|
"%1 (%2)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:142
|
||||||
|
#, kde-format
|
||||||
|
msgid "There was a problem with the request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/daverror.cpp:146
|
||||||
|
#, kde-format
|
||||||
|
msgid ""
|
||||||
|
"There was a problem with the request. The requested MIME types are not "
|
||||||
|
"supported."
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,190 @@
|
||||||
|
add_definitions(-DTRANSLATION_DOMAIN=\"libkdav\")
|
||||||
|
|
||||||
|
set(KDAV_INSTALL_INCLUDEDIR "${KDE_INSTALL_INCLUDEDIR_KF}/KDAV")
|
||||||
|
|
||||||
|
add_library(KF5DAV)
|
||||||
|
add_library(KF5::DAV ALIAS KF5DAV)
|
||||||
|
|
||||||
|
set_target_properties(KF5DAV PROPERTIES
|
||||||
|
VERSION ${KDAV_VERSION}
|
||||||
|
SOVERSION ${KDAV_SOVERSION}
|
||||||
|
EXPORT_NAME DAV
|
||||||
|
)
|
||||||
|
|
||||||
|
target_sources(KF5DAV PRIVATE
|
||||||
|
common/davcollection.cpp
|
||||||
|
common/davcollectiondeletejob.cpp
|
||||||
|
common/davcollectiondeletejob.h
|
||||||
|
common/davcollection.h
|
||||||
|
common/davcollectionmodifyjob.cpp
|
||||||
|
common/davcollectionmodifyjob.h
|
||||||
|
common/davcollectionsfetchjob.cpp
|
||||||
|
common/davcollectionsfetchjob.h
|
||||||
|
common/davcollectionsmultifetchjob.cpp
|
||||||
|
common/davcollectionsmultifetchjob.h
|
||||||
|
common/daverror.cpp
|
||||||
|
common/daverror.h
|
||||||
|
common/davitem.cpp
|
||||||
|
common/davitemcreatejob.cpp
|
||||||
|
common/davitemcreatejob.h
|
||||||
|
common/davitemdeletejob.cpp
|
||||||
|
common/davitemdeletejob.h
|
||||||
|
common/davitemfetchjob.cpp
|
||||||
|
common/davitemfetchjob.h
|
||||||
|
common/davitem.h
|
||||||
|
common/davitemmodifyjob.cpp
|
||||||
|
common/davitemmodifyjob.h
|
||||||
|
common/davitemsfetchjob.cpp
|
||||||
|
common/davitemsfetchjob.h
|
||||||
|
common/davitemslistjob.cpp
|
||||||
|
common/davitemslistjob.h
|
||||||
|
common/davjobbase.cpp
|
||||||
|
common/davjobbase.h
|
||||||
|
common/davjobbase_p.h
|
||||||
|
common/davmanager.cpp
|
||||||
|
common/davmanager_p.h
|
||||||
|
common/davmultigetprotocol.cpp
|
||||||
|
common/davmultigetprotocol_p.h
|
||||||
|
common/davprincipalhomesetsfetchjob.cpp
|
||||||
|
common/davprincipalhomesetsfetchjob.h
|
||||||
|
common/davprincipalsearchjob.cpp
|
||||||
|
common/davprincipalsearchjob.h
|
||||||
|
common/davprotocolbase.cpp
|
||||||
|
common/davprotocolbase_p.h
|
||||||
|
common/davurl.cpp
|
||||||
|
common/davurl.h
|
||||||
|
common/enums.h
|
||||||
|
common/etagcache.cpp
|
||||||
|
common/etagcache.h
|
||||||
|
common/protocolinfo.cpp
|
||||||
|
common/protocolinfo.h
|
||||||
|
common/utils.cpp
|
||||||
|
common/utils_p.h
|
||||||
|
|
||||||
|
protocols/groupdavprotocol.cpp
|
||||||
|
protocols/groupdavprotocol_p.h
|
||||||
|
|
||||||
|
#KContacts
|
||||||
|
protocols/carddavprotocol.cpp
|
||||||
|
protocols/carddavprotocol_p.h
|
||||||
|
|
||||||
|
#KCalCore
|
||||||
|
protocols/caldavprotocol.cpp
|
||||||
|
protocols/caldavprotocol_p.h
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
ecm_generate_headers(KDAV_Camelcase_HEADERS
|
||||||
|
HEADER_NAMES
|
||||||
|
DavJobBase
|
||||||
|
DavCollection
|
||||||
|
DavCollectionDeleteJob
|
||||||
|
DavCollectionsFetchJob
|
||||||
|
DavCollectionModifyJob
|
||||||
|
DavCollectionsMultiFetchJob
|
||||||
|
DavError
|
||||||
|
DavItem
|
||||||
|
DavItemCreateJob
|
||||||
|
DavItemDeleteJob
|
||||||
|
DavItemFetchJob
|
||||||
|
DavItemModifyJob
|
||||||
|
DavItemsFetchJob
|
||||||
|
DavItemsListJob
|
||||||
|
DavPrincipalHomesetsFetchJob
|
||||||
|
DavPrincipalSearchJob
|
||||||
|
DavUrl
|
||||||
|
Enums
|
||||||
|
EtagCache
|
||||||
|
ProtocolInfo
|
||||||
|
REQUIRED_HEADERS KDAV_HEADERS
|
||||||
|
PREFIX KDAV
|
||||||
|
RELATIVE common
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${KDAV_Camelcase_HEADERS}
|
||||||
|
DESTINATION ${KDAV_INSTALL_INCLUDEDIR}/KDAV # for C++ namespace KDAV
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${KDAV_HEADERS}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/kdav_export.h
|
||||||
|
|
||||||
|
DESTINATION ${KDAV_INSTALL_INCLUDEDIR}/kdav # for C++ namespace KDAV
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_qt_declare_logging_category(KF5DAV
|
||||||
|
HEADER libkdav_debug.h
|
||||||
|
IDENTIFIER KDAV_LOG
|
||||||
|
CATEGORY_NAME kf.dav
|
||||||
|
OLD_CATEGORY_NAMES org.kde.pim.kdav
|
||||||
|
DESCRIPTION "KDAV"
|
||||||
|
EXPORT KDAV
|
||||||
|
)
|
||||||
|
|
||||||
|
generate_export_header(KF5DAV BASE_NAME kdav)
|
||||||
|
|
||||||
|
target_include_directories(KF5DAV PRIVATE
|
||||||
|
common
|
||||||
|
protocols
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(KF5DAV
|
||||||
|
PUBLIC
|
||||||
|
KF5::CoreAddons
|
||||||
|
PRIVATE
|
||||||
|
Qt${QT_MAJOR_VERSION}::Xml
|
||||||
|
Qt${QT_MAJOR_VERSION}::Gui
|
||||||
|
KF5::KIOCore
|
||||||
|
KF5::I18n
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
install(TARGETS
|
||||||
|
KF5DAV
|
||||||
|
EXPORT KF5DAVTargets
|
||||||
|
${KF5_INSTALL_TARGETS_DEFAULT_ARGS}
|
||||||
|
)
|
||||||
|
|
||||||
|
ecm_generate_pri_file(BASE_NAME KDAV
|
||||||
|
LIB_NAME KF5DAV
|
||||||
|
DEPS "KCoreAddons"
|
||||||
|
FILENAME_VAR PRI_FILENAME INCLUDE_INSTALL_DIR ${KDAV_INSTALL_INCLUDEDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
${PRI_FILENAME}
|
||||||
|
DESTINATION ${ECM_MKSPECS_INSTALL_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(KF5DAV INTERFACE "$<INSTALL_INTERFACE:${KDAV_INSTALL_INCLUDEDIR}>")
|
||||||
|
|
||||||
|
ecm_qt_install_logging_categories(EXPORT KDAV FILE kdav.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR})
|
||||||
|
|
||||||
|
if (BUILD_QCH)
|
||||||
|
ecm_add_qch(
|
||||||
|
KF5DAV_QCH
|
||||||
|
NAME KDAV
|
||||||
|
BASE_NAME KF5DAV
|
||||||
|
VERSION ${KF_VERSION}
|
||||||
|
ORG_DOMAIN org.kde
|
||||||
|
SOURCES # using only public headers, to cover only public API
|
||||||
|
${KDAV_HEADERS}
|
||||||
|
MD_MAINPAGE "${CMAKE_SOURCE_DIR}/README.md"
|
||||||
|
LINK_QCHS
|
||||||
|
Qt5Gui_QCH
|
||||||
|
KF5CoreAddons_QCH
|
||||||
|
INCLUDE_DIRS
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
BLANK_MACROS
|
||||||
|
KDAV_EXPORT
|
||||||
|
KDAV_DEPRECATED_EXPORT
|
||||||
|
KDAV_DEPRECATED
|
||||||
|
"KDAV_DEPRECATED_VERSION(x, y, t)"
|
||||||
|
TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
|
||||||
|
QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
|
||||||
|
COMPONENT Devel
|
||||||
|
)
|
||||||
|
endif()
|
|
@ -0,0 +1,2 @@
|
||||||
|
#! /bin/sh
|
||||||
|
$XGETTEXT `find . -name "*.cpp" -o -name "*.h" | grep -v '/tests/'` -o $podir/libkdav.pot
|
|
@ -0,0 +1,104 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2009 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollection.h"
|
||||||
|
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
#include <QColor>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
class DavCollectionPrivate : public QSharedData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DavCollection::ContentTypes mContentTypes;
|
||||||
|
QString mCTag;
|
||||||
|
DavUrl mUrl;
|
||||||
|
QString mDisplayName;
|
||||||
|
QColor mColor;
|
||||||
|
Privileges mPrivileges;
|
||||||
|
};
|
||||||
|
|
||||||
|
DavCollection::DavCollection()
|
||||||
|
: d(new DavCollectionPrivate)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollection::DavCollection(const DavUrl &url, const QString &displayName, ContentTypes contentTypes)
|
||||||
|
: d(new DavCollectionPrivate)
|
||||||
|
{
|
||||||
|
d->mUrl = url;
|
||||||
|
d->mDisplayName = displayName;
|
||||||
|
d->mContentTypes = contentTypes;
|
||||||
|
d->mPrivileges = KDAV::All;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollection::DavCollection(const DavCollection &other) = default;
|
||||||
|
DavCollection::DavCollection(DavCollection &&) = default;
|
||||||
|
DavCollection &DavCollection::operator=(const DavCollection &other) = default;
|
||||||
|
DavCollection &DavCollection::operator=(DavCollection &&) = default;
|
||||||
|
DavCollection::~DavCollection() = default;
|
||||||
|
|
||||||
|
void DavCollection::setCTag(const QString &ctag)
|
||||||
|
{
|
||||||
|
d->mCTag = ctag;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DavCollection::CTag() const
|
||||||
|
{
|
||||||
|
return d->mCTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollection::setUrl(const DavUrl &url)
|
||||||
|
{
|
||||||
|
d->mUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavUrl DavCollection::url() const
|
||||||
|
{
|
||||||
|
return d->mUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollection::setDisplayName(const QString &displayName)
|
||||||
|
{
|
||||||
|
d->mDisplayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DavCollection::displayName() const
|
||||||
|
{
|
||||||
|
return d->mDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollection::setColor(const QColor &color)
|
||||||
|
{
|
||||||
|
d->mColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
QColor DavCollection::color() const
|
||||||
|
{
|
||||||
|
return d->mColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollection::setContentTypes(ContentTypes contentTypes)
|
||||||
|
{
|
||||||
|
d->mContentTypes = contentTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollection::ContentTypes DavCollection::contentTypes() const
|
||||||
|
{
|
||||||
|
return d->mContentTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollection::setPrivileges(Privileges privs)
|
||||||
|
{
|
||||||
|
d->mPrivileges = privs;
|
||||||
|
}
|
||||||
|
|
||||||
|
Privileges DavCollection::privileges() const
|
||||||
|
{
|
||||||
|
return d->mPrivileges;
|
||||||
|
}
|
|
@ -0,0 +1,153 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2009 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVCOLLECTION_H
|
||||||
|
#define KDAV_DAVCOLLECTION_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "enums.h"
|
||||||
|
|
||||||
|
#include <QSharedDataPointer>
|
||||||
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
class QColor;
|
||||||
|
|
||||||
|
class DavCollectionPrivate;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @class DavCollection davcollection.h <KDAV/DavCollection>
|
||||||
|
*
|
||||||
|
* @short A helper class to store information about DAV collection.
|
||||||
|
*
|
||||||
|
* This class is used as container to transfer information about DAV
|
||||||
|
* collections between the Akonadi resource and the DAV jobs.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavCollection
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Defines a list of DAV collection objects.
|
||||||
|
*/
|
||||||
|
typedef QVector<DavCollection> List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the possible content type of the DAV collection.
|
||||||
|
*/
|
||||||
|
enum ContentType {
|
||||||
|
Events = 1, ///< The collection can contain event DAV resources.
|
||||||
|
Todos = 2, ///< The collection can contain todo DAV resources.
|
||||||
|
Contacts = 4, ///< The collection can contain contact DAV resources.
|
||||||
|
FreeBusy = 8, ///< The collection can contain free/busy information.
|
||||||
|
Journal = 16, ///< The collection can contain journal DAV resources.
|
||||||
|
Calendar = 32, ///< The collection can contain anything calendar-related.
|
||||||
|
};
|
||||||
|
Q_DECLARE_FLAGS(ContentTypes, ContentType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an empty DAV collection.
|
||||||
|
*/
|
||||||
|
DavCollection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new DAV collection.
|
||||||
|
*
|
||||||
|
* @param url The URL that identifies the collection.
|
||||||
|
* @param displayName The display name of the collection.
|
||||||
|
* @param contentTypes The possible content types of the collection.
|
||||||
|
*/
|
||||||
|
DavCollection(const DavUrl &url, const QString &displayName, ContentTypes contentTypes);
|
||||||
|
|
||||||
|
DavCollection(const DavCollection &other);
|
||||||
|
DavCollection(DavCollection &&);
|
||||||
|
DavCollection &operator=(const DavCollection &other);
|
||||||
|
DavCollection &operator=(DavCollection &&);
|
||||||
|
|
||||||
|
~DavCollection();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this collection CTag.
|
||||||
|
* @see https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-ctag.txt
|
||||||
|
*/
|
||||||
|
void setCTag(const QString &ctag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns this collection CTag. The returned value will be empty
|
||||||
|
* if no CTag was found.
|
||||||
|
* @see https://github.com/apple/ccs-calendarserver/blob/master/doc/Extensions/caldav-ctag.txt
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QString CTag() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the @p url that identifies the collection.
|
||||||
|
*/
|
||||||
|
void setUrl(const DavUrl &url);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the URL that identifies the collection.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavUrl url() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the display @p name of the collection.
|
||||||
|
*/
|
||||||
|
void setDisplayName(const QString &name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the display name of the collection.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QString displayName() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the color for this collection
|
||||||
|
*/
|
||||||
|
void setColor(const QColor &color);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the color of the collection, or an empty string if
|
||||||
|
* none was provided by the backend.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QColor color() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the possible content @p types of the collection.
|
||||||
|
*/
|
||||||
|
void setContentTypes(ContentTypes types);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the possible content types of the collection.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT ContentTypes contentTypes() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the privileges on this collection.
|
||||||
|
*/
|
||||||
|
void setPrivileges(Privileges privs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the privileges on this collection.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT Privileges privileges() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSharedDataPointer<DavCollectionPrivate> d;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_OPERATORS_FOR_FLAGS(DavCollection::ContentTypes)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_DECLARE_TYPEINFO(KDAV::DavCollection, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectiondeletejob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
|
||||||
|
#include <KIO/DeleteJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionDeleteJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
|
||||||
|
DavUrl mUrl;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollectionDeleteJob::DavCollectionDeleteJob(const DavUrl &url, QObject *parent)
|
||||||
|
: DavJobBase(new DavCollectionDeleteJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionDeleteJob);
|
||||||
|
d->mUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionDeleteJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionDeleteJob);
|
||||||
|
KIO::DeleteJob *job = KIO::del(d->mUrl.url(), KIO::HideProgressInfo | KIO::DefaultFlags);
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
|
||||||
|
job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
|
||||||
|
|
||||||
|
connect(job, &KIO::DeleteJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionDeleteJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::DeleteJob *deleteJob = qobject_cast<KIO::DeleteJob *>(job);
|
||||||
|
|
||||||
|
if (deleteJob->error() && deleteJob->error() != KIO::ERR_NO_CONTENT) {
|
||||||
|
const int responseCode = deleteJob->queryMetaData(QStringLiteral("responsecode")).isEmpty() //
|
||||||
|
? 0
|
||||||
|
: deleteJob->queryMetaData(QStringLiteral("responsecode")).toInt();
|
||||||
|
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_COLLECTIONDELETE);
|
||||||
|
setJobErrorText(deleteJob->errorText());
|
||||||
|
setJobError(deleteJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVCOLLECTIONDELETEJOB_H
|
||||||
|
#define KDAV_DAVCOLLECTIONDELETEJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionDeleteJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavCollectionDeleteJob davcollectiondeletejob.h <KDAV/DavCollectionDeleteJob>
|
||||||
|
*
|
||||||
|
* @short A job that deletes a DAV collection.
|
||||||
|
*
|
||||||
|
* This job is used to delete a DAV collection at a certain URL.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavCollectionDeleteJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV collection delete job.
|
||||||
|
*
|
||||||
|
* @param url The DAV URL of the collection to delete
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavCollectionDeleteJob(const DavUrl &url, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavCollectionDeleteJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,169 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectionmodifyjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "utils_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionModifyJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
|
||||||
|
DavUrl mUrl;
|
||||||
|
QDomDocument mQuery;
|
||||||
|
|
||||||
|
QVector<QDomElement> mSetProperties;
|
||||||
|
QVector<QDomElement> mRemoveProperties;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollectionModifyJob::DavCollectionModifyJob(const DavUrl &url, QObject *parent)
|
||||||
|
: DavJobBase(new DavCollectionModifyJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionModifyJob);
|
||||||
|
d->mUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionModifyJob::setProperty(const QString &prop, const QString &value, const QString &ns)
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionModifyJob);
|
||||||
|
QDomElement propElement;
|
||||||
|
|
||||||
|
if (ns.isEmpty()) {
|
||||||
|
propElement = d->mQuery.createElement(prop);
|
||||||
|
} else {
|
||||||
|
propElement = d->mQuery.createElementNS(ns, prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomText textElement = d->mQuery.createTextNode(value);
|
||||||
|
propElement.appendChild(textElement);
|
||||||
|
|
||||||
|
d->mSetProperties << propElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionModifyJob::removeProperty(const QString &prop, const QString &ns)
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionModifyJob);
|
||||||
|
QDomElement propElement;
|
||||||
|
|
||||||
|
if (ns.isEmpty()) {
|
||||||
|
propElement = d->mQuery.createElement(prop);
|
||||||
|
} else {
|
||||||
|
propElement = d->mQuery.createElementNS(ns, prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
d->mRemoveProperties << propElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionModifyJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionModifyJob);
|
||||||
|
if (d->mSetProperties.isEmpty() && d->mRemoveProperties.isEmpty()) {
|
||||||
|
setError(ERR_COLLECTIONMODIFY_NO_PROPERITES);
|
||||||
|
d->setErrorTextFromDavError();
|
||||||
|
emitResult();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDomDocument mQuery;
|
||||||
|
QDomElement propertyUpdateElement = mQuery.createElementNS(QStringLiteral("DAV:"), QStringLiteral("propertyupdate"));
|
||||||
|
mQuery.appendChild(propertyUpdateElement);
|
||||||
|
|
||||||
|
if (!d->mSetProperties.isEmpty()) {
|
||||||
|
QDomElement setElement = mQuery.createElementNS(QStringLiteral("DAV:"), QStringLiteral("set"));
|
||||||
|
propertyUpdateElement.appendChild(setElement);
|
||||||
|
|
||||||
|
QDomElement propElement = mQuery.createElementNS(QStringLiteral("DAV:"), QStringLiteral("prop"));
|
||||||
|
setElement.appendChild(propElement);
|
||||||
|
|
||||||
|
for (const QDomElement &element : std::as_const(d->mSetProperties)) {
|
||||||
|
propElement.appendChild(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!d->mRemoveProperties.isEmpty()) {
|
||||||
|
QDomElement removeElement = mQuery.createElementNS(QStringLiteral("DAV:"), QStringLiteral("remove"));
|
||||||
|
propertyUpdateElement.appendChild(removeElement);
|
||||||
|
|
||||||
|
QDomElement propElement = mQuery.createElementNS(QStringLiteral("DAV:"), QStringLiteral("prop"));
|
||||||
|
removeElement.appendChild(propElement);
|
||||||
|
|
||||||
|
for (const QDomElement &element : std::as_const(d->mSetProperties)) {
|
||||||
|
propElement.appendChild(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
KIO::DavJob *job = DavManager::self()->createPropPatchJob(d->mUrl.url(), mQuery.toString());
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
connect(job, &KIO::DavJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionModifyJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::DavJob *davJob = qobject_cast<KIO::DavJob *>(job);
|
||||||
|
const QString responseCodeStr = davJob->queryMetaData(QStringLiteral("responsecode"));
|
||||||
|
const int responseCode = responseCodeStr.isEmpty() ? 0 : responseCodeStr.toInt();
|
||||||
|
|
||||||
|
// KIO::DavJob does not set error() even if the HTTP status code is a 4xx or a 5xx
|
||||||
|
if (davJob->error() || (responseCode >= 400 && responseCode < 600)) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_COLLECTIONMODIFY);
|
||||||
|
setJobErrorText(davJob->errorText());
|
||||||
|
setJobError(davJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
emitResult();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDomDocument response;
|
||||||
|
response.setContent(davJob->responseData(), true);
|
||||||
|
QDomElement responseElement = Utils::firstChildElementNS(response.documentElement(), QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
|
||||||
|
bool hasError = false;
|
||||||
|
|
||||||
|
// parse all propstats answers to get the eventual errors
|
||||||
|
const QDomNodeList propstats = responseElement.elementsByTagNameNS(QStringLiteral("DAV:"), QStringLiteral("propstat"));
|
||||||
|
for (int i = 0; i < propstats.length(); ++i) {
|
||||||
|
const QDomElement propstatElement = propstats.item(i).toElement();
|
||||||
|
const QDomElement statusElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("status"));
|
||||||
|
|
||||||
|
const QString statusText = statusElement.text();
|
||||||
|
if (statusText.contains(QLatin1String("200"))) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
// Generic error
|
||||||
|
hasError = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasError) {
|
||||||
|
setError(ERR_COLLECTIONMODIFY_RESPONSE);
|
||||||
|
|
||||||
|
// Trying to get more information about the error
|
||||||
|
const QDomElement responseDescriptionElement =
|
||||||
|
Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("responsedescription"));
|
||||||
|
if (!responseDescriptionElement.isNull()) {
|
||||||
|
setJobErrorText(responseDescriptionElement.text());
|
||||||
|
}
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVCOLLECTIONMODIFYJOB_H
|
||||||
|
#define KDAV_DAVCOLLECTIONMODIFYJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionModifyJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavCollectionModifyJob davcollectionmodifyjob.h <KDAV/DavCollectionModifyJob>
|
||||||
|
*
|
||||||
|
* @short A job that modifies a DAV collection.
|
||||||
|
*
|
||||||
|
* This job is used to modify a property of a DAV collection
|
||||||
|
* on the DAV server.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavCollectionModifyJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV collection modify job.
|
||||||
|
*
|
||||||
|
* @param url The DAV URL that identifies the collection.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavCollectionModifyJob(const DavUrl &url, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the property that shall be modified by the job.
|
||||||
|
*
|
||||||
|
* @param property The name of the property.
|
||||||
|
* @param value The value of the property.
|
||||||
|
* @param ns The XML namespace that shall be used for the property name.
|
||||||
|
*/
|
||||||
|
void setProperty(const QString &property, const QString &value, const QString &ns = QString());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the property that shall be removed by the job.
|
||||||
|
*
|
||||||
|
* @param property The name of the property.
|
||||||
|
* @param ns The XML namespace that shall be used for the property name.
|
||||||
|
*/
|
||||||
|
void removeProperty(const QString &property, const QString &ns);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavCollectionModifyJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,356 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectionsfetchjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
#include "davprincipalhomesetsfetchjob.h"
|
||||||
|
#include "davprotocolbase_p.h"
|
||||||
|
#include "utils_p.h"
|
||||||
|
|
||||||
|
#include "libkdav_debug.h"
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
#include <QBuffer>
|
||||||
|
#include <QColor>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionsFetchJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void principalFetchFinished(KJob *job);
|
||||||
|
void collectionsFetchFinished(KJob *job);
|
||||||
|
void doCollectionsFetch(const QUrl &url);
|
||||||
|
void subjobFinished();
|
||||||
|
|
||||||
|
DavUrl mUrl;
|
||||||
|
DavCollection::List mCollections;
|
||||||
|
uint mSubJobCount = 0;
|
||||||
|
|
||||||
|
Q_DECLARE_PUBLIC(DavCollectionsFetchJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollectionsFetchJob::DavCollectionsFetchJob(const DavUrl &url, QObject *parent)
|
||||||
|
: DavJobBase(new DavCollectionsFetchJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionsFetchJob);
|
||||||
|
d->mUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsFetchJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavCollectionsFetchJob);
|
||||||
|
if (DavManager::davProtocol(d->mUrl.protocol())->supportsPrincipals()) {
|
||||||
|
DavPrincipalHomeSetsFetchJob *job = new DavPrincipalHomeSetsFetchJob(d->mUrl);
|
||||||
|
connect(job, &DavPrincipalHomeSetsFetchJob::result, this, [d](KJob *job) {
|
||||||
|
d->principalFetchFinished(job);
|
||||||
|
});
|
||||||
|
job->start();
|
||||||
|
} else {
|
||||||
|
d->doCollectionsFetch(d->mUrl.url());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollection::List DavCollectionsFetchJob::collections() const
|
||||||
|
{
|
||||||
|
Q_D(const DavCollectionsFetchJob);
|
||||||
|
return d->mCollections;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavUrl DavCollectionsFetchJob::davUrl() const
|
||||||
|
{
|
||||||
|
Q_D(const DavCollectionsFetchJob);
|
||||||
|
return d->mUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsFetchJobPrivate::doCollectionsFetch(const QUrl &url)
|
||||||
|
{
|
||||||
|
++mSubJobCount;
|
||||||
|
|
||||||
|
const QDomDocument collectionQuery = DavManager::davProtocol(mUrl.protocol())->collectionsQuery()->buildQuery();
|
||||||
|
|
||||||
|
KIO::DavJob *job = DavManager::self()->createPropFindJob(url, collectionQuery.toString());
|
||||||
|
QObject::connect(job, &KIO::DavJob::result, q_ptr, [this](KJob *job) {
|
||||||
|
collectionsFetchFinished(job);
|
||||||
|
});
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsFetchJobPrivate::principalFetchFinished(KJob *job)
|
||||||
|
{
|
||||||
|
const DavPrincipalHomeSetsFetchJob *davJob = qobject_cast<DavPrincipalHomeSetsFetchJob *>(job);
|
||||||
|
|
||||||
|
if (davJob->error()) {
|
||||||
|
if (davJob->latestResponseCode()) {
|
||||||
|
// If we have a HTTP response code then this may mean that
|
||||||
|
// the URL was not a principal URL. Retry as if it were a calendar URL.
|
||||||
|
qCDebug(KDAV_LOG) << job->errorText();
|
||||||
|
doCollectionsFetch(mUrl.url());
|
||||||
|
} else {
|
||||||
|
// Just give up here.
|
||||||
|
setDavError(davJob->davError());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QStringList homeSets = davJob->homeSets();
|
||||||
|
qCDebug(KDAV_LOG) << "Found" << homeSets.size() << "homesets";
|
||||||
|
qCDebug(KDAV_LOG) << homeSets;
|
||||||
|
|
||||||
|
if (homeSets.isEmpty()) {
|
||||||
|
// Same as above, retry as if it were a calendar URL.
|
||||||
|
doCollectionsFetch(mUrl.url());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const QString &homeSet : homeSets) {
|
||||||
|
QUrl url = mUrl.url();
|
||||||
|
|
||||||
|
if (homeSet.startsWith(QLatin1Char('/'))) {
|
||||||
|
// homeSet is only a path, use request url to complete
|
||||||
|
url.setPath(homeSet, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
// homeSet is a complete url
|
||||||
|
QUrl tmpUrl(homeSet);
|
||||||
|
tmpUrl.setUserName(url.userName());
|
||||||
|
tmpUrl.setPassword(url.password());
|
||||||
|
url = tmpUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
doCollectionsFetch(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsFetchJobPrivate::collectionsFetchFinished(KJob *job)
|
||||||
|
{
|
||||||
|
Q_Q(DavCollectionsFetchJob);
|
||||||
|
KIO::DavJob *davJob = qobject_cast<KIO::DavJob *>(job);
|
||||||
|
const QString responseCodeStr = davJob->queryMetaData(QStringLiteral("responsecode"));
|
||||||
|
const int responseCode = responseCodeStr.isEmpty() ? 0 : responseCodeStr.toInt();
|
||||||
|
|
||||||
|
// KIO::DavJob does not set error() even if the HTTP status code is a 4xx or a 5xx
|
||||||
|
if (davJob->error() || (responseCode >= 400 && responseCode < 600)) {
|
||||||
|
if (davJob->url() != mUrl.url()) {
|
||||||
|
// Retry as if the initial URL was a calendar URL.
|
||||||
|
// We can end up here when retrieving a homeset on
|
||||||
|
// which a PROPFIND resulted in an error
|
||||||
|
doCollectionsFetch(mUrl.url());
|
||||||
|
--mSubJobCount;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_PROBLEM_WITH_REQUEST);
|
||||||
|
setJobErrorText(davJob->errorText());
|
||||||
|
setJobError(davJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
} else {
|
||||||
|
// For use in the collectionDiscovered() signal
|
||||||
|
QUrl _jobUrl = mUrl.url();
|
||||||
|
_jobUrl.setUserInfo(QString());
|
||||||
|
const QString jobUrl = _jobUrl.toDisplayString();
|
||||||
|
|
||||||
|
// Validate that we got a valid PROPFIND response
|
||||||
|
QDomDocument response;
|
||||||
|
response.setContent(davJob->responseData(), true);
|
||||||
|
QDomElement rootElement = response.documentElement();
|
||||||
|
if (rootElement.tagName().compare(QLatin1String("multistatus"), Qt::CaseInsensitive) != 0) {
|
||||||
|
setError(ERR_COLLECTIONFETCH);
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
subjobFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray resp = davJob->responseData();
|
||||||
|
QDomDocument document;
|
||||||
|
if (!document.setContent(resp, true)) {
|
||||||
|
setError(ERR_COLLECTIONFETCH);
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
subjobFinished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!q->error()) {
|
||||||
|
/*
|
||||||
|
* Extract information from a document like the following:
|
||||||
|
*
|
||||||
|
* <responses>
|
||||||
|
* <response xmlns="DAV:">
|
||||||
|
* <href xmlns="DAV:">/caldav.php/test1.user/home/</href>
|
||||||
|
* <propstat xmlns="DAV:">
|
||||||
|
* <prop xmlns="DAV:">
|
||||||
|
* <C:supported-calendar-component-set xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
* <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VEVENT"/>
|
||||||
|
* <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VTODO"/>
|
||||||
|
* <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VJOURNAL"/>
|
||||||
|
* <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VTIMEZONE"/>
|
||||||
|
* <C:comp xmlns:C="urn:ietf:params:xml:ns:caldav" name="VFREEBUSY"/>
|
||||||
|
* </C:supported-calendar-component-set>
|
||||||
|
* <resourcetype xmlns="DAV:">
|
||||||
|
* <collection xmlns="DAV:"/>
|
||||||
|
* <C:calendar xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||||||
|
* <C:schedule-calendar xmlns:C="urn:ietf:params:xml:ns:caldav"/>
|
||||||
|
* </resourcetype>
|
||||||
|
* <displayname xmlns="DAV:">Test1 User</displayname>
|
||||||
|
* <current-user-privilege-set xmlns="DAV:">
|
||||||
|
* <privilege xmlns="DAV:">
|
||||||
|
* <read xmlns="DAV:"/>
|
||||||
|
* </privilege>
|
||||||
|
* </current-user-privilege-set>
|
||||||
|
* <getctag xmlns="http://calendarserver.org/ns/">12345</getctag>
|
||||||
|
* </prop>
|
||||||
|
* <status xmlns="DAV:">HTTP/1.1 200 OK</status>
|
||||||
|
* </propstat>
|
||||||
|
* </response>
|
||||||
|
* </responses>
|
||||||
|
*/
|
||||||
|
|
||||||
|
const QDomElement responsesElement = document.documentElement();
|
||||||
|
|
||||||
|
QDomElement responseElement = Utils::firstChildElementNS(responsesElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
while (!responseElement.isNull()) {
|
||||||
|
QDomElement propstatElement;
|
||||||
|
|
||||||
|
// check for the valid propstat, without giving up on first error
|
||||||
|
{
|
||||||
|
const QDomNodeList propstats = responseElement.elementsByTagNameNS(QStringLiteral("DAV:"), QStringLiteral("propstat"));
|
||||||
|
for (int i = 0; i < propstats.length(); ++i) {
|
||||||
|
const QDomElement propstatCandidate = propstats.item(i).toElement();
|
||||||
|
const QDomElement statusElement = Utils::firstChildElementNS(propstatCandidate, QStringLiteral("DAV:"), QStringLiteral("status"));
|
||||||
|
if (statusElement.text().contains(QLatin1String("200"))) {
|
||||||
|
propstatElement = propstatCandidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (propstatElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract url
|
||||||
|
const QDomElement hrefElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("href"));
|
||||||
|
if (hrefElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString href = hrefElement.text();
|
||||||
|
if (!href.endsWith(QLatin1Char('/'))) {
|
||||||
|
href.append(QLatin1Char('/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl url = davJob->url();
|
||||||
|
url.setUserInfo(QString());
|
||||||
|
if (href.startsWith(QLatin1Char('/'))) {
|
||||||
|
// href is only a path, use request url to complete
|
||||||
|
url.setPath(href, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
// href is a complete url
|
||||||
|
url = QUrl::fromUserInput(href);
|
||||||
|
}
|
||||||
|
|
||||||
|
// don't add this resource if it has already been detected
|
||||||
|
bool alreadySeen = false;
|
||||||
|
for (const DavCollection &seen : std::as_const(mCollections)) {
|
||||||
|
if (seen.url().toDisplayString() == url.toDisplayString()) {
|
||||||
|
alreadySeen = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (alreadySeen) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract display name
|
||||||
|
const QDomElement propElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("prop"));
|
||||||
|
if (!DavManager::davProtocol(mUrl.protocol())->containsCollection(propElement)) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const QDomElement displaynameElement = Utils::firstChildElementNS(propElement, QStringLiteral("DAV:"), QStringLiteral("displayname"));
|
||||||
|
const QString displayName = displaynameElement.text();
|
||||||
|
|
||||||
|
// Extract CTag
|
||||||
|
const QDomElement CTagElement = Utils::firstChildElementNS(propElement, //
|
||||||
|
QStringLiteral("http://calendarserver.org/ns/"),
|
||||||
|
QStringLiteral("getctag"));
|
||||||
|
QString CTag;
|
||||||
|
if (!CTagElement.isNull()) {
|
||||||
|
CTag = CTagElement.text();
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract calendar color if provided
|
||||||
|
const QDomElement colorElement = Utils::firstChildElementNS(propElement, //
|
||||||
|
QStringLiteral("http://apple.com/ns/ical/"),
|
||||||
|
QStringLiteral("calendar-color"));
|
||||||
|
QColor color;
|
||||||
|
if (!colorElement.isNull()) {
|
||||||
|
QString colorValue = colorElement.text();
|
||||||
|
if (QColor::isValidColor(colorValue)) {
|
||||||
|
// Color is either #RRGGBBAA or #RRGGBB but QColor expects #AARRGGBB
|
||||||
|
// so we put the AA in front if the string's length is 9.
|
||||||
|
if (colorValue.size() == 9) {
|
||||||
|
QString fixedColorValue = QStringLiteral("#") + colorValue.mid(7, 2) + colorValue.mid(1, 6);
|
||||||
|
color.setNamedColor(fixedColorValue);
|
||||||
|
} else {
|
||||||
|
color.setNamedColor(colorValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract allowed content types
|
||||||
|
const DavCollection::ContentTypes contentTypes = DavManager::davProtocol(mUrl.protocol())->collectionContentTypes(propstatElement);
|
||||||
|
|
||||||
|
auto _url = url;
|
||||||
|
_url.setUserInfo(mUrl.url().userInfo());
|
||||||
|
DavCollection collection(DavUrl(_url, mUrl.protocol()), displayName, contentTypes);
|
||||||
|
|
||||||
|
collection.setCTag(CTag);
|
||||||
|
if (color.isValid()) {
|
||||||
|
collection.setColor(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract privileges
|
||||||
|
const QDomElement currentPrivsElement = Utils::firstChildElementNS(propElement, //
|
||||||
|
QStringLiteral("DAV:"),
|
||||||
|
QStringLiteral("current-user-privilege-set"));
|
||||||
|
if (currentPrivsElement.isNull()) {
|
||||||
|
// Assume that we have all privileges
|
||||||
|
collection.setPrivileges(KDAV::All);
|
||||||
|
} else {
|
||||||
|
Privileges privileges = Utils::extractPrivileges(currentPrivsElement);
|
||||||
|
collection.setPrivileges(privileges);
|
||||||
|
}
|
||||||
|
|
||||||
|
qCDebug(KDAV_LOG) << url.toDisplayString() << "PRIVS: " << collection.privileges();
|
||||||
|
mCollections << collection;
|
||||||
|
Q_EMIT q->collectionDiscovered(mUrl.protocol(), url.toDisplayString(), jobUrl);
|
||||||
|
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
subjobFinished();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsFetchJobPrivate::subjobFinished()
|
||||||
|
{
|
||||||
|
if (--mSubJobCount == 0) {
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVCOLLECTIONSFETCHJOB_H
|
||||||
|
#define KDAV_DAVCOLLECTIONSFETCHJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davcollection.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionsFetchJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavCollectionsFetchJob davcollectionsfetchjob.h <KDAV/DavCollectionsFetchJob>
|
||||||
|
*
|
||||||
|
* @short A job that fetches all DAV collection.
|
||||||
|
*
|
||||||
|
* This job is used to fetch all DAV collection that are available
|
||||||
|
* under a certain DAV URL.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavCollectionsFetchJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV collections fetch job.
|
||||||
|
*
|
||||||
|
* @param url The DAV URL of the DAV collection whose sub collections shall be fetched.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavCollectionsFetchJob(const DavUrl &url, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of fetched DAV collections.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavCollection::List collections() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the DavUrl used by this job
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavUrl davUrl() const;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* This signal is emitted every time a new collection has been discovered.
|
||||||
|
*
|
||||||
|
* @param collectionUrl The URL of the discovered collection
|
||||||
|
* @param configuredUrl The URL given to the job
|
||||||
|
*/
|
||||||
|
void collectionDiscovered(KDAV::Protocol protocol, const QString &collectionUrl, const QString &configuredUrl);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavCollectionsFetchJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davcollectionsmultifetchjob.h"
|
||||||
|
|
||||||
|
#include "davcollectionsfetchjob.h"
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionsMultiFetchJobPrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DavCollection::List mCollections;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollectionsMultiFetchJob::DavCollectionsMultiFetchJob(const DavUrl::List &urls, QObject *parent)
|
||||||
|
: KCompositeJob(parent)
|
||||||
|
, d(new DavCollectionsMultiFetchJobPrivate)
|
||||||
|
{
|
||||||
|
for (const DavUrl &url : std::as_const(urls)) {
|
||||||
|
DavCollectionsFetchJob *job = new DavCollectionsFetchJob(url, this);
|
||||||
|
connect(job, &DavCollectionsFetchJob::collectionDiscovered, this, &DavCollectionsMultiFetchJob::collectionDiscovered);
|
||||||
|
addSubjob(job);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollectionsMultiFetchJob::~DavCollectionsMultiFetchJob() = default;
|
||||||
|
|
||||||
|
void DavCollectionsMultiFetchJob::start()
|
||||||
|
{
|
||||||
|
if (!hasSubjobs()) {
|
||||||
|
emitResult();
|
||||||
|
} else {
|
||||||
|
for (KJob *job : subjobs()) {
|
||||||
|
job->start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DavCollection::List DavCollectionsMultiFetchJob::collections() const
|
||||||
|
{
|
||||||
|
return d->mCollections;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavCollectionsMultiFetchJob::slotResult(KJob *job)
|
||||||
|
{
|
||||||
|
// If we use KCompositeJob::slotResult(job) we end up with behaviour that's very
|
||||||
|
// hard to unittest: the valid URLs might or might not get processed.
|
||||||
|
// Let's wait until all subjobs are done before emitting result.
|
||||||
|
|
||||||
|
if (job->error() && !error()) {
|
||||||
|
// Store error only if first error
|
||||||
|
setError(job->error());
|
||||||
|
setErrorText(job->errorText());
|
||||||
|
}
|
||||||
|
if (!job->error()) {
|
||||||
|
DavCollectionsFetchJob *fetchJob = qobject_cast<DavCollectionsFetchJob *>(job);
|
||||||
|
d->mCollections << fetchJob->collections();
|
||||||
|
}
|
||||||
|
removeSubjob(job);
|
||||||
|
if (!hasSubjobs()) {
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVCOLLECTIONSMULTIFETCHJOB_H
|
||||||
|
#define KDAV_DAVCOLLECTIONSMULTIFETCHJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davcollection.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
#include <KCompositeJob>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavCollectionsMultiFetchJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavCollectionsMultiFetchJob davcollectionsmultifetchjob.h <KDAV/DavCollectionsMultiFetchJob>
|
||||||
|
*
|
||||||
|
* @short A job that fetches all DAV collection.
|
||||||
|
*
|
||||||
|
* This job is used to fetch all DAV collection that are available
|
||||||
|
* under a certain list of DAV URLs.
|
||||||
|
*
|
||||||
|
* @note This class just combines multiple calls of DavCollectionsFetchJob
|
||||||
|
* into one job.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavCollectionsMultiFetchJob : public KCompositeJob
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV collections multi fetch job.
|
||||||
|
*
|
||||||
|
* @param urls The list of DAV URLs whose sub collections shall be fetched.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavCollectionsMultiFetchJob(const DavUrl::List &urls, QObject *parent = nullptr);
|
||||||
|
~DavCollectionsMultiFetchJob() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of fetched DAV collections.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavCollection::List collections() const;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
/**
|
||||||
|
* This signal is emitted every time a new collection has been discovered.
|
||||||
|
*
|
||||||
|
* @param collectionUrl The URL of the discovered collection
|
||||||
|
* @param configuredUrl The URL given to the job
|
||||||
|
*/
|
||||||
|
void collectionDiscovered(KDAV::Protocol protocol, const QString &collectionUrl, const QString &configuredUrl);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void slotResult(KJob *) override;
|
||||||
|
|
||||||
|
const std::unique_ptr<DavCollectionsMultiFetchJobPrivate> d;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,152 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include <KLocalizedString>
|
||||||
|
|
||||||
|
#include <KIO/Global>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class ErrorPrivate : public QSharedData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ErrorNumber mErrorNumber = NO_ERR;
|
||||||
|
int mResponseCode = 0;
|
||||||
|
int mJobErrorCode = 0;
|
||||||
|
QString mErrorText;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Error::Error()
|
||||||
|
: d(new ErrorPrivate)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Error::Error(ErrorNumber errNo, int responseCode, const QString &errorText, int jobErrorCode)
|
||||||
|
: d(new ErrorPrivate)
|
||||||
|
{
|
||||||
|
d->mErrorNumber = errNo;
|
||||||
|
d->mResponseCode = responseCode;
|
||||||
|
d->mErrorText = errorText;
|
||||||
|
d->mJobErrorCode = jobErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
Error::Error(const Error &) = default;
|
||||||
|
Error::Error(Error &&) = default;
|
||||||
|
Error::~Error() = default;
|
||||||
|
Error &Error::operator=(const Error &) = default;
|
||||||
|
Error &Error::operator=(Error &&) = default;
|
||||||
|
|
||||||
|
ErrorNumber Error::errorNumber() const
|
||||||
|
{
|
||||||
|
return d->mErrorNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Error::internalErrorText() const
|
||||||
|
{
|
||||||
|
return d->mErrorText;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Error::jobErrorCode() const
|
||||||
|
{
|
||||||
|
return d->mJobErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Error::responseCode() const
|
||||||
|
{
|
||||||
|
return d->mResponseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDAV::Error::translatedJobError() const
|
||||||
|
{
|
||||||
|
QString err;
|
||||||
|
if (d->mJobErrorCode > 0 && d->mJobErrorCode != KIO::ERR_SLAVE_DEFINED) {
|
||||||
|
err = KIO::buildErrorString(d->mJobErrorCode, d->mErrorText);
|
||||||
|
} else {
|
||||||
|
err = d->mErrorText;
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Error::errorText() const
|
||||||
|
{
|
||||||
|
QString result;
|
||||||
|
|
||||||
|
QString err = translatedJobError();
|
||||||
|
|
||||||
|
switch (d->mErrorNumber) {
|
||||||
|
case ERR_PROBLEM_WITH_REQUEST:
|
||||||
|
// User-side error
|
||||||
|
if (d->mResponseCode == 401) {
|
||||||
|
err = i18n("Invalid username/password");
|
||||||
|
} else if (d->mResponseCode == 403) {
|
||||||
|
err = i18n("Access forbidden");
|
||||||
|
} else if (d->mResponseCode == 404) {
|
||||||
|
err = i18n("Resource not found");
|
||||||
|
} else {
|
||||||
|
err = i18n("HTTP error");
|
||||||
|
}
|
||||||
|
result = i18n("There was a problem with the request.\n%1 (%2).", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_NO_MULTIGET:
|
||||||
|
result = i18n("Protocol for the collection does not support MULTIGET");
|
||||||
|
break;
|
||||||
|
case ERR_SERVER_UNRECOVERABLE:
|
||||||
|
result = i18n("The server encountered an error that prevented it from completing your request: %1 (%2)", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONDELETE:
|
||||||
|
result = i18n("There was a problem with the request. The collection has not been deleted from the server.\n%1 (%2).", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONFETCH:
|
||||||
|
result = i18n("Invalid responses from backend");
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONFETCH_XQUERY_SETFOCUS:
|
||||||
|
result = i18n("Error setting focus for XQuery");
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONFETCH_XQUERY_INVALID:
|
||||||
|
result = i18n("Invalid XQuery submitted by DAV implementation");
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONMODIFY:
|
||||||
|
result = i18n(
|
||||||
|
"There was a problem with the request. The collection has not been modified on the server.\n"
|
||||||
|
"%1 (%2).",
|
||||||
|
err,
|
||||||
|
d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONMODIFY_NO_PROPERITES:
|
||||||
|
result = i18n("No properties to change or remove");
|
||||||
|
break;
|
||||||
|
case ERR_COLLECTIONMODIFY_RESPONSE:
|
||||||
|
result = i18n("There was an error when modifying the properties");
|
||||||
|
if (!d->mErrorText.isEmpty()) {
|
||||||
|
result.append(i18n("\nThe server returned more information:\n%1", d->mErrorText));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ERR_ITEMCREATE:
|
||||||
|
result = i18n("There was a problem with the request. The item has not been created on the server.\n%1 (%2).", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_ITEMDELETE:
|
||||||
|
result = i18n("There was a problem with the request. The item has not been deleted from the server.\n%1 (%2).", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_ITEMMODIFY:
|
||||||
|
result = i18n("There was a problem with the request. The item was not modified on the server.\n%1 (%2).", err, d->mResponseCode);
|
||||||
|
break;
|
||||||
|
case ERR_ITEMLIST: {
|
||||||
|
result = i18n("There was a problem with the request.");
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
case ERR_ITEMLIST_NOMIMETYPE:
|
||||||
|
result = i18n("There was a problem with the request. The requested MIME types are not supported.");
|
||||||
|
break;
|
||||||
|
case NO_ERR:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVERROR_H
|
||||||
|
#define KDAV_DAVERROR_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include <KJob>
|
||||||
|
|
||||||
|
#include <QSharedDataPointer>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
/** DAV operation error codes. */
|
||||||
|
enum ErrorNumber {
|
||||||
|
NO_ERR = 0,
|
||||||
|
ERR_PROBLEM_WITH_REQUEST = KJob::UserDefinedError + 200, // it would be better to request KIO about uts UserDefinedError space.
|
||||||
|
ERR_NO_MULTIGET,
|
||||||
|
ERR_SERVER_UNRECOVERABLE,
|
||||||
|
ERR_COLLECTIONDELETE = ERR_PROBLEM_WITH_REQUEST + 10,
|
||||||
|
ERR_COLLECTIONFETCH = ERR_PROBLEM_WITH_REQUEST + 20,
|
||||||
|
ERR_COLLECTIONFETCH_XQUERY_SETFOCUS,
|
||||||
|
ERR_COLLECTIONFETCH_XQUERY_INVALID,
|
||||||
|
ERR_COLLECTIONMODIFY = ERR_PROBLEM_WITH_REQUEST + 30,
|
||||||
|
ERR_COLLECTIONMODIFY_NO_PROPERITES,
|
||||||
|
ERR_COLLECTIONMODIFY_RESPONSE,
|
||||||
|
ERR_ITEMCREATE = ERR_PROBLEM_WITH_REQUEST + 100,
|
||||||
|
ERR_ITEMDELETE = ERR_PROBLEM_WITH_REQUEST + 110,
|
||||||
|
ERR_ITEMMODIFY = ERR_PROBLEM_WITH_REQUEST + 120,
|
||||||
|
ERR_ITEMLIST = ERR_PROBLEM_WITH_REQUEST + 130,
|
||||||
|
ERR_ITEMLIST_NOMIMETYPE,
|
||||||
|
};
|
||||||
|
|
||||||
|
class ErrorPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class Error daverror.h <KDAV/DavError>
|
||||||
|
*
|
||||||
|
* DAV operation error.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT Error
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Error();
|
||||||
|
explicit Error(ErrorNumber errNo, int responseCode, const QString &errorText, int jobErrorCode);
|
||||||
|
Error(const Error &);
|
||||||
|
Error(Error &&);
|
||||||
|
~Error();
|
||||||
|
Error &operator=(const Error &);
|
||||||
|
Error &operator=(Error &&);
|
||||||
|
|
||||||
|
Q_REQUIRED_RESULT ErrorNumber errorNumber() const;
|
||||||
|
Q_REQUIRED_RESULT int responseCode() const;
|
||||||
|
Q_REQUIRED_RESULT QString internalErrorText() const;
|
||||||
|
Q_REQUIRED_RESULT int jobErrorCode() const;
|
||||||
|
Q_REQUIRED_RESULT QString translatedJobError() const;
|
||||||
|
Q_REQUIRED_RESULT QString errorText() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSharedDataPointer<ErrorPrivate> d;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2009 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
class DavItemPrivate : public QSharedData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DavUrl mUrl;
|
||||||
|
QString mContentType;
|
||||||
|
QByteArray mData;
|
||||||
|
QString mEtag;
|
||||||
|
};
|
||||||
|
|
||||||
|
DavItem::DavItem()
|
||||||
|
: d(new DavItemPrivate)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem::DavItem(const DavUrl &url, const QString &contentType, const QByteArray &data, const QString &etag)
|
||||||
|
: d(new DavItemPrivate)
|
||||||
|
{
|
||||||
|
d->mUrl = url;
|
||||||
|
d->mContentType = contentType;
|
||||||
|
d->mData = data;
|
||||||
|
d->mEtag = etag;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem::DavItem(const DavItem &other) = default;
|
||||||
|
DavItem::DavItem(DavItem &&) = default;
|
||||||
|
DavItem &DavItem::operator=(const DavItem &other) = default;
|
||||||
|
DavItem &DavItem::operator=(DavItem &&) = default;
|
||||||
|
DavItem::~DavItem() = default;
|
||||||
|
|
||||||
|
void DavItem::setUrl(const DavUrl &url)
|
||||||
|
{
|
||||||
|
d->mUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavUrl DavItem::url() const
|
||||||
|
{
|
||||||
|
return d->mUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItem::setContentType(const QString &contentType)
|
||||||
|
{
|
||||||
|
d->mContentType = contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DavItem::contentType() const
|
||||||
|
{
|
||||||
|
return d->mContentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItem::setData(const QByteArray &data)
|
||||||
|
{
|
||||||
|
d->mData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray DavItem::data() const
|
||||||
|
{
|
||||||
|
return d->mData;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItem::setEtag(const QString &etag)
|
||||||
|
{
|
||||||
|
d->mEtag = etag;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DavItem::etag() const
|
||||||
|
{
|
||||||
|
return d->mEtag;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &KDAV::operator<<(QDataStream &stream, const DavItem &item)
|
||||||
|
{
|
||||||
|
stream << item.url();
|
||||||
|
stream << item.contentType();
|
||||||
|
stream << item.data();
|
||||||
|
stream << item.etag();
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDataStream &KDAV::operator>>(QDataStream &stream, DavItem &item)
|
||||||
|
{
|
||||||
|
QString contentType;
|
||||||
|
QString etag;
|
||||||
|
DavUrl url;
|
||||||
|
QByteArray data;
|
||||||
|
|
||||||
|
stream >> url;
|
||||||
|
stream >> contentType;
|
||||||
|
stream >> data;
|
||||||
|
stream >> etag;
|
||||||
|
|
||||||
|
item = DavItem(url, contentType, data, etag);
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
}
|
|
@ -0,0 +1,120 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2009 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEM_H
|
||||||
|
#define KDAV_DAVITEM_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
#include <QDataStream>
|
||||||
|
#include <QSharedDataPointer>
|
||||||
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
class DavItemPrivate;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @class DavItem davitem.h <KDAV/DavItem>
|
||||||
|
*
|
||||||
|
* @short A helper class to store information about DAV resources.
|
||||||
|
*
|
||||||
|
* This class is used as container to transfer information about DAV
|
||||||
|
* resources between the Akonadi resource and the DAV jobs.
|
||||||
|
*
|
||||||
|
* @note While the DAV RFC names them DAV resource we call them items
|
||||||
|
* to comply to Akonadi terminology.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Defines a list of DAV item objects.
|
||||||
|
*/
|
||||||
|
typedef QVector<DavItem> List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an empty DAV item.
|
||||||
|
*/
|
||||||
|
DavItem();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new DAV item.
|
||||||
|
*
|
||||||
|
* @param url The URL that identifies the item.
|
||||||
|
* @param contentType The content type of the item.
|
||||||
|
* @param data The actual raw content data of the item.
|
||||||
|
* @param etag The ETag of the item.
|
||||||
|
*/
|
||||||
|
DavItem(const DavUrl &url, const QString &contentType, const QByteArray &data, const QString &etag);
|
||||||
|
|
||||||
|
DavItem(const DavItem &other);
|
||||||
|
DavItem(DavItem &&);
|
||||||
|
DavItem &operator=(const DavItem &other);
|
||||||
|
DavItem &operator=(DavItem &&);
|
||||||
|
|
||||||
|
~DavItem();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the @p url that identifies the item.
|
||||||
|
*/
|
||||||
|
void setUrl(const DavUrl &url);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the URL that identifies the item.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavUrl url() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the content @p type of the item.
|
||||||
|
*/
|
||||||
|
void setContentType(const QString &type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the content type of the item.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QString contentType() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the raw content @p data of the item.
|
||||||
|
*/
|
||||||
|
void setData(const QByteArray &data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the raw content data of the item.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QByteArray data() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the @p etag of the item.
|
||||||
|
* @see https://tools.ietf.org/html/rfc4918#section-8.6
|
||||||
|
*/
|
||||||
|
void setEtag(const QString &etag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the ETag of the item.
|
||||||
|
* @see https://tools.ietf.org/html/rfc4918#section-8.6
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QString etag() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QSharedDataPointer<DavItemPrivate> d;
|
||||||
|
};
|
||||||
|
|
||||||
|
KDAV_EXPORT QDataStream &operator<<(QDataStream &out, const DavItem &item);
|
||||||
|
KDAV_EXPORT QDataStream &operator>>(QDataStream &in, DavItem &item);
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_DECLARE_TYPEINFO(KDAV::DavItem, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,145 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemcreatejob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davitemfetchjob.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
#include "libkdav_debug.h"
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemCreateJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
void itemRefreshed(KJob *job);
|
||||||
|
|
||||||
|
DavItem mItem;
|
||||||
|
int mRedirectCount = 0;
|
||||||
|
|
||||||
|
Q_DECLARE_PUBLIC(DavItemCreateJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemCreateJob::DavItemCreateJob(const DavItem &item, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemCreateJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemCreateJob);
|
||||||
|
d->mItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemCreateJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemCreateJob);
|
||||||
|
QString headers = QStringLiteral("Content-Type: ");
|
||||||
|
headers += d->mItem.contentType();
|
||||||
|
headers += QLatin1String("\r\n");
|
||||||
|
headers += QLatin1String("If-None-Match: *");
|
||||||
|
|
||||||
|
KIO::StoredTransferJob *job = KIO::storedPut(d->mItem.data(), itemUrl(), -1, KIO::HideProgressInfo | KIO::DefaultFlags);
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->addMetaData(QStringLiteral("customHTTPHeader"), headers);
|
||||||
|
job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
|
||||||
|
job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
|
||||||
|
job->setRedirectionHandlingEnabled(false);
|
||||||
|
|
||||||
|
connect(job, &KIO::StoredTransferJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemCreateJob::item() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemCreateJob);
|
||||||
|
return d->mItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl DavItemCreateJob::itemUrl() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemCreateJob);
|
||||||
|
return d->mItem.url().url();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemCreateJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
Q_Q(DavItemCreateJob);
|
||||||
|
KIO::StoredTransferJob *storedJob = qobject_cast<KIO::StoredTransferJob *>(job);
|
||||||
|
const QString responseCodeStr = storedJob->queryMetaData(QStringLiteral("responsecode"));
|
||||||
|
const int responseCode = responseCodeStr.isEmpty() ? 0 : responseCodeStr.toInt();
|
||||||
|
if (storedJob->error()) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_ITEMCREATE);
|
||||||
|
setJobErrorText(storedJob->errorText());
|
||||||
|
setJobError(storedJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The 'Location:' HTTP header is used to indicate the new URL
|
||||||
|
const QStringList allHeaders = storedJob->queryMetaData(QStringLiteral("HTTP-Headers")).split(QLatin1Char('\n'));
|
||||||
|
QString location;
|
||||||
|
for (const QString &header : allHeaders) {
|
||||||
|
if (header.startsWith(QLatin1String("location:"), Qt::CaseInsensitive)) {
|
||||||
|
location = header.section(QLatin1Char(' '), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl url;
|
||||||
|
if (location.isEmpty()) {
|
||||||
|
url = storedJob->url();
|
||||||
|
} else if (location.startsWith(QLatin1Char('/'))) {
|
||||||
|
url = storedJob->url();
|
||||||
|
url.setPath(location, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
url = QUrl::fromUserInput(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseCode == 301 || responseCode == 302 || responseCode == 307 || responseCode == 308) {
|
||||||
|
if (mRedirectCount > 4) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(DavItemCreateJob::UserDefinedError + responseCode);
|
||||||
|
emitResult();
|
||||||
|
} else {
|
||||||
|
QUrl _itemUrl(url);
|
||||||
|
_itemUrl.setUserInfo(q->itemUrl().userInfo());
|
||||||
|
mItem.setUrl(DavUrl(_itemUrl, mItem.url().protocol()));
|
||||||
|
|
||||||
|
++mRedirectCount;
|
||||||
|
q->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
url.setUserInfo(q->itemUrl().userInfo());
|
||||||
|
mItem.setUrl(DavUrl(url, mItem.url().protocol()));
|
||||||
|
|
||||||
|
DavItemFetchJob *fetchJob = new DavItemFetchJob(mItem);
|
||||||
|
QObject::connect(fetchJob, &DavItemFetchJob::result, q, [this](KJob *job) {
|
||||||
|
itemRefreshed(job);
|
||||||
|
});
|
||||||
|
fetchJob->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemCreateJobPrivate::itemRefreshed(KJob *job)
|
||||||
|
{
|
||||||
|
if (!job->error()) {
|
||||||
|
DavItemFetchJob *fetchJob = qobject_cast<DavItemFetchJob *>(job);
|
||||||
|
mItem.setEtag(fetchJob->item().etag());
|
||||||
|
}
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMCREATEJOB_H
|
||||||
|
#define KDAV_DAVITEMCREATEJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemCreateJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemCreateJob davitemcreatejob.h <KDAV/DavItemCreateJob>
|
||||||
|
*
|
||||||
|
* @short A job to create a DAV item on the DAV server.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemCreateJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV item create job.
|
||||||
|
*
|
||||||
|
* @param item The item that shall be created.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavItemCreateJob(const DavItem &item, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the created DAV item including the correct identifier URL
|
||||||
|
* and current ETag information.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem item() const;
|
||||||
|
|
||||||
|
Q_REQUIRED_RESULT QUrl itemUrl() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemCreateJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,106 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemdeletejob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davitemfetchjob.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DeleteJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemDeleteJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
void conflictingItemFetched(KJob *job);
|
||||||
|
|
||||||
|
DavItem mItem;
|
||||||
|
DavItem mFreshItem;
|
||||||
|
int mFreshResponseCode = -1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemDeleteJob::DavItemDeleteJob(const DavItem &item, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemDeleteJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemDeleteJob);
|
||||||
|
d->mItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemDeleteJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemDeleteJob);
|
||||||
|
KIO::DeleteJob *job = KIO::del(d->mItem.url().url(), KIO::HideProgressInfo | KIO::DefaultFlags);
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->addMetaData(QStringLiteral("customHTTPHeader"), QStringLiteral("If-Match: ") + d->mItem.etag());
|
||||||
|
job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
|
||||||
|
job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
|
||||||
|
|
||||||
|
connect(job, &KIO::DeleteJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemDeleteJob::freshItem() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemDeleteJob);
|
||||||
|
return d->mFreshItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DavItemDeleteJob::freshResponseCode() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemDeleteJob);
|
||||||
|
return d->mFreshResponseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemDeleteJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::DeleteJob *deleteJob = qobject_cast<KIO::DeleteJob *>(job);
|
||||||
|
|
||||||
|
if (deleteJob->error() && deleteJob->error() != KIO::ERR_NO_CONTENT) {
|
||||||
|
const int responseCode = deleteJob->queryMetaData(QStringLiteral("responsecode")).isEmpty() //
|
||||||
|
? 0
|
||||||
|
: deleteJob->queryMetaData(QStringLiteral("responsecode")).toInt();
|
||||||
|
|
||||||
|
if (responseCode != 404 && responseCode != 410) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_ITEMDELETE);
|
||||||
|
setJobErrorText(deleteJob->errorText());
|
||||||
|
setJobError(deleteJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q_ptr->hasConflict()) {
|
||||||
|
DavItemFetchJob *fetchJob = new DavItemFetchJob(mItem);
|
||||||
|
QObject::connect(fetchJob, &DavItemFetchJob::result, q_ptr, [this](KJob *job) {
|
||||||
|
conflictingItemFetched(job);
|
||||||
|
});
|
||||||
|
fetchJob->start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemDeleteJobPrivate::conflictingItemFetched(KJob *job)
|
||||||
|
{
|
||||||
|
DavItemFetchJob *fetchJob = qobject_cast<DavItemFetchJob *>(job);
|
||||||
|
mFreshResponseCode = fetchJob->latestResponseCode();
|
||||||
|
|
||||||
|
if (!job->error()) {
|
||||||
|
mFreshItem = fetchJob->item();
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMDELETEJOB_H
|
||||||
|
#define KDAV_DAVITEMDELETEJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemDeleteJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemDeleteJob davitemdeletejob.h <KDAV/DavItemDeleteJob>
|
||||||
|
*
|
||||||
|
* @short A job to delete a DAV item on the DAV server.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemDeleteJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV item delete job.
|
||||||
|
*
|
||||||
|
* @param item The item that shall be deleted.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavItemDeleteJob(const DavItem &item, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the item that triggered the conflict, if any.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem freshItem() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the response code we got when fetching the fresh item.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT int freshResponseCode() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemDeleteJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemfetchjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemFetchJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
|
||||||
|
DavUrl mUrl;
|
||||||
|
DavItem mItem;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString etagFromHeaders(const QString &headers)
|
||||||
|
{
|
||||||
|
const QStringList allHeaders = headers.split(QLatin1Char('\n'));
|
||||||
|
|
||||||
|
QString etag;
|
||||||
|
for (const QString &header : allHeaders) {
|
||||||
|
if (header.startsWith(QLatin1String("etag:"), Qt::CaseInsensitive)) {
|
||||||
|
etag = header.section(QLatin1Char(' '), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return etag;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemFetchJob::DavItemFetchJob(const DavItem &item, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemFetchJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemFetchJob);
|
||||||
|
d->mItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemFetchJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemFetchJob);
|
||||||
|
KIO::StoredTransferJob *job = KIO::storedGet(d->mItem.url().url(), KIO::Reload, KIO::HideProgressInfo | KIO::DefaultFlags);
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
// Work around a strange bug in Zimbra (seen at least on CE 5.0.18) : if the user-agent
|
||||||
|
// contains "Mozilla", some strange debug data is displayed in the shared calendars.
|
||||||
|
// This kinda mess up the events parsing...
|
||||||
|
job->addMetaData(QStringLiteral("UserAgent"), QStringLiteral("KDE DAV groupware client"));
|
||||||
|
job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
|
||||||
|
job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
|
||||||
|
|
||||||
|
connect(job, &KIO::StoredTransferJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemFetchJob::item() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemFetchJob);
|
||||||
|
return d->mItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemFetchJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::StoredTransferJob *storedJob = qobject_cast<KIO::StoredTransferJob *>(job);
|
||||||
|
const QString responseCodeStr = storedJob->queryMetaData(QStringLiteral("responsecode"));
|
||||||
|
const int responseCode = responseCodeStr.isEmpty() ? 0 : responseCodeStr.toInt();
|
||||||
|
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
|
||||||
|
if (storedJob->error()) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_PROBLEM_WITH_REQUEST);
|
||||||
|
setJobErrorText(storedJob->errorText());
|
||||||
|
setJobError(storedJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
} else {
|
||||||
|
mItem.setData(storedJob->data());
|
||||||
|
mItem.setContentType(storedJob->queryMetaData(QStringLiteral("content-type")));
|
||||||
|
mItem.setEtag(etagFromHeaders(storedJob->queryMetaData(QStringLiteral("HTTP-Headers"))));
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMFETCHJOB_H
|
||||||
|
#define KDAV_DAVITEMFETCHJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemFetchJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemFetchJob davitemfetchjob.h <KDAV/DavItemFetchJob>
|
||||||
|
*
|
||||||
|
* @short A job that fetches a DAV item from the DAV server.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemFetchJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV item fetch job.
|
||||||
|
*
|
||||||
|
* @param item The item that shall be fetched.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavItemFetchJob(const DavItem &item, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the fetched item including current ETag information.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem item() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemFetchJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,163 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemmodifyjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davitemfetchjob.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemModifyJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
void itemRefreshed(KJob *job);
|
||||||
|
void conflictingItemFetched(KJob *job);
|
||||||
|
|
||||||
|
DavItem mItem;
|
||||||
|
DavItem mFreshItem;
|
||||||
|
int mFreshResponseCode = 0;
|
||||||
|
|
||||||
|
Q_DECLARE_PUBLIC(DavItemModifyJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemModifyJob::DavItemModifyJob(const DavItem &item, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemModifyJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemModifyJob);
|
||||||
|
d->mItem = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemModifyJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemModifyJob);
|
||||||
|
QString headers = QStringLiteral("Content-Type: ");
|
||||||
|
headers += d->mItem.contentType();
|
||||||
|
headers += QLatin1String("\r\n");
|
||||||
|
headers += QLatin1String("If-Match: ") + d->mItem.etag();
|
||||||
|
|
||||||
|
KIO::StoredTransferJob *job = KIO::storedPut(d->mItem.data(), itemUrl(), -1, KIO::HideProgressInfo | KIO::DefaultFlags);
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->addMetaData(QStringLiteral("customHTTPHeader"), headers);
|
||||||
|
job->addMetaData(QStringLiteral("cookies"), QStringLiteral("none"));
|
||||||
|
job->addMetaData(QStringLiteral("no-auth-prompt"), QStringLiteral("true"));
|
||||||
|
|
||||||
|
connect(job, &KIO::StoredTransferJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemModifyJob::item() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemModifyJob);
|
||||||
|
return d->mItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemModifyJob::freshItem() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemModifyJob);
|
||||||
|
return d->mFreshItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DavItemModifyJob::freshResponseCode() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemModifyJob);
|
||||||
|
return d->mFreshResponseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl DavItemModifyJob::itemUrl() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemModifyJob);
|
||||||
|
return d->mItem.url().url();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemModifyJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
Q_Q(DavItemModifyJob);
|
||||||
|
KIO::StoredTransferJob *storedJob = qobject_cast<KIO::StoredTransferJob *>(job);
|
||||||
|
|
||||||
|
if (storedJob->error()) {
|
||||||
|
const int responseCode = storedJob->queryMetaData(QStringLiteral("responsecode")).isEmpty() //
|
||||||
|
? 0
|
||||||
|
: storedJob->queryMetaData(QStringLiteral("responsecode")).toInt();
|
||||||
|
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_ITEMMODIFY);
|
||||||
|
setJobErrorText(storedJob->errorText());
|
||||||
|
setJobError(storedJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
|
||||||
|
if (q->hasConflict()) {
|
||||||
|
DavItemFetchJob *fetchJob = new DavItemFetchJob(mItem);
|
||||||
|
QObject::connect(fetchJob, &DavItemFetchJob::result, q, [this](KJob *job) {
|
||||||
|
conflictingItemFetched(job);
|
||||||
|
});
|
||||||
|
fetchJob->start();
|
||||||
|
} else {
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The 'Location:' HTTP header is used to indicate the new URL
|
||||||
|
const QStringList allHeaders = storedJob->queryMetaData(QStringLiteral("HTTP-Headers")).split(QLatin1Char('\n'));
|
||||||
|
QString location;
|
||||||
|
for (const QString &header : allHeaders) {
|
||||||
|
if (header.startsWith(QLatin1String("location:"), Qt::CaseInsensitive)) {
|
||||||
|
location = header.section(QLatin1Char(' '), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl url;
|
||||||
|
if (location.isEmpty()) {
|
||||||
|
url = storedJob->url();
|
||||||
|
} else if (location.startsWith(QLatin1Char('/'))) {
|
||||||
|
url = storedJob->url();
|
||||||
|
url.setPath(location, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
url = QUrl::fromUserInput(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
url.setUserInfo(q->itemUrl().userInfo());
|
||||||
|
mItem.setUrl(DavUrl(url, mItem.url().protocol()));
|
||||||
|
|
||||||
|
DavItemFetchJob *fetchJob = new DavItemFetchJob(mItem);
|
||||||
|
QObject::connect(fetchJob, &DavItemFetchJob::result, q, [this](KJob *job) {
|
||||||
|
itemRefreshed(job);
|
||||||
|
});
|
||||||
|
fetchJob->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemModifyJobPrivate::itemRefreshed(KJob *job)
|
||||||
|
{
|
||||||
|
if (!job->error()) {
|
||||||
|
DavItemFetchJob *fetchJob = qobject_cast<DavItemFetchJob *>(job);
|
||||||
|
mItem.setEtag(fetchJob->item().etag());
|
||||||
|
} else {
|
||||||
|
mItem.setEtag(QString());
|
||||||
|
}
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemModifyJobPrivate::conflictingItemFetched(KJob *job)
|
||||||
|
{
|
||||||
|
DavItemFetchJob *fetchJob = qobject_cast<DavItemFetchJob *>(job);
|
||||||
|
mFreshResponseCode = fetchJob->latestResponseCode();
|
||||||
|
|
||||||
|
if (!job->error()) {
|
||||||
|
mFreshItem = fetchJob->item();
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMMODIFYJOB_H
|
||||||
|
#define KDAV_DAVITEMMODIFYJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemModifyJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemModifyJob davitemmodifyjob.h <KDAV/DavItemModifyJob>
|
||||||
|
*
|
||||||
|
* @short A job that modifies a DAV item on the DAV server.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemModifyJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV item modify job.
|
||||||
|
*
|
||||||
|
* @param item The item that shall be modified.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
explicit DavItemModifyJob(const DavItem &item, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the modified item including the updated ETag information.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem item() const;
|
||||||
|
|
||||||
|
Q_REQUIRED_RESULT QUrl itemUrl() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the item that triggered the conflict, if any.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem freshItem() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the response code we got when fetching the fresh item.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT int freshResponseCode() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemModifyJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,167 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
Based on DavItemsListJob:
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemsfetchjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
#include "davmultigetprotocol_p.h"
|
||||||
|
#include "utils_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemsFetchJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
|
||||||
|
DavUrl mCollectionUrl;
|
||||||
|
QStringList mUrls;
|
||||||
|
QMap<QString, DavItem> mItems;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemsFetchJob::DavItemsFetchJob(const DavUrl &collectionUrl, const QStringList &urls, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemsFetchJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemsFetchJob);
|
||||||
|
d->mCollectionUrl = collectionUrl;
|
||||||
|
d->mUrls = urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemsFetchJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemsFetchJob);
|
||||||
|
const DavMultigetProtocol *protocol = dynamic_cast<const DavMultigetProtocol *>(DavManager::davProtocol(d->mCollectionUrl.protocol()));
|
||||||
|
if (!protocol) {
|
||||||
|
setError(ERR_NO_MULTIGET);
|
||||||
|
d->setErrorTextFromDavError();
|
||||||
|
emitResult();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomDocument report = protocol->itemsReportQuery(d->mUrls)->buildQuery();
|
||||||
|
KIO::DavJob *job = DavManager::self()->createReportJob(d->mCollectionUrl.url(), report.toString(), QStringLiteral("0"));
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
connect(job, &KIO::DavJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem::List DavItemsFetchJob::items() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemsFetchJob);
|
||||||
|
DavItem::List values;
|
||||||
|
values.reserve(d->mItems.size());
|
||||||
|
for (const auto &value : std::as_const(d->mItems)) {
|
||||||
|
values << value;
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem DavItemsFetchJob::item(const QString &url) const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemsFetchJob);
|
||||||
|
return d->mItems.value(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemsFetchJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::DavJob *davJob = qobject_cast<KIO::DavJob *>(job);
|
||||||
|
const QString responseCodeStr = davJob->queryMetaData(QStringLiteral("responsecode"));
|
||||||
|
const int responseCode = responseCodeStr.isEmpty() ? 0 : responseCodeStr.toInt();
|
||||||
|
|
||||||
|
// KIO::DavJob does not set error() even if the HTTP status code is a 4xx or a 5xx
|
||||||
|
if (davJob->error() || (responseCode >= 400 && responseCode < 600)) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_PROBLEM_WITH_REQUEST);
|
||||||
|
setJobErrorText(davJob->errorText());
|
||||||
|
setJobError(davJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DavMultigetProtocol *protocol = static_cast<const DavMultigetProtocol *>(DavManager::davProtocol(mCollectionUrl.protocol()));
|
||||||
|
|
||||||
|
QDomDocument document;
|
||||||
|
document.setContent(davJob->responseData(), true);
|
||||||
|
const QDomElement documentElement = document.documentElement();
|
||||||
|
|
||||||
|
QDomElement responseElement = Utils::firstChildElementNS(documentElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
|
||||||
|
while (!responseElement.isNull()) {
|
||||||
|
QDomElement propstatElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("propstat"));
|
||||||
|
|
||||||
|
if (propstatElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for errors
|
||||||
|
const QDomElement statusElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("status"));
|
||||||
|
if (!statusElement.text().contains(QLatin1String("200"))) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomElement propElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("prop"));
|
||||||
|
|
||||||
|
DavItem item;
|
||||||
|
|
||||||
|
// extract path
|
||||||
|
const QDomElement hrefElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("href"));
|
||||||
|
const QString href = hrefElement.text();
|
||||||
|
|
||||||
|
QUrl url = davJob->url();
|
||||||
|
if (href.startsWith(QLatin1Char('/'))) {
|
||||||
|
// href is only a path, use request url to complete
|
||||||
|
url.setPath(href, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
// href is a complete url
|
||||||
|
url = QUrl::fromUserInput(href);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto _url = url;
|
||||||
|
_url.setUserInfo(mCollectionUrl.url().userInfo());
|
||||||
|
item.setUrl(DavUrl(_url, mCollectionUrl.protocol()));
|
||||||
|
|
||||||
|
// extract ETag
|
||||||
|
const QDomElement getetagElement = Utils::firstChildElementNS(propElement, QStringLiteral("DAV:"), QStringLiteral("getetag"));
|
||||||
|
item.setEtag(getetagElement.text());
|
||||||
|
|
||||||
|
// extract content
|
||||||
|
const QDomElement dataElement = Utils::firstChildElementNS(propElement, protocol->responseNamespace(), protocol->dataTagName());
|
||||||
|
|
||||||
|
if (dataElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QByteArray data = dataElement.firstChild().toText().data().toUtf8();
|
||||||
|
if (data.isEmpty()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.setData(data);
|
||||||
|
|
||||||
|
mItems.insert(item.url().toDisplayString(), item);
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
}
|
||||||
|
|
||||||
|
emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
Based on DavItemsListJob:
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMSFETCHJOB_H
|
||||||
|
#define KDAV_DAVITEMSFETCHJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemsFetchJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemsFetchJob davitemsfetchjob.h <KDAV/DavItemsFetchJob>
|
||||||
|
*
|
||||||
|
* @short A job that fetches a list of items from a DAV server using a MULTIGET query.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemsFetchJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new items fetch job.
|
||||||
|
*
|
||||||
|
* @param collectionUrl The DAV collection on which to run the query
|
||||||
|
* @param urls The list of URLs to fetch
|
||||||
|
* @param parent The parent object
|
||||||
|
*/
|
||||||
|
DavItemsFetchJob(const DavUrl &collectionUrl, const QStringList &urls, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of fetched items
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem::List items() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the item found at @p url
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem item(const QString &url) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemsFetchJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,267 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davitemslistjob.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
#include "davmanager_p.h"
|
||||||
|
#include "davprotocolbase_p.h"
|
||||||
|
#include "davurl.h"
|
||||||
|
#include "etagcache.h"
|
||||||
|
#include "utils_p.h"
|
||||||
|
|
||||||
|
#include <KIO/DavJob>
|
||||||
|
#include <KIO/Job>
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavItemsListJobPrivate : public DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void davJobFinished(KJob *job);
|
||||||
|
|
||||||
|
DavUrl mUrl;
|
||||||
|
std::shared_ptr<EtagCache> mEtagCache;
|
||||||
|
QStringList mMimeTypes;
|
||||||
|
QString mRangeStart;
|
||||||
|
QString mRangeEnd;
|
||||||
|
DavItem::List mItems;
|
||||||
|
std::set<QString> mSeenUrls; // to prevent events duplication with some servers
|
||||||
|
DavItem::List mChangedItems;
|
||||||
|
QStringList mDeletedItems;
|
||||||
|
uint mSubJobCount = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemsListJob::DavItemsListJob(const DavUrl &url, const std::shared_ptr<EtagCache> &cache, QObject *parent)
|
||||||
|
: DavJobBase(new DavItemsListJobPrivate, parent)
|
||||||
|
{
|
||||||
|
Q_D(DavItemsListJob);
|
||||||
|
d->mUrl = url;
|
||||||
|
d->mEtagCache = cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItemsListJob::~DavItemsListJob() = default;
|
||||||
|
|
||||||
|
void DavItemsListJob::setContentMimeTypes(const QStringList &types)
|
||||||
|
{
|
||||||
|
Q_D(DavItemsListJob);
|
||||||
|
d->mMimeTypes = types;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemsListJob::setTimeRange(const QString &start, const QString &end)
|
||||||
|
{
|
||||||
|
Q_D(DavItemsListJob);
|
||||||
|
d->mRangeStart = start;
|
||||||
|
d->mRangeEnd = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemsListJob::start()
|
||||||
|
{
|
||||||
|
Q_D(DavItemsListJob);
|
||||||
|
const DavProtocolBase *protocol = DavManager::davProtocol(d->mUrl.protocol());
|
||||||
|
Q_ASSERT(protocol);
|
||||||
|
|
||||||
|
const auto queries = protocol->itemsQueries();
|
||||||
|
for (XMLQueryBuilder::Ptr builder : queries) {
|
||||||
|
if (!d->mRangeStart.isEmpty()) {
|
||||||
|
builder->setParameter(QStringLiteral("start"), d->mRangeStart);
|
||||||
|
}
|
||||||
|
if (!d->mRangeEnd.isEmpty()) {
|
||||||
|
builder->setParameter(QStringLiteral("end"), d->mRangeEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomDocument props = builder->buildQuery();
|
||||||
|
const QString mimeType = builder->mimeType();
|
||||||
|
|
||||||
|
if (d->mMimeTypes.isEmpty() || d->mMimeTypes.contains(mimeType)) {
|
||||||
|
++d->mSubJobCount;
|
||||||
|
if (protocol->useReport()) {
|
||||||
|
KIO::DavJob *job = DavManager::self()->createReportJob(d->mUrl.url(), props.toString());
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->setProperty("davType", QStringLiteral("report"));
|
||||||
|
job->setProperty("itemsMimeType", mimeType);
|
||||||
|
connect(job, &KIO::DavJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
KIO::DavJob *job = DavManager::self()->createPropFindJob(d->mUrl.url(), props.toString());
|
||||||
|
job->addMetaData(QStringLiteral("PropagateHttpHeader"), QStringLiteral("true"));
|
||||||
|
job->setProperty("davType", QStringLiteral("propFind"));
|
||||||
|
job->setProperty("itemsMimeType", mimeType);
|
||||||
|
connect(job, &KIO::DavJob::result, this, [d](KJob *job) {
|
||||||
|
d->davJobFinished(job);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d->mSubJobCount == 0) {
|
||||||
|
setError(ERR_ITEMLIST_NOMIMETYPE);
|
||||||
|
d->setErrorTextFromDavError();
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem::List DavItemsListJob::items() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemsListJob);
|
||||||
|
return d->mItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavItem::List DavItemsListJob::changedItems() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemsListJob);
|
||||||
|
return d->mChangedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList DavItemsListJob::deletedItems() const
|
||||||
|
{
|
||||||
|
Q_D(const DavItemsListJob);
|
||||||
|
return d->mDeletedItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavItemsListJobPrivate::davJobFinished(KJob *job)
|
||||||
|
{
|
||||||
|
KIO::DavJob *davJob = qobject_cast<KIO::DavJob *>(job);
|
||||||
|
const int responseCode = davJob->queryMetaData(QStringLiteral("responsecode")).isEmpty() //
|
||||||
|
? 0
|
||||||
|
: davJob->queryMetaData(QStringLiteral("responsecode")).toInt();
|
||||||
|
|
||||||
|
// KIO::DavJob does not set error() even if the HTTP status code is a 4xx or a 5xx
|
||||||
|
if (davJob->error() || (responseCode >= 400 && responseCode < 600)) {
|
||||||
|
setLatestResponseCode(responseCode);
|
||||||
|
setError(ERR_PROBLEM_WITH_REQUEST);
|
||||||
|
setJobErrorText(davJob->errorText());
|
||||||
|
setJobError(davJob->error());
|
||||||
|
setErrorTextFromDavError();
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Extract data from a document like the following:
|
||||||
|
*
|
||||||
|
* <multistatus xmlns="DAV:">
|
||||||
|
* <response xmlns="DAV:">
|
||||||
|
* <href xmlns="DAV:">/caldav.php/test1.user/home/KOrganizer-166749289.780.ics</href>
|
||||||
|
* <propstat xmlns="DAV:">
|
||||||
|
* <prop xmlns="DAV:">
|
||||||
|
* <getetag xmlns="DAV:">"b4bbea0278f4f63854c4167a7656024a"</getetag>
|
||||||
|
* </prop>
|
||||||
|
* <status xmlns="DAV:">HTTP/1.1 200 OK</status>
|
||||||
|
* </propstat>
|
||||||
|
* </response>
|
||||||
|
* <response xmlns="DAV:">
|
||||||
|
* <href xmlns="DAV:">/caldav.php/test1.user/home/KOrganizer-399416366.464.ics</href>
|
||||||
|
* <propstat xmlns="DAV:">
|
||||||
|
* <prop xmlns="DAV:">
|
||||||
|
* <getetag xmlns="DAV:">"52eb129018398a7da4f435b2bc4c6cd5"</getetag>
|
||||||
|
* </prop>
|
||||||
|
* <status xmlns="DAV:">HTTP/1.1 200 OK</status>
|
||||||
|
* </propstat>
|
||||||
|
* </response>
|
||||||
|
* </multistatus>
|
||||||
|
*/
|
||||||
|
|
||||||
|
const QString itemsMimeType = job->property("itemsMimeType").toString();
|
||||||
|
QDomDocument document;
|
||||||
|
document.setContent(davJob->responseData(), true);
|
||||||
|
const QDomElement documentElement = document.documentElement();
|
||||||
|
|
||||||
|
QDomElement responseElement = Utils::firstChildElementNS(documentElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
while (!responseElement.isNull()) {
|
||||||
|
QDomElement propstatElement;
|
||||||
|
|
||||||
|
// check for the valid propstat, without giving up on first error
|
||||||
|
{
|
||||||
|
const QDomNodeList propstats = responseElement.elementsByTagNameNS(QStringLiteral("DAV:"), QStringLiteral("propstat"));
|
||||||
|
for (int i = 0; i < propstats.length(); ++i) {
|
||||||
|
const QDomElement propstatCandidate = propstats.item(i).toElement();
|
||||||
|
const QDomElement statusElement = Utils::firstChildElementNS(propstatCandidate, QStringLiteral("DAV:"), QStringLiteral("status"));
|
||||||
|
if (statusElement.text().contains(QLatin1String("200"))) {
|
||||||
|
propstatElement = propstatCandidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (propstatElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QDomElement propElement = Utils::firstChildElementNS(propstatElement, QStringLiteral("DAV:"), QStringLiteral("prop"));
|
||||||
|
|
||||||
|
// check whether it is a DAV collection ...
|
||||||
|
const QDomElement resourcetypeElement = Utils::firstChildElementNS(propElement, QStringLiteral("DAV:"), QStringLiteral("resourcetype"));
|
||||||
|
if (!resourcetypeElement.isNull()) {
|
||||||
|
const QDomElement collectionElement = Utils::firstChildElementNS(resourcetypeElement, QStringLiteral("DAV:"), QStringLiteral("collection"));
|
||||||
|
if (!collectionElement.isNull()) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ... if not it is an item
|
||||||
|
DavItem item;
|
||||||
|
item.setContentType(itemsMimeType);
|
||||||
|
|
||||||
|
// extract path
|
||||||
|
const QDomElement hrefElement = Utils::firstChildElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("href"));
|
||||||
|
const QString href = hrefElement.text();
|
||||||
|
|
||||||
|
QUrl url = davJob->url();
|
||||||
|
url.setUserInfo(QString());
|
||||||
|
if (href.startsWith(QLatin1Char('/'))) {
|
||||||
|
// href is only a path, use request url to complete
|
||||||
|
url.setPath(href, QUrl::TolerantMode);
|
||||||
|
} else {
|
||||||
|
// href is a complete url
|
||||||
|
url = QUrl::fromUserInput(href);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString itemUrl = url.toDisplayString();
|
||||||
|
const auto [it, isInserted] = mSeenUrls.insert(itemUrl);
|
||||||
|
if (!isInserted) {
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto _url = url;
|
||||||
|
_url.setUserInfo(mUrl.url().userInfo());
|
||||||
|
item.setUrl(DavUrl(_url, mUrl.protocol()));
|
||||||
|
|
||||||
|
// extract ETag
|
||||||
|
const QDomElement getetagElement = Utils::firstChildElementNS(propElement, QStringLiteral("DAV:"), QStringLiteral("getetag"));
|
||||||
|
|
||||||
|
item.setEtag(getetagElement.text());
|
||||||
|
|
||||||
|
mItems << item;
|
||||||
|
|
||||||
|
if (mEtagCache->etagChanged(itemUrl, item.etag())) {
|
||||||
|
mChangedItems << item;
|
||||||
|
}
|
||||||
|
|
||||||
|
responseElement = Utils::nextSiblingElementNS(responseElement, QStringLiteral("DAV:"), QStringLiteral("response"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mDeletedItems.clear();
|
||||||
|
|
||||||
|
const auto map = mEtagCache->etagCacheMap();
|
||||||
|
for (auto it = map.cbegin(); it != map.cend(); ++it) {
|
||||||
|
const QString remoteId = it.key();
|
||||||
|
if (mSeenUrls.find(remoteId) == mSeenUrls.cend()) {
|
||||||
|
mDeletedItems.append(remoteId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (--mSubJobCount == 0) {
|
||||||
|
emitResult();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVITEMSLISTJOB_H
|
||||||
|
#define KDAV_DAVITEMSLISTJOB_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include "davitem.h"
|
||||||
|
#include "davjobbase.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class EtagCache;
|
||||||
|
class DavUrl;
|
||||||
|
class DavItemsListJobPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavItemsListJob davitemslistjob.h <KDAV/DavItemsListJob>
|
||||||
|
*
|
||||||
|
* @short A job that lists all DAV items inside a DAV collection.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavItemsListJob : public DavJobBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Creates a new DAV items list job.
|
||||||
|
*
|
||||||
|
* @param url The URL of the DAV collection.
|
||||||
|
* @param parent The parent object.
|
||||||
|
*/
|
||||||
|
DavItemsListJob(const DavUrl &url, const std::shared_ptr<EtagCache> &cache, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
~DavItemsListJob() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Limits the mime types of the items requested.
|
||||||
|
*
|
||||||
|
* If no mime type is given then all will be requested.
|
||||||
|
*
|
||||||
|
* @param types The list of mime types to include
|
||||||
|
*/
|
||||||
|
void setContentMimeTypes(const QStringList &types);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the start and end time to list items for.
|
||||||
|
*
|
||||||
|
* @param start The range start, in format "date with UTC time"
|
||||||
|
* @param end The range end, in format "date with UTC time"
|
||||||
|
*/
|
||||||
|
void setTimeRange(const QString &start, const QString &end);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the job.
|
||||||
|
*/
|
||||||
|
void start() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of items seen including identifier URL and ETag information.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem::List items() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of items that were changed on the server.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT DavItem::List changedItems() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of items URLs that were not seen in the backend.
|
||||||
|
* As this is based on the ETag cache this may contain dependent items.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT QStringList deletedItems() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavItemsListJob)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2014 Gregory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "davjobbase.h"
|
||||||
|
#include "davjobbase_p.h"
|
||||||
|
|
||||||
|
#include "daverror.h"
|
||||||
|
|
||||||
|
using namespace KDAV;
|
||||||
|
|
||||||
|
DavJobBase::DavJobBase(QObject *parent)
|
||||||
|
: KJob(parent)
|
||||||
|
, d_ptr(new DavJobBasePrivate())
|
||||||
|
{
|
||||||
|
d_ptr->q_ptr = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavJobBase::DavJobBase(DavJobBasePrivate *dd, QObject *parent)
|
||||||
|
: KJob(parent)
|
||||||
|
, d_ptr(dd)
|
||||||
|
{
|
||||||
|
d_ptr->q_ptr = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DavJobBase::~DavJobBase() = default;
|
||||||
|
|
||||||
|
int DavJobBase::latestResponseCode() const
|
||||||
|
{
|
||||||
|
return d_ptr->mLatestResponseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DavJobBase::canRetryLater() const
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
|
// Be explicit and readable by splitting the if/else if clauses
|
||||||
|
|
||||||
|
if (latestResponseCode() == 0 && error()) {
|
||||||
|
// Likely a timeout or a connection failure.
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 401) {
|
||||||
|
// Authentication required
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 402) {
|
||||||
|
// Payment required
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 407) {
|
||||||
|
// Proxy authentication required
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 408) {
|
||||||
|
// Request timeout
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 423) {
|
||||||
|
// Locked
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 429) {
|
||||||
|
// Too many requests
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() >= 501 && latestResponseCode() <= 504) {
|
||||||
|
// Various server-side errors
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 507) {
|
||||||
|
// Insufficient storage
|
||||||
|
ret = true;
|
||||||
|
} else if (latestResponseCode() == 511) {
|
||||||
|
// Network authentication required
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DavJobBase::hasConflict() const
|
||||||
|
{
|
||||||
|
return latestResponseCode() == 412;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setLatestResponseCode(int code)
|
||||||
|
{
|
||||||
|
mLatestResponseCode = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
Error DavJobBase::davError() const
|
||||||
|
{
|
||||||
|
return Error(static_cast<KDAV::ErrorNumber>(error()), d_ptr->mLatestResponseCode, d_ptr->mInternalErrorText, d_ptr->mJobErrorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setJobErrorText(const QString &errorText)
|
||||||
|
{
|
||||||
|
mInternalErrorText = errorText;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setJobError(int jobErrorCode)
|
||||||
|
{
|
||||||
|
mJobErrorCode = jobErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setErrorTextFromDavError()
|
||||||
|
{
|
||||||
|
q_ptr->setErrorText(q_ptr->davError().errorText());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setDavError(const Error &error)
|
||||||
|
{
|
||||||
|
q_ptr->setError(error.errorNumber());
|
||||||
|
setLatestResponseCode(error.responseCode());
|
||||||
|
setJobErrorText(error.internalErrorText());
|
||||||
|
setJobError(error.jobErrorCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setError(int errorCode)
|
||||||
|
{
|
||||||
|
q_ptr->setError(errorCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::setErrorText(const QString &errorText)
|
||||||
|
{
|
||||||
|
q_ptr->setErrorText(errorText);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DavJobBasePrivate::emitResult()
|
||||||
|
{
|
||||||
|
q_ptr->emitResult();
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2014 Gregory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVJOBBASE_H
|
||||||
|
#define KDAV_DAVJOBBASE_H
|
||||||
|
|
||||||
|
#include "kdav_export.h"
|
||||||
|
|
||||||
|
#include <KJob>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavJobBasePrivate;
|
||||||
|
class Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class DavJobBase davjobbase.h <KDAV/DavJobBase>
|
||||||
|
*
|
||||||
|
* @short base class for the jobs used by the resource.
|
||||||
|
*/
|
||||||
|
class KDAV_EXPORT DavJobBase : public KJob
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DavJobBase(QObject *parent = nullptr);
|
||||||
|
~DavJobBase() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the latest response code.
|
||||||
|
*
|
||||||
|
* If no response code has been set then 0 will be returned, but will
|
||||||
|
* be meaningless unless error() is non-zero. In that case this means
|
||||||
|
* that the latest error was not at the HTTP level.
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT int latestResponseCode() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the job can be retried later.
|
||||||
|
*
|
||||||
|
* This will return true for transient errors, i.e. if the response code
|
||||||
|
* is either zero and error() is set or if the HTTP response code hints
|
||||||
|
* at a temporary error.
|
||||||
|
*
|
||||||
|
* The HTTP response codes considered retryable are:
|
||||||
|
* - 401
|
||||||
|
* - 402
|
||||||
|
* - 407
|
||||||
|
* - 408
|
||||||
|
* - 423
|
||||||
|
* - 429
|
||||||
|
* - 501 to 504, inclusive
|
||||||
|
* - 507
|
||||||
|
* - 511
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT bool canRetryLater() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the job failed because of a conflict
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT bool hasConflict() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a instance of the KDAV:Error to be able to translate the error
|
||||||
|
*/
|
||||||
|
Q_REQUIRED_RESULT Error davError() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Q_DECL_HIDDEN explicit DavJobBase(DavJobBasePrivate *dd, QObject *parent = nullptr);
|
||||||
|
std::unique_ptr<DavJobBasePrivate> d_ptr;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DECLARE_PRIVATE(DavJobBase)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
SPDX-FileCopyrightText: 2014 Gregory Oestreicher <greg@kamago.net>
|
||||||
|
|
||||||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KDAV_DAVJOBBASE_P_H
|
||||||
|
#define KDAV_DAVJOBBASE_P_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace KDAV
|
||||||
|
{
|
||||||
|
class DavJobBase;
|
||||||
|
|
||||||
|
class DavJobBasePrivate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~DavJobBasePrivate() = default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the latest response code received.
|
||||||
|
*
|
||||||
|
* Only really useful in case of error, though success codes can
|
||||||
|
* also be set.
|
||||||
|
*
|
||||||
|
* @param code The code to set, should be a valid HTTP response code or zero.
|
||||||
|
*/
|
||||||
|
void setLatestResponseCode(int code);
|
||||||
|
|
||||||
|
void setJobErrorText(const QString &errorText);
|
||||||
|
void setJobError(int jobErrorCode);
|
||||||
|
void setErrorTextFromDavError();
|
||||||
|
void setDavError(const Error &error);
|
||||||
|
|
||||||
|
// forwarded protected KJob API, so we can use this from subclasses of this
|
||||||
|
void setError(int errorCode);
|
||||||
|
void setErrorText(const QString &errorText);
|
||||||
|
void emitResult();
|
||||||
|
|
||||||
|
DavJobBase *q_ptr = nullptr;
|
||||||
|
int mLatestResponseCode = 0;
|
||||||
|
int mJobErrorCode = 0;
|
||||||
|
QString mInternalErrorText;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue