3
* NBDesktopFile.cpp - NewBreeze DesktopFile Handler Class
7
#include <NBDesktopFile.hpp>
9
inline QString findIn( QString what, QString where ) {
12
rx.setMinimal( true );
14
if ( rx.indexIn( where ) >= 0 )
20
NBDesktopFile::NBDesktopFile( QString path ) {
22
fileUrl = QString( path );
26
QString NBDesktopFile::name() {
31
QString NBDesktopFile::type() {
36
QString NBDesktopFile::exec() {
41
QString NBDesktopFile::icon() {
46
QStringList NBDesktopFile::mimeTypes() {
51
QString NBDesktopFile::workPath() {
56
bool NBDesktopFile::terminalMode() {
58
return __terminalMode;
61
QStringList NBDesktopFile::categories() {
66
QString NBDesktopFile::comment() {
71
QStringList NBDesktopFile::execArgs() {
76
bool NBDesktopFile::multipleArgs() {
78
return __multipleFiles;
81
bool NBDesktopFile::takesArgs() {
86
short NBDesktopFile::grade() {
91
QString NBDesktopFile::desktopFileName() {
93
return baseName( fileUrl );
96
bool NBDesktopFile::isSameAs( NBDesktopFile other ) {
98
if ( __execArgs.at( 0 ) == other.execArgs().at( 0 ) )
104
bool NBDesktopFile::areSame( NBDesktopFile dEntry1, NBDesktopFile dEntry2 ) {
106
if ( dEntry1.execArgs().at( 0 ) == dEntry2.execArgs().at( 0 ) )
112
void NBDesktopFile::parseDesktopFile() {
114
QString rxName( "\nName=(.*)(\n|\r\n)" );
115
QString rxType( "\nType=(.*)(\n|\r\n)" );
116
QString rxExec( "\nExec=(.*)(\n|\r\n)" );
117
QString rxIcon( "\nIcon=(.*)(\n|\r\n)" );
118
QString rxPath( "\nPath=(.*)(\n|\r\n)" );
119
QString rxMime( "\nMimeType=(.*)(\n|\r\n)" );
120
QString rxTerm( "\nTerminal=(.*)(\n|\r\n)" );
121
QString rxCate( "\nCategories=(.*)(\n|\r\n)" );
122
QString rxComm( "\nComment=(.*)(\n|\r\n)" );
124
QFile dFile( fileUrl );
125
if ( !dFile.exists() )
128
if ( !dFile.open( QFile::ReadOnly ) )
131
QString entry = QString( dFile.readAll() );
134
__name = findIn( rxName, entry );
136
if ( __name.isEmpty() )
137
qDebug() << "Nameless monster:" << fileUrl;
139
__type = findIn( rxType, entry );
140
__exec = findIn( rxExec, entry );
142
__icon = findIn( rxIcon, entry );
143
__workPath = findIn( rxPath, entry );
144
__mimeTypes = findIn( rxMime, entry ).split( ";", QString::SkipEmptyParts );
145
QString __terminal = findIn( rxTerm, entry );
146
__terminalMode = ( __terminal.toLower() == "true" ? true : false );
148
__categories << findIn( rxCate, entry ).split( ";", QString::SkipEmptyParts );
149
__comment = findIn( rxComm, entry );
151
// By default set @v __multipleFiles to false
152
__multipleFiles = false;
155
QStringList args = __exec.split( " " );
156
foreach( QString arg, args ) {
157
if ( arg == "%f" or arg == "%u" ) {
158
__multipleFiles = false;
160
__execArgs << "<#NEWBREEZE-ARG-FILE#>";
163
else if ( arg == "%F" or arg == "%U" ) {
164
__multipleFiles = true;
166
__execArgs << "<#NEWBREEZE-ARG-FILES#>";
169
else if ( arg == "%i" ) {
170
if ( !__icon.isEmpty() )
171
__execArgs << "--icon" << __icon;
174
else if ( arg == "%c" )
175
__execArgs << __name;
177
else if ( arg == "%k" )
178
__execArgs << QUrl( fileUrl ).toLocalFile();