| 1 | /* |
| 2 | This file is part of the KDE libraries |
| 3 | SPDX-FileCopyrightText: 2003 Thiago Macieira <thiago.macieira@kdemail.net> |
| 4 | |
| 5 | SPDX-License-Identifier: LGPL-2.0-only |
| 6 | */ |
| 7 | |
| 8 | #ifndef KREMOTEENCODING_H |
| 9 | #define KREMOTEENCODING_H |
| 10 | |
| 11 | #include "kiocore_export.h" |
| 12 | #include <QByteArray> |
| 13 | #include <QString> |
| 14 | |
| 15 | #include <memory> |
| 16 | |
| 17 | class QUrl; |
| 18 | class KRemoteEncodingPrivate; |
| 19 | /*! |
| 20 | * \class KRemoteEncoding |
| 21 | * \inmodule KIOCore |
| 22 | * |
| 23 | * \brief Allows encoding and decoding properly remote filenames into Unicode. |
| 24 | * |
| 25 | * Certain protocols do not specify an appropriate encoding for decoding |
| 26 | * their 8-bit data into proper Unicode forms. Therefore, KIO workers should |
| 27 | * use this class in order to convert those forms into QStrings before |
| 28 | * creating the respective KIO::UDSEntry. The same is true for decoding |
| 29 | * URLs to its components. |
| 30 | * |
| 31 | * Each KIO::WorkerBase has one object of this kind, even if it is not necessary. |
| 32 | * It can be accessed through KIO::WorkerBase::remoteEncoding. |
| 33 | */ |
| 34 | class KIOCORE_EXPORT KRemoteEncoding |
| 35 | { |
| 36 | public: |
| 37 | /*! |
| 38 | * Constructor. |
| 39 | * |
| 40 | * Constructs this object to use the given encoding name. |
| 41 | * If \a name is a null pointer, the standard encoding will be used. |
| 42 | */ |
| 43 | explicit KRemoteEncoding(const char *name = nullptr); |
| 44 | |
| 45 | virtual ~KRemoteEncoding(); |
| 46 | |
| 47 | /*! |
| 48 | * Converts the given full pathname or filename to Unicode. |
| 49 | * This function is supposed to work for dirnames, filenames |
| 50 | * or a full pathname. |
| 51 | */ |
| 52 | QString decode(const QByteArray &name) const; |
| 53 | |
| 54 | /*! |
| 55 | * Converts the given \a name from Unicode. |
| 56 | * This function is supposed to work for dirnames, filenames |
| 57 | * or a full pathname. |
| 58 | */ |
| 59 | QByteArray encode(const QString &name) const; |
| 60 | |
| 61 | /*! |
| 62 | * Converts the given URL into its 8-bit components |
| 63 | */ |
| 64 | QByteArray encode(const QUrl &url) const; |
| 65 | |
| 66 | /*! |
| 67 | * Converts the given URL into 8-bit form and separate the |
| 68 | * dirname from the filename. This is useful for worker functions |
| 69 | * like stat or get. |
| 70 | * |
| 71 | * The dirname is returned with the final slash always stripped |
| 72 | */ |
| 73 | QByteArray directory(const QUrl &url, bool ignore_trailing_slash = true) const; |
| 74 | |
| 75 | /*! |
| 76 | * Converts the given URL into 8-bit form and retrieve the filename. |
| 77 | */ |
| 78 | QByteArray fileName(const QUrl &url) const; |
| 79 | |
| 80 | /*! |
| 81 | * Returns the encoding being used. |
| 82 | */ |
| 83 | const char *encoding() const; |
| 84 | |
| 85 | /*! |
| 86 | * Sets the encoding being used. |
| 87 | * This function does not change the global configuration. |
| 88 | * |
| 89 | * Pass a null pointer in \a name to revert to the standard |
| 90 | * encoding. |
| 91 | */ |
| 92 | void setEncoding(const char *name); |
| 93 | |
| 94 | protected: |
| 95 | virtual void virtual_hook(int id, void *data); |
| 96 | |
| 97 | private: |
| 98 | std::unique_ptr<KRemoteEncodingPrivate> const d; |
| 99 | |
| 100 | Q_DISABLE_COPY(KRemoteEncoding) |
| 101 | }; |
| 102 | |
| 103 | #endif |
| 104 | |