Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
KDE:Unstable:Applications
kio-gdrive
_service:obs_scm:kio-gdrive-VERSIONgit.20240216...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:kio-gdrive-VERSIONgit.20240216T022018~ca1107c.obscpio of Package kio-gdrive
07070100000000000081A400000000000000000000000165CEC6620000003C000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/.gitignore.kdev4 *.kdev4 build build-overlay build-root .clang-format 07070100000001000081A400000000000000000000000165CEC66200000115000000000000000000000000000000000000003D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/.gitlab-ci.yml# SPDX-FileCopyrightText: None # SPDX-License-Identifier: CC0-1.0 include: - project: sysadmin/ci-utilities file: - /gitlab-templates/linux.yml - /gitlab-templates/freebsd.yml - /gitlab-templates/linux-qt6.yml - /gitlab-templates/freebsd-qt6.yml 07070100000002000081A400000000000000000000000165CEC6620000033C000000000000000000000000000000000000003A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/.kde-ci.yml# SPDX-FileCopyrightText: None # SPDX-License-Identifier: CC0-1.0 Dependencies: - 'on': ['Linux/Qt5', 'FreeBSD/Qt5'] 'require': 'frameworks/extra-cmake-modules': '@stable' 'frameworks/ki18n': '@stable' 'frameworks/kdoctools': '@stable' 'frameworks/kio': '@stable' 'frameworks/purpose': '@stable' 'pim/libkgapi': '@stable' 'network/kaccounts-integration': '@same' 'third-party/qtkeychain': '@latest' - 'on': ['Linux/Qt6', 'FreeBSD/Qt6'] 'require': 'frameworks/extra-cmake-modules': '@latest-kf6' 'frameworks/ki18n': '@latest-kf6' 'frameworks/kdoctools': '@latest-kf6' 'frameworks/kio': '@latest-kf6' 'frameworks/purpose': '@latest-kf6' 'pim/libkgapi': '@latest-kf6' 'third-party/qtkeychain': '@latest' Options: require-passing-tests-on: [ 'Linux', 'FreeBSD' ] 07070100000003000081A400000000000000000000000165CEC66200000DF4000000000000000000000000000000000000003D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/CMakeLists.txtcmake_minimum_required(VERSION 3.16) # KDE Application Version, managed by release script set (RELEASE_SERVICE_VERSION_MAJOR "24") set (RELEASE_SERVICE_VERSION_MINOR "04") set (RELEASE_SERVICE_VERSION_MICRO "70") set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") project(kio-gdrive VERSION ${RELEASE_SERVICE_VERSION}) set(QT_MIN_VERSION 5.15.2) set(KF_MIN_VERSION 5.96.0) set(KGAPI_MIN_VERSION 5.11.41) set(KACCOUNTS_MIN_VERSION 20.03.80) set(QTKEYCHAIN_MIN_VERSION 0.6.0) find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(ECMQtDeclareLoggingCategory) include(ECMSetupVersion) include(ECMDeprecationSettings) include(KDEClangFormat) include(KDEGitCommitHooks) find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui Network Widgets) find_package(KF${QT_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS I18n DocTools KIO) if(QT_MAJOR_VERSION STREQUAL "5") find_package(KPimGAPI ${KGAPI_MIN_VERSION} REQUIRED) else() find_package(KPim6GAPI ${KGAPI_MIN_VERSION} REQUIRED) endif() find_package(KF${QT_MAJOR_VERSION}Purpose ${KF_MIN_VERSION}) # Optional since it depends on KAccounts set_package_properties(KF${QT_MAJOR_VERSION}Purpose PROPERTIES TYPE RECOMMENDED PURPOSE "Enables the Share menu plugin.") if(QT_MAJOR_VERSION STREQUAL "5") set(KACCOUNTS_SUFFIX "") else() set(KACCOUNTS_SUFFIX "6") endif() find_package(KAccounts${KACCOUNTS_SUFFIX} ${KACCOUNTS_MIN_VERSION}) set_package_properties(KAccounts${KACCOUNTS_SUFFIX} PROPERTIES TYPE RECOMMENDED URL "https://commits.kde.org/kaccounts-integration" PURPOSE "Enables integration with system-wide accounts.") if (NOT KAccounts${KACCOUNTS_SUFFIX}_FOUND) find_package(Qt${QT_MAJOR_VERSION}Keychain ${QTKEYCHAIN_MIN_VERSION} REQUIRED) set_package_properties(Qt${QT_MAJOR_VERSION}Keychain PROPERTIES URL "https://github.com/frankosterfeld/qtkeychain" PURPOSE "Required for secure storage of accounts secrets.") message(STATUS "Building the QtKeychain backend.") endif() find_package(Qt${QT_MAJOR_VERSION}Test QUIET) set_package_properties(Qt${QT_MAJOR_VERSION}Test PROPERTIES TYPE OPTIONAL PURPOSE "Required for building tests.") if(NOT Qt${QT_MAJOR_VERSION}Test_FOUND) set(BUILD_TESTING OFF CACHE BOOL "Build the testing tree.") endif() ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX GDRIVE VERSION_HEADER gdriveversion.h) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) add_definitions(-DQT_STRICT_ITERATORS) add_definitions(-DTRANSLATION_DOMAIN=\"kio5_gdrive\") ecm_set_disabled_deprecation_versions(QT 5.15.2 KF 5.83.0 ) if(BUILD_TESTING) add_subdirectory(autotests) endif() add_subdirectory(desktop) add_subdirectory(doc) add_subdirectory(src) if (KF${QT_MAJOR_VERSION}Purpose_FOUND) add_subdirectory(purpose) endif() if (KAccounts${KACCOUNTS_SUFFIX}_FOUND) message(STATUS "Building the KAccounts backend.") add_subdirectory(kaccounts) endif() ki18n_install(po) kdoctools_install(po) file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) 07070100000004000081A400000000000000000000000165CEC66200004761000000000000000000000000000000000000003600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/COPYINGNOTE! The GPL below is copyrighted by the Free Software Foundation, but the instance of code that it refers to (the kde programs) are copyrighted by the authors who actually wrote it. --------------------------------------------------------------------------- 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 Library 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. GNU GENERAL PUBLIC LICENSE 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 a brief idea of what it does.> Copyright (C) 19yy <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) 19yy 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 Library General Public License instead of this License. 07070100000005000081A400000000000000000000000165CEC6620000894B000000000000000000000000000000000000003B00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/COPYING.GPL3 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 a brief idea of what it does.> Copyright (C) <year> <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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU 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. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 07070100000006000081A400000000000000000000000165CEC662000004BD000000000000000000000000000000000000003600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/HACKINGInstall to custom prefix ========================= You can install kio-gdrive to your preferred installation prefix, as long as kdeinit5 has been installed in the same prefix. Locate Debug Output =================== You will not see the slave's output in the terminal where you started e.g. Dolphin. On systemd distros the output will go in the journalctl (assuming Qt built with the -journald option). A quick way to locate the relevant logs is the following command: journalctl -b | grep kf.kio.workers.gdrive This will only show the logs since the last boot. To retrieve also older logs, you can filter the messages by the process who emitted them (kdeinit5): journalctl $(which kdeinit5) | grep kf.kio.workers.gdrive Enable Debug Output =================== Th gdrive slave uses categorized debug output. Normally you would enable its output with a simple: export QT_LOGGING_RULES="kf.kio.workers.gdrive=true" However, you need to make sure this variable is present in the environment of kdeinit5, which is the process that starts the ioslave. A simpler alternative is to create (or edit) ~/.config/QtProject/qtlogging.ini with the following content: [Rules] kf.kio.workers.gdrive=true 07070100000007000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES07070100000008000081A400000000000000000000000165CEC662000044D7000000000000000000000000000000000000004800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES/GPL-2.0-only.txtGNU 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. 07070100000009000081A400000000000000000000000165CEC662000044D6000000000000000000000000000000000000004C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES/GPL-2.0-or-later.txtGNU 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. 0707010000000A000081A400000000000000000000000165CEC662000086A6000000000000000000000000000000000000004800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES/GPL-3.0-only.txtGNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 a brief idea of what it does.> Copyright (C) <year> <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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>. The GNU 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. But first, please read <https://www.gnu.org/ licenses /why-not-lgpl.html>. 0707010000000B000081A400000000000000000000000165CEC662000086A6000000000000000000000000000000000000004C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES/GPL-3.0-or-later.txtGNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 a brief idea of what it does.> Copyright (C) <year> <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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>. The GNU 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. But first, please read <https://www.gnu.org/ licenses /why-not-lgpl.html>. 0707010000000C000081A400000000000000000000000165CEC66200000296000000000000000000000000000000000000005700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/LICENSES/LicenseRef-KDE-Accepted-GPL.txtThis library 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 3 of the license or (at your option) at any later version that is accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy as defined in Section 14 of version 3 of the license. 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. 0707010000000D000081A400000000000000000000000165CEC66200000088000000000000000000000000000000000000003A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/Messages.sh#!/bin/sh $XGETTEXT `find . -not -path \*/tests/\* -name \*.cpp -o -name \*.qml -o -name \*.cc -o -name \*.h` -o $podir/kio5_gdrive.pot 0707010000000E000081A400000000000000000000000165CEC66200000516000000000000000000000000000000000000003800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/README.mdhttps://community.kde.org/KIO_GDrive Hello there, lonely wanderer and welcome to the magical land of Google Drive! INSTALLATION ============ $ git clone git://anongit.kde.org/kio-gdrive.git $ cd kio-gdrive $ mkdir build && cd build $ cmake -DCMAKE_INSTALL_PREFIX=`qtpaths --install-prefix` .. $ sudo make install $ kdeinit5 # or just re-login Now you are ready to use the slave. Either click the "Network" button in Dolphin or run: $ kioclient5 exec gdrive:/ KNOWN ISSUES ============ GDocs file don't have file size Not our fault, Google Drive API simply does not return filesize of these files. I think it's because they are in the Google Docs format, so the size is irrelevant, since only GDocs can open them, and if we convert the files into .ODT or .DOCX or whatever else, the size is different (so we would have to measure it manually) Folders have "Unknown" size We cannot provide size information on folders, so I guess this is actually implemented in KIO/Dolphin by simply listing each folder and showing the number of files. This is probably not done on remote filesystems to save bandwidth and improve performance, hence the size is "unknown". TODO =========== Open tasks are tracked here: https://phabricator.kde.org/tag/kio_gdrive/ 0707010000000F000081A400000000000000000000000165CEC66200000337000000000000000000000000000000000000003F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/README.packagersBackend selection ================= By default, KIO GDrive looks for kaccounts-integration. If it gets found, the KAccounts backend gets built. Otherwise, the QtKeychain backend is used as fallback (in which case qtkeychain becomes a required dependency). It is possible to disable the KAccounts integration (which again, makes qtkeychain a required dependency) with the following cmake switch: cmake -DCMAKE_DISABLE_FIND_PACKAGE_KAccounts=ON .. Implicit dependency on file managers ===================================== KIO GDrive requires a KIO-enabled file manager at runtime, otherwise there is no way to setup a Google Drive account. This can be Dolphin or Gwenview or Konqueror. The slave installs a .desktop file that enables integration with the Dolphin's Places panel and the Plasma's Folder View widget. 07070100000010000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/autotests07070100000011000081A400000000000000000000000165CEC6620000014E000000000000000000000000000000000000004700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/autotests/CMakeLists.txtinclude(ECMAddTests) ecm_add_test( urltest.cpp ../src/gdriveurl.cpp LINK_LIBRARIES Qt::Test TEST_NAME urltest NAME_PREFIX kio_gdrive-) # FIXME: this test is currently broken for Jenkins #ecm_add_test( # listtest.cpp # LINK_LIBRARIES Qt5::Test KF5::KIOCore # TEST_NAME listtest # NAME_PREFIX kio_gdrive-) 07070100000012000081A400000000000000000000000165CEC66200000582000000000000000000000000000000000000004500000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/autotests/listtest.cpp/* * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include <QTest> #include <KIO/ListJob> class ListTest : public QObject { Q_OBJECT private Q_SLOTS: void testListJob(); private: int m_entries = 0; }; QTEST_GUILESS_MAIN(ListTest) void ListTest::testListJob() { const auto gdriveRoot = QUrl(QStringLiteral("gdrive:/")); QVERIFY(gdriveRoot.isValid()); auto listJob = KIO::listDir(gdriveRoot, KIO::HideProgressInfo); listJob->setUiDelegate(nullptr); QVERIFY(listJob); connect(listJob, &KIO::ListJob::entries, this, [=](KIO::Job *, const KIO::UDSEntryList &list) { m_entries = list.count(); for (const auto &entry : list) { // Check properties of new-account entry. if (entry.stringValue(KIO::UDSEntry::UDS_NAME) == QLatin1String("new-account")) { QVERIFY(entry.isDir()); QCOMPARE(entry.stringValue(KIO::UDSEntry::UDS_ICON_NAME), QStringLiteral("list-add-user")); } } }); connect(listJob, &KJob::result, this, [=](KJob *job) { QVERIFY(!job->error()); // At least new-account entry. QVERIFY(m_entries > 0); }); QEventLoop eventLoop; connect(listJob, &KJob::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); } #include "listtest.moc" 07070100000013000081A400000000000000000000000165CEC66200004233000000000000000000000000000000000000004400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/autotests/urltest.cpp/* * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "../src/gdriveurl.h" #include <QTest> class UrlTest : public QObject { Q_OBJECT private Q_SLOTS: void testGDriveUrl_data(); void testGDriveUrl(); }; QTEST_GUILESS_MAIN(UrlTest) void UrlTest::testGDriveUrl_data() { const auto gdriveUrl = [](const QString &path) { QUrl url; url.setScheme(GDriveUrl::Scheme); url.setPath(path); return url; }; QTest::addColumn<QUrl>("url"); QTest::addColumn<QString>("expectedToString"); QTest::addColumn<QString>("expectedAccount"); QTest::addColumn<QString>("expectedParentPath"); QTest::addColumn<bool>("expectedIsTrashed"); QTest::addColumn<bool>("expectedIsTopLevel"); QTest::addColumn<bool>("expectedIsRoot"); QTest::addColumn<bool>("expectedIsAccountRoot"); QTest::addColumn<bool>("expectedIsSharedWithMeRoot"); QTest::addColumn<bool>("expectedIsSharedWithMeTopLevel"); QTest::addColumn<bool>("expectedIsSharedWithMe"); QTest::addColumn<bool>("expectedIsSharedDrivesRoot"); QTest::addColumn<bool>("expectedIsSharedDrive"); QTest::addColumn<bool>("expectedIsNewAccountPath"); QTest::addColumn<bool>("expectedIsTrashDir"); QTest::addColumn<QStringList>("expectedPathComponents"); QTest::addColumn<QString>("expectedFilename"); // clang-format off QTest::newRow("root url") << gdriveUrl(QStringLiteral("/")) << QStringLiteral("gdrive:/") << QString() << QString() << false // expectedIsTrashed << false // expectedIsTopLevel << true // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList() << ""; QTest::newRow("account root url") << gdriveUrl(QStringLiteral("/foo@gmail.com")) << QStringLiteral("gdrive:/foo@gmail.com") << QStringLiteral("foo@gmail.com") << QStringLiteral("/") << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << true // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com")} << QStringLiteral("foo@gmail.com"); QTest::newRow("account trash url") << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir) << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::TrashDir << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << true // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::TrashDir} << GDriveUrl::TrashDir; QTest::newRow("file in trash") << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir + QStringLiteral("/baz.txt")) << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::TrashDir + QStringLiteral("/baz.txt") << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/") + GDriveUrl::TrashDir << true // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::TrashDir, QStringLiteral("baz.txt")} << QStringLiteral("baz.txt"); QTest::newRow("account shared drives url") << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedDrivesDir) << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::SharedDrivesDir << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << true // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedDrivesDir} << GDriveUrl::SharedDrivesDir; QTest::newRow("file in account root") << gdriveUrl(QStringLiteral("/foo@gmail.com/bar.txt")) << QStringLiteral("gdrive:/foo@gmail.com/bar.txt") << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar.txt")} << QStringLiteral("bar.txt"); QTest::newRow("folder in account root - no trailing slash") << gdriveUrl(QStringLiteral("/foo@gmail.com/bar")) << QStringLiteral("gdrive:/foo@gmail.com/bar") << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar")} << QStringLiteral("bar"); QTest::newRow("folder in account root - trailing slash") << gdriveUrl(QStringLiteral("/foo@gmail.com/bar/")) << QStringLiteral("gdrive:/foo@gmail.com/bar/") << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar")} << QStringLiteral("bar"); QTest::newRow("file in subfolder") << gdriveUrl(QStringLiteral("/foo@gmail.com/bar/baz.txt")) << QStringLiteral("gdrive:/foo@gmail.com/bar/baz.txt") << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/bar") << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), QStringLiteral("bar"), QStringLiteral("baz.txt")} << QStringLiteral("baz.txt"); QTest::newRow("account shared with me root") << gdriveUrl(QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir) << QStringLiteral("gdrive:/foo@gmail.com/") + GDriveUrl::SharedWithMeDir << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com") << false // expectedIsTrashed << true // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << true // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << false // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir} << GDriveUrl::SharedWithMeDir; QTest::newRow("shared with me top-level file") << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/baz.txt").arg(GDriveUrl::SharedWithMeDir)) << QStringLiteral("gdrive:/foo@gmail.com/%1/baz.txt").arg(GDriveUrl::SharedWithMeDir) << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << true // expectedIsSharedWithMeTopLevel << true // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("baz.txt")} << QStringLiteral("baz.txt"); QTest::newRow("shared with me top-level folder") << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/").arg(GDriveUrl::SharedWithMeDir)) << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/").arg(GDriveUrl::SharedWithMeDir) << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << true // expectedIsSharedWithMeTopLevel << true // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar")} << QStringLiteral("bar"); QTest::newRow("shared with me inner file") << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/baz.txt").arg(GDriveUrl::SharedWithMeDir)) << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/baz.txt").arg(GDriveUrl::SharedWithMeDir) << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir + QStringLiteral("/bar") << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << true // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar"), QStringLiteral("baz.txt")} << QStringLiteral("baz.txt"); QTest::newRow("shared with me inner folder") << gdriveUrl(QStringLiteral("/foo@gmail.com/%1/bar/baz/").arg(GDriveUrl::SharedWithMeDir)) << QStringLiteral("gdrive:/foo@gmail.com/%1/bar/baz/").arg(GDriveUrl::SharedWithMeDir) << QStringLiteral("foo@gmail.com") << QStringLiteral("/foo@gmail.com/") + GDriveUrl::SharedWithMeDir + QStringLiteral("/bar") << false // expectedIsTrashed << false // expectedIsTopLevel << false // expectedIsRoot << false // expectedIsAccountRoot << false // expectedIsSharedWithMeRoot << false // expectedIsSharedWithMeTopLevel << true // expectedIsSharedWithMe << false // expectedIsSharedDrivesRoot << false // expectedIsSharedDrive << false // expectedIsNewAccountPath << false // expectedIsTrashDir << QStringList {QStringLiteral("foo@gmail.com"), GDriveUrl::SharedWithMeDir, QStringLiteral("bar"), QStringLiteral("baz")} << QStringLiteral("baz"); // clang-format on } void UrlTest::testGDriveUrl() { QFETCH(QUrl, url); const auto gdriveUrl = GDriveUrl(url); QFETCH(QString, expectedToString); QCOMPARE(gdriveUrl.url(), QUrl(expectedToString)); QFETCH(QString, expectedAccount); QFETCH(QString, expectedParentPath); QFETCH(bool, expectedIsTrashed); QFETCH(bool, expectedIsTopLevel); QFETCH(bool, expectedIsRoot); QFETCH(bool, expectedIsAccountRoot); QFETCH(bool, expectedIsSharedWithMeRoot); QFETCH(bool, expectedIsSharedWithMeTopLevel); QFETCH(bool, expectedIsSharedWithMe); QFETCH(bool, expectedIsSharedDrivesRoot); QFETCH(bool, expectedIsSharedDrive); QFETCH(bool, expectedIsNewAccountPath); QFETCH(bool, expectedIsTrashDir); QFETCH(QStringList, expectedPathComponents); QFETCH(QString, expectedFilename); QCOMPARE(gdriveUrl.account(), expectedAccount); QCOMPARE(gdriveUrl.parentPath(), expectedParentPath); QCOMPARE(gdriveUrl.pathComponents(), expectedPathComponents); QCOMPARE(gdriveUrl.isTrashed(), expectedIsTrashed); QCOMPARE(gdriveUrl.isTopLevel(), expectedIsTopLevel); QCOMPARE(gdriveUrl.isRoot(), expectedIsRoot); QCOMPARE(gdriveUrl.isAccountRoot(), expectedIsAccountRoot); QCOMPARE(gdriveUrl.isSharedWithMeRoot(), expectedIsSharedWithMeRoot); QCOMPARE(gdriveUrl.isSharedWithMeTopLevel(), expectedIsSharedWithMeTopLevel); QCOMPARE(gdriveUrl.isSharedWithMe(), expectedIsSharedWithMe); QCOMPARE(gdriveUrl.isSharedDrivesRoot(), expectedIsSharedDrivesRoot); QCOMPARE(gdriveUrl.isSharedDrive(), expectedIsSharedDrive); QCOMPARE(gdriveUrl.isNewAccountPath(), expectedIsNewAccountPath); QCOMPARE(gdriveUrl.isTrashDir(), expectedIsTrashDir); QCOMPARE(gdriveUrl.filename(), expectedFilename); if (expectedPathComponents.isEmpty()) { QVERIFY(gdriveUrl.isRoot()); } else if (expectedPathComponents.count() == 1) { QVERIFY(gdriveUrl.isAccountRoot()); } } #include "urltest.moc" 07070100000014000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/cmake07070100000015000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/cmake/modules07070100000016000081A400000000000000000000000165CEC662000003F7000000000000000000000000000000000000004F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/cmake/modules/FindIntltool.cmake# # SPDX-FileCopyrightText: 2013 Valama development team # # SPDX-License-Identifier: GPL-3.0-or-later # find_program(INTLTOOL_EXTRACT_EXECUTABLE intltool-extract) find_program(INTLTOOL_MERGE_EXECUTABLE intltool-merge) mark_as_advanced(INTLTOOL_EXTRACT_EXECUTABLE) mark_as_advanced(INTLTOOL_MERGE_EXECUTABLE) if(INTLTOOL_EXTRACT_EXECUTABLE) execute_process( COMMAND ${INTLTOOL_EXTRACT_EXECUTABLE} "--version" OUTPUT_VARIABLE intltool_version ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) if(intltool_version MATCHES "^intltool-extract \\(.*\\) [0-9]") string(REGEX REPLACE "^intltool-extract \\([^\\)]*\\) ([0-9\\.]+[^ \n]*).*" "\\1" INTLTOOL_VERSION_STRING "${intltool_version}") endif() unset(intltool_version) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Intltool REQUIRED_VARS INTLTOOL_EXTRACT_EXECUTABLE INTLTOOL_MERGE_EXECUTABLE VERSION_VAR INTLTOOL_VERSION_STRING ) set(INTLTOOL_OPTIONS_DEFAULT "--quiet" ) 07070100000017000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/desktop07070100000018000081A400000000000000000000000165CEC662000000BA000000000000000000000000000000000000004500000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/desktop/CMakeLists.txtinstall(FILES gdrive-network.desktop DESTINATION ${KDE_INSTALL_DATADIR}/remoteview) install(FILES org.kde.kio_gdrive.metainfo.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) 07070100000019000081A400000000000000000000000165CEC66200000460000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/desktop/gdrive-network.desktop[Desktop Entry] Icon=folder-gdrive Name=Google Drive Name[ar]=غوغل درايف Name[az]=Google Disk Name[be]=Google Drive Name[ca]=Google Drive Name[ca@valencia]=Google Drive Name[cs]=Google Drive Name[da]=Google Drev Name[de]=Google Drive Name[el]=Google Drive Name[en_GB]=Google Drive Name[eo]=Google Drive Name[es]=Google Drive Name[et]=Google Drive Name[eu]=Google Drive Name[fi]=Google Drive Name[fr]=Google Drive Name[gl]=Google Drive Name[he]=Google Drive Name[hi]=गूगल ड्राइव Name[hu]=Google Drive Name[ia]=Google Drive Name[id]=Google Drive Name[ie]=Google Drive Name[it]=Google Drive Name[ka]=Google Drive Name[ko]=Google 드라이브 Name[lt]=Google diskas Name[nl]=Google Drive Name[nn]=Google Drive Name[pl]=Dysk Google Name[pt]=Google Drive Name[pt_BR]=Google Drive Name[ro]=Google Drive Name[ru]=Google Диск Name[sk]=Google Drive Name[sl]=Google Drive Name[sv]=Google Drive Name[ta]=கூகுள் டிரைவ் Name[tr]=Google Drive Name[uk]=Google Диск Name[x-test]=xxGoogle Drivexx Name[zh_CN]=Google Drive Name[zh_TW]=Google 雲端硬碟 Type=Link URL=gdrive:/ 0707010000001A000081A400000000000000000000000165CEC66200005948000000000000000000000000000000000000005600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/desktop/org.kde.kio_gdrive.metainfo.xml<?xml version="1.0" encoding="utf-8"?> <component type="addon"> <id>org.kde.kio_gdrive</id> <metadata_license>CC0-1.0</metadata_license> <project_license>GPL-2.0+</project_license> <extends>org.kde.dolphin.desktop</extends> <extends>org.kde.konqueror.desktop</extends> <extends>org.kde.krusader.desktop</extends> <extends>org.kde.gwenview.desktop</extends> <name>KIO GDrive</name> <name xml:lang="ar">وحدة الدخل/الخرج لغوغل درايف</name> <name xml:lang="az">KIO GDrive</name> <name xml:lang="be">KIO GDrive</name> <name xml:lang="ca">KIO GDrive</name> <name xml:lang="ca-valencia">KIO GDrive</name> <name xml:lang="cs">KIO GDrive</name> <name xml:lang="da">KIO GDrive</name> <name xml:lang="de">KIO GDrive</name> <name xml:lang="el">KIO GDrive</name> <name xml:lang="en-GB">KIO GDrive</name> <name xml:lang="eo">KIO-GDrive</name> <name xml:lang="es">KIO GDrive</name> <name xml:lang="et">KIO GDrive</name> <name xml:lang="eu">KIO GDrive</name> <name xml:lang="fi">KIO GDrive</name> <name xml:lang="fr">KIO GDrive</name> <name xml:lang="gl">KIO GDrive</name> <name xml:lang="hi">के-आईओ जी-ड्राइव</name> <name xml:lang="hu">KIO GDrive</name> <name xml:lang="ia">KIO GDrive</name> <name xml:lang="id">KIO GDrive</name> <name xml:lang="ie">gdrive por KIO</name> <name xml:lang="it">KIO GDrive</name> <name xml:lang="ka">KIO GDrive</name> <name xml:lang="ko">KIO GDrive</name> <name xml:lang="lt">KIO GDrive</name> <name xml:lang="nl">KIO-GDrive</name> <name xml:lang="nn">KIO GDrive</name> <name xml:lang="pl">KIO GDrive</name> <name xml:lang="pt">KIO GDrive</name> <name xml:lang="pt-BR">KIO GDrive</name> <name xml:lang="ro">KIO GDrive</name> <name xml:lang="ru">KIO для поддержки Google Диска</name> <name xml:lang="sk">KIO GDrive</name> <name xml:lang="sl">KIO GDrive</name> <name xml:lang="sv">KIO Gdrive</name> <name xml:lang="tr">KIO GDrive</name> <name xml:lang="uk">KIO GDrive</name> <name xml:lang="x-test">xxKIO GDrivexx</name> <name xml:lang="zh-CN">KIO GDrive</name> <name xml:lang="zh-TW">KIO GDrive</name> <summary>Google Drive integration with KDE Plasma and KDE applications</summary> <summary xml:lang="ar">تكامل غوغل درايف مع تطبيقات بلازما و كِيدِي</summary> <summary xml:lang="az">Google Diskin KDE Plasma və KDE tətbiqləri ilə inteqrasiyası</summary> <summary xml:lang="be">Інтэграцыя Google Drive з KDE Plasma і праграмамі KDE</summary> <summary xml:lang="ca">Integració del Drive de Google amb el Plasma del KDE i les aplicacions KDE</summary> <summary xml:lang="ca-valencia">Integració del Drive de Google amb Plasma de KDE i les aplicacions KDE</summary> <summary xml:lang="cs">Integrace Google Drive do KDE Plasma a aplikací KDE</summary> <summary xml:lang="da">Google Drive-integration med KDE Plasma og KDE-programmer</summary> <summary xml:lang="de">Integration von Google Drive mit Plasma und den KDE-Anwendungen</summary> <summary xml:lang="el">Ενσωμάτωση του Google Drive με το KDE Plasma και τις εφαρμογές του KDE</summary> <summary xml:lang="en-GB">Google Drive integration with KDE Plasma and KDE applications</summary> <summary xml:lang="eo">Google Drive-integriĝo kun KDE PlasmaKDE Plasma kaj KDE-aplikoj</summary> <summary xml:lang="es">Integración de Google Drive con Plasma de KDE y aplicaciones de KDE</summary> <summary xml:lang="et">Google Drive'i lõimimine KDE Plasma ja KDE rakendustega</summary> <summary xml:lang="eu">Google Drive, KDE Plasma eta KDE aplikazioekin bateratzea</summary> <summary xml:lang="fi">Google Drive -integrointi KDE Plasmaan ja KDE-sovelluksiin</summary> <summary xml:lang="fr">Intégration de Google Drive à KDE Plasma et aux applications KDE</summary> <summary xml:lang="gl">Integración de Google Drive con KDE Plasma e os aplicativos de KDE</summary> <summary xml:lang="hi">केडीई प्लाज़्मा और केडीई अनुप्रयोगों के साथ गूगल ड्राइव का एकीकरण</summary> <summary xml:lang="hu">Google Drive integráció a Plasmával és a KDE alkalmazásokkal</summary> <summary xml:lang="ia">integration de Google drive con KDE Plasma e applicationeS de KDE</summary> <summary xml:lang="id">Google Drive terintegrasi dengan Plasma KDE dan aplikasi KDE</summary> <summary xml:lang="it">Integrazione di Google Drive con le applicazioni di KDE e KDE Plasma</summary> <summary xml:lang="ka">Google Drive-ის ინტეგრაცია KDE Plasma-სთან და KDE -ის აპლიკაციებთან</summary> <summary xml:lang="ko">KDE Plasma 및 KDE 앱과 Google 드라이브 통합</summary> <summary xml:lang="lt">Google disko integracija su KDE Plasma ir KDE programomis</summary> <summary xml:lang="nl">Integratie van Google Drive met KDE Plasma en KDE applications</summary> <summary xml:lang="nn">Integrering av Google Drive, KDE Plasma og KDE-programma</summary> <summary xml:lang="pl">Integracja Dysku Google z KDE Plazmą i aplikacjami KDE</summary> <summary xml:lang="pt">Integração do Google Drive com o Plasma do KDE e as aplicações do KDE</summary> <summary xml:lang="pt-BR">Integração do Google Drive com o KDE Plasma e aplicativos do KDE</summary> <summary xml:lang="ro">Integrare Google Drive cu Plasma KDE și aplicațiile KDE</summary> <summary xml:lang="ru">Интеграция Google Диска с KDE Plasma и приложениями от KDE</summary> <summary xml:lang="sk">Integrácia Google Drive integration s KDE Plasma a KDE aplikáciami</summary> <summary xml:lang="sl">Integracija Google Drive s KDE Plasmo in aplikacijami KDE</summary> <summary xml:lang="sv">Integrering av Google Drive med KDE Plasma och KDE-program</summary> <summary xml:lang="tr">KDE Plasma ve KDE uygulamaları ile Google Drive tümleştirmesi</summary> <summary xml:lang="uk">Інтеграція Диска Google із Плазмою KDE та програмами KDE</summary> <summary xml:lang="x-test">xxGoogle Drive integration with KDE Plasma and KDE applicationsxx</summary> <summary xml:lang="zh-CN">KDE Plasma 和 KDE 应用的 Google 云端硬盘整合</summary> <summary xml:lang="zh-TW">適用於 KDE Plasma 和 KDE 應用程式的 Google Drive 整合</summary> <description> <p>KIO GDrive is a KIO slave that enables KIO-aware applications (such as Dolphin, Kate or Gwenview) to access and edit Google Drive files on the cloud.</p> <p xml:lang="ar">تمكّن وحدة غوغل درايف التطبيقات المدركة لـ KIO (مثل دولفين أو كيت أو حونفيو) للوصول إلى ملفات غوغل درايف على سحابة غوغل.</p> <p xml:lang="az">KIO GDrive sizə KIO iləuyğun proqramları işə salmağa imkan verən KIO xidməti cihazıdır.</p> <p xml:lang="be">KIO GDrive - гэта ўбудова KIO worker, якая дазваляе праграмам, якія працуюць з KIO (напрыклад, Dolphin, Kate або Gwenview), атрымліваць доступ і рэдагаваць файлы ў воблаку Google Drive.</p> <p xml:lang="ca">El KIO GDrive és un esclau del KIO que permet a les aplicacions preparades per al KIO (com el Dolphin, el Kate o el Gwenview) que accedeixin i editin els fitxers del Drive de Google en el núvol.</p> <p xml:lang="ca-valencia">KIO GDrive és un esclau de KIO que permet a les aplicacions preparades per a KIO (com Dolphin, Kate o Gwenview) que accedisquen i editen els fitxers del Drive de Google en el núvol.</p> <p xml:lang="da">KIO GDrive er en KIO-slave der gør det muligt for KIO-bevidste programmer (såsom Dolphin, Kate eller Gwenview) at tilgå og redigere Google Drive-filer i skyen.</p> <p xml:lang="de">KIO GDrive ist ein Ein-/Ausgabemodul, mit dem Anwendungen wie Dolphin, Kate oder Gwenview auf Dateien in der Cloud Google Drive zugreifen und bearbeiten können.</p> <p xml:lang="el">Το KIO GDrive είναι ένας KIO slave που ενεργοποιεί εφαρμογές με επίγνωση του KIO (όπως Dolphin, Kate ή Gwenview) για την πρόσβαση και επεξεργασία αρχείων του Google Drive στο νέφος.</p> <p xml:lang="en-GB">KIO GDrive is a KIO slave that enables KIO-aware applications (such as Dolphin, Kate or Gwenview) to access and edit Google Drive files on the cloud.</p> <p xml:lang="eo">KIO GDrive estas KIO-sklavo kiu ebligas KIO-konsciajn aplikojn (kiel Dolphin, Kate aŭ Gwenview) aliri kaj redakti dosierojn de Google Drive en la nubo.</p> <p xml:lang="es">KIO GDrive es un esclavo de KIO que activa aplicaciones KIO-compatible (tales como, Dolphin, Kate o Gwenview) para acceder y editar archivos de Google Drive en la nube. </p> <p xml:lang="et">KIO GDrive on KIO-moodul, mis võimaldab KIO-teadlikel rakendustel (näiteks Dolphin, Kate või Gwenview) pääseda ligi ja redigeerida Google Drive'i faile pilves.</p> <p xml:lang="eu">KIO GDrive KIO-jakitun diren aplikazioak (Dolphin, Kate edo Gwenview esaterako) hodeian Google Drive fitxategiak atzitzeko eta editatzeko gaitzen dituen KIO morroi bat da.</p> <p xml:lang="fi">KIO GDrive on KIO-asiakas, joka sallii KIO-sovellusten (kuten Dolphinin, Katen tai Gwenview’n) päästä käsiksi Google Driven tiedostoihin pilvessä.</p> <p xml:lang="fr">KIO GDrive est un module d'entrée / sortie qui permet aux applications prenant en charge KIO (comme Dolphin, Kate ou Gwenview) d'accéder aux fichiers stockés en ligne sur Google Drive et de les modifier.</p> <p xml:lang="gl">KIO GDrive é un escravo de KIO que permite aos aplicativos que usan KIO (como Dolphin, Kate ou Gwenview) acceder e editar ficheiros de Google Drive na nube.</p> <p xml:lang="hi">के-आईओ जी-ड्राइव, के-आईओ अवगत अनुप्रयोगों (जैसे की डॉलफ़िन, केट या ग्वेनव्यू) कोगूगल ड्राइव में अभिगम तथा उन्हें सम्पादित करने के लिए सक्षम बनाता है।</p> <p xml:lang="hu">A KIO GDrive egy KIO szolgáltatás, amely lehetővé teszi az arra felkészített alkalmazásoknak (mint például Dolphin, Kate vagy Gwenview) a Google Drive felhőben található fájlok elérését és szerkesztését.</p> <p xml:lang="ia">Kio Gdrive es un sclavo (slave) de KIO que habilita applicationes conscie de KIO (tal como Dolphin,Kate o Gwenview) a acceder e modificar files de Google Drive in le nube (cloud).</p> <p xml:lang="id">KIO GDrive adalah sebuah KIO slave yang memungkinkan aplikasi KIO-aware (sepertihalnya Dolphin, Kate or Gwenview) untuk mengakses dan mengedit file-file Google Drive di cloud.</p> <p xml:lang="it">KIO GDrive è un KIO slave che consente alle applicazioni che gestiscono KIO (come Dolphin, Kate o Gwenview) di accedere e modificare i file di Google Drive sul cloud.</p> <p xml:lang="ka">KIO GDrive-ი KIO-ის დაქვემდებარებულ პროგრამას წარმოადგენს, რომელიც პროგრამებს, რომლებიც KIO-ს იყენებენ (როგორიცაა Dolphin, Kate ან Gvenview), რომ Google Drive-ზე მყოფ ფაილებთან წვდომა მიიღონ.</p> <p xml:lang="ko">KIO GDrive는 KIO를 사용할 수 있는 앱(Dolphin, Kate, Gwenview 등)에서 Google 드라이브에 저장된 파일을 보고 편집할 수 있는 KIO 슬레이브입니다.</p> <p xml:lang="lt">KIO GDrive yra KIO pavaldusis, kuris įgalina KIO sąmoningas programas (tokias kaip Dolphin, Kate ar Gwenview) gauti prieigą prie Google disko ir taisyti failus debesijoje.</p> <p xml:lang="nl">KIO GDrive is een KIO-slave die met KIO bekende toepassingen (zoals Dolphin, Kate of Gwenview) toegang geeft tot bestanden en deze bewerkt op Google Drive in de cloud.</p> <p xml:lang="nn">KIO GDrive er ein KIO-slave som lèt program som brukar KIO (for eksempel Dolphin, Kate og Gwenview) få lese- og skrivetilgang til filene dine på Google Drive.</p> <p xml:lang="pl">KIO GDrive jest KIO slave, który umożliwia aplikacjom świadomym KIO (takim jak Dolphin, Kate lub Gwenview) na dostęp i edycję plików w chmurze Dysku Google.</p> <p xml:lang="pt">O KIO GDrive é um 'KIO slave' que permite às aplicações com suporte do KIO (como o Dolphin, o Kate ou o Gwenview) acederem e editarem ficheiros do Google Drive na 'cloud'.</p> <p xml:lang="pt-BR">O KIO GDrive é um KIO slave que permite a aplicativos com suporte a KIO (como Dolphin, Kate ou Gwenview) acessar e editar arquivos do Google Drive na nuvem.</p> <p xml:lang="ro">KIO GDrive este un sclav KIO ce permite aplicațiilor ce folosesc KIO (cum ar fi Dolphin, Kate sau Gwenview) să acceseze și să redacteze fișiere Google Drive în nor.</p> <p xml:lang="ru">KIO для поддержки Google Диска — это модуль KIO, который обеспечивает доступ с возможностью изменения для файлов, расположенным на Google Диске для приложений, поддерживающих модули KIO, таких как диспетчер файлов Dolphin, текстовый редактор Kate и приложение для просмотра изображений Gwenview.</p> <p xml:lang="sk">KIO GDrive je KIO slave, ktorý umožňuje nie KIO aplikáciám (ako Dolphin, Kate alebo Gwenview) pristupovať a upravovať súbory na Google Drive na cloude.</p> <p xml:lang="sl">KIO GDrive je odvisen od KIO, ki omogoča aplikacijam, ki se zavedajo KIO (npr. Dolphin, Kate ali Gwenview) za dostop do datotek Google Drive in urejajo datoteke v storitvi oblaka Google Drive.</p> <p xml:lang="sv">KIO GDrive är en I/O-slav som gör det möjligt för program medvetna om KIO (såsom Dolphin, Kate eller Gwenview) att komma åt och redigera Google Drive-filer i molnet.</p> <p xml:lang="tr">KIO GDrive, buluttaki Google Drive dosyalarına erişimek ve düzenleme yapmak için, KIO uygulamalarını etkinleştiren bir KIO bağımlılığıdır.</p> <p xml:lang="uk">KIO GDrive — допоміжний засіб введення-виведення даних, який уможливлює для програм із підтримкою KIO (зокрема Dolphin, Kate та Gwenview) доступ та редагування даних файлів на Диску Google у обчислювальній «хмарі».</p> <p xml:lang="x-test">xxKIO GDrive is a KIO slave that enables KIO-aware applications (such as Dolphin, Kate or Gwenview) to access and edit Google Drive files on the cloud.xx</p> <p xml:lang="zh-CN">KIO GDrive 是 Google 云端硬盘的 KIO 从属,它能够让支持 KIO 的程序 (例如 Dolphin,Kate 或 Gwenview) 访问和编辑 Google 云端硬盘上的文件。</p> <p xml:lang="zh-TW">KIO Admin 是讓支援 KIO 的應用程式(例如 Dolphin、Kate 或 Gwenview)存取與編輯 Google 雲端硬碟檔案的 KIO slave。</p> </description> <url type="homepage">https://community.kde.org/KIO_GDrive</url> <url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&product=kio-gdrive</url> <url type="help">https://docs.kde.org/?application=kioslave5%2Fgdrive</url> <update_contact>elvis.angelaccio_at_kde.org</update_contact> <screenshots> <screenshot type="default"> <caption>Dolphin showing KIO GDrive in lower right, and Falkon browsing Google Drive in upper left.</caption> <caption xml:lang="ar">دولفين يعرض غوغل درايف في اليمين السفلي، و فالكون يستعرض غوغل درايف في اليسار العلوي</caption> <caption xml:lang="az">KIO GDrive Dolphində sağda aşağıda göstərilir, Falkon-da isə Google Diskə yuxarı solda baxılır.</caption> <caption xml:lang="be">Dolphin паказвае KIO GDrive унізе справа, а Falkon паказвае Google Drive уверсе злева.</caption> <caption xml:lang="ca">El Dolphin mostra el KIO GDrive a la part inferior dreta, i el Falkon mostra el Google Drive a la part superior esquerra.</caption> <caption xml:lang="ca-valencia">Dolphin mostra KIO GDrive a la part inferior dreta, i Falkon mostra Google Drive en la part superior esquerra.</caption> <caption xml:lang="da">Dolphin viser KIO GDrev nederst til højre, og Falkon som gennemser Google Drev øverst til venstre.</caption> <caption xml:lang="de">Ansicht von Dolphin mit KIO GDrive unten rechts und Falkon auf Google Drive oben links.</caption> <caption xml:lang="el">Το Dolphin εμφανίζει το KIO GDrive κάτω δεξιά, και το Falkon πάνω αριστερά.</caption> <caption xml:lang="en-GB">Dolphin showing KIO GDrive in lower right, and Falkon browsing Google Drive in upper left.</caption> <caption xml:lang="eo">Dolfin montrante KIO-GDrive malsupre maldekstre, kaj Falkon foliumante Google Drive supre dekstre.</caption> <caption xml:lang="es">Dolphin mostrando KIO GDrive abajo a la derecha y Falkon navegando por Google Drive arriba a la izquierda.</caption> <caption xml:lang="et">Dolphin KIO Drive'iga all paremal ja Falkon Google Drive'iga üleval vasakul.</caption> <caption xml:lang="eu">Dolphin behean eskuinean KIO GDrive erakusten, eta Falkon goian ezkerrean Google Drive arakatzen.</caption> <caption xml:lang="fi">Dolphin näyttää KIO-GDriven alaoikealla ja Falkon selaa Google Driveen ylävasemmalla.</caption> <caption xml:lang="fr">Dolphin affichant IO GDrive dans le coin inférieur gauche et Falkon naviguant sur Google Drive dans le coin supérieur gauche.</caption> <caption xml:lang="gl">Dolphin amosando KIO GDrive na parte inferior dereita, e Falkon navegando Google Drive na parte superior esquerda.</caption> <caption xml:lang="hi">डॉल्फ़िन नीचे दाईं ओर के-आईओ जी-ड्राइव दिखा रहा है, और फ़ॉल्कन ऊपरी बाएँ में गूगल ड्राइव ब्राउज़ कर रहा है।</caption> <caption xml:lang="hu">Jobbra lent a KIO GDrive-ot megjelenítő Dolphin, balra fent a Google Drive-ot böngésző Falkon.</caption> <caption xml:lang="ia">Dolphin monstrante KIO GDrive a basso a dextera, e Falkon navigante Google Drive in alto a sinistra.</caption> <caption xml:lang="id">Dolphin menampilkan KIO GDrive di sebelah kanan bawah, dan Falkon menelusuri Google Drive di sebelah kiri atas</caption> <caption xml:lang="ie">Dolphin monstra GDrive a bass dextri e Falcon naviga un Google Drive a alt levul.</caption> <caption xml:lang="it">Dolphin che mostra KIO GDrive nella parte inferiore destra, e Falkon che sfoglia Google Drive nella parte superiore sinistra.</caption> <caption xml:lang="ka">Dolphin-ი KIO GDrive-ს ქვედა მარჯვენა კუთხეში აჩვენებს და Falkon-ი, რომელიც Google Drive-ზეა, ზედა მარცხენაში.</caption> <caption xml:lang="ko">오른쪽 아래: Dolphin으로 연 KIO GDrive, 왼쪽 위: Falkon으로 연 Google 드라이브.</caption> <caption xml:lang="lt">Apatinėje dešinėje Dolphin, rodanti KIO GDrive, o viršutinėje kairėje Falkon, naršanti Google diske.</caption> <caption xml:lang="nl">Dolphin die KIO-GDrive rechtsonder toont en Falkon browsing Google Drive linksboven.</caption> <caption xml:lang="nn">Dolphin-vindauge med KIO GDrive nede til høgre, samt Falkon som viser Google Drive oppe til venstre</caption> <caption xml:lang="pl">Dolphin pokazujący KIO GDrive w dolnym, prawym narożniku i Falkon przeglądający Dysk Google w górnym, lewym narożniku.</caption> <caption xml:lang="pt">O Dolphin a mostrar o KIO GDrive em baixo e à direita, assim como o Falkon a navegar pelo Google Drive em cima e à esquerda.</caption> <caption xml:lang="pt-BR">O Dolphin mostrando o KIO GDrive abaixo à direita, assim como o Falkon navegando pelo Google Drive acima à esquerda.</caption> <caption xml:lang="ro">Dolphin arătând KIO GDrive în dreapta-jos și Falkon răsfoind Google Drive în stânga-sus.</caption> <caption xml:lang="ru">Внизу справа: диспетчер файлов Dolphin, использующий модуль KIO GDrive; вверху слева: Google Диск, открытый в веб-браузере Falkon.</caption> <caption xml:lang="sk">Dolphin zobrazuje KIO GDrive vpravo dole a Falkon prehliadajúci Google Drive vpravo hore.</caption> <caption xml:lang="sl">Dolphin prikazuje KIO GDrive v spodnjem desnem kotu in Falkon brska po Googlu Drive v zgornjem levem kotu.</caption> <caption xml:lang="sv">Dolphin som visar KIO GDrive nere till höger, och Falkon som bläddrat till Google Drive uppe till vänster.</caption> <caption xml:lang="tr">Dolphin KIO GDrive'ı sağ altta gösterirken ve Falkon Google Drive'a sol üstte göz atarken.</caption> <caption xml:lang="uk">Dolphin із відкритим KIO GDrive внизу праворуч і Falkon з відкритою сторінкою Google Диск вгорі ліворуч.</caption> <caption xml:lang="x-test">xxDolphin showing KIO GDrive in lower right, and Falkon browsing Google Drive in upper left.xx</caption> <caption xml:lang="zh-CN">位于右下方的 Dolphin 正在显示 KIO GDrive,位于左上方的 Falkon 正在浏览 Google Drive 网页版。</caption> <caption xml:lang="zh-TW">Dolphin 在右下方顯示 KIO GDrive,以及 Falkon 在左上方正在瀏覽 Google 雲端硬碟。</caption> <image type="source" width="1664" height="936">https://cdn.kde.org/screenshots/kio-gdrive/kio-gdrive.png</image> </screenshot> </screenshots> <releases> <release version="24.02.0" date="2024-02-28"/> <release version="23.08.5" date="2024-02-15"/> <release version="23.08.4" date="2023-12-07"/> <release version="23.08.3" date="2023-11-09"/> </releases> <project_group>KDE</project_group> <categories> <category>Network</category> </categories> <icon type="stock">folder-gdrive</icon> </component> 0707010000001B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003200000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/doc0707010000001C000081A400000000000000000000000165CEC6620000007C000000000000000000000000000000000000004100000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/doc/CMakeLists.txtkdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kioslave5/gdrive) 0707010000001D000081A400000000000000000000000165CEC6620000058C000000000000000000000000000000000000004000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/doc/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % English "INCLUDE" > ]> <article lang="&language;" id="gdrive"> <title>gdrive</title> <articleinfo> <authorgroup> <author><firstname>Elvis</firstname><surname>Angelaccio</surname> <affiliation> <address> <email>elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <!-- TRANS:ROLES_OF_TRANSLATORS --> </authorgroup> <date>2016-10-03</date> <releaseinfo>kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para>KIO GDrive allows you to access and edit your Google Drive files using KDE applications that support KIO.</para> <para>You can use the gdrive kioslave like this:</para> <para><userinput>gdrive://</userinput> or <userinput>gdrive://<replaceable>foo@example.com</replaceable></userinput>.</para> <para>The first URL shows an OAuth login dialog from Google, if no Drive account has been authenticated yet, or the list of your authenticated accounts instead.</para> <para>The <userinput>gdrive://</userinput> URL can also be used at any time to add an additional account.</para> <para>The URL <userinput>gdrive://<replaceable>foo@example.com</replaceable></userinput> lists all the files and folders from the top level of the <userinput>foo@example.com</userinput> Drive account.</para> </article> 0707010000001E000081A400000000000000000000000165CEC6620000033C000000000000000000000000000000000000003A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/gdrive.json{ "KDE-KIO-Protocols": { "gdrive": { "Class": ":internet", "ExtraNames": [], "Icon": "folder-gdrive", "X-DocPath": "kioslave5/gdrive/index.html", "deleteRecursive": true, "deleting": true, "input": "none", "linking": true, "listing": [ "Name", "Type", "Size", "Date", "AccessDate", "Access", "Owner", "Group", "Link" ], "makedir": true, "moving": true, "opening": false, "output": "filesystem", "protocol": "gdrive", "reading": true, "writing": true } } } 0707010000001F000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts07070100000020000081A400000000000000000000000165CEC66200000279000000000000000000000000000000000000004700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/CMakeLists.txtfind_package(KF${QT_MAJOR_VERSION}Notifications ${KF_MIN_VERSION} REQUIRED) find_package(Intltool REQUIRED) kaccounts_add_service(${CMAKE_CURRENT_SOURCE_DIR}/google-drive.service.in) kcoreaddons_add_plugin(kaccounts_gdrive SOURCES kaccountsplugin.cpp INSTALL_NAMESPACE kaccounts/daemonplugins) set_target_properties(kaccounts_gdrive PROPERTIES OUTPUT_NAME "gdrive") target_link_libraries(kaccounts_gdrive KAccounts${KACCOUNTS_SUFFIX} KF${QT_MAJOR_VERSION}::KIOWidgets KF${QT_MAJOR_VERSION}::I18n KF${QT_MAJOR_VERSION}::Notifications) install(FILES gdrive.notifyrc DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) 07070100000021000081A400000000000000000000000165CEC66200001EBA000000000000000000000000000000000000004800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/gdrive.notifyrc[Global] IconName=folder-gdrive Comment=KIO GDrive Comment[ar]=KIO GDrive Comment[az]=KIO GDrive Comment[be]=KIO GDrive Comment[ca]=KIO GDrive Comment[ca@valencia]=KIO GDrive Comment[cs]=KIO GDrive Comment[da]=KIO GDrive Comment[de]=KIO GDrive Comment[el]=KIO GDrive Comment[en_GB]=KIO GDrive Comment[eo]=KIO-GDrive Comment[es]=KIO GDrive Comment[et]=GDrive'i KIO-moodul Comment[eu]=KIO GDrive Comment[fi]=KIO GDrive Comment[fr]=KIO GDrive Comment[gl]=KIO GDrive Comment[he]=KIO GDrive Comment[hi]=के-आईओ जी-ड्राइव Comment[hu]=KIO GDrive Comment[ia]=KIO GDrive Comment[id]=KIO GDrive Comment[ie]=gdrive por KIO Comment[it]=KIO GDrive Comment[ka]=KIO GDrive Comment[ko]=KIO GDrive Comment[lt]=KIO GDrive Comment[nl]=KIO GDrive Comment[nn]=KIO GDrive Comment[pl]=KIO GDrive Comment[pt]=KIO GDrive Comment[pt_BR]=KIO GDrive Comment[ro]=KIO GDrive Comment[ru]=KIO для поддержки Google Диска Comment[sk]=KIO GDrive Comment[sl]=KIO GDrive Comment[sv]=KIO Gdrive Comment[tr]=KIO GDrive Comment[uk]=KIO GDrive Comment[x-test]=xxKIO GDrivexx Comment[zh_CN]=KIO GDrive Comment[zh_TW]=KIO GDrive [Event/new-account-added] Name=New Account Added Name[ar]=أضيف حساب جديد Name[az]=Yeni hesab əlavə olundu Name[be]=Новы акаўнт дададзены Name[ca]=S'ha afegit un compte nou Name[ca@valencia]=S'ha afegit un compte nou Name[cs]=Byl přidán nový účet Name[da]=Ny konto tilføjet Name[de]=Neuer Zugang hinzugefügt Name[el]=Προστέθηκε νέος λογαριασμός Name[en_GB]=New Account Added Name[eo]=Nova Konta Aldonata Name[es]=Nueva cuenta añadida Name[et]=Uus konto lisatud Name[eu]=Kontu berria gehitu da Name[fi]=Uusi tili lisätty Name[fr]=Nouveau compte ajouté Name[gl]=Engadiuse unha nova conta Name[he]=חשבון חדש התווסף Name[hi]=नया ख़ाता जोडा गया है Name[hu]=Új fiók hozzáadva Name[ia]=Nove conto addite Name[id]=Ditambahkan Akun Baru Name[ie]=Un nov conto esset adjuntet Name[it]=Nuovo account aggiunto Name[ka]=ახალი ანგარიში დაემატა Name[ko]=새 계정 추가됨 Name[lt]=Pridėta nauja paskyra Name[nl]=Nieuw account toegevoegd Name[nn]=Ny konto lagd til Name[pl]=Dodano nowe konto Name[pt]=Conta Nova Adicionada Name[pt_BR]=Nova conta adicionada Name[ro]=Cont nou adăugat Name[ru]=Добавлена учётная запись Name[sk]=Pridaný nový účet Name[sl]=Dodan nov račun Name[sv]=Nytt konto tillagt Name[ta]=புதிய கணக்கு சேர்க்கப்பட்டுள்ளது Name[tr]=Yeni Hesap Eklendi Name[uk]=Додано новий обліковий запис Name[x-test]=xxNew Account Addedxx Name[zh_CN]=新账户已添加 Name[zh_TW]=已新增帳號 Comment= Shortcut to browse Google Drive files as soon as a new Google account has been added. Comment[ar]=اختصار لتصفح ملفات غوغل درايف بمجرد إضافة حساب غوغل جديد. Comment[az]= Yeni Google hesabı əlavə olunan kimi Google Diskdəki fayllara baxmaq üçün qısayol. Comment[be]= Цэтлік для прагляду файлаў Google Drive пасля дадання новага акаўнта Google. Comment[ca]= Drecera per a explorar els fitxers de Google Drive tan aviat com s'afegeixi un compte nou de Google. Comment[ca@valencia]= Drecera per a explorar els fitxers de Google Drive tan prompte com s'afija un compte nou de Google. Comment[da]=Genvej til at gennemse Google Drev-filer så snart en ny Google-konto er blevet tilføjet. Comment[de]=Kurzbefehl zum Durchsuchen von Dateien auf Google Drive, sobald ein neuer Zugang für Google hinzugefügt wurde. Comment[el]=Συντόμευση για περιήγηση σε αρχεία του Google Drive αμέσως μόλις προστεθεί νέος λογαριασμός Google. Comment[en_GB]= Shortcut to browse Google Drive files as soon as a new Google account has been added. Comment[eo]=Ŝparvojo por foliumi Google Drive kiam nova Google-konto estis aldonita. Comment[es]=Acceso directo para navegar por los archivos de Google Drive tan pronto como se añada una nueva cuenta de Google. Comment[et]=Kiire võimalus Google Drive'i failide sirvimiseks kohe, kui lisatud on uus Google'i konto. Comment[eu]=Google kontu berri bat gehitu bezain laster Google Drive fitxategiak arakatzeko lasterbidea. Comment[fi]= Oikotie Google Drive -tiedostojen selailuun heti, kun uusi Google-tili on lisätty. Comment[fr]= Raccourci pour parcourir les fichiers Google Drive dès qu'un nouveau compte Google a été ajouté. Comment[gl]=Atallo para examinar os ficheiros de Google Drive en canto se engada unha nova conta de Google. Comment[he]=קיצור לסיור בקבצי Google Drive מיד עם הוספת חשבון Google. Comment[hi]=नया गूगल खाता जोड़ते ही गूगल डिस्क फ़ाइलें ब्राउज़ करने का शॉर्टकट। Comment[hu]= Gyorsbillentyű a Google Drive fájlok böngészéséhez, amint az új Google fiókot hozzáadták. Comment[ia]=Via breve pro cercar files de Google Drive quando un nove conto de Google ha essite addite. Comment[id]= Pintasan untuk menelusuri file Google Drive segera sesudah akun baru Google ditambahkan. Comment[it]= Scorciatoia per navigare tra i file di Google Drive dopo che è stato aggiunto un nuovo account di Google. Comment[ka]= Google Drive -ის ფაილების დასათვალიერებლი მალსახმობი როგორც კი ახალი Google ანგარიში დაემატება. Comment[ko]= 새로운 Google 계정을 추가했을 때 Google 드라이브에 있는 파일을 볼 수 있는 바로 가기를 추가합니다. Comment[lt]= Šaukinys, skirtas naršyti Google disko failus iš karto, pridėjus naują Google paskyrą. Comment[nl]= Sneltoets om door Google Drive bestanden te bladeren zodra een nieuw Google account is toegevoegd. Comment[nn]= Snarveg for å bla gjennom Google Drive-filer så snart ein ny Google-konto er lagd til. Comment[pl]=Skrót do przeglądania Dysku Google od razu po dodaniu konta Google. Comment[pt]=Atalho para navegar pelos ficheiros do Google Drive assim que for adicionada uma conta nova da Google. Comment[pt_BR]=Atalho para navegar nos arquivos do Google Drive tão logo uma conta Google for adicionada. Comment[ro]= Scurtătură pentru răsfoirea fișierelor din Google Drive de îndată ce a fost adăugat un cont Google nou. Comment[ru]= Ярлык для просмотра Google Диск после добавления учётной записи Google. Comment[sk]=Skratka na prehliadanie súborov na Google Drive akonáhle je pridaný nový Google účet. Comment[sl]= Bližnjica za brskanje po Google Drive takoj po dodatku novega računa Google. Comment[sv]= Genväg för att bläddra i Google Drive-filer så snart ett nytt Google-konto har lagts till. Comment[ta]=ஓர் புதிய கூகுள் கணக்கு சேர்க்கப்பட்டவுடனேயே அதிலுள்ள கோப்புகளை காண உதவும் சுருக்குவழி Comment[tr]= Yeni bir Google hesabı eklendiğinde Google Drive dosyalarına göz atma kısayolu. Comment[uk]=Кнопка для перегляду файлів Google Диск після додавання нового облікового запису Google. Comment[x-test]=xx Shortcut to browse Google Drive files as soon as a new Google account has been added.xx Comment[zh_CN]= 浏览 Google Drive 文件的快捷方式,添加 Google 账号之后即可使用。 Comment[zh_TW]=只要新增 Google 帳號即可以快速瀏覽 Google 雲端硬碟上的檔案。 Action=Popup 07070100000022000081A400000000000000000000000165CEC66200000134000000000000000000000000000000000000005000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/google-drive.service.in<?xml version="1.0" encoding="UTF-8"?> <service id="google-drive"> <type>google-drive</type> <_name>Drive</_name> <_description>Integrate your Google Drive documents</_description> <icon>folder-gdrive</icon> <provider>google</provider> <translations>kaccounts-providers</translations> </service> 07070100000023000081A400000000000000000000000165CEC662000008F5000000000000000000000000000000000000004C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/kaccountsplugin.cpp/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "kaccountsplugin.h" #include <KAccounts/Core> #include <KIO/OpenUrlJob> #include <KLocalizedString> #include <KNotification> #include <KPluginFactory> K_PLUGIN_CLASS_WITH_JSON(GoogleDrivePlugin, "kaccountsplugin.json") GoogleDrivePlugin::GoogleDrivePlugin(QObject *parent, const QVariantList &args) : KAccounts::KAccountsDPlugin(parent, args) { } void GoogleDrivePlugin::onAccountCreated(const Accounts::AccountId accountId, const Accounts::ServiceList &serviceList) { Q_UNUSED(serviceList) auto account = Accounts::Account::fromId(KAccounts::accountsManager(), accountId); if (account->providerName() != QLatin1String("google")) { return; } auto notification = new KNotification(QStringLiteral("new-account-added")); notification->setComponentName(QStringLiteral("gdrive")); notification->setTitle(i18n("New Online Account")); notification->setText( xi18nc("@info", "You can now manage the Google Drive files of your <emphasis strong='true'>%1</emphasis> account.", account->displayName())); QUrl url; url.setScheme(QStringLiteral("gdrive")); url.setPath(QStringLiteral("/%1").arg(account->displayName())); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) notification->setActions({i18n("Open")}); connect(notification, static_cast<void (KNotification::*)(unsigned int)>(&KNotification::activated), this, [=]() { #else auto action = notification->addAction(i18n("Open")); connect(action, &KNotificationAction::activated, this, [url] { #endif KIO::OpenUrlJob *job = new KIO::OpenUrlJob(url, QStringLiteral("inode/directory")); job->start(); }); notification->sendEvent(); } void GoogleDrivePlugin::onAccountRemoved(const Accounts::AccountId accountId) { Q_UNUSED(accountId) } void GoogleDrivePlugin::onServiceEnabled(const Accounts::AccountId accountId, const Accounts::Service &service) { Q_UNUSED(accountId) Q_UNUSED(service) } void GoogleDrivePlugin::onServiceDisabled(const Accounts::AccountId accountId, const Accounts::Service &service) { Q_UNUSED(accountId) Q_UNUSED(service) } #include "kaccountsplugin.moc" 07070100000024000081A400000000000000000000000165CEC66200000302000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/kaccountsplugin.h/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #pragma once #include <KAccounts/KAccountsDPlugin> class GoogleDrivePlugin : public KAccounts::KAccountsDPlugin { Q_OBJECT public: explicit GoogleDrivePlugin(QObject *parent, const QVariantList &args); public Q_SLOTS: void onAccountCreated(const Accounts::AccountId accountId, const Accounts::ServiceList &serviceList) override; void onAccountRemoved(const Accounts::AccountId accountId) override; void onServiceEnabled(const Accounts::AccountId accountId, const Accounts::Service &service) override; void onServiceDisabled(const Accounts::AccountId accountId, const Accounts::Service &service) override; }; 07070100000025000081A400000000000000000000000165CEC66200001034000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/kaccounts/kaccountsplugin.json{ "KPlugin": { "Description": "Integrate KIO gdrive", "Description[ar]": "تكامل وحدة الدخل/الخرج لغوغل درايف", "Description[az]": "KIO gdrive ilə inteqrasiya", "Description[be]": "Інтэграцыя KIO gdrive", "Description[ca@valencia]": "Integra KIO del GDrive", "Description[ca]": "Integra el KIO del GDrive", "Description[cs]": "Integrovat KIO gdrive", "Description[da]": "Integrér KIO gdrive", "Description[de]": "Integration von KIO GDrive", "Description[el]": "Ενσωμάτωση KIO gdrive", "Description[en_GB]": "Integrate KIO gdrive", "Description[eo]": "Integri KIO-gdrive", "Description[es]": "Integra KIO gdrive", "Description[et]": "KIO GDrive'i lõimimine", "Description[eu]": "Bateratu KIO gdrive", "Description[fi]": "Integroi KIOn gdrive", "Description[fr]": "Intégrer « KIO GDrive »", "Description[gl]": "Integrar KIO gdrive", "Description[hi]": "के-आईओ जी-ड्राइव को एकीकृत करें", "Description[hu]": "KIO gdrive integráció", "Description[ia]": "Integrar KIO gdrive", "Description[id]": "Integrasi KIO gdrive", "Description[it]": "Integra KIO gdrive", "Description[ka]": "KIO gdrive- ის ინტეგრირება", "Description[ko]": "KIO gdrive 통합", "Description[lt]": "Integruoti KIO gdrive", "Description[nl]": "KIO gdrive integreren", "Description[nn]": "Integrer KIO-gdrive", "Description[pl]": "Integracja KIO gdrive", "Description[pt]": "Integração do GDrive no KIO", "Description[pt_BR]": "Integra o KIO gdrive", "Description[ro]": "Integrează KIO gdrive", "Description[ru]": "KIO для поддержки Google Диска", "Description[sk]": "Integrovať KIO gdrive", "Description[sl]": "Integriraj KIO gdrive", "Description[sv]": "Integrera KIO gdrive", "Description[ta]": "KIO gdrive-ஐ ஒருங்கிணை", "Description[tr]": "KIO gdrive tümleştir", "Description[uk]": "Інтеграція із KIO gdrive", "Description[x-test]": "xxIntegrate KIO gdrivexx", "Description[zh_CN]": "KIO GDrive 整合", "Description[zh_TW]": "整合 KIO gdrive", "EnabledByDefault": true, "Icon": "system-file-manager", "Id": "kaccounts_kio_gdrive", "License": "GPL", "Name": "KIO gdrive", "Name[ar]": "وحدة الدخل/الخرج لغوغل درايف", "Name[az]": "KIO gdrive", "Name[be]": "KIO gdrive", "Name[ca@valencia]": "KIO GDrive", "Name[ca]": "KIO GDrive", "Name[cs]": "KIO gdrive", "Name[da]": "KIO gdrive", "Name[de]": "KIO GDrive", "Name[el]": "KIO gdrive", "Name[en_GB]": "KIO gdrive", "Name[eo]": "KIO-gdrive", "Name[es]": "KIO gdrive", "Name[et]": "KIO GDrive", "Name[eu]": "KIO gdrive", "Name[fi]": "KIO gdrive", "Name[fr]": "KIO GDrive", "Name[gl]": "KIO gdrive", "Name[hi]": "के-आईओ जी-ड्राइव", "Name[hu]": "KIO gdrive", "Name[ia]": "KIO gdrive", "Name[id]": "KIO gdrive", "Name[ie]": "gdrive por KIO", "Name[it]": "KIO gdrive", "Name[ka]": "KIO gdrive", "Name[ko]": "KIO gdrive", "Name[lt]": "KIO gdrive", "Name[nl]": "KIO gdrive", "Name[nn]": "KIO-gdrive", "Name[pl]": "KIO gdrive", "Name[pt]": "KIO do GDrive", "Name[pt_BR]": "KIO gdrive", "Name[ro]": "KIO gdrive", "Name[ru]": "KIO gdrive", "Name[sk]": "KIO gdrive", "Name[sl]": "KIO gdrive", "Name[sv]": "KIO gdrive", "Name[tr]": "KIO gdrive", "Name[uk]": "KIO GDrive", "Name[x-test]": "xxKIO gdrivexx", "Name[zh_CN]": "KIO GDrive", "Name[zh_TW]": "KIO gdrive", "Version": "0.1" } } 07070100000026000041ED00000000000000000000002E65CEC66200000000000000000000000000000000000000000000003100000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po07070100000027000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ar07070100000028000081A400000000000000000000000165CEC66200000DF4000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ar/kio5_gdrive.po# 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>, 2017. # SPDX-FileCopyrightText: 2021, 2022, 2024 Zayed Al-Saidi <zayed.alsaidi@gmail.com> msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2024-01-17 20:58+0400\n" "Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n" "Language-Team: ar\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 23.08.1\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "حساب جديد" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "يمكنك الآن إدارة ملفات غوغل درايف لحسابك <emphasis strong='true'>%1</" "emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "افتح" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "اختر حسابًا:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "لم يُضبط أي حساب" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "اضبط الحسابات" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "ارفع على المجلد:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "غوغل درايف" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "انسخ المسار إلى الحافظة" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "افتح في المتصفّح" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "&غوغل درايف" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "خطأ مجهول" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "حساب جديد" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "المشاركات معي" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "لا توجد حسابات غوغل درايف ممكنة. الرجاء إضافة واحدة على الأقل." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "الأقراص المشتركة" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ليس حساب غ.درايف معروف" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "رمز النفاذ منتهي أو مفقود لحساب %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "لا يمكن حذف جذر الأقراص المشتركة." 07070100000029000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/az0707010000002A000081A400000000000000000000000165CEC66200000D3D000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/az/kio5_gdrive.po# Copyright (C) 2023 This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # # SPDX-FileCopyrightText: 2022, 2023 Kheyyam <xxmn77@gmail.com> msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-18 18:05+0400\n" "Last-Translator: Kheyyam <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 23.08.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Yeni istifadəçi hesabı" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Siz indi <emphasis strong='true'>%1</emphasis> hesabınızın Google Disk " "fayllarını idarə edə bilərsiniz." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Açın" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "İstifadəçi hesabını seçin:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Tənizmlənən heç bir hesab yoxdur" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Hesabları tənzimləyin" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Bu qovluğa yükləyin:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Disk" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL-u mübadilə yaddaşına kopyalayın" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Veb-bələdçidə açın" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Disk" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Naməlum xəta" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Yeni hesab" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Mənimlə paylaşılan" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Heç bir Google Disk hesabı aktiv edilməyib. Lütfən ən az birini əlavə edin." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Paylaşılan disklər" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 məlum GDrive hesabı deyil" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "%1 hesabı üçün giriş tokenlərinin vaxtı bitib və ya onlar mövcud deyil" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Paylaşılan diskin kök qovluğunu silmək mümkün deyil." 0707010000002B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/be0707010000002C000081A400000000000000000000000165CEC66200000EE6000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/be/kio5_gdrive.po# Zmicier <zmicerturok@gmail.com>, 2023. msgid "" msgstr "" "Project-Id-Version: 86ff119b1606fcaa910d6b44fc14b611\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-01-14 23:31\n" "Last-Translator: Zmicier <zmicerturok@gmail.com>\n" "Language-Team: Belarusian\n" "Language: be\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%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n" "%100>=11 && n%100<=14 ? 2 : 3);\n" "X-Generator: Lokalize 22.12.1\n" "X-Crowdin-Project: 86ff119b1606fcaa910d6b44fc14b611\n" "X-Crowdin-Project-ID: 127\n" "X-Crowdin-Language: be\n" "X-Crowdin-File: /main/be/kio-gdrive/kio5_gdrive.po\n" "X-Crowdin-File-ID: 9032\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Новы сеціўны акаўнт" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Цяпер вы можаце кіраваць файламі вашага акаўнта Google Drive <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Адкрыць" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Абраць акаўнт:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Акаўнт не наладжаны" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Наладжванне акаўнтаў" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Запампаваць у каталог:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Скапіяваць URL у буфер абмену" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Адкрыць у браўзеры" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Новы акаўнт" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Абагуленае са мной" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Няма ўключаных акаўнтаў Google Drive. Дадайце прынамсі адзін." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Абагуленыя дыскі" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 - невядомы акаўнт GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" "Няма токенаў доступу для акаўнта \"%1\" або іх тэрмін дзеяння скончыўся" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Немагчыма выдаліць каранёвы каталог абагуленых дыскаў." 0707010000002D000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca0707010000002E000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca/docs0707010000002F000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca/docs/kioslave507070100000030000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca/docs/kioslave5/gdrive07070100000031000081A400000000000000000000000165CEC6620000060C000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Catalan "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >GDrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> &traductor.Antoni.Bella; </authorgroup> <date >3 d'octubre de 2016</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >El KIO GDrive permet accedir i editar els vostres fitxers al Google Drive utilitzant les aplicacions &kde; que implementen el KIO.</para> <para >Podeu utilitzar el kioslave <quote >gdrive</quote > de la següent manera:</para> <para ><userinput >gdrive://</userinput > o <userinput >gdrive://<replaceable >foo@exemple.cat</replaceable ></userinput >.</para> <para >El primer &URL; mostra un diàleg d'inici de sessió OAuth de Google, si encara no disposeu d'un compte del Drive autenticat, o la llista dels vostres comptes autenticats alternatius.</para> <para >L'&URL; <userinput >gdrive://</userinput > també es pot utilitzar en qualsevol moment per a afegir un compte addicional.</para> <para >L'&URL; <userinput >gdrive://<replaceable >foo@exemple.cat</replaceable ></userinput > llistarà tots els fitxers i carpetes des del nivell superior del compte <userinput >foo@exemple.cat</userinput > del Drive.</para> </article> 07070100000032000081A400000000000000000000000165CEC66200000DC6000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca/kio5_gdrive.po# Translation of kio5_gdrive.po to Catalan # Copyright (C) 2016-2023 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. # # Antoni Bella Pérez <antonibella5@yahoo.com>, 2016, 2020, 2021, 2022. # Josep M. Ferrer <txemaq@gmail.com>, 2017, 2019, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 10:05+0100\n" "Last-Translator: Josep M. Ferrer <txemaq@gmail.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" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Accelerator-Marker: &\n" "X-Generator: Lokalize 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Compte nou en línia" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Ara podeu gestionar els fitxers del Google Drive del vostre compte <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Obre" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Escolliu un compte:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "No hi ha cap compte configurat" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configura els comptes" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Puja a la carpeta:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copia l'URL al porta-retalls" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Obre en el navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Error desconegut" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Compte nou" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartits amb mi" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "No hi ha cap compte actiu de Google Drive. Si us plau, afegiu-ne un com a " "mínim." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Drives compartits" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 no és cap compte conegut del GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Els testimonis d'accés del compte %1 han vençut o manquen" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "No es pot suprimir l'arrel dels Drives compartits." 07070100000033000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca@valencia07070100000034000081A400000000000000000000000165CEC66200000DF1000000000000000000000000000000000000004C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ca@valencia/kio5_gdrive.po# Translation of kio5_gdrive.po to Catalan (Valencian) # Copyright (C) 2016-2023 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. # # Antoni Bella Pérez <antonibella5@yahoo.com>, 2016, 2020, 2021, 2022. # Josep M. Ferrer <txemaq@gmail.com>, 2017, 2019, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 10:05+0100\n" "Last-Translator: Josep M. Ferrer <txemaq@gmail.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" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Accelerator-Marker: &\n" "X-Generator: Lokalize 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Compte nou en línia" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Ara podeu gestionar els fitxers de Google Drive del vostre compte <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Obri" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Escolliu un compte:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "No hi ha cap compte configurat" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configura els comptes" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Puja a la carpeta:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copia l'URL a dins del porta-retalls" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Obri en el navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "S'ha produït un error desconegut" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Compte nou" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartits amb mi" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "No hi ha cap compte actiu de Google Drive. Per favor, afegiu-ne un com a " "mínim." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Drives compartits" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 no és cap compte conegut del GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Els testimonis d'accés del compte %1 han vençut o falten" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "No es pot suprimir l'arrel dels Drives compartits." 07070100000035000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/cs07070100000036000081A400000000000000000000000165CEC66200000CBF000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/cs/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # Vít Pelčák <vit@pelcak.org>, 2016, 2017, 2019, 2020. # Vit Pelcak <vit@pelcak.org>, 2021, 2022, 2023. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-01-03 16:09+0100\n" "Last-Translator: Vit Pelcak <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 22.12.0\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nový účet online" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Nyní můžete spravovat vaše soubory Google Drive vašeho účtu <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Otevřít" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Vyberte účet:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Žádný účet nebyl nastaven" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Nastavit účty" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Odeslat do složky:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopírovat URL do schránky" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Otevřít v prohlížeči" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Neznámá chyba" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nový účet" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Sdílená se mnou" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Nejsou povoleny žádné účty Google Drive. Přidejte aspoň jeden." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Sdílené disky" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 není známý účet GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nelze smazat kořen sdílených disků." 07070100000037000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/da07070100000038000081A400000000000000000000000165CEC66200000CE5000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/da/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Martin Schlander <mschlander@opensuse.org>, 2016, 2017, 2020, 2021, 2022. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-08-08 17:27+0200\n" "Last-Translator: Martin Schlander <mschlander@opensuse.org>\n" "Language-Team: Danish <kde-i18n-doc@kde.org>\n" "Language: da\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.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Ny online konto" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Nu kan du håndtere Google Drev-filerne på din konto <emphasis strong='true'>" "%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Åbn" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Vælg en konto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Ingen konto konfigureret" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Indstil online konti" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Upload til mappe:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drev" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopiér URL til udklipsholder" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Åbn i webbrowser" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drev" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Ny konto" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Delte drev" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Der er ikke aktiveret nogen Google Drev-konti. Tilføj venligst mindst én." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Delte drev" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 er ikke en kendt GDrev-konto" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Kan ikke slette roden af delte drev." #~ msgid "Log-in canceled, no account available." #~ msgstr "Login annulleret, ingen konto tilgængelig." 07070100000039000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de0707010000003A000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de/docs0707010000003B000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de/docs/kioslave50707010000003C000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de/docs/kioslave5/gdrive0707010000003D000081A400000000000000000000000165CEC662000006E7000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % German "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Burkhard</firstname ><surname >Lück</surname ><affiliation ><address ><email >lueck@hube-lueck.de</email ></address ></affiliation ><contrib >Übersetzung</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >Mit KIO GDrive haben Sie mit allen KDE-Anwendungen, die Ein-Ausgabemodule verwenden, Zugriff auf Ihre Dateien auf Google Drive und können Sie bearbeiten.</para> <para >Nutzen Sie das Ein-/Ausgabemodul „gdrive“ folgendermaßen:</para> <para ><userinput >gdrive://</userinput > oder <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput >.</para> <para >Mit der ersten URL wird ein OAuth-Anmeldungsdialog von Google angezeigt, wenn noch kein Zugang zu Google Drive eingerichtet wurde, ansonsten werden statt dessen alle vorhandenen Zugänge angezeigt.</para> <para >Die URL <userinput >gdrive://</userinput > kann außerdem benutzt werden, um jederzeit einen zusätzlichen Zugang hinzuzufügen.</para> <para >Mit der URL <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput > werden alle Dateien und Ordner auf der obersten Ebene des Drive-Zugangs <userinput >foo@example.com</userinput >.</para> </article> 0707010000003E000081A400000000000000000000000165CEC66200000D5A000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/de/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # Burkhard Lück <lueck@hube-lueck.de>, 2016, 2017, 2019, 2020, 2021. # Frederik Schwarzer <schwarzer@kde.org>, 2022. # Frank Steinmetzger <dev-kde@felsenfleischer.de>, 2022. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-11-10 20:57+0100\n" "Last-Translator: Frank Steinmetzger <dev-kde@felsenfleischer.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" "X-Generator: Lokalize 22.08.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Neues Online-Konto" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Sie können jetzt Ihre Dateien des Kontos <emphasis strong='true'>%1</" "emphasis> auf Google Drive verwalten." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Öffnen" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Wählen Sie ein Konto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Kein Konto eingerichtet" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Konten einrichten" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Hochladen zum Ordner:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL in die Zwischenablage kopieren" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Im Browser öffnen" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Neues Konto" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Mit mir geteilt" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Es ist kein Konto für Google Drive aktiviert. Bitte fügen Sie mindestens ein " "Konto hinzu." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Geteilte Laufwerke" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ist kein bekanntes GDrive-Konto" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Abgelaufenes oder fehlendes Zugriffstoken für Konto %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Basis des geteilten Laufwerks kann nicht gelöscht werden." 0707010000003F000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/el07070100000040000081A400000000000000000000000165CEC66200000E53000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/el/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Stelios <sstavra@gmail.com>, 2017, 2020, 2021. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2021-06-16 18:22+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" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Νέος επιγραμμικός λογαριασμός" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Μπορείτε τώρα να διαχειριστείτε τα Google Drive αρχεία του <emphasis " "strong='true'>%1</emphasis> λογσριασμού σας." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Άνοιγμα" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Επιλογή λογαριασμού:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Δεν διαμορφώθηκε λογαριασμός" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Διαμόρφωση λογαριασμών" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Αποστολή στο φάκελο:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Αντιγραφή URL στο πρόχειρο" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Άνοιγμα στον περιηγητή" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Νέος λογαριασμός" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Κοινόχρηστα Drive" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Δεν υπάρχουν ενεργοί λογαριασμοί Google Drive. Προσθέστε τουλάχιστον ένα." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Κοινόχρηστα Drive" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "To %1 δεν είναι ένας γνωστός GDrive λογαριασμός" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Αδυναμία διαγραφής του διαχειριστή των κοινόχρηστων Drive" 07070100000041000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/en_GB07070100000042000081A400000000000000000000000165CEC66200000CFC000000000000000000000000000000000000004600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/en_GB/kio5_gdrive.po# 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>, 2016, 2017, 2019, 2020, 2021, 2022. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-12-31 15:14+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 21.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "New Online Account" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Open" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Select an account:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "No account configured" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configure Accounts" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Upload to folder:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copy URL to clipboard" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Open in browser" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "New account" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Shared With Me" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "There are no Google Drive accounts enabled. Please add at least one." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Shared Drives" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 isn't a known GDrive account" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Expired or missing access tokens for account %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Cannot delete Shared Drives root." #~ msgid "Log-in canceled, no account available." #~ msgstr "Log-in cancelled, no account available." 07070100000043000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es07070100000044000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es/docs07070100000045000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es/docs/kioslave507070100000046000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es/docs/kioslave5/gdrive07070100000047000081A400000000000000000000000165CEC662000006A4000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Spanish "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Eloy</firstname ><surname >Cuadra</surname ><affiliation ><address ><email >ecuadra@eloihr.net</email ></address ></affiliation ><contrib >Traductor</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >KIO GDrive le permite acceder a sus archivos de Google Drive y editarlos usando aplicaciones de KDE que funcionan con KIO.</para> <para >Puede usar el esclavo kio gdrive de este modo:</para> <para ><userinput >gdrive://</userinput > or <userinput >gdrive://<replaceable >cuenta@ejemplo.com</replaceable ></userinput >.</para> <para >El primer URL muestra un diálogo de inicio de sesión OAth de Google (si todavía no ha autenticado ninguna cuenta de Drive) o la lista de sus cuentas autenticadas (en caso contrario).</para> <para >El URL <userinput >gdrive://</userinput > también se puede usar en cualquier momento para añadir una cuenta adicional.</para> <para >El URL <userinput >gdrive://<replaceable >cuenta@ejemplo.com</replaceable ></userinput > lista todos los archivos y carpetas del nivel superior de la cuenta de Drive <userinput >cuenta@ejemplo.com</userinput >.</para> </article> 07070100000048000081A400000000000000000000000165CEC66200000DC9000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/es/kio5_gdrive.po# Spanish translations for kio5_gdrive.po package. # Copyright (C) 2016 This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Automatically generated, 2016. # Eloy Cuadra <ecuadra@eloihr.net>, 2016, 2019, 2022. # Javier Vinal <fjvinal@gmail.com>, 2017. # Víctor Rodrigo Córdoba <vrcordoba@gmail.com>, 2019, 2020, 2021, 2022, 2023, %Y. msgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-10 16:50+0100\n" "Last-Translator: Víctor Rodrigo Córdoba <vrcordoba@gmail.com>\n" "Language-Team: Spanish <kde-l10n-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" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Lokalize 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nueva cuenta en línea" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Usted puede ahora gestionar sus archivos de Google Drive de su cuenta " "<emphasis strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Abrir" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Seleccione una cuenta:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "No hay ninguna cuenta configurada" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurar cuentas" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Subir a la carpeta:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiar URL en el portapapeles" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Abrir en navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Error desconocido" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nueva cuenta" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartido conmigo" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "No existen cuentas de Google Drive activadas. Por favor, añada al menos una." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Discos compartidos" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 no es una cuenta GDrive conocida." #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Símbolos de acceso expirados o ausentes para la cuenta %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "No se puede borrar la raíz de los discos compartidos." 07070100000049000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/et0707010000004A000081A400000000000000000000000165CEC66200000D48000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/et/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Marek Laane <qiilaq69@gmail.com>, 2016, 2019. # Mihkel Tõnnov <mihhkel@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2020-10-07 19:57+0200\n" "Last-Translator: Mihkel Tõnnov <mihhkel@gmail.com>\n" "Language-Team: Estonian <>\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 20.08.1\n" #: kaccounts/kaccountsplugin.cpp:36 #, fuzzy, kde-format #| msgid "New Online Account" msgid "New Online Account" msgstr "Uus võrgukonto" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Nüüd on võimalik hallata Google Drive'i faile oma <emphasis strong='true'>" "%1</emphasis> kontos." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Ava" #: purpose/purpose_gdrive_config.qml:24 #, fuzzy, kde-format #| msgctxt "login in a new google account" #| msgid "New account" msgid "Select an account:" msgstr "Uus konto" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "" #: purpose/purpose_gdrive_config.qml:71 #, fuzzy, kde-format #| msgid "New Online Account" msgid "Configure Accounts" msgstr "Uus võrgukonto" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopeeri URL lõikepuhvrisse" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Ava veebilehitsejas" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, fuzzy, kde-format #| msgctxt "login in a new google account" #| msgid "New account" msgctxt "login in a new google account" msgid "New account" msgstr "Uus konto" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Jagatud kettad" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Ükski Google Drive'i konto pole lubatud. Palun lisa vähemalt üks konto." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Jagatud kettad" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ei ole tuntud GDrive'i konto" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Jagatud ketaste juurt ei saa kustutada." 0707010000004B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/eu0707010000004C000081A400000000000000000000000165CEC66200000D79000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/eu/kio5_gdrive.po# Translation for kio5_gdrive.po to Euskara/Basque (eu). # Copyright (C) 2020-2023 This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # SPDX-FileCopyrightText: 2023 KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus> # # Translators: # Iñigo Salvador Azurmendi <xalba@ni.eus>, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 22:40+0100\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 23.08.2\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Lerroko kontu berria" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Orain zure <emphasis strong='true'>%1</emphasis> kontuko Google Driveko " "fitxategiak kudeatzu ditzakezu." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Ireki" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Hautatu kontu bat:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Ez da konturik konfiguratu" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Kontuak konfiguratu" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Zama-igo karpetara:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopiatu URLa arbelera" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Ireki arakatzailean" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Errore ezezaguna" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Kontu berria" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Nirekin partekatua" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Ez dago gaitutako Google Drive konturik. Gutxienez bat gehitu behar da." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Partekatutako Drive-ak" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ez da GDrive-ko kontu ezagun bat" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "%1 kontuan sartzeko tokenak iraungita edo falta dira" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Ezin da ezabatu Partekatutako Drive-aren erroa." 0707010000004D000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/fi0707010000004E000081A400000000000000000000000165CEC66200000CA0000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/fi/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # Tommi Nieminen <translator@legisign.org>, 2018, 2020, 2021, 2022, 2023. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-12-27 16:18+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-Generator: Lokalize 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Uusi verkkotili" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Voit nyt hallita Google Driven tiedostoja tililtä <emphasis strong='true'>" "%1</emphasis>" #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Avaa" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Valitse tili:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Tiliä ei ole asetettu" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Tiliasetukset" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Lähetä kansioon:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopioi verkko-osoite leikepöydälle" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Avaa selaimeen" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "&Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Tuntematon virhe" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Uusi tili" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Jaettu kanssani" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Google Drive -tilejä ei ole otettu käyttöön. Lisää vähintään yksi." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Jaetut asemat" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ei ole tunnettu GDrive-tili" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Vanhentuneita tai puuttuvia saantimerkkejä tilille %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Jaettujen asemien juurta ei voi poistaa." 0707010000004F000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/fr07070100000050000081A400000000000000000000000165CEC66200000DBC000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/fr/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # Vincent Pinon <vpinon@kde.org>, 2016. # Simon Depiets <sdepiets@gmail.com>, 2018, 2019. # SPDX-FileCopyrightText: 2020, 2021, 2022, 2023 Xavier Besnard <xavier.besnard@kde.org> # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-09 12:48+0100\n" "Last-Translator: Xavier BESNARD <xavier.besnard@neuf.fr>\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 23.08.2\n" "X-Environment: kde\n" "X-Accelerator-Marker: &\n" "X-Text-Markup: kde4\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nouveau compte en ligne" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Vous pouvez désormais gérer les fichiers Google Drive de votre compte " "<emphasis strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Ouvrir" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Sélectionner un compte :" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Aucun compte configuré" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurer les comptes" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Envoyer vers le dossier :" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copier l'URL dans le presse-papier" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Ouvrir dans un navigateur" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Erreur inconnue" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nouveau compte" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Partagé avec moi" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Aucun compte Google Drive activé. Veuillez en ajouter au moins un." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Disques partagés" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 n'est pas un compte « GDrive » connu" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Jetons d'accès expirés ou manquants pour le compte %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Impossible de supprimer la racine des Disques partagés." 07070100000051000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/gl07070100000052000081A400000000000000000000000165CEC66200000CE6000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/gl/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # SPDX-FileCopyrightText: 2023 Adrián Chaves (Gallaecio) # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-11 14:08+0100\n" "Last-Translator: Adrián Chaves (Gallaecio) <adrian@chaves.io>\n" "Language-Team: Galician <proxecto@trasno.gal>\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" "X-Generator: Lokalize 23.08.2\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nova conta por Internet" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Agora pode xestionar os ficheiros de Google Drive da súa conta <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Abrir" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Seleccione unha conta:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Non hai ningunha conta configurada" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurar as contas" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Enviar ao cartafol:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiar o URL no portapapeis" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Abrir nun navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Erro descoñecido" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nova conta" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartido comigo" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Non hai ningunha conta de Google Drive activada. Engada polo menos unha." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Unidades compartidas" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 non é unha conta coñecida de GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Caducaron ou faltan as fichas de acceso da conta %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Non é posíbel eliminar a raíz das unidades compartidas" 07070100000053000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/he07070100000054000081A400000000000000000000000165CEC66200000D38000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/he/kio5_gdrive.po# Elkana Bardugo <ttv200@gmail.com>, 2017. #zanata # SPDX-FileCopyrightText: 2023 Yaron Shahrabani <sh.yaron@gmail.com> msgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-12-15 22:45+0200\n" "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" "Language-Team: צוות התרגום של KDE ישראל\n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 23.08.3\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "חשבון מקוון חדש" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "עכשיו ניתן לנהל את הקבצים ב־Google Drive של החשבון <emphasis strong='true'>" "%1</emphasis> שלך." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "פתיחה" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "נא לבחור חשבון:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "לא הוגדר חשבון" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "הגדרת חשבונות" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "העלאה לתיקייה:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "העתקת כתובת ללוח הגזירים" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "פתיחה בדפדפן" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "שגיאה לא ידועה" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "חשבון חדש" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "שותף איתי" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr " אין חשבונות Google Drive פעילים. נא להוסיף לפחות אחד." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "כוננים משותפים" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 אינו חשבון מוכר של GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "אסימוני הגישה פגו או שהם חסרים לחשבון %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "לא ניתן למחוק בסיס כוננים משותפים." 07070100000055000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/hi07070100000056000081A400000000000000000000000165CEC66200000F35000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/hi/kio5_gdrive.po# Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # # Raghavendra Kamath <raghu@raghukamath.com>, 2021. msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2021-07-07 13:23+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" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "नया ओनलाइन ख़ाता" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "अब आप अपने <emphasis strong='true'>%1</emphasis> खाते की गूगल डिस्क फ़ाइलों को " "प्रबंधित कर सकते हैं।" #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "खोलें" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "एक ख़ाता चुने :" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "कोई खाता विन्यस्त नहीं है" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "ख़ातों को विन्यस्त करें" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "फ़ोल्डर में अपलो़ड करें :" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "गूगल ड्राइव" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "यूआरएल की नकल क्लिपबोर्ड पर बनाएं" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "ब्राउज़र में खोलें" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "गूगल ड्राइव" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "नया ख़ाता" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "साझा ड्राइव" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "कोई गूगल ड्राइव खाते सक्षम नहीं है। कृपया कम से कम एक जोड़ें।" #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "साझा ड्राइव" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ज्ञात जी-ड्राइव खाता नहीं है" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "शेयर की गई डिस्क का रूट मिटाया नहीं जा सकता।" 07070100000057000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/hu07070100000058000081A400000000000000000000000165CEC66200000CC3000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/hu/kio5_gdrive.po# Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # # Kristof Kiszel <ulysses@fsf.hu>, 2022. msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-02-10 14:47+0100\n" "Last-Translator: Kristof Kiszel <ulysses@fsf.hu>\n" "Language-Team: Hungarian <kde-l10n-hu@kde.org>\n" "Language: hu\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.07.70\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Új online fiók" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Most már kezelheti a(z) <emphasis strong='true'>%1</emphasis> fiókjának " "Google Drive fájljait." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Megnyitás" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Válasszon fiókot:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nincs beállítva fiók" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Fiókok beállítása" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Feltöltés mappába:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL másolása a vágólapra" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Megnyitás böngészőben" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Új fiók" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Megosztott meghajtók" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Nincsenek engedélyezbe Google Drive fiókok. Addjon hozzá legalább egyet." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Megosztott meghajtók" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 nem egy ismert GDrive fiók" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nem lehet törölni a Megosztott meghajtók gyökerét." 07070100000059000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ia0707010000005A000081A400000000000000000000000165CEC66200000CE2000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ia/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # giovanni <g.sora@tiscali.it>, 2017, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-13 15:03+0100\n" "Last-Translator: giovanni <g.sora@tiscali.it>\n" "Language-Team: Interlingua <kde-i18n-doc@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 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nove conto in linea" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Nunc tu pote gerer le files de Google Drive de tu conto <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Aperi" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Selige un conto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Currentemente il non ha alcun conto configurate" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configura contos" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Carga a dossier:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copia URL a area de transferentia" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Aperi con navigator" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Error Incognite" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nove conto" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartite con Me" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Il ha necun conto de Google Dribe habilitate. Pro favor tu adde al minus un." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Shared Drives (Drives compartite)" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 non es un conto cognoscite de GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Indicios (token) de accesso mancante o expirate per le conto %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Non pote deler le radice de Shred Drives." 0707010000005B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/id0707010000005C000081A400000000000000000000000165CEC66200000CC0000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/id/kio5_gdrive.po# Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # Wantoyèk <wantoyek@gmail.com>, 2022. # Linerly <linerly@protonmail.com>, 2023. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-01-15 15:16+0700\n" "Last-Translator: Linerly <linerly@protonmail.com>\n" "Language-Team: Indonesian <kde-i18n-doc@kde.org>\n" "Language: id\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 22.12.1\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Akun Daring Baru" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Anda sekarang dapat mengelola berkas Google Drive pada akun <emphasis " "strong='true'>%1</emphasis> Anda." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Buka" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Pilih akun:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Tidak ada akun yang dikonfigurasi" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Konfigurasi Akun" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Unggah ke folder:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Salin URL ke papan klip" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Buka di peramban" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Akun baru" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Dibagikan Dengan Saya" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Tidak ada akun Google Drive yang diaktifkan. Silakan tambahkan setidaknya " "satu." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Drive Terbagi" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 bukan akun GDrive yang diketahui" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Token akses kedaluwarsa atau hilang untuk akun %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Tidak dapat menghapus root Drive Terbagi." 0707010000005D000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ie0707010000005E000081A400000000000000000000000165CEC66200000C31000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ie/kio5_gdrive.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-11-02 08:21+0700\n" "Last-Translator: OIS <mistresssilvara@hotmail.com>\n" "Language-Team: Interlingue <kde-i18n-doc@kde.org>\n" "Language: ie\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: Poedit 1.8.12\n" #: kaccounts/kaccountsplugin.cpp:36 #, fuzzy, kde-format msgid "New Online Account" msgstr "Adjunter un conto" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Nu vu posse gerer li files de Google Drive de vor conto <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Aperter" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Selecte un conto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Null conto es configurat" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurar contos" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Cargar a fólder:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiar li URL" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Aperter in li navigator" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nov conto" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Partit con me" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Null activ contos de Google Drive. Ples adjunter adminim un." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Partit unités" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ne es un conosset conto de GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "" 0707010000005F000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it07070100000060000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it/docs07070100000061000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it/docs/kioslave507070100000062000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it/docs/kioslave5/gdrive07070100000063000081A400000000000000000000000165CEC66200000699000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Italian "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Luigi</firstname ><surname >Toscano</surname ><affiliation ><address ><email >luigi.toscano@tiscali.it</email ></address ></affiliation ><contrib >Traduzione del documento</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >KIO GDrive permetta di accedere e modificare i file in Google Drive tramite le applicazioni KDE che supportano KIO.</para> <para >Puoi usare il kioslave gdrive in questo modo:</para> <para ><userinput >gdrive://</userinput > o <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput >.</para> <para >Il primo URL mostra una finestra di dialogo OAuth da Google se nessun account Drive è stato autenticato, o altrimenti l'elenco degli account già usati per l'autenticazione.</para> <para >L'URL <userinput >gdrive://</userinput > può essere usato in ogni momento per aggiungere ulteriori account.</para> <para >L'URL <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput > elenca tutti i file e le cartelle a partire dal punto di partenza dell'account Drive <userinput >foo@example.com</userinput >.</para> </article> 07070100000064000081A400000000000000000000000165CEC66200000D4B000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/it/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the kio-gdrive package. # Luigi Toscano <luigi.toscano@tiscali.it>, 2016, 2017, 2019, 2020, 2021, 2022, 2023. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 14:31+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 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nuovo account in linea" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Puoi ora gestire i file su Google Drive del tuo account <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Apri" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Seleziona un account:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nessun account configurato" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configura account" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Invia alla cartella:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copia l'URL negli appunti" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Apri nel browser" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Errore sconosciuto" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nuovo account" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Condiviso con me" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Non ci sono account di Google Drive abilitati. Aggiungine almeno uno." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Drive condivisi" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 non è un account GDrive noto" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Token di accesso scaduto o mancante per l'account %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Impossibile eliminare la radice dei drive condivisi." #~ msgid "Log-in canceled, no account available." #~ msgstr "Accesso annullato, nessun account disponibile." 07070100000065000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ja07070100000066000081A400000000000000000000000165CEC662000009F9000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ja/kio5_gdrive.pomsgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2016-08-15 22:30-0700\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=1; plural=0;\n" "X-Accelerator-Marker: &\n" "X-Text-Markup: kde4\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "" 07070100000067000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ka07070100000068000081A400000000000000000000000165CEC66200000FC2000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ka/kio5_gdrive.po# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-10 04:57+0100\n" "Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n" "Language-Team: Georgian <kde-i18n-doc@kde.org>\n" "Language: ka\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: Poedit 3.3.2\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "ახალი ონლაინ ანგარიში" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "ახლა <emphasis strong='true'>%1</emphasis>-ის Google Drive-ზე ფაილების " "მართვაც შეგიძლიათ." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "გახსნა" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "აირჩიეთ ანგარიში:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "ანგარიში მორგებული არაა" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "ანგარიშების მორგება" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "ატვირთვა საქაღალდეში:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL-ის ბუფერში კოპირება" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "ბრაუზერში გახსნა" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "&Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "უცნობი შეცდომა" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "ახალი ანგარიში" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "ჩემთვის გაზიარებული" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Google Drive-ის ჩართული ანგარიშები არ არსებობს. დაამატეთ ერთი მაინც." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "გაზიარებული დისკები" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 GDrive-ის უცნობი ანგარიშია" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "ვადაგასული ან ნაკლული წვდომის კოდები ანგარიშისთვის %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "გაზიარებული დისკის მთავარი საქაღალდის წაშლა შეუძლებელია." 07070100000069000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ko0707010000006A000081A400000000000000000000000165CEC66200000D06000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ko/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # SPDX-FileCopyrightText: 2017, 2018, 2019, 2020, 2021, 2022, 2024 Shinjo Park <kde@peremen.name> # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2024-02-09 23:44+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 23.08.1\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "새 온라인 계정" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "<emphasis strong='true'>%1</emphasis> 계정의 Google 드라이브 파일을 관리할 " "수 있습니다." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "열기" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "계정 선택:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "설정한 계정 없음" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "계정 설정" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "업로드할 폴더:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google 드라이브" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "클립보드로 URL 복사" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "브라우저로 열기" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "Google 드라이브(&O)" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "알 수 없는 오류" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "새 계정" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "나와 공유됨" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Google 드라이브 계정이 추가되지 않았습니다. 계정을 등록하십시오." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "공유 드라이브" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1은(는) 알려진 GDrive 계정이 아님" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "%1 계정의 접근 토큰이 만료되었거나 없음" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "공유 드라이브 루트를 삭제할 수 없습니다." 0707010000006B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/lt0707010000006C000081A400000000000000000000000165CEC66200000D01000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/lt/kio5_gdrive.po# Lithuanian translations for kio-gdrive package. # Copyright (C) 2019 This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # Automatically generated, 2019. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2021-08-21 18:58+0300\n" "Last-Translator: Moo\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" "X-Generator: Poedit 3.0\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nauja internetinė paskyra" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Dabar galite tvarkyti savo <emphasis strong='true'>%1</emphasis> paskyros " "Google disko failus." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Atverti" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Pasirinkite paskyrą:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nėra sukonfigūruotos paskyros" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Konfigūruoti paskyras" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Išsiųsti į aplanką:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google diskas" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopijuoti URL į iškarpinę" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Atverti naršyklėje" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google diskas" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nauja paskyra" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Bendrinami diskai" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Nėra jokių įjungtų Google disko paskyrų. Pridėkite bent vieną." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Bendrinami diskai" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 nėra žinoma GDrive paskyra" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nepavyksta ištrinti bendrinamų diskų šaknies." 0707010000006D000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl0707010000006E000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl/docs0707010000006F000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl/docs/kioslave507070100000070000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl/docs/kioslave5/gdrive07070100000071000081A400000000000000000000000165CEC662000005CC000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Dutch "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> &Freek.de.Kruijf; </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >KIO GDrive stelt u in staat toegang te hebben tot en uw Google Drive bestanden te bewerken met KDE toepassingen die KIO ondersteunen.</para> <para >U kunt de gdrive kioslave gebruiken als volgt:</para> <para ><userinput >gdrive://</userinput > of <userinput >gdrive://<replaceable >foo@bijvoorbeeld.nl</replaceable ></userinput >.</para> <para >De eerste URL toont een OAuth aanmelddialoog van Google, als er nog geen Drive account is geauthenticeerd of in plaats daarvan de lijst van uw geauthenticeerde accounts bestaat niet.</para> <para >De URL <userinput >gdrive://</userinput > kan ook op elk moment gebruikt worden om een extra account toe te voegen.</para> <para >De URL <userinput >gdrive://<replaceable >foo@voorbeeld.nl</replaceable ></userinput > toont alle bestanden en mappen aan de top van het Drive account <userinput >foo@voorbeeld.nl</userinput >.</para> </article> 07070100000072000081A400000000000000000000000165CEC66200000D77000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nl/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # SPDX-FileCopyrightText: 2016, 2017, 2019, 2020, 2021, 2022, 2023 Freek de Kruijf <freekdekruijf@kde.nl> msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 10:00+0100\n" "Last-Translator: Freek de Kruijf <freekdekruijf@kde.nl>\n" "Language-Team: \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 23.08.2\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nieuw online account" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "U kunt nu de bestanden in Google Drive van uw <emphasis strong='true'>%1</" "emphasis> account beheren." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Openen" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Een account selecteren:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Geen account geconfigureerd" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Accounts configureren" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Naar map uploaden:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL-adres kopiëren naar klembord" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "In browser openen" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Onbekende fout" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nieuw account" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Met mij gedeeld" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Er zijn geen Google Drive accounts ingeschakeld. Voeg er minstens één toe." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Gedeelde stations" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 is geen bekend GDrive-account" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Verlopen of ontbrekend toegangstokens voor account %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Kan hoofdmap van Gedeelde stations niet verwijderen." #~ msgid "Log-in canceled, no account available." #~ msgstr "Aanmelden afgebroken: geen account beschikbaar." #~ msgid "Trash" #~ msgstr "Prullenbak" 07070100000073000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nn07070100000074000081A400000000000000000000000165CEC66200000C9F000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/nn/kio5_gdrive.po# Translation of kio5_gdrive to Norwegian Nynorsk # # Karl Ove Hufthammer <karl@huftis.org>, 2018, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2023-11-27 00:42+0000\n" "PO-Revision-Date: 2023-01-06 19:18+0100\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 22.12.0\n" "X-Environment: kde\n" "X-Accelerator-Marker: &\n" "X-Text-Markup: kde4\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Ny nettkonto" #: kaccounts/kaccountsplugin.cpp:37 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis " "strong='true'>%1</emphasis> account." msgstr "" "Du kan no handsama filene dine på Google Drive-kontoen din <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:44 kaccounts/kaccountsplugin.cpp:47 #, kde-format msgid "Open" msgstr "Opna" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Vel konto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Ingen kontoar er sette opp" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Set opp kontoar" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Last opp til mappe:" #: src/integration/contextmenuaction/contextmenuaction.cpp:52 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:61 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopier adressa til utklippstavla" #: src/integration/contextmenuaction/contextmenuaction.cpp:74 #, kde-format msgid "Open in browser" msgstr "Opna i nettlesar" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:122 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:244 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Ny konto" #: src/kio_gdrive.cpp:257 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Delt med meg" #: src/kio_gdrive.cpp:310 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Ingen Google Drive-kontoar er sette opp. Du må leggja til minst éin." #: src/kio_gdrive.cpp:456 #, kde-format msgid "Shared Drives" msgstr "Delte diskar" #: src/kio_gdrive.cpp:711 src/kio_gdrive.cpp:873 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 er ikkje ein kjend GDrive-konto" #: src/kio_gdrive.cpp:1058 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Utgått eller manglande tilgangspollett for kontoen %1" #: src/kio_gdrive.cpp:1317 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Kan ikkje sletta rot til delte diskar." 07070100000075000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pl07070100000076000081A400000000000000000000000165CEC66200000DD9000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pl/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # SPDX-FileCopyrightText: 2016, 2017, 2019, 2020, 2021, 2022, 2023 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-12-27 18:40+0100\n" "Last-Translator: Łukasz Wojniłowicz <lukasz.wojnilowicz@gmai.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 23.08.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nowe konto sieciowe" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Od teraz możesz zarządzać plikami na Dysku Gogle swojego konta <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Otwórz" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Wybierz konto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nie ustawiono żadnego konta" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Ustawienia kont" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Wyślij do katalogu:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Dysk Google" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Skopiuj URL do schowka" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Otwórz w przeglądarce" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "Dysk G&oogle" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Nieznany błąd" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nowe konto" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Udostępnione mi" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Nie włączono żadnego konta Dysku Google. Dodaj co najmniej jedno." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Współdzielone urządzenia" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 nie jest znanym kontem GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Tokeny dostępu wygasły lub ich nie było dla konta %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nie można usunąć katalogu głównego współdzielonych urządzeń." #~ msgid "Log-in canceled, no account available." #~ msgstr "Anulowano logowanie, brak konta." #~ msgid "Trash" #~ msgstr "Kosz" 07070100000077000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt07070100000078000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt/docs07070100000079000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt/docs/kioslave50707010000007A000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt/docs/kioslave5/gdrive0707010000007B000081A400000000000000000000000165CEC662000006BB000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Portuguese "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >José</firstname ><surname >Pires</surname ><affiliation ><address ><email >zepires@gmail.com</email ></address ></affiliation ><contrib >Tradução</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >O KIO do GDrive permite-lhe aceder e editar os ficheiros da sua área do Google Drive, usando as aplicações do KDE que suportam o KIO.</para> <para >Poderá usar o 'kioslave' do 'gdrive' da seguinte forma:</para> <para ><userinput >gdrive://</userinput > ou <userinput >gdrive://<replaceable >xpto@exemplo.com</replaceable ></userinput >.</para> <para >O primeiro URL mostra-lhe uma janela de autenticação de OAuth do Google, caso nenhuma conta do Drive tenha ainda sido autenticada, ou então a lista com as suas contas autenticadas em alternativa.</para> <para >O URL <userinput >gdrive://</userinput > também pode ser usado em qualquer altura para adicionar uma nova conta.</para> <para >O URL <userinput >gdrive://<replaceable >xpto@exemplo.com</replaceable ></userinput > apresenta todos os ficheiros e pastas do nível de topo da conta <userinput >xpto@exemplo.com</userinput > do Drive.</para> </article> 0707010000007C000081A400000000000000000000000165CEC66200000C2C000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt/kio5_gdrive.pomsgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-09-24 14:25+0100\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" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-POFile-SpellExtra: Online GDrive\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nova Conta 'Online'" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Poderá agora gerir os ficheiros do Google Drive da sua conta <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Abrir" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Seleccione uma conta:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nenhuma conta configurada" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurar as Contas" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Enviar para a pasta:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiar o URL para a área de transferência" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Abrir no navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nova conta" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Partilhados Comigo" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Não existem contas do Google Drive activas. Adicione pelo menos uma." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Unidades Partilhadas" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "A %1 não é uma conta conhecida do GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Códigos sem validade ou em falta para a conta %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Não é possível apagar o topo das Unidades Partilhadas." 0707010000007D000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR0707010000007E000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003C00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR/docs0707010000007F000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR/docs/kioslave507070100000080000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR/docs/kioslave5/gdrive07070100000081000081A400000000000000000000000165CEC6620000069B000000000000000000000000000000000000005B00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Brazilian-Portuguese "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Luiz Fernando</firstname ><surname >Ranghetti</surname ><affiliation ><address ><email >elchevive@opensuse.org</email ></address ></affiliation ><contrib >Tradução</contrib ></othercredit > </authorgroup> <date >10/03/2016</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >O KIO GDrive permite a você acessar e editar seus arquivos do Google Drive usando os aplicativos do KDE que suportam KIO.</para> <para >Você pode usar o kioslave gdrive desta forma:</para> <para ><userinput >gdrive://</userinput > ou <userinput >gdrive://<replaceable >foo@exemplo.com</replaceable ></userinput >.</para> <para >A primeira URL mostra uma janela de login OAuth do Google, se nenhuma conta do Google Drive tiver sido autenticada ainda, ou a lista de suas contas autenticadas.</para> <para >A URL <userinput >gdrive://</userinput > também pode ser usada a qualquer hora para adicionar uma conta adicional.</para> <para >A URL <userinput >gdrive://<replaceable >foo@exemplo.com</replaceable ></userinput > lista todos os arquivos e pastas do nível superior da conta do Google Drive <userinput >foo@exemplo.com</userinput >.</para> </article> 07070100000082000081A400000000000000000000000165CEC66200000D2D000000000000000000000000000000000000004600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/pt_BR/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Luiz Fernando Ranghetti <elchevive@opensuse.org>, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 15:41-0300\n" "Last-Translator: Luiz Fernando Ranghetti <elchevive@opensuse.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 22.12.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nova conta online" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Você pode agora gerenciar os arquivos do Google Drive de sua conta <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Abrir" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Selecionar uma conta:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nenhuma conta configurada" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Configurar contas" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Enviar para a pasta:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiar URL para a área de transferência" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Abrir no navegador" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Erro desconhecido" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nova conta" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Compartilhados comigo" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Não há contas do Google Drive habilitadas. Adicione pelo menos uma." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Drives compartilhados" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 não é uma conta do Google Drive conhecida" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Expirado ou faltando token de acesso para a conta %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Não é possível excluir a raiz dos Drives compartilhados." 07070100000083000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ro07070100000084000081A400000000000000000000000165CEC66200000CEA000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ro/kio5_gdrive.po# Copyright (C) YEAR This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # Sergiu Bivol <sergiu@cip.md>, 2020. # msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2020-09-16 01:13+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" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Cont online nou" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Acum puteți gestiona fișierele din Google Drive ale contului <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Deschide" #: purpose/purpose_gdrive_config.qml:24 #, fuzzy, kde-format #| msgctxt "login in a new google account" #| msgid "New account" msgid "Select an account:" msgstr "Cont nou" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "" #: purpose/purpose_gdrive_config.qml:71 #, fuzzy, kde-format #| msgid "New Online Account" msgid "Configure Accounts" msgstr "Cont online nou" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Copiază URL în clipboard" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Deschide în navigator" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Cont nou" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Discuri partajate" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Nu e niciun cont Google Drive activat. Adăugați cel puțin unul." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Discuri partajate" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 nu e un cont GDrive cunoscut" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nu se poate șterge rădăcina discurilor partajate," 07070100000085000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru07070100000086000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru/docs07070100000087000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru/docs/kioslave507070100000088000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru/docs/kioslave5/gdrive07070100000089000081A400000000000000000000000165CEC662000008A6000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Russian "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Александр</firstname ><surname >Поташев</surname ><affiliation ><address ><email >aspotashev@gmail.com</email ></address ></affiliation ><contrib >Перевод на русский язык</contrib ></othercredit > </authorgroup> <date >3 октября 2016 г.</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >KIO GDrive позволяет просматривать и редактировать файлы, хранящиеся на Google Диске, в приложениях KDE с поддержкой KIO.</para> <para >Протокол gdrive можно использовать, например, следующим образом:</para> <para ><userinput >gdrive://</userinput > или <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput >.</para> <para >Первый адрес откроет диалог входа в учётную запись по OAuth, если ещё не был выполнен вход ни в одну учётную запись Google Диска, либо список доступных учётных записей — в противном случае.</para> <para >Адрес <userinput >gdrive://</userinput > также можно использовать для добавления ещё одной учётной записи.</para> <para >По адресу <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput > будут показаны файлы и каталоги верхнего уровня, хранящиеся на Google Диске для учётной записи <userinput >foo@example.com</userinput >.</para> </article> 0707010000008A000081A400000000000000000000000165CEC66200000F63000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ru/kio5_gdrive.po# 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, 2019. # SPDX-FileCopyrightText: 2020, 2021, 2022, 2024 Alexander Yavorsky <kekcuha@gmail.com> msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2024-02-09 23:18+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 24.01.95\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Новая учётная запись" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Теперь вы можете работать с файлами на Google Диске учётной записи <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Открыть" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Выбор учётной записи:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Отсутствуют настроенные учётные записи" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Настроить учётные записи" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Папка назначения:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Диск Google" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Копировать URL в буфер обмена" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Открыть в браузере" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "Диск G&oogle" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Неизвестная ошибка" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Добавить учётную запись" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Предоставленные мне" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Не настроено ни одной учётной записи Google Диска. Добавьте хотя бы одну." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Общие диски" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "«%1» — неизвестная учётная запись GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Истёк или отсутствует токен для доступа к учётной записи %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Невозможно удалить корневой каталог общего диска." 0707010000008B000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sk0707010000008C000081A400000000000000000000000165CEC66200000D34000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sk/kio5_gdrive.po# translation of kio5_gdrive.po to Slovak # Roman Paholik <wizzardsk@gmail.com>, 2016. # Mthw <jari_45@hotmail.com>, 2019. # Matej Mrenica <matejm98mthw@gmail.com>, 2019, 2020, 2022. # Dusan Kazik <prescott66@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2022-01-25 14:45+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.1\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nový online účet" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Teraz môžete spravovať súbory disku Google vo vašom <emphasis strong='true'>" "%1</emphasis> účte." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Otvoriť" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Vybrať účet:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Nie sú nastavené žiadne účty" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Nastaviť účty" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Nahrať do priečinku:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Skopírovať URL do schránky" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Otvoriť v prehliadači" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, fuzzy, kde-format #| msgid "Google Drive" msgid "G&oogle Drive" msgstr "Google Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nový účet" #: src/kio_gdrive.cpp:255 #, fuzzy, kde-format #| msgid "Shared Drives" msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Zdieľané jednotky" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Nie sú povolené žiadne účty disku Google. Prosím, pridajte aspoň jeden." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Zdieľané jednotky" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 nie je známe a konto GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Nedá sa odstrániť koreňový priečinok zdieľaných jednotiek." 0707010000008D000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sl0707010000008E000081A400000000000000000000000165CEC66200000D9A000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sl/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Andrej Mernik <andrejm@ubuntu.si>, 2016, 2017, 2018. # Matjaž Jeran <matjaz.jeran@amis.net>, 2020, 2021, 2022. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 07:40+0100\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" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" "%100==4 ? 3 : 0);\n" "Translator: Andrej Mernik <andrejm@ubuntu.si>\n" "X-Generator: Poedit 3.4.1\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nov spletni račun" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Sedaj lahko upravljate z datotekami v Google Drive za vaš račun <emphasis " "strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Odpri" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Izberi račun:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Ni nastavljenega računa" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Nastavi račune" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Pošlji v mapo:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopiraj Googlov URL na odložišče" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Odpri v brskalniku" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Neznana napaka" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nov račun" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Deljeno z menoj" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Ni omogočenih računov Google Drive. Dodajte vsaj enega." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Skupni pogoni" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ni znan račun GDrive" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Pretekli ali manjkajoči dostopni žetoni za račun %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Korena skupnih diskov ni mogoče izbrisati." #~ msgid "Log-in canceled, no account available." #~ msgstr "Prijava preklicana. Noben račun ni na voljo." 0707010000008F000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr07070100000090000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr/docs07070100000091000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr/docs/kioslave507070100000092000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr/docs/kioslave5/gdrive07070100000093000081A400000000000000000000000165CEC6620000081A000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Serbian "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >Г‑драјв</title> <articleinfo> <authorgroup> <author ><firstname >Елвис</firstname > <surname >Ангелачо</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Часлав</firstname ><surname >Илић</surname ><affiliation ><address ><email >caslav.ilic@gmx.net</email ></address ></affiliation ><contrib >превод</contrib ></othercredit > </authorgroup> <date >3. 10. 2016.</date> <releaseinfo >г‑драјв 1.0.1</releaseinfo> </articleinfo> <para >К‑У/И г‑драјв вам омогућава да приступате фајловима на Гугл‑драјву и уређујете их кроз КДЕ програме који подржавају К‑У/И.</para> <para >У/И захват г‑драјв можете користити овако:</para> <para ><userinput >gdrive://</userinput > или <userinput >gdrive://<replaceable >blabla@primer.com</replaceable ></userinput >.</para> <para >Први УРЛ приказује О‑аут пријавни дијалог на Гуглу у случају да још нисте аутентификовали налог, иначе списак свих ваших аутентификованих налога.</para> <para >УРЛ <userinput >gdrive://</userinput > може такође у сваком тренутку да се употреби за додавање нових налога.</para> <para >УРЛ <userinput >gdrive://<replaceable >blabla@primer.com</replaceable ></userinput > набраја све фајлове и фасцикле горњег нивоа под налогом <userinput >blabla@primer.com</userinput > на Гугл‑драјву.</para> </article> 07070100000094000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr@latin07070100000095000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr@latin/docs07070100000096000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr@latin/docs/kioslave507070100000097000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000005000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr@latin/docs/kioslave5/gdrive07070100000098000081A400000000000000000000000165CEC6620000067E000000000000000000000000000000000000005E00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sr@latin/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Serbian-Latin "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >Gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname > <surname >Angelačo</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Časlav</firstname ><surname >Ilić</surname ><affiliation ><address ><email >caslav.ilic@gmx.net</email ></address ></affiliation ><contrib >prevod</contrib ></othercredit > </authorgroup> <date >3. 10. 2016.</date> <releaseinfo >gdrive 1.0.1</releaseinfo> </articleinfo> <para >K‑U/I gdrive vam omogućava da pristupate fajlovima na Google Driveu i uređujete ih kroz KDE programe koji podržavaju K‑U/I.</para> <para >U/I zahvat gdrive možete koristiti ovako:</para> <para ><userinput >gdrive://</userinput > ili <userinput >gdrive://<replaceable >blabla@primer.com</replaceable ></userinput >.</para> <para >Prvi URL prikazuje OAuth prijavni dijalog na Googleu u slučaju da još niste autentifikovali nalog, inače spisak svih vaših autentifikovanih naloga.</para> <para >URL <userinput >gdrive://</userinput > može takođe u svakom trenutku da se upotrebi za dodavanje novih naloga.</para> <para >URL <userinput >gdrive://<replaceable >blabla@primer.com</replaceable ></userinput > nabraja sve fajlove i fascikle gornjeg nivoa pod nalogom <userinput >blabla@primer.com</userinput > na Google Driveu.</para> </article> 07070100000099000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv0707010000009A000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv/docs0707010000009B000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv/docs/kioslave50707010000009C000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv/docs/kioslave5/gdrive0707010000009D000081A400000000000000000000000165CEC662000006BA000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Swedish "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" > <firstname >Stefan</firstname > <surname >Asserhäll</surname > <affiliation ><address ><email >stefan.asserhall@bredband.net</email ></address ></affiliation > <contrib >Översättare</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >I/O-slaven GDrive låter dig komma åt och redigera dina filer på Google Drive med användning av KDE-program som stöder I/O-slavar.</para> <para >Du kan använda I/O-slaven gdrive som följer:</para> <para ><userinput >gdrive://</userinput > eller <userinput >gdrive://<replaceable >plats@exempel.com</replaceable ></userinput >.</para> <para >Den första webbadressen visar en OAuth inloggningsdialogruta från Google, om inget Drive-konto redan har behörighet, eller annars listan över konton med behörighet.</para> <para >Webbadressen <userinput >gdrive://</userinput > kan också användas när som helst för att lägga till ett ytterligare konto.</para> <para >Webbadressen <userinput >gdrive://<replaceable >plats@exempel.com</replaceable ></userinput > listar alla filer och kataloger från toppnivån av Drive-kontot <userinput >plats@exempel.com</userinput >.</para> </article> 0707010000009E000081A400000000000000000000000165CEC66200000D62000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/sv/kio5_gdrive.po# 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>, 2016, 2017, 2019, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-11 09:34+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 23.04.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Nytt Internetkonto" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Du kan nu hantera filerna på Google Drive i kontot <emphasis strong='true'>" "%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Öppna" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Välj ett konto:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Inget konto inställt" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Anpassa konton" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Ladda upp till katalog:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Kopiera webbadress till klippbordet" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Öppna i webbläsare" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Okänt fel" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Nytt konto" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Delade med mig" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Det finns inga aktiverade Google Drive-konton. Lägg till minst ett." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Delade enheter" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 är inte ett känt GDrive-konto" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Utgångna eller saknade åtkomstsymboler för konto %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Kan inte ta bort den delade enhetens rot." #~ msgid "Log-in canceled, no account available." #~ msgstr "Inloggning avbruten, inget konto tillgängligt." #~ msgid "Trash" #~ msgstr "Papperskorg" 0707010000009F000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ta070701000000A0000081A400000000000000000000000165CEC6620000107D000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/ta/kio5_gdrive.po# Copyright (C) 2023 This file is copyright: # This file is distributed under the same license as the kio-gdrive package. # # SPDX-FileCopyrightText: 2021, 2022, 2023 Kishore G <kishore96@gmail.com> msgid "" msgstr "" "Project-Id-Version: kio-gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-12-04 20:48+0530\n" "Last-Translator: Kishore G <kishore96@gmail.com>\n" "Language-Team: Tamil <kde-i18n-doc@kde.org>\n" "Language: ta\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 23.08.3\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "புதிய இணைய கணக்கு" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "உங்கள் <emphasis strong='true'>%1</emphasis> கணக்கின் கூகுள் டிரைவ் கோப்புகளை நீங்கள் " "இப்போது நிர்வகிக்கலாம்." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "திற" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "கணக்கை தேர்ந்தெடுங்கள்:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "எந்த கணக்கும் அமைக்கப்படவில்லை" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "கணக்குகளை அமை" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "அடைவிற்கு பதிவேற்று:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "கூகுள் டிரைவ்" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "முகவரியை பிடிப்புப்பலகையில் நகலெடு" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "உலாவியில் திற" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "&கூகுள் டிரைவ்" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "தெரியாத சிக்கல்" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "புதிய கணக்கு" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "என்னுடன் பகிரப்பட்டவை" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "எந்த கூகுள் டிரைவ் கணக்குகளும் இயக்கப்படவில்லை. ஒன்றையாவது சேருங்கள்." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "பகிரப்பட்ட சேமிப்பகங்கள்" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 ஒரு GDrive கணக்கு இல்லை" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "%1 எனும் கணக்கிற்கான அணுகல் டோக்கன்கள் இல்லை, அல்லது காலாவதியாகிவிட்டன" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "பகிரப்பட்ட தாய் அடைவை நீக்க முடியாது." 070701000000A1000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr070701000000A2000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/docs070701000000A3000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/docs/kioslave5070701000000A4000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/docs/kioslave5/gdrive070701000000A5000081A400000000000000000000000165CEC6620000007C000000000000000000000000000000000000005900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/docs/kioslave5/gdrive/CMakeLists.txtkdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kioslave5/gdrive) 070701000000A6000081A400000000000000000000000165CEC66200000669000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Turkish "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >İşbaran</firstname ><surname >Akçayır</surname ><affiliation ><address ><email >isbaran@gmail.com</email ></address ></affiliation ><contrib >Çeviri</contrib ></othercredit > </authorgroup> <date >2016-10-03</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >KIO GDrive, Google Drive dosyalarınızı KIO destekleyen KDE uygulamalarınız kullanarak düzenlemenizi sağlar.</para> <para >Gdrive kioslave’i şöyle kullanabilirsiniz:</para> <para ><userinput >gdrive://</userinput > veya <userinput >gdrive://<replaceable >foo@örnek.com</replaceable ></userinput >.</para> <para >İlk URL henüz bir Drive hesabı ile kimlik doğrulaması yapılmamışsa Google’den bir OAuth giriş penceresi, yapılmışsa hesaplarınızın listesini gösterir.</para> <para ><userinput >gdrive://</userinput > URL’si ek bir hesap eklemek için her zaman kullanılabilir.</para> <para ><userinput >gdrive://<replaceable >foo@örnek.com</replaceable ></userinput > <userinput >foo@example.com</userinput > Drive hesabının en üst düzeydeki dosyalarını ve klasörlerini listeler.</para> </article> 070701000000A7000081A400000000000000000000000165CEC66200000CF0000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/tr/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Volkan Gezer <volkangezer@gmail.com>, 2017. # Emir SARI <emir_sari@icloud.com>, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-09 12:19+0300\n" "Last-Translator: Emir SARI <emir_sari@icloud.com>\n" "Language-Team: Turkish <kde-l10n-tr@kde.org>\n" "Language: tr\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 23.11.70\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Yeni Çevrimiçi Hesap" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Artık <emphasis strong='true'>%1</emphasis> hesabınızın Google Drive " "dosyalarını yönetebilirsiniz." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Aç" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Bir hesap seçin:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Yapılandırılmış hesap yok" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Hesapları Yapılandır" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Klasöre yükle:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "URL'yi panoya kopyala" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Tarayıcıda aç" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Bilinmeyen hata" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Yeni hesap" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Benimle Paylaşılanlar" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "Etkin Google Drive hesabı yok. Lütfen en azından bir tane ekleyin." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Paylaşılan Sürücüler" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1, bilinen bir GDrive hesabı değil" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "%1 hesabı için süresi dolmuş veya eksik erişim jetonları" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Paylaşılan Sürücüler kök dizini silinemiyor." 070701000000A8000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk070701000000A9000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk/docs070701000000AA000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk/docs/kioslave5070701000000AB000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk/docs/kioslave5/gdrive070701000000AC000081A400000000000000000000000165CEC662000009FA000000000000000000000000000000000000005800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk/docs/kioslave5/gdrive/index.docbook<?xml version="1.0" ?> <!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN" "dtd/kdedbx45.dtd" [ <!ENTITY % addindex "IGNORE"> <!ENTITY % Ukrainian "INCLUDE"> ]> <article lang="&language;" id="gdrive"> <title >gdrive</title> <articleinfo> <authorgroup> <author ><firstname >Elvis</firstname ><surname >Angelaccio</surname > <affiliation > <address > <email >elvis.angelaccio@kde.org</email> </address> </affiliation> </author> <othercredit role="translator" ><firstname >Юрій</firstname ><surname >Чорноіван</surname ><affiliation ><address ><email >yurchor@ukr.net</email ></address ></affiliation ><contrib >Переклад українською</contrib ></othercredit > </authorgroup> <date >3 жовтня 2016 року</date> <releaseinfo >kio-gdrive 1.0.1</releaseinfo> </articleinfo> <para >За допомогою допоміжного засобу введення-виведення (KIO) GDrive ви зможете отримати доступ до перегляду і редагування ваших файлів на Диску Google за допомогою програм KDE, у яких передбачено підтримку KIO.</para> <para >Скористатися допоміжним засобом gdrive можна так:</para> <para ><userinput >gdrive://</userinput > or <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput >.</para> <para >За допомогою першої адреси можна відкрити діалогове вікно входу до облікового запису Google за допомогою OAuth, якщо ще не було виконано розпізнавання облікового запису у системі Диска, або відкрити список облікових записів, розпізнавання для яких уже виконувалося.</para> <para >Адресою із префіксом <userinput >gdrive://</userinput > також будь-коли можна скористатися для додавання нового облікового запису.</para> <para >Використання у адресі частини <userinput >gdrive://<replaceable >foo@example.com</replaceable ></userinput > дає змогу переглянути список усіх файлів і тек на верхньому рівні облікового запису Диска <userinput >foo@example.com</userinput >.</para> </article> 070701000000AD000081A400000000000000000000000165CEC662000010DD000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/uk/kio5_gdrive.po# Translation of kio5_gdrive.po to Ukrainian # Copyright (C) 2016-2021 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>, 2016, 2017, 2019, 2020, 2021, 2022, 2023. msgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-11-08 08:35+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 20.12.0\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "Новий обліковий запис" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "Тепер ви можете керувати файлами Диска Google з вашого облікового запису " "<emphasis strong='true'>%1</emphasis>." #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "Відкрити" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "Виберіть обліковий запис:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "Не налаштовано жодного облікового запису" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "Налаштувати облікові записи" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "Тека вивантаження:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Диск Google" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "Скопіювати адресу до буфера" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "Відкрити у переглядачі" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "Д&иск Google" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "Невідома помилка" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "Новий обліковий запис" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "Оприлюднене для вас" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "" "Не увімкнено жодного облікового запису Google Диск. Будь ласка, додайте " "принаймні один такий обліковий запис." #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "Спільні диски" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 не є відомим обліковим записом Google Диск" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "Прострочені або не вказані жетони доступу для облікового запису %1" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "Неможливо вилучити кореневу теку спільних дисків." #~ msgid "Log-in canceled, no account available." #~ msgstr "Вхід скасовано. Немає доступних облікових записів." #~ msgid "Trash" #~ msgstr "Смітник" 070701000000AE000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/zh_CN070701000000AF000081A400000000000000000000000165CEC66200000C2F000000000000000000000000000000000000004600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/zh_CN/kio5_gdrive.pomsgid "" msgstr "" "Project-Id-Version: kdeorg\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2024-02-05 11:40\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/kio-gdrive/kio5_gdrive.pot\n" "X-Crowdin-File-ID: 5960\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "新建在线账户" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "现在您可以管理 <emphasis strong='true'>%1</emphasis> 帐号的 Google Drive 文件" "了。" #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "打开" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "选择账号:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "尚未配置账号" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "配置账号" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "上传到文件夹:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google Drive" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "复制 URL 到剪贴板" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "在浏览器中打开" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "G&oogle Drive" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "未知错误" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "新建账户" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "分享给我的" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "没有启用的 Google 云端硬盘账户。请至少添加一个。" #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "共享驱动器" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 不是已知的 GDrive 账户" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "账户 %1 过期或缺少访问令牌" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "无法删除共享驱动器根目录。" 070701000000B0000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/zh_TW070701000000B1000081A400000000000000000000000165CEC66200000D1E000000000000000000000000000000000000004600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/po/zh_TW/kio5_gdrive.po# Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # # Jeff Huang <s8321414@gmail.com>, 2016, 2018. # pan93412 <pan93412@gmail.com>, 2019. # SPDX-FileCopyrightText: 2023 Kisaragi Hiu <mail@kisaragi-hiu.com> msgid "" msgstr "" "Project-Id-Version: kio5_gdrive\n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2024-02-16 01:40+0000\n" "PO-Revision-Date: 2023-12-02 20:14+0900\n" "Last-Translator: Kisaragi Hiu <mail@kisaragi-hiu.com>\n" "Language-Team: Traditional Chinese <zh-l10n@lists.slat.org>\n" "Language: Traditional Chinese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 23.08.3\n" "Plural-Forms: nplurals=1; plural=0;\n" #: kaccounts/kaccountsplugin.cpp:36 #, kde-format msgid "New Online Account" msgstr "新增線上帳號" #: kaccounts/kaccountsplugin.cpp:38 #, kde-kuit-format msgctxt "@info" msgid "" "You can now manage the Google Drive files of your <emphasis strong='true'>" "%1</emphasis> account." msgstr "" "您現在可以管理 <emphasis strong='true'>%1</emphasis> 帳號的 Google 雲端硬碟檔" "案。" #: kaccounts/kaccountsplugin.cpp:45 kaccounts/kaccountsplugin.cpp:48 #, kde-format msgid "Open" msgstr "開啟" #: purpose/purpose_gdrive_config.qml:24 #, kde-format msgid "Select an account:" msgstr "選取帳號:" #: purpose/purpose_gdrive_config.qml:63 #, kde-format msgid "No account configured" msgstr "未設定帳號" #: purpose/purpose_gdrive_config.qml:71 #, kde-format msgid "Configure Accounts" msgstr "設定帳號" #: purpose/purpose_gdrive_config.qml:78 #, kde-format msgid "Upload to folder:" msgstr "上傳到資料夾:" #: src/integration/contextmenuaction/contextmenuaction.cpp:53 #, kde-format msgid "Google Drive" msgstr "Google 雲端硬碟" #: src/integration/contextmenuaction/contextmenuaction.cpp:62 #, kde-format msgid "Copy URL to clipboard" msgstr "複製連結到剪貼簿" #: src/integration/contextmenuaction/contextmenuaction.cpp:75 #, kde-format msgid "Open in browser" msgstr "在瀏覽器開啟" #: src/integration/propertiesplugin/gdrivepropertiesplugin.cpp:111 #, kde-format msgid "G&oogle Drive" msgstr "Google 雲端硬碟(&O)" #: src/kio_gdrive.cpp:120 #, kde-format msgid "Unknown error" msgstr "未知的錯誤" #: src/kio_gdrive.cpp:242 #, kde-format msgctxt "login in a new google account" msgid "New account" msgstr "新增帳戶" #: src/kio_gdrive.cpp:255 #, kde-format msgctxt "folder containing gdrive files shared with me" msgid "Shared With Me" msgstr "與我分享" #: src/kio_gdrive.cpp:308 #, kde-format msgid "There are no Google Drive accounts enabled. Please add at least one." msgstr "未啟用 Google 雲端硬碟的帳號。請至少新增一個。" #: src/kio_gdrive.cpp:453 #, kde-format msgid "Shared Drives" msgstr "分享的磁碟" #: src/kio_gdrive.cpp:705 src/kio_gdrive.cpp:865 #, kde-format msgid "%1 isn't a known GDrive account" msgstr "%1 不是一個已知的 GDrive 帳號" #: src/kio_gdrive.cpp:1049 #, kde-format msgid "Expired or missing access tokens for account %1" msgstr "帳號 %1 的存取 token 已過期或缺失" #: src/kio_gdrive.cpp:1305 #, kde-format msgid "Can't delete Shared Drives root." msgstr "無法刪除「分享的磁碟」根目錄。" 070701000000B2000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000003600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose070701000000B3000081A400000000000000000000000165CEC66200000229000000000000000000000000000000000000004500000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/CMakeLists.txtkcoreaddons_add_plugin(purpose_gdrive SOURCES purpose_gdrive.cpp gdrivejob.cpp INSTALL_NAMESPACE "kf${QT_MAJOR_VERSION}/purpose") target_link_libraries(purpose_gdrive Qt::Core KF${QT_MAJOR_VERSION}::Purpose) set_target_properties(purpose_gdrive PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/kf${QT_MAJOR_VERSION}/purpose") install(FILES "purpose_gdrive_config.qml" DESTINATION ${KDE_INSTALL_DATADIR}/purpose) target_link_libraries(purpose_gdrive KF${QT_MAJOR_VERSION}::KIOCore KF${QT_MAJOR_VERSION}::I18n KF${QT_MAJOR_VERSION}::Purpose) 070701000000B4000081A400000000000000000000000165CEC66200000488000000000000000000000000000000000000004400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/gdrivejob.cpp/* SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de> SPDX-License-Identifier: LGPL-2.1-or-later */ #include "gdrivejob.h" #include <KIO/CopyJob> QList<QUrl> arrayToList(const QJsonArray &array) { QList<QUrl> ret; for (const QJsonValue &val : array) { ret += val.toVariant().toUrl(); } return ret; } void GDriveJob::start() { const QString accountName = data().value(QStringLiteral("accountName")).toString(); QString folder = data().value(QStringLiteral("folder")).toString(); if (!folder.startsWith(QLatin1Char('/'))) { folder.prepend(QLatin1Char('/')); } QUrl destUrl; destUrl.setScheme(QStringLiteral("gdrive")); destUrl.setPath(accountName + folder); const QList<QUrl> sourceUrls = arrayToList(data().value(QStringLiteral("urls")).toArray()); KIO::CopyJob *copyJob = KIO::copy(sourceUrls, destUrl); connect(copyJob, &KIO::CopyJob::finished, this, [this, copyJob] { if (copyJob->error()) { setError(copyJob->error()); setErrorText(copyJob->errorText()); } emitResult(); }); copyJob->start(); } 070701000000B5000081A400000000000000000000000165CEC662000001A8000000000000000000000000000000000000004200000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/gdrivejob.h/* SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de> SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef GDRIVEJOB_H #define GDRIVEJOB_H #include <QString> #include <QUrl> #include <purpose/pluginbase.h> class GDriveJob : public Purpose::Job { Q_OBJECT public: GDriveJob(QObject *parent) : Purpose::Job(parent) { } void start() override; }; #endif /* GDRIVEJOB_H */ 070701000000B6000081A400000000000000000000000165CEC6620000026D000000000000000000000000000000000000004900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/purpose_gdrive.cpp/* SPDX-FileCopyrightText: 2017 Lim Yuen Hoe <yuenhoe86@gmail.com> SPDX-License-Identifier: LGPL-2.1-or-later */ #include "gdrivejob.h" #include <purpose/pluginbase.h> #include <KPluginFactory> #include <QUrl> class GDrivePlugin : public Purpose::PluginBase { Q_OBJECT public: GDrivePlugin(QObject *parent, const QVariantList &args) : Purpose::PluginBase(parent) { Q_UNUSED(args); } Purpose::Job *createJob() const override { return new GDriveJob(nullptr); } }; K_PLUGIN_CLASS_WITH_JSON(GDrivePlugin, "purpose_gdrive.json") #include "purpose_gdrive.moc" 070701000000B7000081A400000000000000000000000165CEC66200001A59000000000000000000000000000000000000004A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/purpose_gdrive.json{ "KPlugin": { "Authors": [ { "Name": "Nicolas Fella", "Name[ar]": "نيكولاس فلا", "Name[az]": "Nicolas Fella", "Name[be]": "Nicolas Fella", "Name[ca@valencia]": "Nicolas Fella", "Name[ca]": "Nicolas Fella", "Name[cs]": "Nicolas Fella", "Name[da]": "Nicolas Fella", "Name[de]": "Nicolas Fella", "Name[el]": "Nicolas Fella", "Name[en_GB]": "Nicolas Fella", "Name[eo]": "Nicolas Fella", "Name[es]": "Nicolas Fella", "Name[eu]": "Nicolas Fella", "Name[fi]": "Nicolas Fella", "Name[fr]": "Nicolas Fella", "Name[gl]": "Nicolas Fella", "Name[hi]": "निकोलस फेल्ला", "Name[hu]": "Nicolas Fella", "Name[ia]": "Nicolas Fella", "Name[id]": "Nicolas Fella", "Name[ie]": "Nicolas Fella", "Name[it]": "Nicolas Fella", "Name[ka]": "Nicolas Fella", "Name[ko]": "Nicolas Fella", "Name[lt]": "Nicolas Fella", "Name[nl]": "Nicolas Fella", "Name[nn]": "Nicolas Fella", "Name[pl]": "Nicolas Fella", "Name[pt]": "Nicolas Fella", "Name[pt_BR]": "Nicolas Fella", "Name[ru]": "Nicolas Fella", "Name[sk]": "Nicolas Fella", "Name[sl]": "Nicolas Fella", "Name[sv]": "Nicolas Fella", "Name[ta]": "நிக்கோலஸ் ஃபெல்லா", "Name[tr]": "Nicolas Fella", "Name[uk]": "Nicolas Fella", "Name[x-test]": "xxNicolas Fellaxx", "Name[zh_CN]": "Nicolas Fella", "Name[zh_TW]": "Nicolas Fella" } ], "Category": "Utilities", "Description": "Upload files to Google Drive", "Description[ar]": "ارفع ملفات إلى غوغل درايف", "Description[az]": "Faylları Google Diskə yükləyin", "Description[be]": "Запампаваць файлы на Google Drive", "Description[ca@valencia]": "Puja els fitxers a Google Drive", "Description[ca]": "Puja els fitxers al Google Drive", "Description[cs]": "Odeslat soubory do Google Drive", "Description[da]": "Upload filer til Google Drev", "Description[de]": "Dateien zu „Google Drive“ hochladen", "Description[el]": "Αποστολή αρχείων στο Google Drive", "Description[en_GB]": "Upload files to Google Drive", "Description[eo]": "Alŝuti dosierojn al Google Drive", "Description[es]": "Subir archivos a Google Drive", "Description[eu]": "Zama-igo fitxategiak Google Drivera", "Description[fi]": "Lähetä tiedostoja Google Driveen", "Description[fr]": "Envoyer des fichiers vers « Google Drive »", "Description[gl]": "Envía ficheiros a Google Drive", "Description[hi]": "गूगल ड्राइव में फाइलें अपलोड करें", "Description[hu]": "Fájlok feltöltése Google Drive-ra", "Description[ia]": "Incarga files a Google Drive", "Description[id]": "Unggah file ke Google Drive", "Description[ie]": "Cargar files a Google Drive", "Description[it]": "Carica i file su Google Drive", "Description[ka]": "ფაილების ატვირთვა Google Drive-ზე", "Description[ko]": "Google 드라이브에 파일 업로드", "Description[lt]": "Išsiunčia failus į Google diską", "Description[nl]": "Bestanden naar Google Drive uploaden", "Description[nn]": "Last opp filer til Google Drive", "Description[pl]": "Wyślij pliki do Dysku Google", "Description[pt]": "Enviar os ficheiros para o Google Drive", "Description[pt_BR]": "Enviar arquivos para o Google Drive", "Description[ru]": "Загрузка файлов в Google Диск", "Description[sk]": "Nahrať súbory na Google Drive", "Description[sl]": "Pošlji datoteke na Google Drive", "Description[sv]": "Ladda upp filer till Google Drive", "Description[ta]": "கூகுள் டிரைவுக்கு கோப்புகளை ஏற்று", "Description[tr]": "Google Drive'a dosyalar yükle", "Description[uk]": "Вивантаження файлів на Google Диск", "Description[x-test]": "xxUpload files to Google Drivexx", "Description[zh_CN]": "将文件上传到 Google Drive", "Description[zh_TW]": "上傳檔案到 Google 雲端硬碟", "Icon": "folder-gdrive", "License": "GPL", "Name": "Google Drive", "Name[ar]": "جوجل درايف", "Name[az]": "Google Disk", "Name[be]": "Google Drive", "Name[ca@valencia]": "Google Drive", "Name[ca]": "Google Drive", "Name[cs]": "Google Drive", "Name[da]": "Google Drev", "Name[de]": "Google Drive", "Name[el]": "Google Drive", "Name[en_GB]": "Google Drive", "Name[eo]": "Google Drive", "Name[es]": "Google Drive", "Name[eu]": "Google Drive", "Name[fi]": "Google Drive", "Name[fr]": "Google Drive", "Name[gl]": "Google Drive", "Name[hi]": "गूगल ड्राइव", "Name[hu]": "Google Drive", "Name[ia]": "Google Drive", "Name[id]": "Google Drive", "Name[ie]": "Google Drive", "Name[it]": "Google Drive", "Name[ka]": "Google Drive", "Name[ko]": "Google 드라이브", "Name[lt]": "Google diskas", "Name[nl]": "Google Drive", "Name[nn]": "Google Drive", "Name[pl]": "Dysk Google", "Name[pt]": "Google Drive", "Name[pt_BR]": "Google Drive", "Name[ru]": "Google Диск", "Name[sk]": "Google Drive", "Name[sl]": "Google Drive", "Name[sv]": "Google Drive", "Name[ta]": "கூகுள் டிரைவ்", "Name[tr]": "Google Drive", "Name[uk]": "Google Диск", "Name[x-test]": "xxGoogle Drivexx", "Name[zh_CN]": "Google Drive", "Name[zh_TW]": "Google 雲端硬碟", "X-Purpose-ActionDisplay": "Google Drive..." }, "X-Purpose-Configuration": [ "folder", "accountName" ], "X-Purpose-PluginTypes": [ "Export" ] } 070701000000B8000081A400000000000000000000000165CEC662000008B5000000000000000000000000000000000000005000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/purpose/purpose_gdrive_config.qml/* SPDX-FileCopyrightText: 2020 Nicolas Fella <nicolas.fella@gmx.de> SPDX-License-Identifier: LGPL-2.1-or-later */ import QtQuick 2.2 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.1 import org.kde.kirigami 2.12 as Kirigami import org.kde.kquickcontrolsaddons 2.0 as KQCA import SSO.OnlineAccounts 0.1 as OA ColumnLayout { id: root property var folder: folderField.text property var accountName property var urls property var mimeType Kirigami.Heading { text: i18nd("kio5_gdrive", "Select an account:") visible: list.count !== 0 } ScrollView { id: scroll Layout.fillWidth: true Layout.fillHeight: true Component.onCompleted: scroll.background.visible = true ListView { id: list clip: true model: OA.AccountServiceModel { id: serviceModel serviceType: "google-drive" } delegate: Kirigami.BasicListItem { text: model.displayName } onCurrentIndexChanged: { if (currentIndex === -1) { root.accountName = undefined return } root.accountName = serviceModel.get(list.currentIndex, "displayName") } Kirigami.PlaceholderMessage { anchors.centerIn: parent width: parent.width - (Kirigami.Units.largeSpacing * 4) visible: list.count === 0 text: i18nd("kio5_gdrive", "No account configured") } } } Button { Layout.alignment: Qt.AlignRight text: i18nd("kio5_gdrive", "Configure Accounts") icon.name: "applications-internet" onClicked: KQCA.KCMShell.openSystemSettings("kcm_kaccounts") } Label { Layout.fillWidth: true text: i18nd("kio5_gdrive", "Upload to folder:") } TextField { id: folderField Layout.fillWidth: true text: "/" onTextChanged: { // Setting folder to undefined disables the Run button root.folder = text !== "" ? text : undefined } } } 070701000000B9000041ED00000000000000000000000365CEC66200000000000000000000000000000000000000000000003200000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src070701000000BA000081A400000000000000000000000165CEC662000005E0000000000000000000000000000000000000004100000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/CMakeLists.txtinclude_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_BINARY_DIR}) add_subdirectory(integration) set(kio_gdrive_SRCS kio_gdrive.cpp pathcache.cpp abstractaccountmanager.cpp gdrivehelper.cpp gdriveurl.cpp) if (KAccounts${KACCOUNTS_SUFFIX}_FOUND) set(BACKEND_SRC kaccountsmanager.cpp) set(BACKEND_HEADER kaccountsmanager.h) set(BACKEND_CLASSNAME KAccountsManager) set(BACKEND_LIBS KAccounts${KACCOUNTS_SUFFIX}) else() set(BACKEND_SRC keychainaccountmanager.cpp) set(BACKEND_HEADER keychainaccountmanager.h) set(BACKEND_CLASSNAME KeychainAccountManager) set(BACKEND_LIBS ${QTKEYCHAIN_LIBRARIES}) endif() set(kio_gdrive_SRCS ${kio_gdrive_SRCS} ${BACKEND_SRC}) configure_file(gdrivebackend.h.in ${CMAKE_CURRENT_BINARY_DIR}/gdrivebackend.h) ecm_qt_declare_logging_category(kio_gdrive_SRCS HEADER gdrivedebug.h IDENTIFIER GDRIVE CATEGORY_NAME kf.kio.workers.gdrive) kcoreaddons_add_plugin(kio_gdrive SOURCES ${kio_gdrive_SRCS} INSTALL_NAMESPACE kf${QT_MAJOR_VERSION}/kio) target_link_libraries(kio_gdrive Qt::Core Qt::Network KF${QT_MAJOR_VERSION}::KIOCore KF${QT_MAJOR_VERSION}::KIOWidgets KF${QT_MAJOR_VERSION}::I18n ${BACKEND_LIBS}) if(QT_MAJOR_VERSION STREQUAL "5") target_link_libraries(kio_gdrive KPim::GAPICore KPim::GAPIDrive) else() target_link_libraries(kio_gdrive KPim6::GAPICore KPim6::GAPIDrive) endif() set_target_properties(kio_gdrive PROPERTIES OUTPUT_NAME "gdrive") 070701000000BB000081A400000000000000000000000165CEC662000000E2000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/abstractaccountmanager.cpp/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "abstractaccountmanager.h" AbstractAccountManager::~AbstractAccountManager() { } 070701000000BC000081A400000000000000000000000165CEC6620000043E000000000000000000000000000000000000004B00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/abstractaccountmanager.h/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #pragma once #include <QSet> #include <KGAPI/Account> #include <KIO/UDSEntry> class AbstractAccountManager { public: virtual ~AbstractAccountManager(); /** * @return Pointer to the account for @p accountName. * The account is valid only if @p accountName is in accounts(). * @see accounts() */ virtual KGAPI2::AccountPtr account(const QString &accountName) = 0; /** * Creates a new account. * @return The new account if a new account has been created, an invalid account otherwise. */ virtual KGAPI2::AccountPtr createAccount() = 0; virtual KGAPI2::AccountPtr refreshAccount(const KGAPI2::AccountPtr &account) = 0; /** * Remove @p accountName from accounts(). * @see accounts() */ virtual void removeAccount(const QString &accountName) = 0; /** * @return The gdrive accounts managed by this object. */ virtual QSet<QString> accounts() = 0; }; 070701000000BD000081A400000000000000000000000165CEC662000001B9000000000000000000000000000000000000004400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdrive_udsentry.h/* * SPDX-FileCopyrightText: 2020 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #ifndef GDRIVEUDSENTRY_H #define GDRIVEUDSENTRY_H #include <KIO/UDSEntry> enum GDriveUDSEntryExtras { Url = KIO::UDSEntry::UDS_EXTRA, Id, Md5, Owners, Version, LastModifyingUser, Description, SharedWithMeDate, }; #endif // GDRIVEUDSENTRY_H 070701000000BE000081A400000000000000000000000165CEC66200000056000000000000000000000000000000000000004500000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdrivebackend.h.in#pragma once #include "@BACKEND_HEADER@" using AccountManager = @BACKEND_CLASSNAME@; 070701000000BF000081A400000000000000000000000165CEC662000016C3000000000000000000000000000000000000004300000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdrivehelper.cpp/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "gdrivehelper.h" #include <KGAPI/Drive/File> #include <KIO/Job> #include <KLocalizedString> using namespace KGAPI2::Drive; #define VND_GOOGLE_APPS_DOCUMENT QStringLiteral("application/vnd.google-apps.document") #define VND_GOOGLE_APPS_DRAWING QStringLiteral("application/vnd.google-apps.drawing") #define VND_GOOGLE_APPS_FILE QStringLiteral("application/vnd.google-apps.file") #define VND_GOOGLE_APPS_FORM QStringLiteral("application/vnd.google-apps.form") #define VND_GOOGLE_APPS_PRESENTATION QStringLiteral("application/vnd.google-apps.presentation") #define VND_GOOGLE_APPS_SPREADSHEET QStringLiteral("application/vnd.google-apps.spreadsheet") #define VND_GOOGLE_APPS_FOLDER QStringLiteral("application/vnd.google-apps.folder") #define VND_OASIS_OPENDOCUMENT_TEXT QStringLiteral("application/vnd.oasis.opendocument.text") #define VND_OASIS_OPENDOCUMENT_PRESENTATION QStringLiteral("application/vnd.oasis.opendocument.presentation") // Google's Drive API v2 mistakenly documents an x-vnd style MIME type // for .ods files, so we #define both the correct but undocumented, // as well as the incorrect but publicly documented MIME type. #define VND_OASIS_OPENDOCUMENT_SPREADSHEET QStringLiteral("application/vnd.oasis.opendocument.spreadsheet") #define X_VND_OASIS_OPENDOCUMENT_SPREADSHEET QStringLiteral("application/x-vnd.oasis.opendocument.spreadsheet") #define VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT QStringLiteral("application/vnd.openxmlformats-officedocument.wordprocessingml.document") #define VND_OPENXMLFORMATS_OFFICEDOCUMENT_PRESENTATIONML_PRESENTATION \ QStringLiteral("application/vnd.openxmlformats-officedocument.presentationml.presentation") #define VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET QStringLiteral("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") #define IMAGE_PNG QStringLiteral("image/png") #define IMAGE_JPEG QStringLiteral("image/jpeg") #define APPLICATION_PDF QStringLiteral("application/pdf") namespace GDriveHelper { static const QMap<QString /* mimetype */, QString /* .ext */> ExtensionsMap{ {VND_OASIS_OPENDOCUMENT_TEXT, QStringLiteral(".odt")}, {VND_OASIS_OPENDOCUMENT_SPREADSHEET, QStringLiteral(".ods")}, {VND_OASIS_OPENDOCUMENT_PRESENTATION, QStringLiteral(".odp")}, {VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT, QStringLiteral(".docx")}, {VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET, QStringLiteral(".xlsx")}, {VND_OPENXMLFORMATS_OFFICEDOCUMENT_PRESENTATIONML_PRESENTATION, QStringLiteral(".pptx")}, {IMAGE_PNG, QStringLiteral(".png")}, {IMAGE_JPEG, QStringLiteral(".jpg")}, {APPLICATION_PDF, QStringLiteral(".pdf")}}; static const QMap<QString /* mimetype */, QStringList /* target mimetypes */> ConversionMap{ {VND_GOOGLE_APPS_DOCUMENT, {VND_OASIS_OPENDOCUMENT_TEXT, VND_OPENXMLFORMATS_OFFICEDOCUMENT_WORDPROCESSINGML_DOCUMENT, APPLICATION_PDF}}, {VND_GOOGLE_APPS_DRAWING, {IMAGE_PNG, IMAGE_JPEG, APPLICATION_PDF}}, {VND_GOOGLE_APPS_PRESENTATION, {VND_OASIS_OPENDOCUMENT_PRESENTATION, VND_OPENXMLFORMATS_OFFICEDOCUMENT_PRESENTATIONML_PRESENTATION, APPLICATION_PDF}}, {VND_GOOGLE_APPS_SPREADSHEET, {VND_OASIS_OPENDOCUMENT_SPREADSHEET, VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET, APPLICATION_PDF}}}; } QString GDriveHelper::folderMimeType() { return VND_GOOGLE_APPS_FOLDER; } bool GDriveHelper::isGDocsDocument(const KGAPI2::Drive::FilePtr &file) { return GDriveHelper::ConversionMap.contains(file->mimeType()); } QUrl GDriveHelper::convertFromGDocs(KGAPI2::Drive::FilePtr &file) { const QString originalMimeType = file->mimeType(); auto convIt = GDriveHelper::ConversionMap.constFind(originalMimeType); if (convIt == GDriveHelper::ConversionMap.cend()) { return file->downloadUrl(); } const auto exportLinks = file->exportLinks(); const QStringList targetMimeTypeList{convIt.value()}; for (const QString &targetMimeType : targetMimeTypeList) { const auto linkIt = exportLinks.constFind(targetMimeType); if (linkIt != exportLinks.cend()) { // Extra check to safeguard against a mistake in Google's Drive API v2 // documentation which lists an invalid MIME type for .ods files. if (targetMimeType == X_VND_OASIS_OPENDOCUMENT_SPREADSHEET) { file->setMimeType(VND_OASIS_OPENDOCUMENT_SPREADSHEET); } else { file->setMimeType(targetMimeType); } file->setTitle(file->title() + GDriveHelper::ExtensionsMap[targetMimeType]); return *linkIt; } } // If we got here that means that the file cannot be converted to any meaningful // type, so we do nothing return file->downloadUrl(); } QUrl GDriveHelper::downloadUrl(const KGAPI2::Drive::FilePtr &file) { if (file->downloadUrl().isValid()) { return file->downloadUrl(); } return file->exportLinks().value(file->mimeType()); } // Currently unused, see https://phabricator.kde.org/T3443 /* KIO::UDSEntry GDriveHelper::trash() { KIO::UDSEntry trashEntry; trashEntry.insert(KIO::UDSEntry::UDS_NAME, GDriveUrl::TrashDir); trashEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, i18n("Trash")); trashEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); trashEntry.insert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("user-trash")); return trashEntry; } */ QString GDriveHelper::elideToken(const QString &token) { if (token.isEmpty()) { return {}; } return token.mid(0, 30).append(QStringLiteral("...")); } 070701000000C0000081A400000000000000000000000165CEC66200000218000000000000000000000000000000000000004100000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdrivehelper.h/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #ifndef GDRIVEHELPER_H #define GDRIVEHELPER_H #include <KGAPI/Types> #include <KIO/UDSEntry> namespace GDriveHelper { QString folderMimeType(); bool isGDocsDocument(const KGAPI2::Drive::FilePtr &file); QUrl convertFromGDocs(KGAPI2::Drive::FilePtr &file); QUrl downloadUrl(const KGAPI2::Drive::FilePtr &file); KIO::UDSEntry trash(); QString elideToken(const QString &token); } #endif // GDRIVEHELPER_H 070701000000C1000081A400000000000000000000000165CEC66200000B9F000000000000000000000000000000000000004000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdriveurl.cpp/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "gdriveurl.h" const QString GDriveUrl::Scheme = QLatin1String("gdrive"); const QString GDriveUrl::SharedWithMeDir = QLatin1String("Shared With Me"); const QString GDriveUrl::SharedDrivesDir = QLatin1String("Shared Drives"); const QString GDriveUrl::TrashDir = QLatin1String("trash"); const QString GDriveUrl::NewAccountPath = QLatin1String("new-account"); GDriveUrl::GDriveUrl(const QUrl &url) : m_url(url) { const auto path = url.adjusted(QUrl::StripTrailingSlash).path(); #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) m_components = path.split(QLatin1Char('/'), QString::SkipEmptyParts); #else m_components = path.split(QLatin1Char('/'), Qt::SkipEmptyParts); #endif } QString GDriveUrl::account() const { if (isRoot()) { return QString(); } return m_components.at(0); } QString GDriveUrl::filename() const { if (m_components.isEmpty()) { return QString(); } return m_components.last(); } bool GDriveUrl::isRoot() const { return m_components.isEmpty(); } bool GDriveUrl::isAccountRoot() const { return m_components.length() == 1 && !isNewAccountPath(); } bool GDriveUrl::isNewAccountPath() const { return m_components.length() == 1 && m_components.at(0) == NewAccountPath; } bool GDriveUrl::isTopLevel() const { return m_components.length() == 2; } bool GDriveUrl::isSharedWithMeRoot() const { return m_components.length() == 2 && m_components.at(1) == SharedWithMeDir; } bool GDriveUrl::isSharedWithMeTopLevel() const { return m_components.length() == 3 && m_components.at(1) == SharedWithMeDir; } bool GDriveUrl::isSharedWithMe() const { return m_components.length() > 2 && m_components.at(1) == SharedWithMeDir; } bool GDriveUrl::isSharedDrivesRoot() const { return m_components.length() == 2 && m_components.at(1) == SharedDrivesDir; } bool GDriveUrl::isSharedDrive() const { return m_components.length() == 3 && m_components.at(1) == SharedDrivesDir; } bool GDriveUrl::isTrashDir() const { return m_components.length() == 2 && m_components.at(1) == TrashDir; } bool GDriveUrl::isTrashed() const { return m_components.length() > 2 && m_components.at(1) == TrashDir; } QUrl GDriveUrl::url() const { return m_url; } QString GDriveUrl::parentPath() const { if (isRoot()) { return QString(); } auto path = m_components; path.removeLast(); return QLatin1Char('/') + path.join(QLatin1Char('/')); } QStringList GDriveUrl::pathComponents() const { return m_components; } QString GDriveUrl::buildSharedDrivePath(const QString &accountId, const QString &drive) { return QStringLiteral("/%1/%2/%3").arg(accountId, SharedDrivesDir, drive); } 070701000000C2000081A400000000000000000000000165CEC662000004F9000000000000000000000000000000000000003E00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/gdriveurl.h/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * SPDX-FileCopyrightText: 2019 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #ifndef GDRIVEURL_U #define GDRIVEURL_U #include <QUrl> class GDriveUrl { public: explicit GDriveUrl(const QUrl &url); QString account() const; QString filename() const; bool isRoot() const; bool isAccountRoot() const; bool isNewAccountPath() const; bool isTopLevel() const; bool isSharedWithMeRoot() const; bool isSharedWithMeTopLevel() const; bool isSharedWithMe() const; bool isSharedDrivesRoot() const; bool isSharedDrive() const; bool isTrashDir() const; bool isTrashed() const; QUrl url() const; QString parentPath() const; QStringList pathComponents() const; static QString buildSharedDrivePath(const QString &accountId, const QString &drive); static const QString Scheme; static const QString SharedWithMeDir; static const QString SharedDrivesDir; static const QString TrashDir; static const QString NewAccountPath; private: QUrl m_url; QStringList m_components; }; #endif // GDRIVEURL_U 070701000000C3000041ED00000000000000000000000465CEC66200000000000000000000000000000000000000000000003E00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration070701000000C4000081A400000000000000000000000165CEC66200000047000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/CMakeLists.txtadd_subdirectory(contextmenuaction) add_subdirectory(propertiesplugin) 070701000000C5000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000005000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/contextmenuaction070701000000C6000081A400000000000000000000000165CEC66200000106000000000000000000000000000000000000005F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/contextmenuaction/CMakeLists.txtkcoreaddons_add_plugin(gdrivecontextmenuaction SOURCES contextmenuaction.cpp INSTALL_NAMESPACE "kf${QT_MAJOR_VERSION}/kfileitemaction") target_link_libraries(gdrivecontextmenuaction KF${QT_MAJOR_VERSION}::I18n KF${QT_MAJOR_VERSION}::KIOWidgets) 070701000000C7000081A400000000000000000000000165CEC662000009FF000000000000000000000000000000000000006600000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/contextmenuaction/contextmenuaction.cpp/* * SPDX-FileCopyrightText: 2020 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "contextmenuaction.h" #include "../../gdrive_udsentry.h" #include <QAction> #include <QClipboard> #include <QDesktopServices> #include <QGuiApplication> #include <QMenu> #include <KFileItemListProperties> #include <KLocalizedString> #include <KPluginFactory> K_PLUGIN_CLASS_WITH_JSON(ContextMenuAction, "contextmenuaction.json") ContextMenuAction::ContextMenuAction(QObject *parent, const QVariantList &) : KAbstractFileItemActionPlugin(parent) { } QList<QAction *> ContextMenuAction::actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget) { // Ignore if more than one file is selected if (fileItemInfos.items().size() != 1) { return {}; } const KFileItem item = fileItemInfos.items().at(0); // Ignore if not a Google Drive url if (item.url().scheme() != QLatin1String("gdrive")) { return {}; } const KIO::UDSEntry entry = item.entry(); const QString gdriveLink = entry.stringValue(GDriveUDSEntryExtras::Url); // Ignore if missing a shareable link if (gdriveLink.isEmpty()) { return {}; } QMenu *gdriveMenu = new QMenu(parentWidget); gdriveMenu->addAction(createOpenUrlAction(parentWidget, gdriveLink)); gdriveMenu->addAction(createCopyUrlAction(parentWidget, gdriveLink)); QAction *gdriveMenuAction = new QAction(i18n("Google Drive"), parentWidget); gdriveMenuAction->setMenu(gdriveMenu); gdriveMenuAction->setIcon(QIcon::fromTheme(QStringLiteral("folder-gdrive"))); return {gdriveMenuAction}; } QAction *ContextMenuAction::createCopyUrlAction(QWidget *parent, const QString &gdriveLink) { const QString name = i18n("Copy URL to clipboard"); const QIcon icon = QIcon::fromTheme(QStringLiteral("edit-copy")); QAction *action = new QAction(icon, name, parent); connect(action, &QAction::triggered, this, [gdriveLink]() { QGuiApplication::clipboard()->setText(gdriveLink); }); return action; } QAction *ContextMenuAction::createOpenUrlAction(QWidget *parent, const QString &gdriveLink) { const QString name = i18n("Open in browser"); const QIcon icon = QIcon::fromTheme(QStringLiteral("internet-services")); QAction *action = new QAction(icon, name, parent); connect(action, &QAction::triggered, this, [gdriveLink]() { QDesktopServices::openUrl(QUrl(gdriveLink)); }); return action; } #include "contextmenuaction.moc" 070701000000C8000081A400000000000000000000000165CEC662000002AC000000000000000000000000000000000000006400000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/contextmenuaction/contextmenuaction.h/* * SPDX-FileCopyrightText: 2020 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #ifndef CONTEXTMENUACTION_H #define CONTEXTMENUACTION_H #include <KAbstractFileItemActionPlugin> #include <KFileItem> class ContextMenuAction : public KAbstractFileItemActionPlugin { Q_OBJECT public: ContextMenuAction(QObject *parent, const QVariantList &args); QList<QAction *> actions(const KFileItemListProperties &fileItemInfos, QWidget *parentWidget) override; private: QAction *createCopyUrlAction(QWidget *parent, const QString &gdriveLink); QAction *createOpenUrlAction(QWidget *parent, const QString &gdriveLink); }; #endif 070701000000C9000081A400000000000000000000000165CEC66200000B6D000000000000000000000000000000000000006700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/contextmenuaction/contextmenuaction.json{ "KPlugin": { "Icon": "folder-gdrive", "MimeTypes": [ "application/octet-stream", "inode/directory" ], "Name": "'Google Drive' actions menu", "Name[ar]": "قائمة إجراءات 'غوغل درايف'", "Name[az]": "\"Google Disk\" fəaliyyət menyusu", "Name[be]": "Дзеянні меню Google Drive", "Name[ca@valencia]": "Menú d'accions de «Google Drive»", "Name[ca]": "Menú d'accions del «Google Drive»", "Name[cs]": "Nabídka činností 'Google Drive'", "Name[da]": "Handlingsmenu til \"Google Drev\"", "Name[de]": "Aktionsmenü für Google Drive", "Name[el]": "Μενού ενεργειών 'Google Drive'", "Name[en_GB]": "'Google Drive' actions menu", "Name[eo]": "'Google Drive' aktivecmenuo", "Name[es]": "Menú de acciones de «Google Drive»", "Name[et]": "Google Drive'i toimingute menüü", "Name[eu]": "«Google Drive» ekintzen menua", "Name[fi]": "Google Drive -toimintovalikko", "Name[fr]": "Menu d'actions « Google Drive »", "Name[gl]": "Menú de accións de Google Drive", "Name[hi]": "'गूगल ड्राइव' क्रियाओं का मेनू", "Name[hu]": "„Google Drive” műveletmenü", "Name[ia]": "Menu de actiones de 'Google Drive'", "Name[id]": "Menu aksi Google Drive", "Name[ie]": "Menú de actiones «Google Drive»", "Name[it]": "Menu azioni di «Google Drive»", "Name[ka]": "'Google Drive'-ის ქმედების მენიუ", "Name[ko]": "'Google 드라이브' 동작 메뉴", "Name[lt]": "„Google disko“ veiksmų meniu", "Name[nl]": "Actiemenu van Google Drive", "Name[nn]": "«Google Drive»-handlingsmeny", "Name[pl]": "Menu działań 'Dysku Google' actions menu", "Name[pt]": "Menu de acções do 'Google Drive'", "Name[pt_BR]": "Menu de ação do Google Drive", "Name[ro]": "Meniu de acțiuni Google Drive", "Name[ru]": "Меню действий «Google Диск»", "Name[sk]": "Ponuka akcií 'Google Drive'", "Name[sl]": "Meni dejavnosti 'Google Drive'", "Name[sv]": "'Google Drive' åtgärdsmeny", "Name[ta]": "கூகுள் டிரைவுக்கான செயல்களைக்கொண்ட பட்டி", "Name[tr]": "'Google Drive' eylemler menüsü", "Name[uk]": "Меню дій «Диска Google»", "Name[x-test]": "xx'Google Drive' actions menuxx", "Name[zh_CN]": "“Google Drive”操作菜单", "Name[zh_TW]": "「Google 雲端硬碟」動作選單", "ServiceTypes": [ "KFileItemAction/Plugin" ] }, "MimeType": "application/octet-stream;inode/directory;" } 070701000000CA000041ED00000000000000000000000265CEC66200000000000000000000000000000000000000000000004F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin070701000000CB000081A400000000000000000000000165CEC662000001B1000000000000000000000000000000000000005E00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin/CMakeLists.txtset(gdrivepropertiesplugin_SRCS gdrivepropertiesplugin.cpp ../../gdrivedebug.cpp ) ki18n_wrap_ui(gdrivepropertiesplugin_SRCS gdrivepropertiesplugin.ui) kcoreaddons_add_plugin(gdrivepropertiesplugin SOURCES ${gdrivepropertiesplugin_SRCS} INSTALL_NAMESPACE "kf${QT_MAJOR_VERSION}/propertiesdialog") target_link_libraries(gdrivepropertiesplugin KF${QT_MAJOR_VERSION}::I18n KF${QT_MAJOR_VERSION}::KIOWidgets ) 070701000000CC000081A400000000000000000000000165CEC66200000FA6000000000000000000000000000000000000006A00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin/gdrivepropertiesplugin.cpp/* * SPDX-FileCopyrightText: 2020 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #include "gdrivepropertiesplugin.h" #include "../../gdrive_udsentry.h" #include "../../gdrivedebug.h" #include <KIO/StatJob> #include <KLocalizedString> #include <KPluginFactory> #include <QClipboard> #include <QDesktopServices> #include <QtGlobal> K_PLUGIN_CLASS_WITH_JSON(GDrivePropertiesPlugin, "gdrivepropertiesplugin.json") GDrivePropertiesPlugin::GDrivePropertiesPlugin(QObject *parent, const QList<QVariant> &args) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) : KPropertiesDialogPlugin(qobject_cast<KPropertiesDialog *>(parent)) #else : KPropertiesDialogPlugin(parent) #endif { Q_UNUSED(args) qCDebug(GDRIVE) << "Starting Google Drive properties tab"; // Ignore if more than one file is selected if (properties->items().size() != 1) { qCDebug(GDRIVE) << "Can't show Google Drive properties tab for more than one item"; return; } m_item = properties->items().at(0); // Ignore if not a Google Drive url if (m_item.url().scheme() != QLatin1String("gdrive")) { qCDebug(GDRIVE) << "Can't show Google Drive properties for non Google Drive entries"; return; } m_ui.setupUi(&m_widget); // Re stat() the item because the entry is probably lacking required information. const KIO::StatJob *job = KIO::stat(m_item.url(), KIO::HideProgressInfo); connect(job, &KJob::finished, this, &GDrivePropertiesPlugin::statJobFinished); } void GDrivePropertiesPlugin::showEntryDetails(const KIO::UDSEntry &entry) { const QString id = entry.stringValue(GDriveUDSEntryExtras::Id); m_ui.idValue->setText(id); const QString created = m_item.timeString(KFileItem::CreationTime); m_ui.createdValue->setText(created); const QString modified = m_item.timeString(KFileItem::ModificationTime); m_ui.modifiedValue->setText(modified); const QString lastViewedByMe = m_item.timeString(KFileItem::AccessTime); m_ui.lastViewedByMeValue->setText(lastViewedByMe); if (entry.contains(GDriveUDSEntryExtras::SharedWithMeDate)) { m_ui.sharedWithMeValue->setText(entry.stringValue(GDriveUDSEntryExtras::SharedWithMeDate)); m_ui.sharedWithMeLabel->show(); m_ui.sharedWithMeValue->show(); } else { m_ui.sharedWithMeLabel->hide(); m_ui.sharedWithMeValue->hide(); } const QString version = entry.stringValue(GDriveUDSEntryExtras::Version); m_ui.versionValue->setText(version); const QString md5 = entry.stringValue(GDriveUDSEntryExtras::Md5); m_ui.md5Value->setText(md5); const QString lastModifyingUserName = entry.stringValue(GDriveUDSEntryExtras::LastModifyingUser); m_ui.lastModifiedByValue->setText(lastModifyingUserName); const QString owners = entry.stringValue(GDriveUDSEntryExtras::Owners); m_ui.ownersValue->setText(owners); const QString description = entry.stringValue(KIO::UDSEntry::UDS_COMMENT); m_ui.descriptionValue->setText(description); const QString gdriveLink = entry.stringValue(GDriveUDSEntryExtras::Url); connect(m_ui.urlOpenButton, &QPushButton::clicked, this, [gdriveLink]() { QDesktopServices::openUrl(QUrl(gdriveLink)); }); connect(m_ui.urlCopyButton, &QPushButton::clicked, this, [gdriveLink]() { QGuiApplication::clipboard()->setText(gdriveLink); }); } void GDrivePropertiesPlugin::statJobFinished(KJob *job) { KIO::StatJob *statJob = qobject_cast<KIO::StatJob *>(job); if (!statJob || statJob->error()) { qCDebug(GDRIVE) << "Failed stat()ing" << statJob->url() << statJob->errorString(); qCDebug(GDRIVE) << "Not showing Google Drive properties tab"; return; } const KIO::UDSEntry entry = statJob->statResult(); showEntryDetails(entry); properties->addPage(&m_widget, i18n("G&oogle Drive")); } #include "gdrivepropertiesplugin.moc" 070701000000CD000081A400000000000000000000000165CEC6620000031D000000000000000000000000000000000000006800000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin/gdrivepropertiesplugin.h/* * SPDX-FileCopyrightText: 2020 David Barchiesi <david@barchie.si> * * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #ifndef GDRIVEPROPERTIESPLUGIN_H #define GDRIVEPROPERTIESPLUGIN_H #include <KPropertiesDialog> #include <KPropertiesDialogPlugin> #include "ui_gdrivepropertiesplugin.h" class GDrivePropertiesPlugin : public KPropertiesDialogPlugin { Q_OBJECT public: explicit GDrivePropertiesPlugin(QObject *parent, const QList<QVariant> &args); ~GDrivePropertiesPlugin() override = default; private: QWidget m_widget; Ui::GDrivePropertiesWidget m_ui; KFileItem m_item; void showEntryDetails(const KIO::UDSEntry &entry); private Q_SLOTS: void statJobFinished(KJob *job); }; #endif // GDRIVEPROPERTIESPLUGIN_H 070701000000CE000081A400000000000000000000000165CEC66200001FE7000000000000000000000000000000000000006B00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin/gdrivepropertiesplugin.json{ "KPlugin": { "Description": "Properties page showing additional information regarding a Google Drive item", "Description[ar]": "صفحة الخصائص التي تعرض معلومات إضافية بخصوص عنصر غوغل درايف", "Description[az]": "Xüsusiyyətlər səhifəsi Google Disk elemntləri ilə bağlı əlavə məlumatları göstərir", "Description[be]": "Старонка ўласцівасцяў паказвае дадатковую інфармацыю пра элемент Google Drive", "Description[ca@valencia]": "Pàgina de propietats que mostra informació addicional relativa a un element de Google Drive", "Description[ca]": "Pàgina de propietats que mostra informació addicional relativa a un element del Google Drive", "Description[da]": "Egenskabsside som viser yderligere information om et Google Drev-element", "Description[de]": "Eigenschaftenseite mit zusätzliche Informationen zu einem Eintrag in Google Drive", "Description[el]": "Η σελίδα ιδιοτήτων εμφανίζει πρόσθετες πληροφορίες σχετικά με ένα αντικείμενο του Google Drive", "Description[en_GB]": "Properties page showing additional information regarding a Google Drive item", "Description[eo]": "Proprecopaĝo montrante pluajn informojn pri Google Drive-ero", "Description[es]": "Página de propiedades que muestra información adicional sobre el elemento de Google Drive", "Description[et]": "Google Drive'i elemendi kohta lisateavet näitav omaduste leht", "Description[eu]": "Google Driven elementu bati dagokion informazio osagarria erakusten duen propietate-orria", "Description[fi]": "Google Drive -tietueesta lisätietoa näyttävä ominaisuussivu", "Description[fr]": "Affichage dans la page de propriétés d'informations supplémentaires concernant un élément « Google Drive »", "Description[gl]": "Páxina de propiedades que mostra información adicional sobre un elemento de Google Drive", "Description[hi]": "गूगल डिस्क वस्तु के संबंध में अतिरिक्त जानकारी दिखाने वाला गुण पृष्ठ", "Description[hu]": "Egy Google Drive elemmel kapcsolatos további információkat megjelenítő oldal", "Description[ia]": "Pagina de proprietates monstrante information additional a proposito de un elemento de Google Drive", "Description[id]": "Halaman properti menampilkan informasi tambahan tentang item Google Drive", "Description[it]": "Pagina delle proprietà che mostra informazioni aggiuntive relative a un elemento di Google Drive", "Description[ka]": "თვისებების გვერდი, რომელიც აჩვენებს დამატებით ინფორმაციას Google Drive ჩანაწერის შესახებ", "Description[ko]": "Google 드라이브 항목의 추가 정보를 표시하는 속성 페이지", "Description[lt]": "Savybių puslapis, rodantis papildomą informaciją, susijusią su Google disko elementu", "Description[nl]": "Eigenschappenpagina die extra informatie over een Google Drive-item toont", "Description[nn]": "Eigenskapssida viser tilleggsinformasjon om eit Google Drive-element", "Description[pl]": "Strona właściwości, pokazująca dodatkowe szczegóły odnośnie elementu Dysku Google", "Description[pt]": "Página de propriedades que mostra informações adicionais respeitantes a um item do Google Drive", "Description[pt_BR]": "Página de propriedades mostrando informações adicionais relativas ao item do Google Drive", "Description[ro]": "Pagină de proprietăți arătând informații suplimentare referitoare la un element din Google Drive", "Description[ru]": "Вкладка для просмотра расширенных сведений о Google Диск", "Description[sk]": "Stránka Vlastnosti zobrazuje ďalšie informácie týkajúce sa položky na Disku Google", "Description[sl]": "Stran z lastnostmi, ki prikazuje dodatne informacije o elementu Google Drive", "Description[sv]": "Egenskapssida som visar ytterligare information om ett objekt på Google Drive", "Description[ta]": "கூகுள் டிரைவிலுள்ள ஓர் உருப்படியின் பண்புகளை காட்டும் பக்கம்", "Description[tr]": "Özellikler sayfası, bir Google Drive ögesine ilişkin ek bilgi gösterirken", "Description[uk]": "На сторінці властивостей показано додаткові відомості щодо запису Диска Google", "Description[x-test]": "xxProperties page showing additional information regarding a Google Drive itemxx", "Description[zh_CN]": "显示 Google Drive 项目额外信息的属性页面", "Description[zh_TW]": "顯示 Google 雲端硬碟項目額外資訊的屬性頁面", "Icon": "folder-gdrive", "MimeTypes": [ "inode/directory", "application/octet-stream" ], "Name": "Google Drive Properties Page", "Name[ar]": "صفحة خصائص غوغل درايف", "Name[az]": "Googıe Disk xüsusiyyətləri səhifəsi", "Name[be]": "Старонка ўласцівасцяў Google Drive", "Name[ca@valencia]": "Pàgina de propietats de Google Drive", "Name[ca]": "Pàgina de propietats del Google Drive", "Name[cs]": "Stránka vlastností 'Google Drive'", "Name[da]": "Egenskabsside for Google Drev", "Name[de]": "Eigenschaftenseite für Google Drive", "Name[el]": "Σελίδα ιδιοτήτων Google Drive", "Name[en_GB]": "Google Drive Properties Page", "Name[eo]": "Google Drive-Proprecopaĝo", "Name[es]": "Página de propiedades de Google Drive", "Name[et]": "Google Drive'i omaduste leht", "Name[eu]": "Google Driven propietateen orria", "Name[fi]": "Google Drive -ominaisuussivu", "Name[fr]": "Page de propriétés de « Google Drive »", "Name[gl]": "Páxina de propiedades de Google Drive", "Name[hi]": "गूगल ड्राइव गुण पृष्ठ", "Name[hu]": "Google Drive tulajdonságok oldal", "Name[ia]": "Pagina de proprietates de Google Drive", "Name[id]": "Halaman Properti Google Drive", "Name[ie]": "Págine de proprietás de Google Drive", "Name[it]": "Pagina delle proprietà di Google Drive", "Name[ka]": "Google Drive-ის თვისებების გვერდი", "Name[ko]": "Google 드라이브 속성 페이지", "Name[lt]": "Google disko savybių puslapis", "Name[nl]": "Pagina van eigenschappen van Google Drive", "Name[nn]": "Google Drive-eigenskapsside", "Name[pl]": "Strona właściwości Dysku Google", "Name[pt]": "Página de Propriedades do Google Drive", "Name[pt_BR]": "Página de propriedades do Google Drive", "Name[ro]": "Pagină de proprietăți Google Drive", "Name[ru]": "Вкладка свойств Google Диск", "Name[sk]": "Stránka vlastností Google Drive", "Name[sl]": "Stran lastnosti Google Drive", "Name[sv]": "Google Drive egenskapssida", "Name[ta]": "கூகுள் டிரைவுக்கான பண்புப் பக்கம்", "Name[tr]": "Google Drive Özellikler Sayfası", "Name[uk]": "Сторінка властивостей Диска Google", "Name[x-test]": "xxGoogle Drive Properties Pagexx", "Name[zh_CN]": "Google Drive 属性页面", "Name[zh_TW]": "Google 雲端硬碟屬性頁面" }, "MimeType": "inode/directory;application/octet-stream", "X-KDE-Protocol": "gdrive" } 070701000000CF000081A400000000000000000000000165CEC66200002C8A000000000000000000000000000000000000006900000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/integration/propertiesplugin/gdrivepropertiesplugin.ui<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>GDrivePropertiesWidget</class> <widget class="QWidget" name="GDrivePropertiesWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>783</width> <height>612</height> </rect> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <layout class="QFormLayout" name="formLayout"> <property name="formAlignment"> <set>Qt::AlignHCenter|Qt::AlignTop</set> </property> <item row="0" column="0"> <widget class="QLabel" name="idLabel"> <property name="text"> <string>Id:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="0" column="1"> <widget class="QLabel" name="idValue"> <property name="text"> <string notr="true">idValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="descriptionLabel"> <property name="text"> <string>Description:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="1" column="1"> <widget class="QLabel" name="descriptionValue"> <property name="text"> <string notr="true">descriptionValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="ownersLabel"> <property name="text"> <string>Owners:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="2" column="1"> <widget class="QLabel" name="ownersValue"> <property name="text"> <string notr="true">ownersValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="3" column="0"> <widget class="QLabel" name="createdLabel"> <property name="text"> <string>Created:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="3" column="1"> <widget class="QLabel" name="createdValue"> <property name="text"> <string notr="true">createdValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="modifiedLabel"> <property name="text"> <string>Modified:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="4" column="1"> <widget class="QLabel" name="modifiedValue"> <property name="text"> <string notr="true">modifiedValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="lastViewedByMeLabel"> <property name="text"> <string>Last viewed by me:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="6" column="1"> <widget class="QLabel" name="lastViewedByMeValue"> <property name="text"> <string notr="true">lastViewedByMeValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="8" column="0"> <widget class="QLabel" name="versionLabel"> <property name="text"> <string>Version:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="8" column="1"> <widget class="QLabel" name="versionValue"> <property name="text"> <string notr="true">versionValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="9" column="0"> <widget class="QLabel" name="md5Label"> <property name="text"> <string>MD5 checksum:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="9" column="1"> <widget class="QLabel" name="md5Value"> <property name="text"> <string notr="true">md5Value</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="lastModifiedByLabel"> <property name="text"> <string>Last modified by:</string> </property> <property name="alignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="5" column="1"> <widget class="QLabel" name="lastModifiedByValue"> <property name="text"> <string notr="true">lastModifiedByValue</string> </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="sharedWithMeLabel"> <property name="text"> <string>Shared with me:</string> </property> </widget> </item> <item row="7" column="1"> <widget class="QLabel" name="sharedWithMeValue"> <property name="text"> <string/> </property> </widget> </item> </layout> </item> <item> <spacer name="betweenFormAndButtonsSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Fixed</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>16</height> </size> </property> </spacer> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="urlOpenButton"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string>Open in browser</string> </property> <property name="icon"> <iconset theme="internet-services"> <normaloff>.</normaloff>.</iconset> </property> </widget> </item> <item> <widget class="QPushButton" name="urlCopyButton"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="toolTip"> <string>Click to copy the Google Drive URL to the clipboard.</string> </property> <property name="text"> <string>Copy URL to Clipboard</string> </property> <property name="icon"> <iconset theme="edit-copy"> <normaloff>../../../kio/src/widgets</normaloff>../../../kio/src/widgets</iconset> </property> </widget> </item> <item> <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </widget> <resources/> <connections/> </ui> 070701000000D0000081A400000000000000000000000165CEC6620000150C000000000000000000000000000000000000004700000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/kaccountsmanager.cpp/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "kaccountsmanager.h" #include "gdrivedebug.h" #include "gdrivehelper.h" #include <Accounts/Manager> #include <Accounts/Provider> #include <KAccounts/Core> #include <KAccounts/GetCredentialsJob> #include <KGAPI/Account> #include <QProcess> #include <QStandardPaths> using namespace KGAPI2; KAccountsManager::KAccountsManager() { loadAccounts(); } KAccountsManager::~KAccountsManager() { } AccountPtr KAccountsManager::account(const QString &accountName) { const auto accounts = m_accounts.values(); for (const auto &account : accounts) { if (account->accountName() == accountName) { return account; } } return AccountPtr(new Account()); } AccountPtr KAccountsManager::createAccount() { if (QStandardPaths::findExecutable(QStringLiteral("kcmshell6")).isEmpty()) { return AccountPtr(new Account()); } const auto oldAccounts = accounts(); QProcess process; process.start(QStringLiteral("kcmshell6"), {QStringLiteral("kcm_kaccounts")}); qCDebug(GDRIVE) << "Waiting for kcmshell process..."; if (process.waitForFinished(-1)) { loadAccounts(); } const auto newAccounts = accounts(); for (const auto &accountName : newAccounts) { if (oldAccounts.contains(accountName)) { continue; } // The KCM allows to add more than one account, but we can return only one from here. // So we just return the first new account in the set. qCDebug(GDRIVE) << "New account successfully created:" << accountName; return account(accountName); } // No accounts at all or no new account(s). qCDebug(GDRIVE) << "No new account created."; return AccountPtr(new Account()); } AccountPtr KAccountsManager::refreshAccount(const AccountPtr &account) { const QString accountName = account->accountName(); for (auto it = m_accounts.constBegin(); it != m_accounts.constEnd(); ++it) { if (it.value()->accountName() != accountName) { continue; } const auto id = it.key(); qCDebug(GDRIVE) << "Refreshing" << accountName; auto gapiAccount = getAccountCredentials(id, accountName); m_accounts.insert(id, gapiAccount); return gapiAccount; } return {}; } void KAccountsManager::removeAccount(const QString &accountName) { if (!accounts().contains(accountName)) { return; } for (auto it = m_accounts.constBegin(); it != m_accounts.constEnd(); ++it) { if (it.value()->accountName() != accountName) { continue; } auto manager = KAccounts::accountsManager(); auto account = Accounts::Account::fromId(manager, it.key()); Q_ASSERT(account->displayName() == accountName); qCDebug(GDRIVE) << "Going to remove account:" << account->displayName(); account->selectService(manager->service(QStringLiteral("google-drive"))); account->setEnabled(false); account->sync(); return; } } QSet<QString> KAccountsManager::accounts() { auto accountNames = QSet<QString>(); const auto accounts = m_accounts.values(); for (const auto &account : accounts) { accountNames << account->accountName(); } return accountNames; } void KAccountsManager::loadAccounts() { m_accounts.clear(); auto manager = KAccounts::accountsManager(); const auto enabledIDs = manager->accountListEnabled(); for (const auto id : enabledIDs) { auto account = manager->account(id); if (account->providerName() != QLatin1String("google")) { continue; } qCDebug(GDRIVE) << "Found google-provided account:" << account->displayName(); const auto services = account->enabledServices(); for (const auto &service : services) { if (service.name() != QLatin1String("google-drive")) { continue; } qCDebug(GDRIVE) << account->displayName() << "supports gdrive!"; auto gapiAccount = getAccountCredentials(id, account->displayName()); m_accounts.insert(id, gapiAccount); } } } AccountPtr KAccountsManager::getAccountCredentials(Accounts::AccountId id, const QString &displayName) { auto job = new KAccounts::GetCredentialsJob(id, nullptr); job->exec(); if (job->error()) { qCWarning(GDRIVE) << "GetCredentialsJob failed:" << job->errorString(); } auto gapiAccount = AccountPtr(new Account(displayName, job->credentialsData().value(QStringLiteral("AccessToken")).toString(), job->credentialsData().value(QStringLiteral("RefreshToken")).toString())); const auto scopes = job->credentialsData().value(QStringLiteral("Scope")).toStringList(); for (const auto &scope : scopes) { gapiAccount->addScope(QUrl::fromUserInput(scope)); } qCDebug(GDRIVE) << "Got account credentials for:" << gapiAccount->accountName() << ", accessToken:" << GDriveHelper::elideToken(gapiAccount->accessToken()) << ", refreshToken:" << GDriveHelper::elideToken(gapiAccount->refreshToken()); return gapiAccount; } 070701000000D1000081A400000000000000000000000165CEC66200000359000000000000000000000000000000000000004500000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/kaccountsmanager.h/* * SPDX-FileCopyrightText: 2017 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #pragma once #include "abstractaccountmanager.h" #include <QMap> #include <Accounts/Account> class KAccountsManager : public AbstractAccountManager { public: KAccountsManager(); ~KAccountsManager() override; KGAPI2::AccountPtr account(const QString &accountName) override; KGAPI2::AccountPtr createAccount() override; KGAPI2::AccountPtr refreshAccount(const KGAPI2::AccountPtr &account) override; void removeAccount(const QString &accountName) override; QSet<QString> accounts() override; private: void loadAccounts(); KGAPI2::AccountPtr getAccountCredentials(Accounts::AccountId id, const QString &displayName); QMap<Accounts::AccountId, KGAPI2::AccountPtr> m_accounts; }; 070701000000D2000081A400000000000000000000000165CEC66200001C6A000000000000000000000000000000000000004D00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/keychainaccountmanager.cpp/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "keychainaccountmanager.h" #include "gdrivedebug.h" #include <QDataStream> #include <QEventLoop> #include <QIODevice> #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include <qt5keychain/keychain.h> #else #include <qt6keychain/keychain.h> #endif #include <KGAPI/AuthJob> #include <KIO/Job> //for stat.h QString KeychainAccountManager::s_apiKey = QStringLiteral("836279663462-qq9rt1k4smgqhvt461r6l54vo9qm09bg.apps.googleusercontent.com"); QString KeychainAccountManager::s_apiSecret = QStringLiteral("5-k19mrwsAud5a1r-qijtTJQ"); QSet<QString> KeychainAccountManager::accounts() { if (m_accounts.isEmpty()) { auto job = new QKeychain::ReadPasswordJob(QStringLiteral("KIO GDrive")); job->setKey(QStringLiteral("gdrive-accounts")); runKeychainJob(job); auto data = job->binaryData(); m_accounts = deserialize<QSet<QString>>(&data); qCDebug(GDRIVE) << "Fetched" << m_accounts.count() << "account(s) from keychain"; } return m_accounts; } KGAPI2::AccountPtr KeychainAccountManager::account(const QString &accountName) { if (!accounts().contains(accountName)) { return KGAPI2::AccountPtr(new KGAPI2::Account()); } const auto entry = readMap(accountName); const QStringList scopes = entry.value(QStringLiteral("scopes")).split(QLatin1Char(','), Qt::SkipEmptyParts); QList<QUrl> scopeUrls; for (const QString &scope : scopes) { scopeUrls << QUrl::fromUserInput(scope); } return KGAPI2::AccountPtr( new KGAPI2::Account(accountName, entry.value(QStringLiteral("accessToken")), entry.value(QStringLiteral("refreshToken")), scopeUrls)); } KGAPI2::AccountPtr KeychainAccountManager::createAccount() { auto account = KGAPI2::AccountPtr(new KGAPI2::Account()); account->addScope(QUrl(QStringLiteral("https://www.googleapis.com/auth/drive"))); account->addScope(QUrl(QStringLiteral("https://www.googleapis.com/auth/drive.file"))); account->addScope(QUrl(QStringLiteral("https://www.googleapis.com/auth/drive.metadata.readonly"))); account->addScope(QUrl(QStringLiteral("https://www.googleapis.com/auth/drive.readonly"))); KGAPI2::AuthJob *authJob = new KGAPI2::AuthJob(account, s_apiKey, s_apiSecret); QEventLoop eventLoop; QObject::connect(authJob, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); account = authJob->account(); authJob->deleteLater(); if (!account->accountName().isEmpty()) { storeAccount(account); } return account; } void KeychainAccountManager::storeAccount(const KGAPI2::AccountPtr &account) { qCDebug(GDRIVE) << "Storing account" << account->accessToken(); QMap<QString, QString> entry; entry[QStringLiteral("accessToken")] = account->accessToken(); entry[QStringLiteral("refreshToken")] = account->refreshToken(); QStringList scopes; const auto accountScopes = account->scopes(); for (const QUrl &scope : accountScopes) { scopes << scope.toString(); } entry[QStringLiteral("scopes")] = scopes.join(QLatin1Char(',')); writeMap(account->accountName(), entry); storeAccountName(account->accountName()); } KGAPI2::AccountPtr KeychainAccountManager::refreshAccount(const KGAPI2::AccountPtr &account) { KGAPI2::AuthJob *authJob = new KGAPI2::AuthJob(account, s_apiKey, s_apiSecret); QEventLoop eventLoop; QObject::connect(authJob, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); if (authJob->error() != KGAPI2::OK && authJob->error() != KGAPI2::NoError) { return KGAPI2::AccountPtr(); } const KGAPI2::AccountPtr newAccount = authJob->account(); storeAccount(newAccount); return newAccount; } void KeychainAccountManager::removeAccountName(const QString &accountName) { auto accounts = this->accounts(); accounts.remove(accountName); const auto data = serialize<QSet<QString>>(accounts); auto job = new QKeychain::WritePasswordJob(QStringLiteral("KIO GDrive")); job->setKey(QStringLiteral("gdrive-accounts")); job->setBinaryData(data); runKeychainJob(job); m_accounts = accounts; } void KeychainAccountManager::storeAccountName(const QString &accountName) { auto accounts = this->accounts(); accounts.insert(accountName); const auto data = serialize<QSet<QString>>(accounts); auto job = new QKeychain::WritePasswordJob(QStringLiteral("KIO GDrive")); job->setKey(QStringLiteral("gdrive-accounts")); job->setBinaryData(data); runKeychainJob(job); m_accounts = accounts; } QMap<QString, QString> KeychainAccountManager::readMap(const QString &accountName) { auto job = new QKeychain::ReadPasswordJob(QStringLiteral("KIO GDrive")); job->setKey(accountName); runKeychainJob(job); if (job->error()) { return {}; } auto data = job->binaryData(); return deserialize<QMap<QString, QString>>(&data); } void KeychainAccountManager::writeMap(const QString &accountName, const QMap<QString, QString> &map) { const auto data = serialize<QMap<QString, QString>>(map); auto job = new QKeychain::WritePasswordJob(QStringLiteral("KIO GDrive")); job->setKey(accountName); job->setBinaryData(data); runKeychainJob(job); } void KeychainAccountManager::runKeychainJob(QKeychain::Job *job) { QObject::connect(job, &QKeychain::Job::finished, [](QKeychain::Job *job) { switch (job->error()) { case QKeychain::NoError: return; case QKeychain::EntryNotFound: qCDebug(GDRIVE) << "Keychain job could not find key" << job->key(); return; case QKeychain::CouldNotDeleteEntry: qCDebug(GDRIVE) << "Keychain job could not delete key" << job->key(); return; case QKeychain::AccessDenied: case QKeychain::AccessDeniedByUser: qCDebug(GDRIVE) << "Keychain job could not access the system keychain"; break; default: qCDebug(GDRIVE) << "Keychain job failed:" << job->error() << "-" << job->errorString(); return; } }); QEventLoop eventLoop; QObject::connect(job, &QKeychain::Job::finished, &eventLoop, &QEventLoop::quit); job->start(); eventLoop.exec(); } void KeychainAccountManager::removeAccount(const QString &accountName) { auto job = new QKeychain::DeletePasswordJob(QStringLiteral("KIO GDrive")); job->setKey(accountName); runKeychainJob(job); removeAccountName(accountName); } template<typename T> QByteArray KeychainAccountManager::serialize(const T &object) { QByteArray data; QDataStream stream(&data, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_5_0); stream << object; return data; } template<typename T> T KeychainAccountManager::deserialize(QByteArray *data) { if (!data) { return {}; } QDataStream stream(data, QIODevice::ReadOnly); stream.setVersion(QDataStream::Qt_5_0); T object; stream >> object; return object; } 070701000000D3000081A400000000000000000000000165CEC6620000056C000000000000000000000000000000000000004B00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/keychainaccountmanager.h/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #pragma once #include "abstractaccountmanager.h" namespace QKeychain { class Job; } class KeychainAccountManager : public AbstractAccountManager { public: virtual ~KeychainAccountManager() { } KGAPI2::AccountPtr account(const QString &accountName) override; KGAPI2::AccountPtr createAccount() override; KGAPI2::AccountPtr refreshAccount(const KGAPI2::AccountPtr &account) override; void removeAccount(const QString &accountName) override; QSet<QString> accounts() override; private: template<typename T> QByteArray serialize(const T &object); template<typename T> T deserialize(QByteArray *data); void storeAccount(const KGAPI2::AccountPtr &account); // Store/remove account names in/from gdrive-accounts keychain entry. void removeAccountName(const QString &accountName); void storeAccountName(const QString &accountName); QMap<QString, QString> readMap(const QString &accountName); void writeMap(const QString &accountName, const QMap<QString, QString> &map); void runKeychainJob(QKeychain::Job *job); QSet<QString> m_accounts; static QString s_apiKey; static QString s_apiSecret; }; 070701000000D4000081A400000000000000000000000165CEC6620000D634000000000000000000000000000000000000004100000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/kio_gdrive.cpp/* * SPDX-FileCopyrightText: 2013-2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "kio_gdrive.h" #include "gdrive_udsentry.h" #include "gdrivebackend.h" #include "gdrivedebug.h" #include "gdrivehelper.h" #include "gdriveurl.h" #include "gdriveversion.h" #include <QApplication> #include <QMimeDatabase> #include <QNetworkReply> #include <QNetworkRequest> #include <QTemporaryFile> #include <QUrlQuery> #include <QUuid> #include <KGAPI/AuthJob> #include <KGAPI/Drive/About> #include <KGAPI/Drive/AboutFetchJob> #include <KGAPI/Drive/ChildReference> #include <KGAPI/Drive/ChildReferenceCreateJob> #include <KGAPI/Drive/ChildReferenceFetchJob> #include <KGAPI/Drive/Drives> #include <KGAPI/Drive/DrivesCreateJob> #include <KGAPI/Drive/DrivesDeleteJob> #include <KGAPI/Drive/DrivesFetchJob> #include <KGAPI/Drive/DrivesModifyJob> #include <KGAPI/Drive/File> #include <KGAPI/Drive/FileCopyJob> #include <KGAPI/Drive/FileCreateJob> #include <KGAPI/Drive/FileFetchContentJob> #include <KGAPI/Drive/FileFetchJob> #include <KGAPI/Drive/FileModifyJob> #include <KGAPI/Drive/FileSearchQuery> #include <KGAPI/Drive/FileTrashJob> #include <KGAPI/Drive/ParentReference> #include <KGAPI/Drive/Permission> #include <KIO/Job> #include <KLocalizedString> using namespace KGAPI2; using namespace Drive; class KIOPluginForMetaData : public QObject { Q_OBJECT Q_PLUGIN_METADATA(IID "org.kde.kio.slave.gdrive" FILE "gdrive.json") }; extern "C" { int Q_DECL_EXPORT kdemain(int argc, char **argv) { QApplication app(argc, argv); app.setApplicationName(QStringLiteral("kio_gdrive")); if (argc != 4) { fprintf(stderr, "Usage: kio_gdrive protocol domain-socket1 domain-socket2\n"); exit(-1); } KIOGDrive slave(argv[1], argv[2], argv[3]); slave.dispatchLoop(); return 0; } } KIOGDrive::KIOGDrive(const QByteArray &protocol, const QByteArray &pool_socket, const QByteArray &app_socket) : WorkerBase("gdrive", pool_socket, app_socket) { Q_UNUSED(protocol); m_accountManager.reset(new AccountManager); qCDebug(GDRIVE) << "KIO GDrive ready: version" << GDRIVE_VERSION_STRING; } KIOGDrive::~KIOGDrive() { closeConnection(); } KIOGDrive::Result KIOGDrive::handleError(const KGAPI2::Job &job, const QUrl &url) { qCDebug(GDRIVE) << "Completed job" << (&job) << "error code:" << job.error() << "- message:" << job.errorString(); switch (job.error()) { case KGAPI2::OK: case KGAPI2::NoError: return Result::success(); case KGAPI2::AuthCancelled: case KGAPI2::AuthError: return Result::fail(KIO::ERR_CANNOT_LOGIN, url.toDisplayString()); case KGAPI2::Unauthorized: { const AccountPtr oldAccount = job.account(); const AccountPtr account = m_accountManager->refreshAccount(oldAccount); if (!account) { return Result::fail(KIO::ERR_CANNOT_LOGIN, url.toDisplayString()); } return Result::restart(); } case KGAPI2::Forbidden: return Result::fail(KIO::ERR_ACCESS_DENIED, url.toDisplayString()); case KGAPI2::NotFound: return Result::fail(KIO::ERR_DOES_NOT_EXIST, url.toDisplayString()); case KGAPI2::NoContent: return Result::fail(KIO::ERR_NO_CONTENT, url.toDisplayString()); case KGAPI2::QuotaExceeded: return Result::fail(KIO::ERR_DISK_FULL, url.toDisplayString()); default: return Result::fail(KIO::ERR_WORKER_DEFINED, job.errorString()); } return Result::fail(KIO::ERR_WORKER_DEFINED, i18n("Unknown error")); } KIO::WorkerResult KIOGDrive::fileSystemFreeSpace(const QUrl &url) { const auto gdriveUrl = GDriveUrl(url); if (gdriveUrl.isNewAccountPath()) { qCDebug(GDRIVE) << "fileSystemFreeSpace is not supported for new-account url"; return KIO::WorkerResult::pass(); } if (gdriveUrl.isRoot()) { qCDebug(GDRIVE) << "fileSystemFreeSpace is not supported for gdrive root url"; return KIO::WorkerResult::fail(KIO::ERR_CANNOT_STAT, url.toDisplayString()); } qCDebug(GDRIVE) << "Getting fileSystemFreeSpace for" << url; const QString accountId = gdriveUrl.account(); AboutFetchJob aboutFetch(getAccount(accountId)); aboutFetch.setFields({ About::Fields::Kind, About::Fields::QuotaBytesTotal, About::Fields::QuotaBytesUsedAggregate, }); if (auto result = runJob(aboutFetch, url, accountId); result.success()) { const AboutPtr about = aboutFetch.aboutData(); if (about) { setMetaData(QStringLiteral("total"), QString::number(about->quotaBytesTotal())); setMetaData(QStringLiteral("available"), QString::number(about->quotaBytesTotal() - about->quotaBytesUsedAggregate())); return KIO::WorkerResult::pass(); } } else { return result; } return KIO::WorkerResult::fail(); } AccountPtr KIOGDrive::getAccount(const QString &accountName) { return m_accountManager->account(accountName); } KIO::UDSEntry KIOGDrive::fileToUDSEntry(const FilePtr &origFile, const QString &path) const { KIO::UDSEntry entry; bool isFolder = false; FilePtr file = origFile; if (GDriveHelper::isGDocsDocument(file)) { GDriveHelper::convertFromGDocs(file); } entry.fastInsert(KIO::UDSEntry::UDS_NAME, file->title()); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, file->title()); entry.fastInsert(KIO::UDSEntry::UDS_COMMENT, file->description()); if (file->isFolder()) { entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); isFolder = true; } else { entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG); entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, file->mimeType()); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, file->fileSize()); entry.fastInsert(KIO::UDSEntry::UDS_URL, fileToUrl(origFile, path).toString()); } entry.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, file->createdDate().toSecsSinceEpoch()); entry.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, file->modifiedDate().toSecsSinceEpoch()); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS_TIME, file->lastViewedByMeDate().toSecsSinceEpoch()); if (!file->ownerNames().isEmpty()) { entry.fastInsert(KIO::UDSEntry::UDS_USER, file->ownerNames().first()); } if (!isFolder) { if (file->editable()) { entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); } else { entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH); } } else { entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH); } entry.fastInsert(GDriveUDSEntryExtras::Id, file->id()); entry.fastInsert(GDriveUDSEntryExtras::Url, file->alternateLink().toString()); entry.fastInsert(GDriveUDSEntryExtras::Version, QString::number(file->version())); entry.fastInsert(GDriveUDSEntryExtras::Md5, file->md5Checksum()); entry.fastInsert(GDriveUDSEntryExtras::LastModifyingUser, file->lastModifyingUserName()); entry.fastInsert(GDriveUDSEntryExtras::Owners, file->ownerNames().join(QStringLiteral(", "))); if (file->sharedWithMeDate().isValid()) { entry.fastInsert(GDriveUDSEntryExtras::SharedWithMeDate, QLocale::system().toString(file->sharedWithMeDate(), QLocale::LongFormat)); } return entry; } QUrl KIOGDrive::fileToUrl(const FilePtr &file, const QString &path) const { QUrl url; url.setScheme(GDriveUrl::Scheme); url.setPath(path + QLatin1Char('/') + file->title()); QUrlQuery urlQuery; urlQuery.addQueryItem(QStringLiteral("id"), file->id()); url.setQuery(urlQuery); return url; } KIO::WorkerResult KIOGDrive::openConnection() { qCDebug(GDRIVE) << "Ready to talk to GDrive"; return KIO::WorkerResult::pass(); } KIO::UDSEntry KIOGDrive::newAccountUDSEntry() { KIO::UDSEntry entry; entry.fastInsert(KIO::UDSEntry::UDS_NAME, GDriveUrl::NewAccountPath); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, i18nc("login in a new google account", "New account")); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("list-add-user")); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR); return entry; } KIO::UDSEntry KIOGDrive::sharedWithMeUDSEntry() { KIO::UDSEntry entry; entry.fastInsert(KIO::UDSEntry::UDS_NAME, GDriveUrl::SharedWithMeDir); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, i18nc("folder containing gdrive files shared with me", "Shared With Me")); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("folder-publicshare")); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR); return entry; } KIO::UDSEntry KIOGDrive::accountToUDSEntry(const QString &accountNAme) { KIO::UDSEntry entry; entry.fastInsert(KIO::UDSEntry::UDS_NAME, accountNAme); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, accountNAme); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("folder-gdrive")); return entry; } KIO::UDSEntry KIOGDrive::sharedDriveToUDSEntry(const DrivesPtr &sharedDrive) { KIO::UDSEntry entry; qlonglong udsAccess = S_IRUSR | S_IXUSR | S_IRGRP; if (sharedDrive->capabilities()->canRenameDrive() || sharedDrive->capabilities()->canDeleteDrive()) { udsAccess |= S_IWUSR; } entry.fastInsert(KIO::UDSEntry::UDS_NAME, sharedDrive->id()); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, sharedDrive->name()); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); entry.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, sharedDrive->createdDate().toSecsSinceEpoch()); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, udsAccess); entry.fastInsert(KIO::UDSEntry::UDS_HIDDEN, sharedDrive->hidden()); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("folder-gdrive")); return entry; } KIO::WorkerResult KIOGDrive::createAccount() { const KGAPI2::AccountPtr account = m_accountManager->createAccount(); if (!account->accountName().isEmpty()) { // Redirect to the account we just created. redirection(QUrl(QStringLiteral("gdrive:/%1").arg(account->accountName()))); return KIO::WorkerResult::pass(); } if (m_accountManager->accounts().isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("There are no Google Drive accounts enabled. Please add at least one.")); } // Redirect to the root, we already have some account. redirection(QUrl(QStringLiteral("gdrive:/"))); return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::listAccounts() { const auto accounts = m_accountManager->accounts(); if (accounts.isEmpty()) { return createAccount(); } for (const QString &account : accounts) { const KIO::UDSEntry entry = accountToUDSEntry(account); listEntry(entry); } KIO::UDSEntry newAccountEntry = newAccountUDSEntry(); listEntry(newAccountEntry); // Create also non-writable UDSentry for "." KIO::UDSEntry entry; entry.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral(".")); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH); listEntry(entry); return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::listSharedDrivesRoot(const QUrl &url) { const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); DrivesFetchJob sharedDrivesFetchJob(getAccount(accountId)); sharedDrivesFetchJob.setFields({ Drives::Fields::Kind, Drives::Fields::Id, Drives::Fields::Name, Drives::Fields::Hidden, Drives::Fields::CreatedDate, Drives::Fields::Capabilities, }); if (auto result = runJob(sharedDrivesFetchJob, url, accountId); result.success()) { const auto objects = sharedDrivesFetchJob.items(); for (const auto &object : objects) { const DrivesPtr sharedDrive = object.dynamicCast<Drives>(); const KIO::UDSEntry entry = sharedDriveToUDSEntry(sharedDrive); listEntry(entry); } auto entry = fetchSharedDrivesRootEntry(accountId, FetchEntryFlags::CurrentDir); listEntry(entry); return KIO::WorkerResult::pass(); } else { return result; } return KIO::WorkerResult::fail(); } KIO::WorkerResult KIOGDrive::createSharedDrive(const QUrl &url) { const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); DrivesPtr sharedDrive = DrivesPtr::create(); sharedDrive->setName(gdriveUrl.filename()); const QString requestId = QUuid::createUuid().toString(); DrivesCreateJob createJob(requestId, sharedDrive, getAccount(accountId)); return runJob(createJob, url, accountId); } KIO::WorkerResult KIOGDrive::deleteSharedDrive(const QUrl &url) { const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); DrivesDeleteJob sharedDriveDeleteJob(gdriveUrl.filename(), getAccount(accountId)); return runJob(sharedDriveDeleteJob, url, accountId); } KIO::WorkerResult KIOGDrive::statSharedDrive(const QUrl &url) { const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); const auto sharedDriveId = resolveSharedDriveId(gdriveUrl.filename(), accountId); if (sharedDriveId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } DrivesFetchJob sharedDriveFetchJob(sharedDriveId, getAccount(accountId)); sharedDriveFetchJob.setFields({ Drives::Fields::Kind, Drives::Fields::Id, Drives::Fields::Name, Drives::Fields::Hidden, Drives::Fields::CreatedDate, Drives::Fields::Capabilities, }); if (auto result = runJob(sharedDriveFetchJob, url, accountId); !result.success()) { return result; } ObjectPtr object = sharedDriveFetchJob.items().at(0); const DrivesPtr sharedDrive = object.dynamicCast<Drives>(); const auto entry = sharedDriveToUDSEntry(sharedDrive); statEntry(entry); return KIO::WorkerResult::pass(); } KIO::UDSEntry KIOGDrive::fetchSharedDrivesRootEntry(const QString &accountId, FetchEntryFlags flags) { // Not every user is allowed to create shared Drives, // check with About resource. bool canCreateDrives = false; AboutFetchJob aboutFetch(getAccount(accountId)); aboutFetch.setFields({ About::Fields::Kind, About::Fields::CanCreateDrives, }); QEventLoop eventLoop; QObject::connect(&aboutFetch, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); if (aboutFetch.error() == KGAPI2::OK || aboutFetch.error() == KGAPI2::NoError) { const AboutPtr about = aboutFetch.aboutData(); if (about) { canCreateDrives = about->canCreateDrives(); } } qCDebug(GDRIVE) << "Account" << accountId << (canCreateDrives ? "can" : "can't") << "create Shared Drives"; KIO::UDSEntry entry; if (flags == FetchEntryFlags::CurrentDir) { entry.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral(".")); } else { entry.fastInsert(KIO::UDSEntry::UDS_NAME, GDriveUrl::SharedDrivesDir); entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, i18n("Shared Drives")); } entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); entry.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("folder-gdrive")); qlonglong udsAccess = S_IRUSR | S_IXUSR; // If user is allowed to create shared Drives, add write bit on directory if (canCreateDrives) { udsAccess |= S_IWUSR; } entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, udsAccess); return entry; } class RecursionDepthCounter { public: RecursionDepthCounter() { ++sDepth; } ~RecursionDepthCounter() { --sDepth; } RecursionDepthCounter(const RecursionDepthCounter &) = delete; RecursionDepthCounter &operator=(const RecursionDepthCounter &) = delete; int depth() const { return sDepth; } private: static int sDepth; }; int RecursionDepthCounter::sDepth = 0; std::pair<KIO::WorkerResult, QString> KIOGDrive::resolveFileIdFromPath(const QString &path, PathFlags flags) { qCDebug(GDRIVE) << "Resolving file ID for" << path; if (path.isEmpty()) { return {KIO::WorkerResult::pass(), QString()}; } const QString fileId = m_cache.idForPath(path); if (!fileId.isEmpty()) { qCDebug(GDRIVE) << "Resolved" << path << "to" << fileId << "(from cache)"; return {KIO::WorkerResult::pass(), fileId}; } QUrl url; url.setScheme(GDriveUrl::Scheme); url.setPath(path); const auto gdriveUrl = GDriveUrl(url); Q_ASSERT(!gdriveUrl.isRoot()); if (gdriveUrl.isAccountRoot() || gdriveUrl.isTrashDir() || gdriveUrl.isSharedWithMeRoot()) { qCDebug(GDRIVE) << "Resolved" << path << "to account root"; return rootFolderId(gdriveUrl.account()); } if (gdriveUrl.isSharedDrive()) { // The gdriveUrl.filename() could be the Shared Drive id or // the name depending on whether we are navigating from a parent // or accessing the url directly, use the shared drive specific // solver to disambiguate return {KIO::WorkerResult::pass(), resolveSharedDriveId(gdriveUrl.filename(), gdriveUrl.account())}; } if (gdriveUrl.isSharedDrivesRoot()) { qCDebug(GDRIVE) << "Resolved" << path << "to Shared Drives root"; return {KIO::WorkerResult::pass(), QString()}; } QString parentId; if (!gdriveUrl.isSharedWithMeTopLevel()) { // Try to recursively resolve ID of parent path - either from cache, or by querying Google auto [result, id] = resolveFileIdFromPath(gdriveUrl.parentPath(), KIOGDrive::PathIsFolder); if (!result.success()) { return {result, QString()}; } id = parentId; if (parentId.isEmpty()) { // We failed to resolve parent -> error return {KIO::WorkerResult::pass(), QString()}; } qCDebug(GDRIVE) << "Getting ID for" << gdriveUrl.filename() << "in parent with ID" << parentId; } else { qCDebug(GDRIVE) << "Getting ID for" << gdriveUrl.filename() << "(top-level shared-with-me file without a parentId)"; } FileSearchQuery query; if (flags != KIOGDrive::None) { query.addQuery(FileSearchQuery::MimeType, (flags & KIOGDrive::PathIsFolder ? FileSearchQuery::Equals : FileSearchQuery::NotEquals), GDriveHelper::folderMimeType()); } query.addQuery(FileSearchQuery::Title, FileSearchQuery::Equals, gdriveUrl.filename()); if (!parentId.isEmpty()) { query.addQuery(FileSearchQuery::Parents, FileSearchQuery::In, parentId); } query.addQuery(FileSearchQuery::Trashed, FileSearchQuery::Equals, gdriveUrl.isTrashed()); const QString accountId = gdriveUrl.account(); FileFetchJob fetchJob(query, getAccount(accountId)); fetchJob.setFields({File::Fields::Id, File::Fields::Title, File::Fields::Labels}); if (auto result = runJob(fetchJob, url, accountId); !result.success()) { return {result, QString()}; } const ObjectsList objects = fetchJob.items(); if (objects.isEmpty()) { qCWarning(GDRIVE) << "Failed to resolve" << path; return {KIO::WorkerResult::pass(), QString()}; } const FilePtr file = objects[0].dynamicCast<File>(); m_cache.insertPath(path, file->id()); qCDebug(GDRIVE) << "Resolved" << path << "to" << file->id() << "(from network)"; return {KIO::WorkerResult::pass(), file->id()}; } QString KIOGDrive::resolveSharedDriveId(const QString &idOrName, const QString &accountId) { qCDebug(GDRIVE) << "Resolving shared drive id for" << idOrName; const auto idOrNamePath = GDriveUrl::buildSharedDrivePath(accountId, idOrName); QString fileId = m_cache.idForPath(idOrNamePath); if (!fileId.isEmpty()) { qCDebug(GDRIVE) << "Resolved shared drive id" << idOrName << "to" << fileId << "(from cache)"; return fileId; } // We start by trying to fetch a shared drive with the filename as id DrivesFetchJob searchByIdJob(idOrName, getAccount(accountId)); searchByIdJob.setFields({ Drives::Fields::Kind, Drives::Fields::Id, Drives::Fields::Name, }); QEventLoop eventLoop; QObject::connect(&searchByIdJob, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); if (searchByIdJob.error() == KGAPI2::OK || searchByIdJob.error() == KGAPI2::NoError) { // A Shared Drive with that id exists so we return it const auto objects = searchByIdJob.items(); const DrivesPtr sharedDrive = objects.at(0).dynamicCast<Drives>(); fileId = sharedDrive->id(); qCDebug(GDRIVE) << "Resolved shared drive id" << idOrName << "to" << fileId; const auto idPath = idOrNamePath; const auto namePath = GDriveUrl::buildSharedDrivePath(accountId, sharedDrive->name()); m_cache.insertPath(idPath, fileId); m_cache.insertPath(namePath, fileId); return fileId; } // The gdriveUrl's filename is not a shared drive id, we must // search for a shared drive with the filename name. // Unfortunately searching by name is only allowed for admin // accounts (i.e. useDomainAdminAccess=true) so we retrieve all // shared drives and search by name here DrivesFetchJob sharedDrivesFetchJob(getAccount(accountId)); sharedDrivesFetchJob.setFields({ Drives::Fields::Kind, Drives::Fields::Id, Drives::Fields::Name, }); QObject::connect(&sharedDrivesFetchJob, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); if (sharedDrivesFetchJob.error() == KGAPI2::OK || sharedDrivesFetchJob.error() == KGAPI2::NoError) { const auto objects = sharedDrivesFetchJob.items(); for (const auto &object : objects) { const DrivesPtr sharedDrive = object.dynamicCast<Drives>(); // If we have one or more hits we will take the first as good because we // don't have any other measures for picking the correct drive if (sharedDrive->name() == idOrName) { fileId = sharedDrive->id(); qCDebug(GDRIVE) << "Resolved shared drive id" << idOrName << "to" << fileId; const auto idPath = GDriveUrl::buildSharedDrivePath(accountId, fileId); const auto namePath = idOrNamePath; m_cache.insertPath(idPath, fileId); m_cache.insertPath(namePath, fileId); return fileId; } } } // We couldn't find any shared drive with that id or name qCDebug(GDRIVE) << "Failed resolving shared drive" << idOrName << "(couldn't find drive with that id or name)"; return QString(); } std::pair<KIO::WorkerResult, QString> KIOGDrive::rootFolderId(const QString &accountId) { auto it = m_rootIds.constFind(accountId); if (it == m_rootIds.cend()) { qCDebug(GDRIVE) << "Getting root ID for" << accountId; AboutFetchJob aboutFetch(getAccount(accountId)); aboutFetch.setFields({About::Fields::Kind, About::Fields::RootFolderId}); QUrl url; if (auto result = runJob(aboutFetch, url, accountId); !result.success()) { return {result, QString()}; } const AboutPtr about = aboutFetch.aboutData(); if (!about || about->rootFolderId().isEmpty()) { qCWarning(GDRIVE) << "Failed to obtain root ID"; return {KIO::WorkerResult::pass(), QString()}; } auto v = m_rootIds.insert(accountId, about->rootFolderId()); return {KIO::WorkerResult::pass(), *v}; } return {KIO::WorkerResult::pass(), *it}; } KIO::WorkerResult KIOGDrive::listDir(const QUrl &url) { qCDebug(GDRIVE) << "Going to list" << url; const auto gdriveUrl = GDriveUrl(url); if (gdriveUrl.isRoot()) { return listAccounts(); } if (gdriveUrl.isNewAccountPath()) { return createAccount(); } // We are committed to listing an url that belongs to // an account (i.e. not root or new account path), lets // make sure we know about the account const QString accountId = gdriveUrl.account(); const auto account = getAccount(accountId); if (account->accountName().isEmpty()) { qCDebug(GDRIVE) << "Unknown account" << accountId << "for" << url; return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%1 isn't a known GDrive account", accountId)); } QString folderId; if (gdriveUrl.isAccountRoot()) { auto entry = fetchSharedDrivesRootEntry(accountId); listEntry(entry); auto [result, id] = rootFolderId(accountId); if (!result.success()) { return result; } folderId = id; auto sharedWithMeEntry = sharedWithMeUDSEntry(); listEntry(sharedWithMeEntry); } else if (gdriveUrl.isSharedDrivesRoot()) { return listSharedDrivesRoot(url); } else { folderId = m_cache.idForPath(url.path()); if (folderId.isEmpty()) { auto [result, id] = resolveFileIdFromPath(url.adjusted(QUrl::StripTrailingSlash).path(), KIOGDrive::PathIsFolder); if (!result.success()) { return result; } folderId = id; } if (folderId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } } FileSearchQuery query; query.addQuery(FileSearchQuery::Trashed, FileSearchQuery::Equals, false); // Top-level Shared-with-me files don't have a parent. if (gdriveUrl.isSharedWithMeRoot()) { query.addQuery(FileSearchQuery::SharedWithMe, FileSearchQuery::Equals, true); } else { query.addQuery(FileSearchQuery::Parents, FileSearchQuery::In, folderId); } FileFetchJob fileFetchJob(query, getAccount(accountId)); const auto extraFields = QStringList({ KGAPI2::Drive::File::Fields::Labels, KGAPI2::Drive::File::Fields::ExportLinks, KGAPI2::Drive::File::Fields::LastViewedByMeDate, KGAPI2::Drive::File::Fields::AlternateLink, }); fileFetchJob.setFields(KGAPI2::Drive::FileFetchJob::FieldShorthands::BasicFields + extraFields); if (auto result = runJob(fileFetchJob, url, accountId); !result.success()) { return result; } const ObjectsList objects = fileFetchJob.items(); for (const ObjectPtr &object : objects) { const FilePtr file = object.dynamicCast<File>(); const KIO::UDSEntry entry = fileToUDSEntry(file, url.adjusted(QUrl::StripTrailingSlash).path()); listEntry(entry); const QString path = url.path().endsWith(QLatin1Char('/')) ? url.path() : url.path() + QLatin1Char('/'); m_cache.insertPath(path + file->title(), file->id()); } // We also need a non-null and writable UDSentry for "." KIO::UDSEntry entry; entry.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral(".")); entry.fastInsert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 0); entry.fastInsert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH); listEntry(entry); return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::mkdir(const QUrl &url, int permissions) { // NOTE: We deliberately ignore the permissions field here, because GDrive // does not recognize any privileges that could be mapped to standard UNIX // file permissions. Q_UNUSED(permissions); qCDebug(GDRIVE) << "Creating directory" << url; const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); // At least account and new folder name if (gdriveUrl.isRoot() || gdriveUrl.isAccountRoot()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } if (gdriveUrl.isSharedDrive()) { qCDebug(GDRIVE) << "Directory is shared drive, creating that instead" << url; return createSharedDrive(url); } QString parentId; if (gdriveUrl.isTopLevel()) { auto [result, id] = rootFolderId(accountId); if (!result.success()) { return result; } parentId = id; } else { auto [result, id] = resolveFileIdFromPath(gdriveUrl.parentPath(), KIOGDrive::PathIsFolder); if (!result.success()) { return result; } parentId = id; } if (parentId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } FilePtr file(new File()); file->setTitle(gdriveUrl.filename()); file->setMimeType(File::folderMimeType()); ParentReferencePtr parent(new ParentReference(parentId)); file->setParents(ParentReferencesList() << parent); FileCreateJob createJob(file, getAccount(accountId)); return runJob(createJob, url, accountId); } KIO::WorkerResult KIOGDrive::stat(const QUrl &url) { // TODO We should be using StatDetails to limit how we respond to a stat request // const QString statDetails = metaData(QStringLiteral("statDetails")); // KIO::StatDetails details = statDetails.isEmpty() ? KIO::StatDefaultDetails : static_cast<KIO::StatDetails>(statDetails.toInt()); // qCDebug(GDRIVE) << "Going to stat()" << url << "for details" << details; const auto gdriveUrl = GDriveUrl(url); if (gdriveUrl.isRoot()) { // TODO Can we stat() root? return KIO::WorkerResult::pass(); } if (gdriveUrl.isNewAccountPath()) { qCDebug(GDRIVE) << "stat()ing new-account path"; const KIO::UDSEntry entry = newAccountUDSEntry(); statEntry(entry); return KIO::WorkerResult::pass(); } if (gdriveUrl.isSharedWithMeRoot()) { qCDebug(GDRIVE) << "stat()ing Shared With Me path"; const KIO::UDSEntry entry = sharedWithMeUDSEntry(); statEntry(entry); return KIO::WorkerResult::pass(); } // We are committed to stat()ing an url that belongs to // an account (i.e. not root or new account path), lets // make sure we know about the account const QString accountId = gdriveUrl.account(); const auto account = getAccount(accountId); if (account->accountName().isEmpty()) { qCDebug(GDRIVE) << "Unknown account" << accountId << "for" << url; return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("%1 isn't a known GDrive account", accountId)); } if (gdriveUrl.isAccountRoot()) { qCDebug(GDRIVE) << "stat()ing account root"; const KIO::UDSEntry entry = accountToUDSEntry(accountId); statEntry(entry); return KIO::WorkerResult::pass(); } if (gdriveUrl.isSharedDrivesRoot()) { qCDebug(GDRIVE) << "stat()ing Shared Drives root"; const auto entry = fetchSharedDrivesRootEntry(accountId); statEntry(entry); return KIO::WorkerResult::pass(); } if (gdriveUrl.isSharedDrive()) { qCDebug(GDRIVE) << "stat()ing Shared Drive" << url; return statSharedDrive(url); } const QUrlQuery urlQuery(url); QString fileId; if (urlQuery.hasQueryItem(QStringLiteral("id"))) { fileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(url.adjusted(QUrl::StripTrailingSlash).path(), KIOGDrive::None); if (!result.success()) { return result; } fileId = id; } if (fileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } FileFetchJob fileFetchJob(fileId, getAccount(accountId)); if (auto result = runJob(fileFetchJob, url, accountId); !result.success()) { qCDebug(GDRIVE) << "Failed stat()ing file" << fileFetchJob.errorString(); return result; } const ObjectsList objects = fileFetchJob.items(); if (objects.count() != 1) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } const FilePtr file = objects.first().dynamicCast<File>(); if (file->labels()->trashed()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } const KIO::UDSEntry entry = fileToUDSEntry(file, gdriveUrl.parentPath()); statEntry(entry); return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::get(const QUrl &url) { qCDebug(GDRIVE) << "Fetching content of" << url; const auto gdriveUrl = GDriveUrl(url); const QString accountId = gdriveUrl.account(); if (gdriveUrl.isRoot()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } if (gdriveUrl.isAccountRoot()) { // You cannot GET an account folder! return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, url.path()); } const QUrlQuery urlQuery(url); QString fileId; if (urlQuery.hasQueryItem(QStringLiteral("id"))) { fileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(url.adjusted(QUrl::StripTrailingSlash).path(), KIOGDrive::PathIsFile); if (!result.success()) { return result; } fileId = id; } if (fileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } FileFetchJob fileFetchJob(fileId, getAccount(accountId)); fileFetchJob.setFields({File::Fields::Id, File::Fields::MimeType, File::Fields::ExportLinks, File::Fields::DownloadUrl}); if (auto result = runJob(fileFetchJob, url, accountId); !result.success()) { return result; } const ObjectsList objects = fileFetchJob.items(); if (objects.count() != 1) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.fileName()); } FilePtr file = objects.first().dynamicCast<File>(); QUrl downloadUrl; if (GDriveHelper::isGDocsDocument(file)) { downloadUrl = GDriveHelper::convertFromGDocs(file); } else { downloadUrl = GDriveHelper::downloadUrl(file); } mimeType(file->mimeType()); FileFetchContentJob contentJob(downloadUrl, getAccount(accountId)); QObject::connect(&contentJob, &KGAPI2::Job::progress, [this](KGAPI2::Job *, int processed, int total) { processedSize(processed); totalSize(total); }); if (auto result = runJob(contentJob, url, accountId); !result.success()) { return result; } QByteArray contentData = contentJob.data(); processedSize(contentData.size()); totalSize(contentData.size()); // data() has a maximum transfer size of 14 MiB so we need to send it in chunks. // See TransferJob::slotDataReq. int transferred = 0; // do-while loop to call data() even for empty files. do { const size_t nextChunk = qMin(contentData.size() - transferred, 14 * 1024 * 1024); data(QByteArray::fromRawData(contentData.constData() + transferred, nextChunk)); transferred += nextChunk; } while (transferred < contentData.size()); return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::readPutData(QTemporaryFile &tempFile, FilePtr &fileMetaData) { // TODO: Instead of using a temp file, upload directly the raw data (requires // support in LibKGAPI) // TODO: For large files, switch to resumable upload and upload the file in // reasonably large chunks (requires support in LibKGAPI) // TODO: Support resumable upload (requires support in LibKGAPI) if (!tempFile.open()) { return KIO::WorkerResult::fail(KIO::ERR_CANNOT_WRITE, tempFile.fileName()); } int result; do { QByteArray buffer; dataReq(); result = readData(buffer); if (!buffer.isEmpty()) { qint64 size = tempFile.write(buffer); if (size != buffer.size()) { return KIO::WorkerResult::fail(KIO::ERR_CANNOT_WRITE, tempFile.fileName()); } } } while (result > 0); const QMimeType mime = QMimeDatabase().mimeTypeForFileNameAndData(fileMetaData->title(), &tempFile); fileMetaData->setMimeType(mime.name()); tempFile.close(); if (result == -1) { qCWarning(GDRIVE) << "Could not read source file" << tempFile.fileName(); return KIO::WorkerResult::fail(KIO::ERR_CANNOT_READ, QString()); } return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::runJob(KGAPI2::Job &job, const QUrl &url, const QString &accountId) { auto account = getAccount(accountId); if (account->accessToken().isEmpty()) { qCWarning(GDRIVE) << "Expired or missing access/refresh token for account" << accountId; return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("Expired or missing access tokens for account %1", accountId)); } Q_FOREVER { qCDebug(GDRIVE) << "Running job" << (&job) << "with accessToken" << GDriveHelper::elideToken(job.account()->accessToken()); QEventLoop eventLoop; QObject::connect(&job, &KGAPI2::Job::finished, &eventLoop, &QEventLoop::quit); eventLoop.exec(); Result result = handleError(job, url); if (result.action == KIOGDrive::Success) { break; } else if (result.action == KIOGDrive::Fail) { return KIO::WorkerResult::fail(result.error, result.errorString); } job.setAccount(account); job.restart(); }; return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::putUpdate(const QUrl &url) { const QString fileId = QUrlQuery(url).queryItemValue(QStringLiteral("id")); qCDebug(GDRIVE) << Q_FUNC_INFO << url << fileId; const auto gdriveUrl = GDriveUrl(url); const auto accountId = gdriveUrl.account(); FileFetchJob fetchJob(fileId, getAccount(accountId)); if (auto result = runJob(fetchJob, url, accountId); !result.success()) { return result; } const ObjectsList objects = fetchJob.items(); if (objects.size() != 1) { return putCreate(url); } FilePtr file = objects[0].dynamicCast<File>(); QTemporaryFile tmpFile; if (auto result = readPutData(tmpFile, file); !result.success()) { return result; } FileModifyJob modifyJob(tmpFile.fileName(), file, getAccount(accountId)); modifyJob.setUpdateModifiedDate(true); if (auto result = runJob(modifyJob, url, accountId); !result.success()) { return result; } return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::putCreate(const QUrl &url) { qCDebug(GDRIVE) << Q_FUNC_INFO << url; ParentReferencesList parentReferences; const auto gdriveUrl = GDriveUrl(url); if (gdriveUrl.isRoot() || gdriveUrl.isAccountRoot()) { return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, url.path()); } if (!gdriveUrl.isTopLevel()) { // Not creating in root directory, fill parent references QString parentId; auto [result, id] = resolveFileIdFromPath(gdriveUrl.parentPath()); if (!result.success()) { return result; } parentId = id; if (parentId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).path()); } parentReferences << ParentReferencePtr(new ParentReference(parentId)); } FilePtr file(new File); file->setTitle(gdriveUrl.filename()); file->setParents(parentReferences); /* if (hasMetaData(QLatin1String("modified"))) { const QString modified = metaData(QLatin1String("modified")); qCDebug(GDRIVE) << modified; file->setModifiedDate(KDateTime::fromString(modified, KDateTime::ISODate)); } */ QTemporaryFile tmpFile; if (auto result = readPutData(tmpFile, file); !result.success()) { return result; } const auto accountId = gdriveUrl.account(); FileCreateJob createJob(tmpFile.fileName(), file, getAccount(accountId)); if (auto result = runJob(createJob, url, accountId); !result.success()) { return result; } return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::put(const QUrl &url, int permissions, KIO::JobFlags flags) { // NOTE: We deliberately ignore the permissions field here, because GDrive // does not recognize any privileges that could be mapped to standard UNIX // file permissions. Q_UNUSED(permissions) Q_UNUSED(flags) qCDebug(GDRIVE) << Q_FUNC_INFO << url; const auto gdriveUrl = GDriveUrl(url); if (gdriveUrl.isSharedDrive()) { qCDebug(GDRIVE) << "Can't create files in Shared Drives root" << url; return KIO::WorkerResult::fail(KIO::ERR_CANNOT_WRITE, url.path()); } if (QUrlQuery(url).hasQueryItem(QStringLiteral("id"))) { if (auto result = putUpdate(url); !result.success()) { return result; } } else { if (auto result = putCreate(url); !result.success()) { return result; } } // FIXME: Update the cache now! return KIO::WorkerResult::pass(); } KIO::WorkerResult KIOGDrive::copy(const QUrl &src, const QUrl &dest, int permissions, KIO::JobFlags flags) { qCDebug(GDRIVE) << "Going to copy" << src << "to" << dest; // NOTE: We deliberately ignore the permissions field here, because GDrive // does not recognize any privileges that could be mapped to standard UNIX // file permissions. Q_UNUSED(permissions); // NOTE: We deliberately ignore the flags field here, because the "overwrite" // flag would have no effect on GDrive, since file name don't have to be // unique. IOW if there is a file "foo.bar" and user copy-pastes into the // same directory, the FileCopyJob will succeed and a new file with the same // name will be created. Q_UNUSED(flags); const auto srcGDriveUrl = GDriveUrl(src); const auto destGDriveUrl = GDriveUrl(dest); const QString sourceAccountId = srcGDriveUrl.account(); const QString destAccountId = destGDriveUrl.account(); // TODO: Does this actually happen, or does KIO treat our account name as host? if (sourceAccountId != destAccountId) { // KIO will fallback to get+post return KIO::WorkerResult::fail(KIO::ERR_UNSUPPORTED_ACTION, src.path()); } if (srcGDriveUrl.isRoot()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } if (srcGDriveUrl.isAccountRoot()) { return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, src.path()); } const QUrlQuery urlQuery(src); QString sourceFileId; if (urlQuery.hasQueryItem(QStringLiteral("id"))) { sourceFileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(src.adjusted(QUrl::StripTrailingSlash).path()); if (!result.success()) { return result; } sourceFileId = id; } if (sourceFileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } FileFetchJob sourceFileFetchJob(sourceFileId, getAccount(sourceAccountId)); sourceFileFetchJob.setFields({File::Fields::Id, File::Fields::ModifiedDate, File::Fields::LastViewedByMeDate, File::Fields::Description}); if (auto result = runJob(sourceFileFetchJob, src, sourceAccountId); !result.success()) { return result; } const ObjectsList objects = sourceFileFetchJob.items(); if (objects.count() != 1) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } const FilePtr sourceFile = objects[0].dynamicCast<File>(); ParentReferencesList destParentReferences; if (destGDriveUrl.isRoot()) { return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, dest.path()); } QString destDirId; if (destGDriveUrl.isTopLevel()) { auto [result, id] = rootFolderId(destAccountId); if (!result.success()) { return result; } destDirId = id; } else { auto [result, id] = resolveFileIdFromPath(destGDriveUrl.parentPath(), KIOGDrive::PathIsFolder); if (!result.success()) { return result; } destDirId = id; } destParentReferences << ParentReferencePtr(new ParentReference(destDirId)); FilePtr destFile(new File); destFile->setTitle(destGDriveUrl.filename()); destFile->setModifiedDate(sourceFile->modifiedDate()); destFile->setLastViewedByMeDate(sourceFile->lastViewedByMeDate()); destFile->setDescription(sourceFile->description()); destFile->setParents(destParentReferences); FileCopyJob copyJob(sourceFile, destFile, getAccount(sourceAccountId)); return runJob(copyJob, dest, sourceAccountId); } KIO::WorkerResult KIOGDrive::del(const QUrl &url, bool isfile) { // FIXME: Verify that a single file cannot actually have multiple parent // references. If it can, then we need to be more careful: currently this // implementation will simply remove the file from all it's parents but // it actually should just remove the current parent reference // FIXME: Because of the above, we are not really deleting the file, but only // moving it to trash - so if users really really really wants to delete the // file, they have to go to GDrive web interface and delete it there. I think // that we should do the DELETE operation here, because for trash people have // their local trashes. This however requires fixing the first FIXME first, // otherwise we are risking severe data loss. const auto gdriveUrl = GDriveUrl(url); // Trying to delete the Team Drive root is pointless if (gdriveUrl.isSharedDrivesRoot()) { qCDebug(GDRIVE) << "Tried deleting Shared Drives root."; return KIO::WorkerResult::fail(KIO::ERR_WORKER_DEFINED, i18n("Can't delete Shared Drives root.")); } qCDebug(GDRIVE) << "Deleting URL" << url << "- is it a file?" << isfile; const QUrlQuery urlQuery(url); QString fileId; if (isfile && urlQuery.hasQueryItem(QStringLiteral("id"))) { fileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(url.adjusted(QUrl::StripTrailingSlash).path(), isfile ? KIOGDrive::PathIsFile : KIOGDrive::PathIsFolder); if (!result.success()) { return result; } fileId = id; } if (fileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } const QString accountId = gdriveUrl.account(); // If user tries to delete the account folder, remove the account from the keychain if (gdriveUrl.isAccountRoot()) { const KGAPI2::AccountPtr account = getAccount(accountId); if (account->accountName().isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, accountId); } m_accountManager->removeAccount(accountId); return KIO::WorkerResult::pass(); } if (gdriveUrl.isSharedDrive()) { qCDebug(GDRIVE) << "Deleting Shared Drive" << url; return deleteSharedDrive(url); } // GDrive allows us to delete entire directory even when it's not empty, // so we need to emulate the normal behavior ourselves by checking number of // child references if (!isfile) { ChildReferenceFetchJob referencesFetch(fileId, getAccount(accountId)); if (auto result = runJob(referencesFetch, url, accountId); !result.success()) { return result; } const bool isEmpty = !referencesFetch.items().count(); if (!isEmpty && metaData(QStringLiteral("recurse")) != QLatin1String("true")) { return KIO::WorkerResult::fail(KIO::ERR_CANNOT_RMDIR, url.path()); } } FileTrashJob trashJob(fileId, getAccount(accountId)); auto result = runJob(trashJob, url, accountId); m_cache.removePath(url.path()); return result; } KIO::WorkerResult KIOGDrive::rename(const QUrl &src, const QUrl &dest, KIO::JobFlags flags) { Q_UNUSED(flags) qCDebug(GDRIVE) << "Renaming" << src << "to" << dest; const auto srcGDriveUrl = GDriveUrl(src); const auto destGDriveUrl = GDriveUrl(dest); const QString sourceAccountId = srcGDriveUrl.account(); const QString destAccountId = destGDriveUrl.account(); // TODO: Does this actually happen, or does KIO treat our account name as host? if (sourceAccountId != destAccountId) { return KIO::WorkerResult::fail(KIO::ERR_UNSUPPORTED_ACTION, src.path()); } if (srcGDriveUrl.isRoot()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, dest.path()); } if (srcGDriveUrl.isAccountRoot()) { return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, dest.path()); } const QUrlQuery urlQuery(src); QString sourceFileId; if (urlQuery.hasQueryItem(QStringLiteral("id"))) { sourceFileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(src.adjusted(QUrl::StripTrailingSlash).path(), KIOGDrive::PathIsFile); if (!result.success()) { return result; } sourceFileId = id; } if (sourceFileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } if (srcGDriveUrl.isSharedDrive()) { qCDebug(GDRIVE) << "Renaming Shared Drive" << srcGDriveUrl.filename() << "to" << destGDriveUrl.filename(); DrivesPtr drives = DrivesPtr::create(); drives->setId(sourceFileId); drives->setName(destGDriveUrl.filename()); DrivesModifyJob modifyJob(drives, getAccount(sourceAccountId)); if (auto result = runJob(modifyJob, src, sourceAccountId); !result.success()) { return result; } return KIO::WorkerResult::pass(); } // We need to fetch ALL, so that we can do update later FileFetchJob sourceFileFetchJob(sourceFileId, getAccount(sourceAccountId)); if (auto result = runJob(sourceFileFetchJob, src, sourceAccountId); !result.success()) { return result; } const ObjectsList objects = sourceFileFetchJob.items(); if (objects.count() != 1) { qCDebug(GDRIVE) << "FileFetchJob retrieved" << objects.count() << "items, while only one was expected."; return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } const FilePtr sourceFile = objects[0].dynamicCast<File>(); ParentReferencesList parentReferences = sourceFile->parents(); if (destGDriveUrl.isRoot()) { // user is trying to move to top-level gdrive:/// return KIO::WorkerResult::fail(KIO::ERR_ACCESS_DENIED, dest.fileName()); } if (destGDriveUrl.isAccountRoot()) { // user is trying to move to root -> we are only renaming } else { // skip filename and extract the second-to-last component auto [destDirResult, destDirId] = resolveFileIdFromPath(destGDriveUrl.parentPath(), KIOGDrive::PathIsFolder); if (!destDirResult.success()) { return destDirResult; } auto [srcDirResult, srcDirId] = resolveFileIdFromPath(srcGDriveUrl.parentPath(), KIOGDrive::PathIsFolder); if (!srcDirResult.success()) { return srcDirResult; } // Remove source from parent references auto iter = parentReferences.begin(); bool removed = false; while (iter != parentReferences.end()) { const ParentReferencePtr ref = *iter; if (ref->id() == srcDirId) { parentReferences.erase(iter); removed = true; break; } ++iter; } if (!removed) { qCDebug(GDRIVE) << "Could not remove" << src << "from parent references."; return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, src.path()); } // Add destination to parent references parentReferences << ParentReferencePtr(new ParentReference(destDirId)); } FilePtr destFile(sourceFile); destFile->setTitle(destGDriveUrl.filename()); destFile->setParents(parentReferences); FileModifyJob modifyJob(destFile, getAccount(sourceAccountId)); modifyJob.setUpdateModifiedDate(true); return runJob(modifyJob, dest, sourceAccountId); } KIO::WorkerResult KIOGDrive::mimetype(const QUrl &url) { qCDebug(GDRIVE) << Q_FUNC_INFO << url; const QUrlQuery urlQuery(url); QString fileId; if (urlQuery.hasQueryItem(QStringLiteral("id"))) { fileId = urlQuery.queryItemValue(QStringLiteral("id")); } else { auto [result, id] = resolveFileIdFromPath(url.adjusted(QUrl::StripTrailingSlash).path()); if (!result.success()) { return result; } fileId = id; } if (fileId.isEmpty()) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } const QString accountId = GDriveUrl(url).account(); FileFetchJob fileFetchJob(fileId, getAccount(accountId)); fileFetchJob.setFields({File::Fields::Id, File::Fields::MimeType}); if (auto result = runJob(fileFetchJob, url, accountId); !result.success()) { return result; } const ObjectsList objects = fileFetchJob.items(); if (objects.count() != 1) { return KIO::WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, url.path()); } const FilePtr file = objects.first().dynamicCast<File>(); mimeType(file->mimeType()); return KIO::WorkerResult::pass(); } #include "kio_gdrive.moc" 070701000000D5000081A400000000000000000000000165CEC6620000115E000000000000000000000000000000000000003F00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/kio_gdrive.h/* * SPDX-FileCopyrightText: 2013-2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #ifndef KIO_GDRIVE_H #define KIO_GDRIVE_H #include "pathcache.h" #include <KGAPI/Account> #include <KGAPI/Types> #include <KIO/WorkerBase> #include <memory> class AbstractAccountManager; class QTemporaryFile; namespace KGAPI2 { class Job; } class KIOGDrive : public KIO::WorkerBase { public: enum Action { Success, Fail, Restart, }; explicit KIOGDrive(const QByteArray &protocol, const QByteArray &pool_socket, const QByteArray &app_socket); ~KIOGDrive() override; virtual KIO::WorkerResult openConnection() Q_DECL_OVERRIDE; virtual KIO::WorkerResult listDir(const QUrl &url) Q_DECL_OVERRIDE; virtual KIO::WorkerResult mkdir(const QUrl &url, int permissions) Q_DECL_OVERRIDE; virtual KIO::WorkerResult stat(const QUrl &url) Q_DECL_OVERRIDE; virtual KIO::WorkerResult get(const QUrl &url) Q_DECL_OVERRIDE; virtual KIO::WorkerResult put(const QUrl &url, int permissions, KIO::JobFlags flags) Q_DECL_OVERRIDE; virtual KIO::WorkerResult copy(const QUrl &src, const QUrl &dest, int permissions, KIO::JobFlags flags) Q_DECL_OVERRIDE; virtual KIO::WorkerResult rename(const QUrl &src, const QUrl &dest, KIO::JobFlags flags) Q_DECL_OVERRIDE; virtual KIO::WorkerResult del(const QUrl &url, bool isfile) Q_DECL_OVERRIDE; virtual KIO::WorkerResult mimetype(const QUrl &url) Q_DECL_OVERRIDE; KIO::WorkerResult fileSystemFreeSpace(const QUrl &url) Q_DECL_OVERRIDE; private: Q_DISABLE_COPY(KIOGDrive) enum PathFlags { None = 0, PathIsFolder = 1, PathIsFile = 2, }; enum class FetchEntryFlags { None = 0, CurrentDir = 1, }; static KIO::UDSEntry newAccountUDSEntry(); static KIO::UDSEntry sharedWithMeUDSEntry(); static KIO::UDSEntry accountToUDSEntry(const QString &accountName); static KIO::UDSEntry sharedDriveToUDSEntry(const KGAPI2::Drive::DrivesPtr &sharedDrive); [[nodiscard]] KIO::WorkerResult listAccounts(); [[nodiscard]] KIO::WorkerResult createAccount(); [[nodiscard]] KIO::WorkerResult listSharedDrivesRoot(const QUrl &url); [[nodiscard]] KIO::WorkerResult createSharedDrive(const QUrl &url); [[nodiscard]] KIO::WorkerResult deleteSharedDrive(const QUrl &url); [[nodiscard]] KIO::WorkerResult statSharedDrive(const QUrl &url); [[nodiscard]] KIO::UDSEntry fetchSharedDrivesRootEntry(const QString &accountId, FetchEntryFlags flags = FetchEntryFlags::None); [[nodiscard]] std::pair<KIO::WorkerResult, QString> resolveFileIdFromPath(const QString &path, PathFlags flags = None); QString resolveSharedDriveId(const QString &idOrName, const QString &accountId); struct Result { Action action; int error = KJob::NoError; QString errorString; static Result fail(int error, QString errorString) { return {Fail, error, errorString}; } static Result success() { return {Success, KJob::NoError, QString()}; } static Result restart() { return {Restart, KJob::NoError, QString()}; } }; [[nodiscard]] Result handleError(const KGAPI2::Job &job, const QUrl &url); KIO::UDSEntry fileToUDSEntry(const KGAPI2::Drive::FilePtr &file, const QString &path) const; QUrl fileToUrl(const KGAPI2::Drive::FilePtr &file, const QString &path) const; KGAPI2::AccountPtr getAccount(const QString &accountName); [[nodiscard]] std::pair<KIO::WorkerResult, QString> rootFolderId(const QString &accountId); [[nodiscard]] KIO::WorkerResult putUpdate(const QUrl &url); [[nodiscard]] KIO::WorkerResult putCreate(const QUrl &url); [[nodiscard]] KIO::WorkerResult readPutData(QTemporaryFile &tmpFile, KGAPI2::Drive::FilePtr &file); /** * Executes a KGAPI2::Job in an event loop, retrying the job until success or failure. * If the Job fails a WorkerResult with an appropriate error message will be returned. * * @return Whether @p job succeeded. */ [[nodiscard]] KIO::WorkerResult runJob(KGAPI2::Job &job, const QUrl &url, const QString &accountId); std::unique_ptr<AbstractAccountManager> m_accountManager; PathCache m_cache; QMap<QString /* account */, QString /* rootId */> m_rootIds; }; #endif // KIO_GDRIVE_H 070701000000D6000081A400000000000000000000000165CEC6620000066F000000000000000000000000000000000000004000000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/pathcache.cpp/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #include "pathcache.h" #include "gdrivedebug.h" #include <QDateTime> PathCache::PathCache() { } PathCache::~PathCache() { } void PathCache::insertPath(const QString &path, const QString &fileId) { if (path.startsWith(QLatin1Char('/'))) { m_pathIdMap.insert(path.mid(1), fileId); } else { m_pathIdMap.insert(path, fileId); } } QString PathCache::idForPath(const QString &path) const { if (path.startsWith(QLatin1Char('/'))) { return m_pathIdMap[path.mid(1)]; } else { return m_pathIdMap[path]; } } QStringList PathCache::descendants(const QString &path) const { const QString fullPath = path.endsWith(QLatin1Char('/')) ? path : path + QLatin1Char('/'); QStringList descendants; for (auto iter = m_pathIdMap.begin(); iter != m_pathIdMap.end(); ++iter) { if (!iter.key().startsWith(fullPath)) { // Not a descendant at all continue; } if (iter.key().lastIndexOf(QLatin1Char('/')) >= fullPath.size()) { // Not a direct descendant continue; } descendants.append(iter.key()); } return descendants; } void PathCache::removePath(const QString &path) { m_pathIdMap.remove(path); } void PathCache::dump() { qCDebug(GDRIVE) << "==== DUMP ===="; for (auto iter = m_pathIdMap.constBegin(); iter != m_pathIdMap.constEnd(); ++iter) { qCDebug(GDRIVE) << iter.key() << " => " << iter.value(); } qCDebug(GDRIVE) << "==== DUMP ===="; } 070701000000D7000081A400000000000000000000000165CEC6620000024F000000000000000000000000000000000000003E00000000kio-gdrive-VERSIONgit.20240216T022018~ca1107c/src/pathcache.h/* * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com> * * SPDX-License-Identifier: GPL-2.0-or-later * */ #ifndef PATHCACHE_H #define PATHCACHE_H #include <QHash> #include <QStringList> class PathCache { public: PathCache(); ~PathCache(); void insertPath(const QString &path, const QString &fileId); QString idForPath(const QString &path) const; QStringList descendants(const QString &path) const; void removePath(const QString &path); void dump(); private: QHash<QString /* path */, QString> m_pathIdMap; }; #endif // PATHCACHE_H 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!1113 blocks
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor