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 }