File indexing completed on 2024-05-05 04:46:58
0001 /* 0002 * Copyright 2018 Camilo Higuita <milo.h@aol.com> 0003 * 0004 * This program is free software; you can redistribute it and/or modify 0005 * it under the terms of the GNU Library General Public License as 0006 * published by the Free Software Foundation; either version 2, or 0007 * (at your option) any later version. 0008 * 0009 * This program is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 * GNU General Public License for more details 0013 * 0014 * You should have received a copy of the GNU Library General Public 0015 * License along with this program; if not, write to the 0016 * Free Software Foundation, Inc., 0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #pragma once 0021 0022 #include <QHash> 0023 #include <QVariant> 0024 #include <QString> 0025 #include <QUrl> 0026 #include <QVector> 0027 0028 #include "mauikit_export.h" 0029 0030 /** 0031 * @brief A set of helpers for managing the key-value model data type. And other functionality helpers. 0032 */ 0033 namespace FMH 0034 { 0035 /** 0036 * @brief Whether the platform running is Android. 0037 */ 0038 bool MAUIKIT_EXPORT isAndroid(); 0039 0040 /** 0041 * @brief Whether the platform running is Window. 0042 */ 0043 bool MAUIKIT_EXPORT isWindows(); 0044 0045 /** 0046 * @brief Whether the platform running is GNU/Linux. 0047 0048 */ 0049 bool MAUIKIT_EXPORT isLinux(); 0050 0051 /** 0052 * @brief Whether the platform running is Mac. 0053 */ 0054 bool MAUIKIT_EXPORT isMac(); 0055 0056 /** 0057 * @brief Whether the platform running is IOS. 0058 */ 0059 bool MAUIKIT_EXPORT isIOS(); 0060 0061 /** 0062 * @brief The MODEL_KEY enum values. 0063 */ 0064 enum MODEL_KEY : int { 0065 ICON, 0066 LABEL, 0067 PATH, 0068 URL, 0069 TYPE, 0070 GROUP, 0071 OWNER, 0072 SUFFIX, 0073 NAME, 0074 DATE, 0075 SIZE, 0076 MODIFIED, 0077 MIME, 0078 TAG, 0079 PERMISSIONS, 0080 THUMBNAIL, 0081 THUMBNAIL_1, 0082 THUMBNAIL_2, 0083 THUMBNAIL_3, 0084 HIDDEN, 0085 ICONSIZE, 0086 DETAILVIEW, 0087 SHOWTHUMBNAIL, 0088 SHOWTERMINAL, 0089 COUNT, 0090 SORTBY, 0091 USER, 0092 PASSWORD, 0093 SERVER, 0094 FOLDERSFIRST, 0095 VIEWTYPE, 0096 ADDDATE, 0097 FAV, 0098 FAVORITE, 0099 COLOR, 0100 RATE, 0101 FORMAT, 0102 PLACE, 0103 LOCATION, 0104 ALBUM, 0105 ARTIST, 0106 TRACK, 0107 DURATION, 0108 ARTWORK, 0109 PLAYLIST, 0110 LYRICS, 0111 WIKI, 0112 MOOD, 0113 SOURCETYPE, 0114 GENRE, 0115 NOTE, 0116 COMMENT, 0117 CONTEXT, 0118 SOURCE, 0119 TITLE, 0120 ID, 0121 PARENT_ID, 0122 RELEASEDATE, 0123 LICENSE, 0124 DESCRIPTION, 0125 BOOKMARK, 0126 ACCOUNT, 0127 ACCOUNTTYPE, 0128 VERSION, 0129 DOMAIN_M, 0130 CATEGORY, 0131 CONTENT, 0132 PIN, 0133 IMG, 0134 PREVIEW, 0135 LINK, 0136 STAMP, 0137 BOOK, 0138 N, 0139 PHOTO, 0140 GENDER, 0141 ADR, 0142 ADR_2, 0143 ADR_3, 0144 EMAIL, 0145 EMAIL_2, 0146 EMAIL_3, 0147 LANG, 0148 NICKNAME, 0149 ORG, 0150 PROFILE, 0151 TZ, 0152 TEL, 0153 TEL_2, 0154 TEL_3, 0155 IM, 0156 CITY, 0157 STATE, 0158 COUNTRY, 0159 PACKAGE_ARCH, 0160 PACKAGE_TYPE, 0161 GPG_FINGERPRINT, 0162 GPG_SIGNATURE, 0163 PACKAGE_NAME, 0164 PRICE, 0165 REPOSITORY, 0166 TAGS, 0167 WAY, 0168 PIC, 0169 SMALL_PIC, 0170 CHANGED, 0171 COMMENTS, 0172 CREATED, 0173 DETAIL_PAGE, 0174 DETAILS, 0175 TOTAL_DOWNLOADS, 0176 GHNS_EXCLUDED, 0177 LANGUAGE, 0178 PERSON_ID, 0179 SCORE, 0180 SUMMARY, 0181 TYPE_ID, 0182 TYPE_NAME, 0183 XDG_TYPE, 0184 SYMLINK, 0185 IS_SYMLINK, 0186 IS_DIR, 0187 IS_FILE, 0188 IS_REMOTE, 0189 EXECUTABLE, 0190 READABLE, 0191 WRITABLE, 0192 LAST_READ, 0193 VALUE, 0194 KEY, 0195 MAC, 0196 LOT, 0197 APP, 0198 URI, 0199 DEVICE, 0200 LASTSYNC, 0201 UDI, 0202 LATITUDE, 0203 LONGITUDE, 0204 MESSAGE, 0205 AUTHOR, 0206 BRANCH, 0207 UPDATABLE 0208 }; 0209 0210 /** 0211 * @brief The mapping of the FMH::MODEL_KEY enum values to its string representation. 0212 * For example, `FMH::MODEL_KEY::LABEL` is mapped to`"label"`. 0213 * @code 0214 * QString keyName = FMH::MODEL_NAME[FMH::MODEL_KEY::LABEL]; //resulting in "label" 0215 * @endcode 0216 * 0217 * @note All the string representations of the FMH::MODEL_KEY are always lower cased, and with no special character division. 0218 */ 0219 static const QHash<MODEL_KEY, QString> MODEL_NAME = {{MODEL_KEY::ICON, QStringLiteral("icon")}, 0220 {MODEL_KEY::LABEL, QStringLiteral("label")}, 0221 {MODEL_KEY::PATH, QStringLiteral("path")}, 0222 {MODEL_KEY::URL, QStringLiteral("url")}, 0223 {MODEL_KEY::TYPE, QStringLiteral("type")}, 0224 {MODEL_KEY::GROUP, QStringLiteral("group")}, 0225 {MODEL_KEY::OWNER, QStringLiteral("owner")}, 0226 {MODEL_KEY::SUFFIX, QStringLiteral("suffix")}, 0227 {MODEL_KEY::NAME, QStringLiteral("name")}, 0228 {MODEL_KEY::DATE, QStringLiteral("date")}, 0229 {MODEL_KEY::MODIFIED, QStringLiteral("modified")}, 0230 {MODEL_KEY::MIME, QStringLiteral("mime")}, 0231 {MODEL_KEY::SIZE, QStringLiteral("size")}, 0232 {MODEL_KEY::TAG, QStringLiteral("tag")}, 0233 {MODEL_KEY::PERMISSIONS, QStringLiteral("permissions")}, 0234 {MODEL_KEY::THUMBNAIL, QStringLiteral("thumbnail")}, 0235 {MODEL_KEY::THUMBNAIL_1, QStringLiteral("thumbnail_1")}, 0236 {MODEL_KEY::THUMBNAIL_2, QStringLiteral("thumbnail_2")}, 0237 {MODEL_KEY::THUMBNAIL_3, QStringLiteral("thumbnail_3")}, 0238 {MODEL_KEY::ICONSIZE, QStringLiteral("iconsize")}, 0239 {MODEL_KEY::HIDDEN, QStringLiteral("hidden")}, 0240 {MODEL_KEY::DETAILVIEW, QStringLiteral("detailview")}, 0241 {MODEL_KEY::SHOWTERMINAL, QStringLiteral("showterminal")}, 0242 {MODEL_KEY::SHOWTHUMBNAIL, QStringLiteral("showthumbnail")}, 0243 {MODEL_KEY::COUNT, QStringLiteral("count")}, 0244 {MODEL_KEY::SORTBY, QStringLiteral("sortby")}, 0245 {MODEL_KEY::USER, QStringLiteral("user")}, 0246 {MODEL_KEY::PASSWORD, QStringLiteral("password")}, 0247 {MODEL_KEY::SERVER, QStringLiteral("server")}, 0248 {MODEL_KEY::FOLDERSFIRST, QStringLiteral("foldersfirst")}, 0249 {MODEL_KEY::VIEWTYPE, QStringLiteral("viewtype")}, 0250 {MODEL_KEY::ADDDATE, QStringLiteral("adddate")}, 0251 {MODEL_KEY::FAV, QStringLiteral("fav")}, 0252 {MODEL_KEY::FAVORITE, QStringLiteral("favorite")}, 0253 {MODEL_KEY::COLOR, QStringLiteral("color")}, 0254 {MODEL_KEY::RATE, QStringLiteral("rate")}, 0255 {MODEL_KEY::FORMAT, QStringLiteral("format")}, 0256 {MODEL_KEY::PLACE, QStringLiteral("place")}, 0257 {MODEL_KEY::LOCATION, QStringLiteral("location")}, 0258 {MODEL_KEY::ALBUM, QStringLiteral("album")}, 0259 {MODEL_KEY::DURATION, QStringLiteral("duration")}, 0260 {MODEL_KEY::RELEASEDATE, QStringLiteral("releasedate")}, 0261 {MODEL_KEY::ARTIST, QStringLiteral("artist")}, 0262 {MODEL_KEY::LYRICS, QStringLiteral("lyrics")}, 0263 {MODEL_KEY::TRACK, QStringLiteral("track")}, 0264 {MODEL_KEY::GENRE, QStringLiteral("genre")}, 0265 {MODEL_KEY::WIKI, QStringLiteral("wiki")}, 0266 {MODEL_KEY::CONTEXT, QStringLiteral("context")}, 0267 {MODEL_KEY::SOURCETYPE, QStringLiteral("sourcetype")}, 0268 {MODEL_KEY::ARTWORK, QStringLiteral("artwork")}, 0269 {MODEL_KEY::NOTE, QStringLiteral("note")}, 0270 {MODEL_KEY::MOOD, QStringLiteral("mood")}, 0271 {MODEL_KEY::COMMENT, QStringLiteral("comment")}, 0272 {MODEL_KEY::PLAYLIST, QStringLiteral("playlist")}, 0273 {MODEL_KEY::SOURCE, QStringLiteral("source")}, 0274 {MODEL_KEY::TITLE, QStringLiteral("title")}, 0275 {MODEL_KEY::ID, QStringLiteral("id")}, 0276 {MODEL_KEY::PERSON_ID, QStringLiteral("personid")}, 0277 {MODEL_KEY::PARENT_ID, QStringLiteral("parentid")}, 0278 {MODEL_KEY::LICENSE, QStringLiteral("license")}, 0279 {MODEL_KEY::DESCRIPTION, QStringLiteral("description")}, 0280 {MODEL_KEY::BOOKMARK, QStringLiteral("bookmark")}, 0281 {MODEL_KEY::ACCOUNT, QStringLiteral("account")}, 0282 {MODEL_KEY::ACCOUNTTYPE, QStringLiteral("accounttype")}, 0283 {MODEL_KEY::VERSION, QStringLiteral("version")}, 0284 {MODEL_KEY::DOMAIN_M, QStringLiteral("domain")}, 0285 {MODEL_KEY::CATEGORY, QStringLiteral("category")}, 0286 {MODEL_KEY::CONTENT, QStringLiteral("content")}, 0287 {MODEL_KEY::PIN, QStringLiteral("pin")}, 0288 {MODEL_KEY::IMG, QStringLiteral("img")}, 0289 {MODEL_KEY::PREVIEW, QStringLiteral("preview")}, 0290 {MODEL_KEY::LINK, QStringLiteral("link")}, 0291 {MODEL_KEY::STAMP, QStringLiteral("stamp")}, 0292 {MODEL_KEY::BOOK, QStringLiteral("book")}, 0293 0294 /** ccdav keys **/ 0295 {MODEL_KEY::N, QStringLiteral("n")}, 0296 {MODEL_KEY::IM, QStringLiteral("im")}, 0297 {MODEL_KEY::PHOTO, QStringLiteral("photo")}, 0298 {MODEL_KEY::GENDER, QStringLiteral("gender")}, 0299 {MODEL_KEY::ADR, QStringLiteral("adr")}, 0300 {MODEL_KEY::ADR_2, QStringLiteral("adr2")}, 0301 {MODEL_KEY::ADR_3, QStringLiteral("adr3")}, 0302 {MODEL_KEY::EMAIL, QStringLiteral("email")}, 0303 {MODEL_KEY::EMAIL_2, QStringLiteral("email2")}, 0304 {MODEL_KEY::EMAIL_3, QStringLiteral("email3")}, 0305 {MODEL_KEY::LANG, QStringLiteral("lang")}, 0306 {MODEL_KEY::NICKNAME, QStringLiteral("nickname")}, 0307 {MODEL_KEY::ORG, QStringLiteral("org")}, 0308 {MODEL_KEY::PROFILE, QStringLiteral("profile")}, 0309 {MODEL_KEY::TZ, QStringLiteral("tz")}, 0310 {MODEL_KEY::TEL, QStringLiteral("tel")}, 0311 {MODEL_KEY::TEL_2, QStringLiteral("tel2")}, 0312 {MODEL_KEY::TEL_3, QStringLiteral("tel3")}, 0313 0314 {MODEL_KEY::CITY, QStringLiteral("city")}, 0315 {MODEL_KEY::STATE, QStringLiteral("state")}, 0316 {MODEL_KEY::COUNTRY, QStringLiteral("country")}, 0317 0318 // opendesktop keys 0319 {MODEL_KEY::PACKAGE_ARCH, QStringLiteral("packagearch")}, 0320 {MODEL_KEY::PACKAGE_TYPE, QStringLiteral("packagetype")}, 0321 {MODEL_KEY::GPG_FINGERPRINT, QStringLiteral("gpgfingerprint")}, 0322 {MODEL_KEY::GPG_SIGNATURE, QStringLiteral("gpgsignature")}, 0323 {MODEL_KEY::PACKAGE_NAME, QStringLiteral("packagename")}, 0324 {MODEL_KEY::PRICE, QStringLiteral("price")}, 0325 {MODEL_KEY::REPOSITORY, QStringLiteral("repository")}, 0326 {MODEL_KEY::TAGS, QStringLiteral("tags")}, 0327 {MODEL_KEY::WAY, QStringLiteral("way")}, 0328 {MODEL_KEY::PIC, QStringLiteral("pic")}, 0329 {MODEL_KEY::SMALL_PIC, QStringLiteral("smallpic")}, 0330 {MODEL_KEY::CHANGED, QStringLiteral("changed")}, 0331 {MODEL_KEY::COMMENTS, QStringLiteral("comments")}, 0332 {MODEL_KEY::CREATED, QStringLiteral("created")}, 0333 {MODEL_KEY::DETAIL_PAGE, QStringLiteral("detailpage")}, 0334 {MODEL_KEY::DETAILS, QStringLiteral("details")}, 0335 {MODEL_KEY::TOTAL_DOWNLOADS, QStringLiteral("totaldownloads")}, 0336 {MODEL_KEY::GHNS_EXCLUDED, QStringLiteral("ghnsexcluded")}, 0337 {MODEL_KEY::LANGUAGE, QStringLiteral("language")}, 0338 {MODEL_KEY::SCORE, QStringLiteral("score")}, 0339 {MODEL_KEY::SUMMARY, QStringLiteral("summary")}, 0340 {MODEL_KEY::TYPE_ID, QStringLiteral("typeid")}, 0341 {MODEL_KEY::TYPE_NAME, QStringLiteral("typename")}, 0342 {MODEL_KEY::XDG_TYPE, QStringLiteral("xdgtype")}, 0343 0344 // file props 0345 {MODEL_KEY::SYMLINK, QStringLiteral("symlink")}, 0346 {MODEL_KEY::IS_SYMLINK, QStringLiteral("issymlink")}, 0347 {MODEL_KEY::LAST_READ, QStringLiteral("lastread")}, 0348 {MODEL_KEY::READABLE, QStringLiteral("readable")}, 0349 {MODEL_KEY::WRITABLE, QStringLiteral("writeable")}, 0350 {MODEL_KEY::IS_DIR, QStringLiteral("isdir")}, 0351 {MODEL_KEY::IS_FILE, QStringLiteral("isfile")}, 0352 {MODEL_KEY::IS_REMOTE, QStringLiteral("isremote")}, 0353 {MODEL_KEY::EXECUTABLE, QStringLiteral("executable")}, 0354 {MODEL_KEY::VALUE, QStringLiteral("value")}, 0355 {MODEL_KEY::KEY, QStringLiteral("key")}, 0356 0357 {MODEL_KEY::MAC, QStringLiteral("mac")}, 0358 {MODEL_KEY::LOT, QStringLiteral("lot")}, 0359 {MODEL_KEY::APP, QStringLiteral("app")}, 0360 {MODEL_KEY::URI, QStringLiteral("uri")}, 0361 {MODEL_KEY::DEVICE, QStringLiteral("device")}, 0362 {MODEL_KEY::UDI, QStringLiteral("udi")}, 0363 {MODEL_KEY::LASTSYNC, QStringLiteral("lastsync")}, 0364 {MODEL_KEY::LATITUDE, QStringLiteral("latitude")}, 0365 {MODEL_KEY::BRANCH, QStringLiteral("branch")}, 0366 {MODEL_KEY::MESSAGE, QStringLiteral("message")}, 0367 {MODEL_KEY::AUTHOR, QStringLiteral("author")}, 0368 {MODEL_KEY::UPDATABLE, QStringLiteral("updatable")}, 0369 {MODEL_KEY::LONGITUDE, QStringLiteral("lastsync")}}; 0370 0371 /** 0372 * @brief The mapping of a string text into a FMH::MODEL_KEY. 0373 * For example, `"label"` is mapped to `FMH::MODEL_KEY::LABEL`. 0374 * @code 0375 * FMH::MODEL_KEY key = FMH::MODEL_NAME_KEY["label"]; //resulting in FMH::MODEL_KEY::LABEL 0376 * @endcode 0377 */ 0378 static const QHash<QString, MODEL_KEY> MODEL_NAME_KEY = {{MODEL_NAME[MODEL_KEY::ICON], MODEL_KEY::ICON}, 0379 {MODEL_NAME[MODEL_KEY::LABEL], MODEL_KEY::LABEL}, 0380 {MODEL_NAME[MODEL_KEY::PATH], MODEL_KEY::PATH}, 0381 {MODEL_NAME[MODEL_KEY::URL], MODEL_KEY::URL}, 0382 {MODEL_NAME[MODEL_KEY::TYPE], MODEL_KEY::TYPE}, 0383 {MODEL_NAME[MODEL_KEY::GROUP], MODEL_KEY::GROUP}, 0384 {MODEL_NAME[MODEL_KEY::OWNER], MODEL_KEY::OWNER}, 0385 {MODEL_NAME[MODEL_KEY::SUFFIX], MODEL_KEY::SUFFIX}, 0386 {MODEL_NAME[MODEL_KEY::NAME], MODEL_KEY::NAME}, 0387 {MODEL_NAME[MODEL_KEY::DATE], MODEL_KEY::DATE}, 0388 {MODEL_NAME[MODEL_KEY::MODIFIED], MODEL_KEY::MODIFIED}, 0389 {MODEL_NAME[MODEL_KEY::MIME], MODEL_KEY::MIME}, 0390 {MODEL_NAME[MODEL_KEY::SIZE], MODEL_KEY::SIZE}, 0391 {MODEL_NAME[MODEL_KEY::TAG], MODEL_KEY::TAG}, 0392 {MODEL_NAME[MODEL_KEY::PERMISSIONS], MODEL_KEY::PERMISSIONS}, 0393 {MODEL_NAME[MODEL_KEY::THUMBNAIL], MODEL_KEY::THUMBNAIL}, 0394 {MODEL_NAME[MODEL_KEY::THUMBNAIL_1], MODEL_KEY::THUMBNAIL_1}, 0395 {MODEL_NAME[MODEL_KEY::THUMBNAIL_2], MODEL_KEY::THUMBNAIL_2}, 0396 {MODEL_NAME[MODEL_KEY::THUMBNAIL_3], MODEL_KEY::THUMBNAIL_3}, 0397 {MODEL_NAME[MODEL_KEY::ICONSIZE], MODEL_KEY::ICONSIZE}, 0398 {MODEL_NAME[MODEL_KEY::HIDDEN], MODEL_KEY::HIDDEN}, 0399 {MODEL_NAME[MODEL_KEY::DETAILVIEW], MODEL_KEY::DETAILVIEW}, 0400 {MODEL_NAME[MODEL_KEY::SHOWTERMINAL], MODEL_KEY::SHOWTERMINAL}, 0401 {MODEL_NAME[MODEL_KEY::SHOWTHUMBNAIL], MODEL_KEY::SHOWTHUMBNAIL}, 0402 {MODEL_NAME[MODEL_KEY::COUNT], MODEL_KEY::COUNT}, 0403 {MODEL_NAME[MODEL_KEY::SORTBY], MODEL_KEY::SORTBY}, 0404 {MODEL_NAME[MODEL_KEY::USER], MODEL_KEY::USER}, 0405 {MODEL_NAME[MODEL_KEY::PASSWORD], MODEL_KEY::PASSWORD}, 0406 {MODEL_NAME[MODEL_KEY::SERVER], MODEL_KEY::SERVER}, 0407 {MODEL_NAME[MODEL_KEY::VIEWTYPE], MODEL_KEY::VIEWTYPE}, 0408 {MODEL_NAME[MODEL_KEY::ADDDATE], MODEL_KEY::ADDDATE}, 0409 {MODEL_NAME[MODEL_KEY::FAV], MODEL_KEY::FAV}, 0410 {MODEL_NAME[MODEL_KEY::FAVORITE], MODEL_KEY::FAVORITE}, 0411 {MODEL_NAME[MODEL_KEY::COLOR], MODEL_KEY::COLOR}, 0412 {MODEL_NAME[MODEL_KEY::RATE], MODEL_KEY::RATE}, 0413 {MODEL_NAME[MODEL_KEY::FORMAT], MODEL_KEY::FORMAT}, 0414 {MODEL_NAME[MODEL_KEY::PLACE], MODEL_KEY::PLACE}, 0415 {MODEL_NAME[MODEL_KEY::LOCATION], MODEL_KEY::LOCATION}, 0416 {MODEL_NAME[MODEL_KEY::ALBUM], MODEL_KEY::ALBUM}, 0417 {MODEL_NAME[MODEL_KEY::ARTIST], MODEL_KEY::ARTIST}, 0418 {MODEL_NAME[MODEL_KEY::DURATION], MODEL_KEY::DURATION}, 0419 {MODEL_NAME[MODEL_KEY::TRACK], MODEL_KEY::TRACK}, 0420 {MODEL_NAME[MODEL_KEY::GENRE], MODEL_KEY::GENRE}, 0421 {MODEL_NAME[MODEL_KEY::LYRICS], MODEL_KEY::LYRICS}, 0422 {MODEL_NAME[MODEL_KEY::RELEASEDATE], MODEL_KEY::RELEASEDATE}, 0423 {MODEL_NAME[MODEL_KEY::FORMAT], MODEL_KEY::FORMAT}, 0424 {MODEL_NAME[MODEL_KEY::WIKI], MODEL_KEY::WIKI}, 0425 {MODEL_NAME[MODEL_KEY::SOURCETYPE], MODEL_KEY::SOURCETYPE}, 0426 {MODEL_NAME[MODEL_KEY::ARTWORK], MODEL_KEY::ARTWORK}, 0427 {MODEL_NAME[MODEL_KEY::NOTE], MODEL_KEY::NOTE}, 0428 {MODEL_NAME[MODEL_KEY::MOOD], MODEL_KEY::MOOD}, 0429 {MODEL_NAME[MODEL_KEY::COMMENT], MODEL_KEY::COMMENT}, 0430 {MODEL_NAME[MODEL_KEY::CONTEXT], MODEL_KEY::CONTEXT}, 0431 {MODEL_NAME[MODEL_KEY::SOURCE], MODEL_KEY::SOURCE}, 0432 {MODEL_NAME[MODEL_KEY::PLAYLIST], MODEL_KEY::PLAYLIST}, 0433 {MODEL_NAME[MODEL_KEY::TITLE], MODEL_KEY::TITLE}, 0434 {MODEL_NAME[MODEL_KEY::ID], MODEL_KEY::ID}, 0435 {MODEL_NAME[MODEL_KEY::PARENT_ID], MODEL_KEY::PARENT_ID}, 0436 {MODEL_NAME[MODEL_KEY::LICENSE], MODEL_KEY::LICENSE}, 0437 {MODEL_NAME[MODEL_KEY::DESCRIPTION], MODEL_KEY::DESCRIPTION}, 0438 {MODEL_NAME[MODEL_KEY::BOOKMARK], MODEL_KEY::BOOKMARK}, 0439 {MODEL_NAME[MODEL_KEY::ACCOUNT], MODEL_KEY::ACCOUNT}, 0440 {MODEL_NAME[MODEL_KEY::ACCOUNTTYPE], MODEL_KEY::ACCOUNTTYPE}, 0441 {MODEL_NAME[MODEL_KEY::VERSION], MODEL_KEY::VERSION}, 0442 {MODEL_NAME[MODEL_KEY::DOMAIN_M], MODEL_KEY::DOMAIN_M}, 0443 {MODEL_NAME[MODEL_KEY::CATEGORY], MODEL_KEY::CATEGORY}, 0444 {MODEL_NAME[MODEL_KEY::CONTENT], MODEL_KEY::CONTENT}, 0445 {MODEL_NAME[MODEL_KEY::PIN], MODEL_KEY::PIN}, 0446 {MODEL_NAME[MODEL_KEY::IMG], MODEL_KEY::IMG}, 0447 {MODEL_NAME[MODEL_KEY::PREVIEW], MODEL_KEY::PREVIEW}, 0448 {MODEL_NAME[MODEL_KEY::LINK], MODEL_KEY::LINK}, 0449 {MODEL_NAME[MODEL_KEY::STAMP], MODEL_KEY::STAMP}, 0450 {MODEL_NAME[MODEL_KEY::BOOK], MODEL_KEY::BOOK}, 0451 0452 /** ccdav keys **/ 0453 {MODEL_NAME[MODEL_KEY::N], MODEL_KEY::N}, 0454 {MODEL_NAME[MODEL_KEY::IM], MODEL_KEY::IM}, 0455 {MODEL_NAME[MODEL_KEY::PHOTO], MODEL_KEY::PHOTO}, 0456 {MODEL_NAME[MODEL_KEY::GENDER], MODEL_KEY::GENDER}, 0457 {MODEL_NAME[MODEL_KEY::ADR], MODEL_KEY::ADR}, 0458 {MODEL_NAME[MODEL_KEY::ADR_2], MODEL_KEY::ADR_2}, 0459 {MODEL_NAME[MODEL_KEY::ADR_3], MODEL_KEY::ADR_3}, 0460 {MODEL_NAME[MODEL_KEY::EMAIL], MODEL_KEY::EMAIL}, 0461 {MODEL_NAME[MODEL_KEY::EMAIL_2], MODEL_KEY::EMAIL_2}, 0462 {MODEL_NAME[MODEL_KEY::EMAIL_3], MODEL_KEY::EMAIL_3}, 0463 {MODEL_NAME[MODEL_KEY::LANG], MODEL_KEY::LANG}, 0464 {MODEL_NAME[MODEL_KEY::NICKNAME], MODEL_KEY::NICKNAME}, 0465 {MODEL_NAME[MODEL_KEY::ORG], MODEL_KEY::ORG}, 0466 {MODEL_NAME[MODEL_KEY::PROFILE], MODEL_KEY::PROFILE}, 0467 {MODEL_NAME[MODEL_KEY::TZ], MODEL_KEY::TZ}, 0468 {MODEL_NAME[MODEL_KEY::TEL], MODEL_KEY::TEL}, 0469 {MODEL_NAME[MODEL_KEY::TEL_2], MODEL_KEY::TEL_2}, 0470 {MODEL_NAME[MODEL_KEY::TEL_3], MODEL_KEY::TEL_3}, 0471 0472 {MODEL_NAME[MODEL_KEY::CITY], MODEL_KEY::CITY}, 0473 {MODEL_NAME[MODEL_KEY::STATE], MODEL_KEY::STATE}, 0474 {MODEL_NAME[MODEL_KEY::COUNTRY], MODEL_KEY::COUNTRY}, 0475 0476 // opendesktop store keys 0477 {MODEL_NAME[MODEL_KEY::PACKAGE_ARCH], MODEL_KEY::PACKAGE_ARCH}, 0478 {MODEL_NAME[MODEL_KEY::PACKAGE_TYPE], MODEL_KEY::PACKAGE_TYPE}, 0479 {MODEL_NAME[MODEL_KEY::GPG_FINGERPRINT], MODEL_KEY::GPG_FINGERPRINT}, 0480 {MODEL_NAME[MODEL_KEY::GPG_SIGNATURE], MODEL_KEY::GPG_SIGNATURE}, 0481 {MODEL_NAME[MODEL_KEY::PACKAGE_NAME], MODEL_KEY::PACKAGE_NAME}, 0482 {MODEL_NAME[MODEL_KEY::PRICE], MODEL_KEY::PRICE}, 0483 {MODEL_NAME[MODEL_KEY::REPOSITORY], MODEL_KEY::REPOSITORY}, 0484 {MODEL_NAME[MODEL_KEY::TAGS], MODEL_KEY::TAGS}, 0485 {MODEL_NAME[MODEL_KEY::WAY], MODEL_KEY::WAY}, 0486 {MODEL_NAME[MODEL_KEY::PIC], MODEL_KEY::PIC}, 0487 {MODEL_NAME[MODEL_KEY::SMALL_PIC], MODEL_KEY::SMALL_PIC}, 0488 {MODEL_NAME[MODEL_KEY::CHANGED], MODEL_KEY::CHANGED}, 0489 {MODEL_NAME[MODEL_KEY::COMMENTS], MODEL_KEY::COMMENTS}, 0490 {MODEL_NAME[MODEL_KEY::CREATED], MODEL_KEY::CREATED}, 0491 {MODEL_NAME[MODEL_KEY::DETAIL_PAGE], MODEL_KEY::DETAIL_PAGE}, 0492 {MODEL_NAME[MODEL_KEY::DETAILS], MODEL_KEY::DETAILS}, 0493 {MODEL_NAME[MODEL_KEY::TOTAL_DOWNLOADS], MODEL_KEY::TOTAL_DOWNLOADS}, 0494 {MODEL_NAME[MODEL_KEY::GHNS_EXCLUDED], MODEL_KEY::GHNS_EXCLUDED}, 0495 {MODEL_NAME[MODEL_KEY::LANGUAGE], MODEL_KEY::LANGUAGE}, 0496 {MODEL_NAME[MODEL_KEY::PERSON_ID], MODEL_KEY::PERSON_ID}, 0497 {MODEL_NAME[MODEL_KEY::SCORE], MODEL_KEY::SCORE}, 0498 {MODEL_NAME[MODEL_KEY::SUMMARY], MODEL_KEY::SUMMARY}, 0499 {MODEL_NAME[MODEL_KEY::TYPE_ID], MODEL_KEY::TYPE_ID}, 0500 {MODEL_NAME[MODEL_KEY::TYPE_NAME], MODEL_KEY::TYPE_NAME}, 0501 {MODEL_NAME[MODEL_KEY::XDG_TYPE], MODEL_KEY::XDG_TYPE}, 0502 0503 // file props 0504 {MODEL_NAME[MODEL_KEY::SYMLINK], MODEL_KEY::SYMLINK}, 0505 {MODEL_NAME[MODEL_KEY::IS_SYMLINK], MODEL_KEY::IS_SYMLINK}, 0506 {MODEL_NAME[MODEL_KEY::LAST_READ], MODEL_KEY::LAST_READ}, 0507 {MODEL_NAME[MODEL_KEY::READABLE], MODEL_KEY::READABLE}, 0508 {MODEL_NAME[MODEL_KEY::WRITABLE], MODEL_KEY::WRITABLE}, 0509 {MODEL_NAME[MODEL_KEY::IS_DIR], MODEL_KEY::IS_DIR}, 0510 {MODEL_NAME[MODEL_KEY::IS_FILE], MODEL_KEY::IS_FILE}, 0511 {MODEL_NAME[MODEL_KEY::IS_REMOTE], MODEL_KEY::IS_REMOTE}, 0512 {MODEL_NAME[MODEL_KEY::EXECUTABLE], MODEL_KEY::EXECUTABLE}, 0513 {MODEL_NAME[MODEL_KEY::VALUE], MODEL_KEY::VALUE}, 0514 {MODEL_NAME[MODEL_KEY::KEY], MODEL_KEY::KEY}, 0515 0516 {MODEL_NAME[MODEL_KEY::MAC], MODEL_KEY::MAC}, 0517 {MODEL_NAME[MODEL_KEY::LOT], MODEL_KEY::LOT}, 0518 {MODEL_NAME[MODEL_KEY::APP], MODEL_KEY::APP}, 0519 {MODEL_NAME[MODEL_KEY::URI], MODEL_KEY::URI}, 0520 {MODEL_NAME[MODEL_KEY::DEVICE], MODEL_KEY::DEVICE}, 0521 {MODEL_NAME[MODEL_KEY::UDI], MODEL_KEY::UDI}, 0522 {MODEL_NAME[MODEL_KEY::LASTSYNC], MODEL_KEY::LASTSYNC}, 0523 {MODEL_NAME[MODEL_KEY::LATITUDE], MODEL_KEY::LATITUDE}, 0524 {MODEL_NAME[MODEL_KEY::LONGITUDE], MODEL_KEY::LONGITUDE}, 0525 {MODEL_NAME[MODEL_KEY::MESSAGE], MODEL_KEY::MESSAGE}, 0526 {MODEL_NAME[MODEL_KEY::AUTHOR], MODEL_KEY::AUTHOR}, 0527 {MODEL_NAME[MODEL_KEY::UPDATABLE], MODEL_KEY::UPDATABLE}, 0528 {MODEL_NAME[MODEL_KEY::BRANCH], MODEL_KEY::BRANCH}}; 0529 /** 0530 * @brief The key-value pair model structure, where the values are strings. This is just a tydef to `QHash<MODEL_KEY, QString>`. 0531 */ 0532 typedef QHash<MODEL_KEY, QString> MODEL; 0533 0534 /** 0535 * @brief An alias for a container of multiple FMH::MODEL key-value pairs. 0536 */ 0537 typedef QVector<MODEL> MODEL_LIST; 0538 0539 /** 0540 * @brief Given a FMH::MODEL, this function will extract all the FMH::MODEL_KEY values used as the keys/roles. 0541 * @param model the given key-value pair model 0542 * @return A list of keys/roles in the given model 0543 */ 0544 const QVector<int> MAUIKIT_EXPORT modelRoles(const MODEL &model); 0545 0546 /** 0547 * @brief Extracts a value associated with that given FMH::MODEL_KEY key in a map. 0548 * @param map the map with the data 0549 * @param key the key to look for in the map 0550 * @return if found, the string value is returned, otherwise an empty string. 0551 */ 0552 const QString MAUIKIT_EXPORT mapValue(const QVariantMap &map, const MODEL_KEY &key); 0553 0554 /** 0555 * @brief Converts a FMH::MODEL object to a QVariantMap. 0556 * This is basically doing a convertion from `QHash<MODEL_KEY, QString>` to a `QMap<QString, QString>`. 0557 * @param model the data model to convert 0558 * @return a new QVariantMap 0559 */ 0560 const QVariantMap MAUIKIT_EXPORT toMap(const MODEL &model); 0561 0562 /** 0563 * @brief Converts a QVariantMap to a FMH::MODEl. 0564 * @note For this to be successful, the original map keys should be mappable in the FMH::MODEL_NAME. 0565 * @param map the map to be converted 0566 * @return the resulting FMH::MODEL if all the keys in the original map were successfully mapped. 0567 */ 0568 const MODEL MAUIKIT_EXPORT toModel(const QVariantMap &map); 0569 0570 /** 0571 * @brief Creates a FMH::MODEL_LIST from a QVariantList 0572 * @param list 0573 * @note For this to be successful, the original map keys - in the list - should be mappable in the FMH::MODEL_NAME. 0574 * @return the resulting FMH::MODEL_LIST 0575 */ 0576 const MODEL_LIST MAUIKIT_EXPORT toModelList(const QVariantList &list); 0577 0578 /** 0579 * @brief Creates a QVariantList from a MODEL_LIST 0580 * @param list 0581 * @return 0582 */ 0583 const QVariantList MAUIKIT_EXPORT toMapList(const MODEL_LIST &list); 0584 0585 /** 0586 * @brief Creates a new MODEL from another by filtering in the given array of MODEL_KEY 0587 * @param model the source model used to filter 0588 * @param keys the keys of the values to be filtered-in 0589 * @return a new FMH::MODEL with the values filtered from the original model source 0590 */ 0591 const MODEL MAUIKIT_EXPORT filterModel(const MODEL &model, const QVector<MODEL_KEY> &keys); 0592 0593 /** 0594 * @brief Extracts from a MODEL_LIST the values from a given MODEL::KEY into a QStringList 0595 * @param list the source list of model pairs 0596 * @param key the keys to use to extract the values 0597 * @return a list of the values extracted 0598 */ 0599 const QStringList MAUIKIT_EXPORT modelToList(const MODEL_LIST &list, const MODEL_KEY &key); 0600 0601 /** 0602 * @brief Checks if a local file exists. 0603 * @param path the URL must represent a local file path, by using the scheme file:// 0604 * @return whether the files exists 0605 */ 0606 bool MAUIKIT_EXPORT fileExists(const QUrl &path); 0607 }