From 9ab63697966ffedd8e24f3d47956e858c0cf0965 Mon Sep 17 00:00:00 2001 From: Ken Moore Date: Fri, 28 Aug 2015 09:33:32 -0400 Subject: Move the LFileInfo class into libLumina/LuminaXDG - this is very useful for files that may/may not be XDG desktop files (prevent re-reading files by trying to juggle two different data structures). --- libLumina/LuminaXDG.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) (limited to 'libLumina/LuminaXDG.cpp') diff --git a/libLumina/LuminaXDG.cpp b/libLumina/LuminaXDG.cpp index 473d8620..ca20eef5 100644 --- a/libLumina/LuminaXDG.cpp +++ b/libLumina/LuminaXDG.cpp @@ -1,6 +1,6 @@ //=========================================== // Lumina-DE source code -// Copyright (c) 2013, Ken Moore +// Copyright (c) 2013-2015, Ken Moore // Available under the 3-clause BSD license // See the LICENSE file for full details //=========================================== @@ -13,6 +13,92 @@ static QStringList mimeglobs; static qint64 mimechecktime; +//==== LFileInfo Functions ==== +//Need some extra information not usually available by a QFileInfo +void LFileInfo::loadExtraInfo(){ + //Now load the extra information + if(this->isDir()){ + mime = "inode/directory"; + //Special directory icons + QString name = this->fileName().toLower(); + if(name=="desktop"){ icon = "user-desktop"; } + else if(name=="tmp"){ icon = "folder-temp"; } + else if(name=="video" || name=="videos"){ icon = "folder-video"; } + else if(name=="music" || name=="audio"){ icon = "folder-sound"; } + else if(name=="projects" || name=="devel"){ icon = "folder-development"; } + else if(name=="notes"){ icon = "folder-txt"; } + else if(name=="downloads"){ icon = "folder-downloads"; } + else if(name=="documents"){ icon = "folder-documents"; } + else if(name=="images" || name=="pictures"){ icon = "folder-image"; } + else if( !this->isReadable() ){ icon = "folder-locked"; } + }else if( this->suffix()=="desktop"){ + mime = "application/x-desktop"; + icon = "application-x-desktop"; //default value + bool ok = false; + desk = LXDG::loadDesktopFile(this->absoluteFilePath(), ok); + if(ok){ + //use the specific desktop file info (if possible) + if(!desk.icon.isEmpty()){ icon = desk.icon; } + } + }else{ + //Generic file, just determine the mimetype + mime = LXDG::findAppMimeForFile(this->fileName()); + } +} +LFileInfo::LFileInfo(QString filepath){ //overloaded contructor + this->setFile(filepath); + loadExtraInfo(); +} +LFileInfo::LFileInfo(QFileInfo info){ //overloaded contructor + this->swap(info); //use the given QFileInfo without re-loading it + loadExtraInfo(); +} + +//Functions for accessing the extra information +// -- Return the mimetype for the file +QString LFileInfo::mimetype(){ + if(mime=="inode/directory"){ return ""; } + else{ return mime; } +} + +// -- Return the icon to use for this file +QString LFileInfo::iconfile(){ + if(!icon.isEmpty()){ + return icon; + }else{ + if(!mime.isEmpty()){ + QString tmp = mime; + tmp.replace("/","-"); + return tmp; + }else if(this->isExecutable()){ + return "application-x-executable"; + } + } + return ""; //Fall back to nothing +} + +// -- Check if this is an XDG desktop file +bool LFileInfo::isDesktopFile(){ + return (!desk.filePath.isEmpty()); +} + +// -- Allow access to the XDG desktop data structure +const XDGDesktop* LFileInfo::XDG(){ + return &desk; +} + +// -- Check if this is a readable image file (for thumbnail support) +bool LFileInfo::isImage(){ + if(!mime.startsWith("image/")){ return false; } //quick return for non-image files + //Check the Qt subsystems to see if this image file can be read + return ( !LUtils::imageExtensions().filter(this->suffix().toLower()).isEmpty() ); +} + +bool LFileInfo::isAVFile(){ + return (mime.startsWith("audio/") || mime.startsWith("video/") ); +} + + //==== LXDG Functions ==== XDGDesktop LXDG::loadDesktopFile(QString filePath, bool& ok){ //Create the outputs -- cgit