diff options
Diffstat (limited to 'depends/util/src')
-rw-r--r-- | depends/util/src/cmdutils.cpp | 194 | ||||
-rw-r--r-- | depends/util/src/osutils.cpp | 19 | ||||
-rw-r--r-- | depends/util/src/pathutils.cpp | 35 | ||||
-rw-r--r-- | depends/util/src/userutils.cpp | 82 |
4 files changed, 163 insertions, 167 deletions
diff --git a/depends/util/src/cmdutils.cpp b/depends/util/src/cmdutils.cpp index b9cab717..43a0bcde 100644 --- a/depends/util/src/cmdutils.cpp +++ b/depends/util/src/cmdutils.cpp @@ -21,8 +21,10 @@ * @file libutil/src/cmdutils.cpp */ -namespace Util { -namespace Commandline { +namespace Util +{ +namespace Commandline +{ // commandline splitter QStringList splitArgs(QString args) @@ -31,10 +33,10 @@ QStringList splitArgs(QString args) QString current; bool escape = false; QChar inquotes; - for (int i=0; i<args.length(); i++) + for (int i = 0; i < args.length(); i++) { QChar cchar = args.at(i); - + // \ escaped if (escape) { @@ -73,7 +75,6 @@ QStringList splitArgs(QString args) return argv; } - Parser::Parser(FlagStyle::Enum flagStyle, ArgumentStyle::Enum argStyle) { m_flagStyle = flagStyle; @@ -104,13 +105,13 @@ void Parser::addSwitch(QString name, bool def) { if (m_params.contains(name)) throw "Name not unique"; - + OptionDef *param = new OptionDef; param->type = otSwitch; param->name = name; param->metavar = QString("<%1>").arg(name); param->def = def; - + m_options[name] = param; m_params[name] = (CommonDef *)param; m_optionList.append(param); @@ -120,13 +121,13 @@ void Parser::addOption(QString name, QVariant def) { if (m_params.contains(name)) throw "Name not unique"; - + OptionDef *param = new OptionDef; param->type = otOption; param->name = name; param->metavar = QString("<%1>").arg(name); param->def = def; - + m_options[name] = param; m_params[name] = (CommonDef *)param; m_optionList.append(param); @@ -136,13 +137,13 @@ void Parser::addArgument(QString name, bool required, QVariant def) { if (m_params.contains(name)) throw "Name not unique"; - + PositionalDef *param = new PositionalDef; param->name = name; param->def = def; param->required = required; param->metavar = name; - + m_positionals.append(param); m_params[name] = (CommonDef *)param; } @@ -151,7 +152,7 @@ void Parser::addDocumentation(QString name, QString doc, QString metavar) { if (!m_params.contains(name)) throw "Name does not exist"; - + CommonDef *param = m_params[name]; param->doc = doc; if (!metavar.isNull()) @@ -164,7 +165,7 @@ void Parser::addShortOpt(QString name, QChar flag) throw "Name does not exist"; if (!m_options.contains(name)) throw "Name is not an Option or Swtich"; - + OptionDef *param = m_options[name]; m_flags[flag] = param; param->flag = flag; @@ -175,14 +176,14 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) { QStringList help; help << compileUsage(progName, useFlags) << "\r\n"; - + // positionals if (!m_positionals.isEmpty()) { help << "\r\n"; help << "Positional arguments:\r\n"; QListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *param = it2.next(); help << " " << param->metavar; @@ -190,17 +191,17 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << param->doc << "\r\n"; } } - + // Options if (!m_optionList.isEmpty()) { help << "\r\n"; QString optPrefix, flagPrefix; getPrefix(optPrefix, flagPrefix); - + help << "Options & Switches:\r\n"; QListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); help << " "; @@ -213,7 +214,8 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << optPrefix << option->name; if (option->type == otOption) { - QString arg = QString("%1%2").arg(((m_argStyle == ArgumentStyle::Equals) ? "=" : " "), option->metavar); + QString arg = QString("%1%2").arg( + ((m_argStyle == ArgumentStyle::Equals) ? "=" : " "), option->metavar); nameLength += arg.length(); help << arg; } @@ -221,7 +223,7 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << option->doc << "\r\n"; } } - + return help.join(""); } @@ -229,13 +231,13 @@ QString Parser::compileUsage(QString progName, bool useFlags) { QStringList usage; usage << "Usage: " << progName; - + QString optPrefix, flagPrefix; getPrefix(optPrefix, flagPrefix); - + // options QListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); usage << " ["; @@ -244,20 +246,20 @@ QString Parser::compileUsage(QString progName, bool useFlags) else usage << optPrefix << option->name; if (option->type == otOption) - usage << ((m_argStyle == ArgumentStyle::Equals) ? "=" : " ") << option->metavar; + usage << ((m_argStyle == ArgumentStyle::Equals) ? "=" : " ") << option->metavar; usage << "]"; } - + // arguments QListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *param = it2.next(); usage << " " << (param->required ? "<" : "["); usage << param->metavar; usage << (param->required ? ">" : "]"); } - + return usage.join(""); } @@ -265,59 +267,63 @@ QString Parser::compileUsage(QString progName, bool useFlags) QHash<QString, QVariant> Parser::parse(QStringList argv) { QHash<QString, QVariant> map; - + QStringListIterator it(argv); QString programName = it.next(); - + QString optionPrefix; QString flagPrefix; QListIterator<PositionalDef *> positionals(m_positionals); QStringList expecting; - + getPrefix(optionPrefix, flagPrefix); - + while (it.hasNext()) { QString arg = it.next(); - + if (!expecting.isEmpty()) - // we were expecting an argument + // we were expecting an argument { QString name = expecting.first(); - + if (map.contains(name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); - + throw ParsingError( + QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); + map[name] = QVariant(arg); - + expecting.removeFirst(); continue; } - + if (arg.startsWith(optionPrefix)) - // we have an option + // we have an option { - //qDebug("Found option %s", qPrintable(arg)); - + // qDebug("Found option %s", qPrintable(arg)); + QString name = arg.mid(optionPrefix.length()); QString equals; - - if ((m_argStyle == ArgumentStyle::Equals || m_argStyle == ArgumentStyle::SpaceAndEquals) && name.contains("=")) + + if ((m_argStyle == ArgumentStyle::Equals || + m_argStyle == ArgumentStyle::SpaceAndEquals) && + name.contains("=")) { int i = name.indexOf("="); - equals = name.mid(i+1); + equals = name.mid(i + 1); name = name.left(i); } - + if (m_options.contains(name)) { if (map.contains(name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); - + throw ParsingError(QString("Option %2%1 was given multiple times") + .arg(name, optionPrefix)); + OptionDef *option = m_options[name]; if (option->type == otSwitch) map[name] = true; - else //if (option->type == otOption) + else // if (option->type == otOption) { if (m_argStyle == ArgumentStyle::Space) expecting.append(name); @@ -326,85 +332,94 @@ QHash<QString, QVariant> Parser::parse(QStringList argv) else if (m_argStyle == ArgumentStyle::SpaceAndEquals) expecting.append(name); else - throw ParsingError(QString("Option %2%1 reqires an argument.").arg(name, optionPrefix)); + throw ParsingError(QString("Option %2%1 reqires an argument.") + .arg(name, optionPrefix)); } - + continue; } - + throw ParsingError(QString("Unknown Option %2%1").arg(name, optionPrefix)); } - + if (arg.startsWith(flagPrefix)) - // we have (a) flag(s) + // we have (a) flag(s) { - //qDebug("Found flags %s", qPrintable(arg)); - + // qDebug("Found flags %s", qPrintable(arg)); + QString flags = arg.mid(flagPrefix.length()); QString equals; - - if ((m_argStyle == ArgumentStyle::Equals || m_argStyle == ArgumentStyle::SpaceAndEquals) && flags.contains("=")) + + if ((m_argStyle == ArgumentStyle::Equals || + m_argStyle == ArgumentStyle::SpaceAndEquals) && + flags.contains("=")) { int i = flags.indexOf("="); - equals = flags.mid(i+1); + equals = flags.mid(i + 1); flags = flags.left(i); } - + for (int i = 0; i < flags.length(); i++) { QChar flag = flags.at(i); - + if (!m_flags.contains(flag)) throw ParsingError(QString("Unknown flag %2%1").arg(flag, flagPrefix)); - + OptionDef *option = m_flags[flag]; - + if (map.contains(option->name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(option->name, optionPrefix)); - + throw ParsingError(QString("Option %2%1 was given multiple times") + .arg(option->name, optionPrefix)); + if (option->type == otSwitch) map[option->name] = true; - else //if (option->type == otOption) + else // if (option->type == otOption) { if (m_argStyle == ArgumentStyle::Space) expecting.append(option->name); else if (!equals.isNull()) - if (i == flags.length()-1) + if (i == flags.length() - 1) map[option->name] = equals; else - throw ParsingError(QString("Flag %4%2 of Argument-requiring Option %1 not last flag in %4%3").arg(option->name, flag, flags, flagPrefix)); + throw ParsingError(QString("Flag %4%2 of Argument-requiring Option " + "%1 not last flag in %4%3") + .arg(option->name, flag, flags, flagPrefix)); else if (m_argStyle == ArgumentStyle::SpaceAndEquals) expecting.append(option->name); else - throw ParsingError(QString("Option %1 reqires an argument. (flag %3%2)").arg(option->name, flag, flagPrefix)); + throw ParsingError(QString("Option %1 reqires an argument. (flag %3%2)") + .arg(option->name, flag, flagPrefix)); } } - + continue; } - + // must be a positional argument if (!positionals.hasNext()) throw ParsingError(QString("Don't know what to do with '%1'").arg(arg)); - + PositionalDef *param = positionals.next(); - + map[param->name] = arg; } - + // check if we're missing something if (!expecting.isEmpty()) - throw ParsingError(QString("Was still expecting arguments for %2%1").arg(expecting.join(QString(", ")+optionPrefix), optionPrefix)); - + throw ParsingError(QString("Was still expecting arguments for %2%1").arg( + expecting.join(QString(", ") + optionPrefix), optionPrefix)); + while (positionals.hasNext()) { PositionalDef *param = positionals.next(); if (param->required) - throw ParsingError(QString("Missing required positional argument '%1'").arg(param->name)); + throw ParsingError( + QString("Missing required positional argument '%1'").arg(param->name)); else map[param->name] = param->def; } - + // fill out gaps QListIterator<OptionDef *> iter(m_optionList); while (iter.hasNext()) @@ -413,27 +428,27 @@ QHash<QString, QVariant> Parser::parse(QStringList argv) if (!map.contains(option->name)) map[option->name] = option->def; } - + return map; } -//clear defs +// clear defs void Parser::clear() { m_flags.clear(); m_params.clear(); m_options.clear(); - + QMutableListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); it.remove(); delete option; } - + QMutableListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *arg = it2.next(); it2.remove(); @@ -441,31 +456,30 @@ void Parser::clear() } } -//Destructor +// Destructor Parser::~Parser() { clear(); } -//getPrefix +// getPrefix void Parser::getPrefix(QString &opt, QString &flag) { if (m_flagStyle == FlagStyle::Windows) opt = flag = "/"; else if (m_flagStyle == FlagStyle::Unix) opt = flag = "-"; - //else if (m_flagStyle == FlagStyle::GNU) - else { + // else if (m_flagStyle == FlagStyle::GNU) + else + { opt = "--"; flag = "-"; } } // ParsingError -ParsingError::ParsingError(const QString &what) -:std::runtime_error(what.toStdString()) +ParsingError::ParsingError(const QString &what) : std::runtime_error(what.toStdString()) { } - } } diff --git a/depends/util/src/osutils.cpp b/depends/util/src/osutils.cpp deleted file mode 100644 index 9a85d1e5..00000000 --- a/depends/util/src/osutils.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright 2013 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "include/osutils.h" - -#include <QUrl> -#include <QFileInfo> diff --git a/depends/util/src/pathutils.cpp b/depends/util/src/pathutils.cpp index ad8d7566..485d03e8 100644 --- a/depends/util/src/pathutils.cpp +++ b/depends/util/src/pathutils.cpp @@ -3,7 +3,7 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software @@ -41,7 +41,7 @@ QString AbsolutePath(QString path) /** * Normalize path - * + * * Any paths inside the current directory will be normalized to relative paths (to current) * Other paths will be made absolute */ @@ -85,7 +85,7 @@ QString DirNameFromString(QString string, QString inDir) { num++; dirName = RemoveInvalidFilenameChars(dirName, '-') + QString::number(num); - + // If it's over 9000 if (num > 9000) return ""; @@ -95,59 +95,56 @@ QString DirNameFromString(QString string, QString inDir) bool ensureFilePathExists(QString filenamepath) { - QFileInfo a ( filenamepath ); + QFileInfo a(filenamepath); QDir dir; QString ensuredPath = a.path(); - bool success = dir.mkpath ( ensuredPath ); + bool success = dir.mkpath(ensuredPath); return success; } bool ensureFolderPathExists(QString foldernamepath) { - QFileInfo a ( foldernamepath ); + QFileInfo a(foldernamepath); QDir dir; QString ensuredPath = a.filePath(); - bool success = dir.mkpath ( ensuredPath ); + bool success = dir.mkpath(ensuredPath); return success; } - bool copyPath(QString src, QString dst) { QDir dir(src); if (!dir.exists()) return false; - if(!ensureFolderPathExists(dst)) + if (!ensureFolderPathExists(dst)) return false; - foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) + foreach(QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { QString inner_src = src + QDir::separator() + d; QString inner_dst = dst + QDir::separator() + d; copyPath(inner_src, inner_dst); } - foreach (QString f, dir.entryList(QDir::Files)) + foreach(QString f, dir.entryList(QDir::Files)) { QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f); } return true; } -void openDirInDefaultProgram ( QString path, bool ensureExists ) +void openDirInDefaultProgram(QString path, bool ensureExists) { QDir parentPath; - QDir dir( path ); - if(!dir.exists()) + QDir dir(path); + if (!dir.exists()) { parentPath.mkpath(dir.absolutePath()); } - QDesktopServices::openUrl ( "file:///" + dir.absolutePath() ); + QDesktopServices::openUrl("file:///" + dir.absolutePath()); } -void openFileInDefaultProgram ( QString filename ) +void openFileInDefaultProgram(QString filename) { - QDesktopServices::openUrl ( "file:///" + QFileInfo ( filename ).absolutePath() ); + QDesktopServices::openUrl("file:///" + QFileInfo(filename).absolutePath()); } - - diff --git a/depends/util/src/userutils.cpp b/depends/util/src/userutils.cpp index b70841ed..060a58e9 100644 --- a/depends/util/src/userutils.cpp +++ b/depends/util/src/userutils.cpp @@ -23,37 +23,37 @@ bool called_coinit = false; HRESULT CreateLink(LPCSTR linkPath, LPCSTR targetPath, LPCSTR args) { HRESULT hres; - + if (!called_coinit) { hres = CoInitialize(NULL); called_coinit = true; - + if (!SUCCEEDED(hres)) { qWarning("Failed to initialize COM. Error 0x%08X", hres); return hres; } } - - - IShellLink* link; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&link); - + + IShellLink *link; + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, + (LPVOID *)&link); + if (SUCCEEDED(hres)) { - IPersistFile* persistFile; - + IPersistFile *persistFile; + link->SetPath(targetPath); link->SetArguments(args); - - hres = link->QueryInterface(IID_IPersistFile, (LPVOID*)&persistFile); + + hres = link->QueryInterface(IID_IPersistFile, (LPVOID *)&persistFile); if (SUCCEEDED(hres)) { WCHAR wstr[MAX_PATH]; - + MultiByteToWideChar(CP_ACP, 0, linkPath, -1, wstr, MAX_PATH); - + hres = persistFile->Save(wstr, TRUE); persistFile->Release(); } @@ -70,51 +70,55 @@ QString Util::getDesktopDir() } // Cross-platform Shortcut creation -bool Util::createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) +bool Util::createShortCut(QString location, QString dest, QStringList args, QString name, + QString icon) { #if LINUX location = PathCombine(location, name + ".desktop"); qDebug("location: %s", qPrintable(location)); - + QFile f(location); f.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream stream(&f); - + QString argstring; if (!args.empty()) argstring = " '" + args.join("' '") + "'"; - - stream << "[Desktop Entry]" << "\n"; - stream << "Type=Application" << "\n"; + + stream << "[Desktop Entry]" + << "\n"; + stream << "Type=Application" + << "\n"; stream << "TryExec=" << dest.toLocal8Bit() << "\n"; stream << "Exec=" << dest.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; stream << "Icon=" << icon.toLocal8Bit() << "\n"; - + stream.flush(); f.close(); - - f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); - + + f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | + QFileDevice::ExeOther); + return true; #elif WINDOWS // TODO: Fix -// QFile file(PathCombine(location, name + ".lnk")); -// WCHAR *file_w; -// WCHAR *dest_w; -// WCHAR *args_w; -// file.fileName().toWCharArray(file_w); -// dest.toWCharArray(dest_w); - -// QString argStr; -// for (int i = 0; i < args.count(); i++) -// { -// argStr.append(args[i]); -// argStr.append(" "); -// } -// argStr.toWCharArray(args_w); - -// return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); + // QFile file(PathCombine(location, name + ".lnk")); + // WCHAR *file_w; + // WCHAR *dest_w; + // WCHAR *args_w; + // file.fileName().toWCharArray(file_w); + // dest.toWCharArray(dest_w); + + // QString argStr; + // for (int i = 0; i < args.count(); i++) + // { + // argStr.append(args[i]); + // argStr.append(" "); + // } + // argStr.toWCharArray(args_w); + + // return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); return false; #else qWarning("Desktop Shortcuts not supported on your platform!"); |