aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core/libLumina/LuminaXDG.h
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2016-04-25 13:08:12 -0400
committerKen Moore <moorekou@gmail.com>2016-04-25 13:08:12 -0400
commited5ecf7ea7a482b4649e66ecb35fbc60af680684 (patch)
treeacc0fa17d228259e847f55c678db9fb0a9b50f0c /src-qt5/core/libLumina/LuminaXDG.h
parentMerge branch 'master' of github.com:pcbsd/lumina (diff)
downloadlumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.tar.gz
lumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.tar.bz2
lumina-ed5ecf7ea7a482b4649e66ecb35fbc60af680684.zip
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.
Diffstat (limited to 'src-qt5/core/libLumina/LuminaXDG.h')
-rw-r--r--src-qt5/core/libLumina/LuminaXDG.h168
1 files changed, 168 insertions, 0 deletions
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 <QFile>
+#include <QDir>
+#include <QFileInfo>
+#include <QStringList>
+#include <QString>
+#include <QIcon>
+#include <QList>
+#include <QHash>
+#include <QLocale>
+#include <QTextStream>
+#include <QDateTime>
+#include <QDebug>
+
+
+// ======================
+// 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<XDGDesktopAction> 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<LFileInfo> 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<XDGDesktop> systemDesktopFiles(bool showAll = false, bool showHidden = false);
+ //Sort a list of Desktop files into the proper categories
+ static QHash< QString, QList<XDGDesktop> > sortDesktopCats(QList<XDGDesktop> 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<XDGDesktop> sortDesktopNames(QList<XDGDesktop> 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<XDGDesktop> findAutoStartFiles(bool includeInvalid = false);
+ static bool setAutoStarted(bool autostart, XDGDesktop app);
+ static bool setAutoStarted(bool autostart, QString filePath); //for convenience
+};
+
+#endif
+
bgstack15