QString cmdFromUser(int argc, char **argv, QString inFile, QString extension, QString& path, bool showDLG=false){ //First check to see if there is a default for this extension QString defApp = LFileDialog::getDefaultApp(extension); if(extension=="directory" && defApp.isEmpty() && !showDLG){ //Just use the Lumina File Manager return "lumina-fm"; }else if( !defApp.isEmpty() && !showDLG ){ bool ok = false; XDGDesktop DF = LXDG::loadDesktopFile(defApp, ok); if(ok){ QString exec = LXDG::getDesktopExec(DF); if(!exec.isEmpty()){ qDebug() << "[lumina-open] Using default application:" << DF.name << "File:" << inFile; if(!DF.path.isEmpty()){ path = DF.path; } return exec; } } //invalid default - reset it and continue on LFileDialog::setDefaultApp(extension, ""); } //No default set -- Start up the application selection dialog QApplication a(argc, argv); QTranslator translator; QLocale mylocale; QString langCode = mylocale.name(); if(!QFile::exists(PREFIX + "/share/Lumina-DE/i18n/lumina-open_" + langCode + ".qm") ){ langCode.truncate( langCode.indexOf("_") ); } translator.load( QString("lumina-open_") + langCode, PREFIX + "/share/Lumina-DE/i18n/" ); a.installTranslator( &translator ); qDebug() << "Locale:" << langCode; LFileDialog w; if(inFile.startsWith(extension)){ //URL w.setFileInfo(inFile, extension, false); }else{ //File if(inFile.endsWith("/")){ inFile.chop(1); } w.setFileInfo(inFile.section("/",-1), extension, true); } w.show(); a.exec(); if(!w.appSelected){ exit(1); } //Return the run path if appropriate if(!w.appPath.isEmpty()){ path = w.appPath; } //Just do the default application registration here for now // might move it to the runtime phase later after seeing that the app has successfully started if(w.setDefault){ LFileDialog::setDefaultApp(extension, w.appFile); } else{ LFileDialog::setDefaultApp(extension, ""); } //Now return the resulting application command return w.appExec; }
QString cmdFromUser(int argc, char **argv, QString inFile, QString extension, QString& path, bool showDLG=false){ //First check to see if there is a default for this extension QString defApp; if(extension=="mimetype"){ //qDebug() << "inFile:" << inFile; QStringList matches = LXDG::findAppMimeForFile(inFile, true).split("::::"); //allow multiple matches //qDebug() << "Matches:" << matches; for(int i=0; i<matches.length(); i++){ defApp = LXDG::findDefaultAppForMime(matches[i]); if(!defApp.isEmpty()){ extension = matches[i]; break; } else if(i+1==matches.length()){ extension = matches[0]; } } }else{ defApp = LFileDialog::getDefaultApp(extension); } if( !defApp.isEmpty() && !showDLG ){ bool ok = false; if(defApp.endsWith(".desktop")){ XDGDesktop DF = LXDG::loadDesktopFile(defApp, ok); if(ok){ QString exec = LXDG::getDesktopExec(DF); if(!exec.isEmpty()){ qDebug() << "[lumina-open] Using default application:" << DF.name << "File:" << inFile; if(!DF.path.isEmpty()){ path = DF.path; } return exec; } } }else{ //Only binary given if(LUtils::isValidBinary(defApp)){ qDebug() << "[lumina-open] Using default application:" << defApp << "File:" << inFile; return defApp; //just use the binary } } //invalid default - reset it and continue on LFileDialog::setDefaultApp(extension, ""); } //Final catch: directory given - no valid default found - use lumina-fm if(extension=="directory" && !showDLG){ return "lumina-fm"; } //No default set -- Start up the application selection dialog LTHEME::LoadCustomEnvSettings(); QApplication App(argc, argv); LuminaThemeEngine theme(&App); LUtils::LoadTranslation(&App,"lumina-open"); LFileDialog w; if(extension=="email" || extension=="webbrowser"){ //URL w.setFileInfo(inFile, extension, false); }else{ //File if(inFile.endsWith("/")){ inFile.chop(1); } w.setFileInfo(inFile.section("/",-1), extension, true); } w.show(); App.exec(); if(!w.appSelected){ return ""; } //Return the run path if appropriate if(!w.appPath.isEmpty()){ path = w.appPath; } //Just do the default application registration here for now // might move it to the runtime phase later after seeing that the app has successfully started if(w.setDefault){ if(!w.appFile.isEmpty()){ LFileDialog::setDefaultApp(extension, w.appFile); } else{ LFileDialog::setDefaultApp(extension, w.appExec); } }else{ LFileDialog::setDefaultApp(extension, ""); } //Now return the resulting application command return w.appExec; }