From ed5ecf7ea7a482b4649e66ecb35fbc60af680684 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Mon, 25 Apr 2016 13:08:12 -0400 Subject: Rearrange the Lumina source tree quite a bit: Now the utilites are arranged by category (core, core-utils, desktop-utils), so all the -utils may be excluded by a package system (or turned into separate packages) as needed. --- src-qt5/core/libLumina/LuminaXDG.h | 168 +++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src-qt5/core/libLumina/LuminaXDG.h (limited to 'src-qt5/core/libLumina/LuminaXDG.h') diff --git a/src-qt5/core/libLumina/LuminaXDG.h b/src-qt5/core/libLumina/LuminaXDG.h new file mode 100644 index 00000000..5a9b1441 --- /dev/null +++ b/src-qt5/core/libLumina/LuminaXDG.h @@ -0,0 +1,168 @@ +//=========================================== +// Lumina-DE source code +// Copyright (c) 2013, Ken Moore +// Available under the 3-clause BSD license +// See the LICENSE file for full details +//=========================================== +// These structures/classes are for conforming to the FreeDesktop standards +// REFERENCE: (*.desktop files) http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s05.html +// -- Current Implementation (OCT 2013) -- +// Desktop File Version Compliance: 1.0 (except "DBusActivatable") +// Icon Theme Compliance: Built in to Qt (QIcon::fromTheme()) with "oxygen" theme default +// *.desktop Exec Compliance Updated: 9/9/2014 +// Mime Application Version Compliance: 1.0.1 (11/14/14) (Skips random *.desktop parsing: ~80% compliant) +//=========================================== + + +#ifndef _LUMINA_LIBRARY_XDG_H +#define _LUMINA_LIBRARY_XDG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// ====================== +// FreeDesktop Desktop Actions Framework (data structure) +// ====================== +class XDGDesktopAction{ +public: + //Admin variables + QString ID; //The ID name for this action (should correspond to an entry in the "actionList" for the XDGDesktop below) + //General Variables + QString name, icon, exec; +}; + +// ====================== +// FreeDesktop Desktop Entry Framework (data structure) +// ====================== +class XDGDesktop{ +public: + enum XDGDesktopType { BAD, APP, LINK, DIR }; + //Admin variables + QString filePath; //which file this structure contains the information for (absolute path) + QDateTime lastRead; //when this structure was created from the file + XDGDesktopType type; + //General variables + QString name, genericName, comment, icon; + QStringList showInList, notShowInList; + bool isHidden; + //Type 1 (APP) variables + QString exec, tryexec, path, startupWM; + QStringList actionList, mimeList, catList, keyList; + bool useTerminal, startupNotify; + QList actions; + //Type 2 (LINK) variables + QString url; + + //Constructor/destructor + XDGDesktop(){} + ~XDGDesktop(){} +}; + +// ======================== +// File Information simplification class (combine QFileInfo with XDGDesktop) +// Need some extra information not usually available by a QFileInfo +// ======================== +class LFileInfo : public QFileInfo{ +private: + QString mime, icon; + XDGDesktop desk; + + void loadExtraInfo(); + +public: + //Couple overloaded contructors + LFileInfo(QString filepath); + LFileInfo(QFileInfo info); + ~LFileInfo(){} + + //Functions for accessing the extra information + // -- Return the mimetype for the file + QString mimetype(); + + // -- Return the icon file to use for this file + QString iconfile(); //Note: This string is auto-formatted for use in the LXDG::findIcon() routine. + + // -- Check if this is an XDG desktop file + bool isDesktopFile(); + + // -- Allow access to the internal XDG desktop data structure + XDGDesktop* XDG(); + + //Other file type identification routines + bool isImage(); //Is a readable image file (for thumbnail support) + bool isAVFile(); //Is an audio/video file +}; +typedef QList LFileInfoList; + +// ================================ +// Collection of FreeDesktop standards interaction routines +// ================================ +class LXDG{ +public: + //Read/write a *.desktop file + static XDGDesktop loadDesktopFile(QString filePath, bool& ok); + static bool saveDesktopFile(XDGDesktop dFile, bool merge = true); + //Check a *.desktop file for validity (showAll skips the DE-exclusivity checks) + static bool checkValidity(XDGDesktop dFile, bool showAll = true); + //Check for a valid executable + static bool checkExec(QString exec); + //Get a list of all the directories where *.desktop files exist + static QStringList systemApplicationDirs(); + //Get a list of all the *.desktop files available on the system + static QList systemDesktopFiles(bool showAll = false, bool showHidden = false); + //Sort a list of Desktop files into the proper categories + static QHash< QString, QList > sortDesktopCats(QList apps); + //Return the icon to use for the given category + static QString DesktopCatToIcon(QString cat); + //Sort a list of Desktop files by name + static QList sortDesktopNames(QList apps); + //Get the executable line from a Desktop file + static QString getDesktopExec(XDGDesktop app, QString ActionID = ""); + //Set all the default XDG Environment variables + static void setEnvironmentVars(); + //Find an icon from the current/default theme + static QIcon findIcon(QString iconName, QString fallback = ""); + //Recursivly compile a list of child directories with *.png files in them + static QStringList getChildIconDirs(QString parent); + //List all the mime-type directories + static QStringList systemMimeDirs(); + //Find the mime-type icon for a particular file extension + static QIcon findMimeIcon(QString extension); + //Find the mime-type of a particular file extension + static QString findAppMimeForFile(QString filename, bool multiple = false); + //Find the file extension for a particular mime-type + static QStringList findFilesForMime(QString mime); + // Simplification function for finding all info regarding current mime defaults + static QStringList listFileMimeDefaults(); + //Find the localized comment string for a particular mime-type + static QString findMimeComment(QString mime); + //Find the default application for a mime-type + static QString findDefaultAppForMime(QString mime); + //Fine the available applications for a mime-type + static QStringList findAvailableAppsForMime(QString mime); + //Set the default application for a mime-type + static void setDefaultAppForMime(QString mime, QString app); + //List all the registered audio/video file extensions + static QStringList findAVFileExtensions(); + //Load all the "globs2" mime database files + static QStringList loadMimeFileGlobs2(); + + //Find all the autostart *.desktop files + static QList findAutoStartFiles(bool includeInvalid = false); + static bool setAutoStarted(bool autostart, XDGDesktop app); + static bool setAutoStarted(bool autostart, QString filePath); //for convenience +}; + +#endif + -- cgit