# # # patch "src/GuitoneCore.cpp" # from [ca78bc05db6fd829fb1e5459e7784f813353ca7e] # to [20449663ae437a1183473223ccfcc0a3c112f066] # # patch "src/GuitoneDriver.cpp" # from [4ba006ff7f2e467db5341dac631cf42bc9cec07d] # to [fc2611f0e61aa9a2ff70c424f5e0068fcb5c4b91] # # patch "src/GuitoneStandalone.cpp" # from [9670cb15b775d6ccf316a9e7b40ce7dc9b6bfc9d] # to [bfa5211804f8915d4982afd17931de3785498ccf] # # patch "src/main.cpp" # from [5bcf3a85423911375242a9f34e2bd59b8ab132ff] # to [349519dc838cbc2d958838597dc1374f62513b35] # # patch "src/monotone/MonotoneThread.cpp" # from [6194325c884a5f8661944e11cb1815673962089b] # to [67c9699b1cc8d37b5865df4e7a6de34d590fea4c] # # patch "src/util/StdioParser.cpp" # from [af29c663982c21bce620c3358388795f65947524] # to [c0175ae7ed81aaa468d66042fae02d16ab2a79f6] # # patch "src/vocab.h" # from [4b620b9152cb9eb7f7eb13a3435a59c915d21acb] # to [0f05c39e3640906a00c77880e8dc76255d3e3a90] # ============================================================ --- src/GuitoneCore.cpp ca78bc05db6fd829fb1e5459e7784f813353ca7e +++ src/GuitoneCore.cpp 20449663ae437a1183473223ccfcc0a3c112f066 @@ -125,11 +125,11 @@ bool GuitoneCore::notify(QObject * objec { return QApplication::notify(object, event); } - catch (GuitoneException &ge) + catch (GuitoneException & ge) { - W(QString("catched unexpected guitone exception: %1").arg(ge)); + W(QString("catched unexpected guitone exception: %1").arg(ge.what())); } - catch (std::exception &e) + catch (std::exception & e) { W(QString("catched unexpected exception: %1").arg(e.what())); } ============================================================ --- src/GuitoneDriver.cpp 4ba006ff7f2e467db5341dac631cf42bc9cec07d +++ src/GuitoneDriver.cpp fc2611f0e61aa9a2ff70c424f5e0068fcb5c4b91 @@ -80,9 +80,9 @@ void GuitoneDriver::processCommands() path = MonotoneManager::normalizeWorkspacePath(path); APP->manager()->getThreadForWorkspace(path)->waitForStarted(); } - catch (GuitoneException e) + catch (GuitoneException & e) { - msg(QString("could not startup monotone: %1").arg(e)); + msg(QString("could not startup monotone: %1").arg(e.what())); QCoreApplication::exit(1); return; } @@ -95,9 +95,9 @@ void GuitoneDriver::processCommands() { APP->manager()->getThreadForDatabase(path)->waitForStarted(); } - catch (GuitoneException e) + catch (GuitoneException & e) { - msg(QString("could not startup monotone: %1").arg(e)); + msg(QString("could not startup monotone: %1").arg(e.what())); QCoreApplication::exit(1); return; } ============================================================ --- src/GuitoneStandalone.cpp 9670cb15b775d6ccf316a9e7b40ce7dc9b6bfc9d +++ src/GuitoneStandalone.cpp bfa5211804f8915d4982afd17931de3785498ccf @@ -119,9 +119,9 @@ bool GuitoneStandalone::tryLoadSomething { loadFromPath(path); } - catch (GuitoneException e) + catch (GuitoneException & e) { - W(QString("loading of '%1' failed: %2").arg(path).arg(e)); + W(QString("loading of '%1' failed: %2").arg(path).arg(e.what())); loaded = false; } D(QString("loading of '%1' succeeded").arg(path)); @@ -191,7 +191,7 @@ void GuitoneStandalone::loadFromPath(con { wnd->load(canonicalPath); } - catch (GuitoneException e) + catch (GuitoneException & e) { delete wnd; throw e; @@ -205,7 +205,7 @@ void GuitoneStandalone::loadFromPath(con emit updateRecentLists(); } - catch (GuitoneException e) + catch (GuitoneException & e) { Settings::removeItemFromList("RecentWorkspaceList", canonicalPath); Settings::removeItemFromList("RecentDatabaseList", canonicalPath); @@ -220,12 +220,12 @@ void GuitoneStandalone::loadWorkspace(co { loadFromPath(path); } - catch (GuitoneException e) + catch (GuitoneException & e) { QMessageBox::critical( NULL, tr("Failed to load workspace"), - tr("The workspace could not be loaded:\n%1").arg(e), + tr("The workspace could not be loaded:\n%1").arg(e.what()), QMessageBox::Ok ); @@ -248,12 +248,12 @@ void GuitoneStandalone::loadDatabase(con { loadFromPath(path); } - catch (GuitoneException e) + catch (GuitoneException & e) { QMessageBox::critical( NULL, tr("Failed to load database"), - tr("The database could not be loaded:\n%1").arg(e), + tr("The database could not be loaded:\n%1").arg(e.what()), QMessageBox::Ok ); ============================================================ --- src/main.cpp 5bcf3a85423911375242a9f34e2bd59b8ab132ff +++ src/main.cpp 349519dc838cbc2d958838597dc1374f62513b35 @@ -30,6 +30,8 @@ #include #include +#include + void guitoneMsgHandler(QtMsgType type, const char *msg) { switch (type) @@ -54,47 +56,66 @@ int main(int argc, char** argv) // install our own message handler to catch debug messages, warnings, etc. qInstallMsgHandler(guitoneMsgHandler); - qRegisterMetaType("TickerMap"); - qRegisterMetaType("MonotoneTaskPtr"); - qRegisterMetaType("QProcess::ProcessError"); + try + { + qRegisterMetaType("TickerMap"); + qRegisterMetaType("MonotoneTaskPtr"); + qRegisterMetaType("QProcess::ProcessError"); - QString locale = QLocale::system().name(); + QString locale = QLocale::system().name(); - // load the default Qt translations - QTranslator qtTranslator; - QString transPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); - if (!qtTranslator.load("qt_" + locale, transPath) && !locale.startsWith("en")) - { - W(QString("Couldn't load qt translation for %1 - using default") - .arg(locale)); - } + // load the default Qt translations + QTranslator qtTranslator; + QString transPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); + if (!qtTranslator.load("qt_" + locale, transPath) && !locale.startsWith("en")) + { + W(QString("Couldn't load qt translation for %1 - using default") + .arg(locale)); + } - // try to load the application's translation - QTranslator appTranslator; - QString transFileName("guitone_" + locale); + // try to load the application's translation + QTranslator appTranslator; + QString transFileName("guitone_" + locale); - if (!appTranslator.load(transFileName, ":/i18n") && !locale.startsWith("en")) + if (!appTranslator.load(transFileName, ":/i18n") && !locale.startsWith("en")) + { + W(QString("Couldn't load app translation for %1 - using default") + .arg(locale)); + } + + GuitoneCore * guitone; + if (argc > 1 && strcmp(argv[1], "exec") == 0) + { + guitone = new GuitoneDriver(argc, argv); + } + else + { + guitone = new GuitoneStandalone(argc, argv); + } + + guitone->installTranslator(&appTranslator); + guitone->installTranslator(&qtTranslator); + + int retValue = guitone->exec(); + delete guitone; + return retValue; + } + catch (GuitoneException & e) { - W(QString("Couldn't load app translation for %1 - using default") - .arg(locale)); + F(QString("unhandled guitone exception: %1").arg(e.what())); + return 1; } - - GuitoneCore * guitone; - if (argc > 1 && strcmp(argv[1], "exec") == 0) + catch (std::exception & e) { - guitone = new GuitoneDriver(argc, argv); + F(QString("unhandled std::exception: %1").arg(e.what())); + return 1; } - else + catch (...) { - guitone = new GuitoneStandalone(argc, argv); + F("unhandled unknown exception"); + return 1; } - guitone->installTranslator(&appTranslator); - guitone->installTranslator(&qtTranslator); - - int retValue = guitone->exec(); - delete guitone; - - return retValue; + I(false); } ============================================================ --- src/monotone/MonotoneThread.cpp 6194325c884a5f8661944e11cb1815673962089b +++ src/monotone/MonotoneThread.cpp 67c9699b1cc8d37b5865df4e7a6de34d590fea4c @@ -330,10 +330,10 @@ void MonotoneThread::run() QByteArray output = process->readAllStandardOutput(); headers = StdioParser::parseAndCheckHeaders(output); } - catch (GuitoneException error) + catch (GuitoneException & error) { cleanup(process); - emit aborted(threadNumber, QProcess::UnknownError, error); + emit aborted(threadNumber, QProcess::UnknownError, error.what()); return; } ============================================================ --- src/util/StdioParser.cpp af29c663982c21bce620c3358388795f65947524 +++ src/util/StdioParser.cpp c0175ae7ed81aaa468d66042fae02d16ab2a79f6 @@ -156,8 +156,8 @@ QList > St if (header == "format-version" && StdioParser::STDIO_VERSION != value.toInt()) { - throw GuitoneException("wrong stdio version, wanted %1, got %2") - .arg(StdioParser::STDIO_VERSION).arg(value.toInt()); + throw GuitoneException(QString("wrong stdio version, wanted %1, got %2") + .arg(StdioParser::STDIO_VERSION).arg(value.toInt())); } out.append(qMakePair(header, value)); } ============================================================ --- src/vocab.h 4b620b9152cb9eb7f7eb13a3435a59c915d21acb +++ src/vocab.h 0f05c39e3640906a00c77880e8dc76255d3e3a90 @@ -161,10 +161,19 @@ typedef QSharedPointer M // FIXME: just a few stupid typedefs which should be expanded later on // to more "intelligent" objects -typedef QString GuitoneException; typedef QString WorkspacePath; typedef QString DatabaseFile; +#include +class GuitoneException : public std::exception +{ + QString message; +public: + GuitoneException(const QString & msg) : message(msg) {} + virtual ~GuitoneException() throw() {} + const char * what() const throw() { return message.toStdString().c_str(); } +}; + // // global constants //