File indexing completed on 2024-05-05 16:09:03

0001 /*
0002     SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "usermetadata.h"
0008 #include "xattr_p.h"
0009 
0010 
0011 using namespace KFileMetaData;
0012 
0013 class KFileMetaData::UserMetaDataPrivate
0014 {
0015 public:
0016     QString filePath;
0017 };
0018 
0019 UserMetaData::UserMetaData(const QString& filePath)
0020     : d(new UserMetaDataPrivate)
0021 {
0022     d->filePath = filePath;
0023 }
0024 
0025 UserMetaData::UserMetaData(const UserMetaData& rhs)
0026     : d(new UserMetaDataPrivate(*rhs.d))
0027 {
0028 }
0029 
0030 UserMetaData::~UserMetaData() = default;
0031 
0032 const UserMetaData& UserMetaData::operator=(const UserMetaData& rhs)
0033 {
0034     d->filePath = rhs.d->filePath;
0035     return *this;
0036 }
0037 
0038 QString UserMetaData::filePath() const
0039 {
0040     return d->filePath;
0041 }
0042 
0043 UserMetaData::Error UserMetaData::setTags(const QStringList& tags)
0044 {
0045     if (!tags.isEmpty()) {
0046         k_setxattr(d->filePath, QStringLiteral("user.xdg.tags"), tags.join(QLatin1Char(',')));
0047     } else {
0048         k_removexattr(d->filePath, QStringLiteral("user.xdg.tags"));
0049     }
0050 
0051     return NoError;
0052 }
0053 
0054 QStringList UserMetaData::tags() const
0055 {
0056     QString value;
0057 
0058     k_getxattr(d->filePath, QStringLiteral("user.xdg.tags"), &value);
0059     return value.split(QLatin1Char(','), Qt::SkipEmptyParts);
0060 }
0061 
0062 int UserMetaData::rating() const
0063 {
0064     QString value;
0065 
0066     k_getxattr(d->filePath, QStringLiteral("user.baloo.rating"), &value);
0067     return value.toInt();
0068 }
0069 
0070 UserMetaData::Error UserMetaData::setRating(int rating)
0071 {
0072     if (rating) {
0073         k_setxattr(d->filePath, QStringLiteral("user.baloo.rating"), QString::number(rating));
0074     } else {
0075         k_removexattr(d->filePath, QStringLiteral("user.baloo.rating"));
0076     }
0077 
0078     return NoError;
0079 }
0080 
0081 QString UserMetaData::userComment() const
0082 {
0083     QString value;
0084     k_getxattr(d->filePath, QStringLiteral("user.xdg.comment"), &value);
0085 
0086     return value;
0087 }
0088 
0089 UserMetaData::Error UserMetaData::setUserComment(const QString& userComment)
0090 {
0091     if (!userComment.isEmpty()) {
0092         k_setxattr(d->filePath, QStringLiteral("user.xdg.comment"), userComment);
0093     } else {
0094         k_removexattr(d->filePath, QStringLiteral("user.xdg.comment"));
0095     }
0096 
0097     return NoError;
0098 }
0099 
0100 QUrl UserMetaData::originUrl() const
0101 {
0102     QString value;
0103     k_getxattr(d->filePath, QStringLiteral("user.xdg.origin.url"), &value);
0104 
0105     return QUrl(value);
0106 }
0107 
0108 UserMetaData::Error UserMetaData::setOriginUrl(const QUrl &originUrl)
0109 {
0110     if (!originUrl.isEmpty()) {
0111         k_setxattr(d->filePath, QStringLiteral("user.xdg.origin.url"), originUrl.toString());
0112     } else {
0113         k_removexattr(d->filePath, QStringLiteral("user.xdg.origin.url"));
0114     }
0115 
0116     return NoError;
0117 }
0118 
0119 QString UserMetaData::originEmailSubject() const
0120 {
0121     QString value;
0122     k_getxattr(d->filePath, QStringLiteral("user.xdg.origin.email.subject"), &value);
0123     return value;
0124 }
0125 
0126 UserMetaData::Error UserMetaData::setOriginEmailSubject(const QString &originEmailSubject)
0127 {
0128     if (!originEmailSubject.isEmpty()) {
0129         k_setxattr(d->filePath, QStringLiteral("user.xdg.origin.email.subject"), originEmailSubject);
0130     } else {
0131         k_removexattr(d->filePath, QStringLiteral("user.xdg.origin.email.subject"));
0132     }
0133 
0134     return NoError;
0135 }
0136 
0137 QString UserMetaData::originEmailSender() const
0138 {
0139     QString value;
0140     k_getxattr(d->filePath, QStringLiteral("user.xdg.origin.email.sender"), &value);
0141     return value;
0142 }
0143 
0144 UserMetaData::Error UserMetaData::setOriginEmailSender(const QString &originEmailSender)
0145 {
0146     if (!originEmailSender.isEmpty()) {
0147         k_setxattr(d->filePath, QStringLiteral("user.xdg.origin.email.sender"), originEmailSender);
0148     } else {
0149         k_removexattr(d->filePath, QStringLiteral("user.xdg.origin.email.sender"));
0150     }
0151 
0152     return NoError;
0153 }
0154 
0155 QString UserMetaData::originEmailMessageId() const
0156 {
0157     QString value;
0158     k_getxattr(d->filePath, QStringLiteral("user.xdg.origin.email.message-id"), &value);
0159     return value;
0160 }
0161 
0162 UserMetaData::Error UserMetaData::setOriginEmailMessageId(const QString &originEmailMessageId)
0163 {
0164     if (!originEmailMessageId.isEmpty()) {
0165         k_setxattr(d->filePath, QStringLiteral("user.xdg.origin.email.message-id"), originEmailMessageId);
0166     } else {
0167         k_removexattr(d->filePath, QStringLiteral("user.xdg.origin.email.message-id"));
0168     }
0169 
0170     return NoError;
0171 }
0172 
0173 UserMetaData::Error UserMetaData::setAttribute(const QString& key, const QString& value)
0174 {
0175     if (!value.isEmpty()) {
0176         k_setxattr(d->filePath, QStringLiteral("user.") + key, value);
0177     } else {
0178         k_removexattr(d->filePath, QStringLiteral("user.") + key);
0179     }
0180 
0181     return NoError;
0182 }
0183 
0184 bool UserMetaData::hasAttribute(const QString& key)
0185 {
0186     return k_hasAttribute(d->filePath, QStringLiteral("user.") + key);
0187 }
0188 
0189 QString UserMetaData::attribute(const QString& key)
0190 {
0191     QString value;
0192     k_getxattr(d->filePath, QStringLiteral("user.") + key, &value);
0193 
0194     return value;
0195 }
0196 
0197 bool UserMetaData::isSupported() const
0198 {
0199     return k_isSupported(d->filePath);
0200 }
0201 
0202 UserMetaData::Attributes UserMetaData::queryAttributes(UserMetaData::Attributes attributes) const
0203 {
0204     return k_queryAttributes(d->filePath, attributes);
0205 }