diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2017-12-03 22:23:08 +0100 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-12-04 12:19:26 +0100 | 
| commit | b256886a5cb9f2ae3ebda70a2045b19ed9f4233e (patch) | |
| tree | 4fa1e46de224cf834a05824dc1eb86001bdb3300 /logic | |
| parent | e89709a801e7874bc02c66848c638c6a0ccc85c1 (diff) | |
api: add status check for modules
Diffstat (limited to 'logic')
| -rw-r--r-- | logic/runtime-libraries.cpp | 43 | ||||
| -rw-r--r-- | logic/runtime-libraries.hpp | 2 | 
2 files changed, 31 insertions, 14 deletions
| diff --git a/logic/runtime-libraries.cpp b/logic/runtime-libraries.cpp index a04da6a2..8feeaaba 100644 --- a/logic/runtime-libraries.cpp +++ b/logic/runtime-libraries.cpp @@ -1,13 +1,13 @@  #include "runtime-libraries.hpp"  #include "options/scoped.hpp" +#include <QMessageBox>  #include <QDebug> -runtime_libraries::runtime_libraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f) : -    pTracker(nullptr), -    pFilter(nullptr), -    pProtocol(nullptr), -    correct(false) +runtime_libraries::runtime_libraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f)  { +    module_status status = +            module_status_mixin::error(QCoreApplication::translate("module", "Library load failure")); +      using namespace options;      with_tracker_teardown sentinel; @@ -15,15 +15,12 @@ runtime_libraries::runtime_libraries(QFrame* frame, dylibptr t, dylibptr p, dyli      pProtocol = make_dylib_instance<IProtocol>(p);      if (!pProtocol) -    { -        qDebug() << "protocol dylib load failure";          goto end; -    } -    if(!pProtocol->correct()) +    if(status = pProtocol->check_status(), !status.is_ok())      { -        qDebug() << "protocol load failure"; -        pProtocol = nullptr; +        status = QCoreApplication::translate("module", "Error occured while loading protocol %1\n\n%2\n") +                    .arg(p->name).arg(status.error);          goto end;      } @@ -36,10 +33,30 @@ runtime_libraries::runtime_libraries(QFrame* frame, dylibptr t, dylibptr p, dyli          goto end;      } -    pTracker->start_tracker(frame); +    if (pFilter) +        if(status = pFilter->check_status(), !status.is_ok()) +        { +            status = QCoreApplication::translate("module", "Error occured while loading filter %1\n\n%2\n") +                     .arg(f->name).arg(status.error); +            goto end; +        } + +    if (status = pTracker->start_tracker(frame), !status.is_ok()) +    { +        status = QCoreApplication::translate("module", "Error occured while loading tracker %1\n\n%2\n") +                 .arg(t->name).arg(status.error); +        goto end; +    }      correct = true; +    return; +  end: -    (void)0; +    pTracker = nullptr; +    pFilter = nullptr; +    pProtocol = nullptr; + +    if (!status.is_ok()) +        QMessageBox::critical(nullptr, "Startup failure", status.error, QMessageBox::Cancel, QMessageBox::NoButton);  } diff --git a/logic/runtime-libraries.hpp b/logic/runtime-libraries.hpp index cc96f0e7..1105c179 100644 --- a/logic/runtime-libraries.hpp +++ b/logic/runtime-libraries.hpp @@ -24,5 +24,5 @@ struct OTR_LOGIC_EXPORT runtime_libraries final      runtime_libraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f);      runtime_libraries() : pTracker(nullptr), pFilter(nullptr), pProtocol(nullptr), correct(false) {} -    bool correct; +    bool correct = false;  }; | 
