Improving error reporting to user

master
Melroy van den Berg 2021-02-17 00:49:55 +01:00
parent b4e521e171
commit a42d8934ee
2 changed files with 46 additions and 17 deletions

View File

@ -26,6 +26,19 @@ pkg_check_modules(CAIRO cairomm-1.0)
add_definitions(${GTKMM_CFLAGS_OTHER})
# Add JSON Parser via CMake Fetch Content feature
include(FetchContent)
FetchContent_Declare(json
GIT_REPOSITORY https://github.com/ArthurSonzogni/nlohmann_json_cmake_fetchcontent
GIT_TAG v3.9.1)
FetchContent_GetProperties(json)
if(NOT json_POPULATED)
FetchContent_Populate(json)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
# Include CPack packaging settings
#include(packaging)
@ -87,6 +100,6 @@ target_link_directories(${PROJECT_TARGET} PRIVATE
${CAIRO_LIBRARY_DIRS}
)
target_link_libraries(${PROJECT_TARGET} PRIVATE LibCommonMarker LibCommonMarkerExtensions ipfs-http-client Threads::Threads ${CXX_FILESYSTEM_LIBRARIES} ${GTKMM_LIBRARIES} ${CAIRO_LIBRARIES})
target_link_libraries(${PROJECT_TARGET} PRIVATE LibCommonMarker LibCommonMarkerExtensions ipfs-http-client Threads::Threads ${CXX_FILESYSTEM_LIBRARIES} ${GTKMM_LIBRARIES} ${CAIRO_LIBRARIES} nlohmann_json::nlohmann_json)
install(TARGETS ${PROJECT_TARGET} RUNTIME DESTINATION "bin" COMPONENT applications)

View File

@ -5,6 +5,7 @@
#include <cmark-gfm.h>
#include <pthread.h>
#include <iostream>
#include <nlohmann/json.hpp>
#include "md-parser.h"
#include "menu.h"
@ -27,12 +28,12 @@ MainWindow::MainWindow()
add_accel_group(accelGroup);
// Connect signals
m_menu.quit.connect(sigc::mem_fun(this, &MainWindow::hide)); /*!< hide main window and therefor closes the app */
m_menu.cut.connect(sigc::mem_fun(m_draw, &Draw::cut)); /*!< Menu item for cut text */
m_menu.copy.connect(sigc::mem_fun(m_draw, &Draw::copy)); /*!< Menu item for copy text */
m_menu.paste.connect(sigc::mem_fun(m_draw, &Draw::paste)); /*!< Menu item for paste text */
m_menu.quit.connect(sigc::mem_fun(this, &MainWindow::hide)); /*!< hide main window and therefor closes the app */
m_menu.cut.connect(sigc::mem_fun(m_draw, &Draw::cut)); /*!< Menu item for cut text */
m_menu.copy.connect(sigc::mem_fun(m_draw, &Draw::copy)); /*!< Menu item for copy text */
m_menu.paste.connect(sigc::mem_fun(m_draw, &Draw::paste)); /*!< Menu item for paste text */
//m_menu.del.connect(sigc::mem_fun(m_draw, &Draw::del));
m_menu.select_all.connect(sigc::mem_fun(m_draw, &Draw::selectAll)); /*!< Menu item for selecting all text */
m_menu.select_all.connect(sigc::mem_fun(m_draw, &Draw::selectAll)); /*!< Menu item for selecting all text */
//m_menu.find.connect(sigc::mem_fun(this, &MainWindow::find));
m_menu.back.connect(sigc::mem_fun(this, &MainWindow::back)); /*!< Menu item for previous page */
m_menu.forward.connect(sigc::mem_fun(this, &MainWindow::forward)); /*!< Menu item for next page */
@ -42,13 +43,13 @@ MainWindow::MainWindow()
m_sourceCodeDialog.signal_response().connect(sigc::mem_fun(m_sourceCodeDialog, &SourceCodeDialog::hide_dialog)); /*!< Close source code dialog */
m_menu.about.connect(sigc::mem_fun(m_about, &About::show_about)); /*!< Display about dialog */
m_draw.source_code.connect(sigc::mem_fun(this, &MainWindow::show_source_code_dialog));
m_about.signal_response().connect(sigc::mem_fun(m_about, &About::hide_about)); /*!< Close about dialog */
m_backButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::back)); /*!< Button for previous page */
m_forwardButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::forward)); /*!< Button for next page */
m_refreshButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::refresh)); /*!< Button for reloading the page */
m_homeButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::go_home)); /*!< Button for home page */
m_addressBar.signal_activate().connect(sigc::mem_fun(this, &MainWindow::address_bar_activate)); /*!< User pressed enter the address bar */
m_about.signal_response().connect(sigc::mem_fun(m_about, &About::hide_about)); /*!< Close about dialog */
m_backButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::back)); /*!< Button for previous page */
m_forwardButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::forward)); /*!< Button for next page */
m_refreshButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::refresh)); /*!< Button for reloading the page */
m_homeButton.signal_clicked().connect(sigc::mem_fun(this, &MainWindow::go_home)); /*!< Button for home page */
m_addressBar.signal_activate().connect(sigc::mem_fun(this, &MainWindow::address_bar_activate)); /*!< User pressed enter the address bar */
m_vbox.pack_start(m_menu, false, false, 0);
// Horizontal bar
@ -256,9 +257,24 @@ void MainWindow::fetchFromIPFS()
}
catch (const std::runtime_error &error)
{
std::cerr << "Error: IPFS request failed, with message: " << error.what() << std::endl;
// Show not found (or any other issue)
m_draw.showMessage("Page not found!", "Detailed error message: " + std::string(error.what()));
std::string errorMessage = std::string(error.what());
std::cerr << "Error: IPFS request failed, with message: " << errorMessage << std::endl;
if (errorMessage.starts_with("HTTP request failed with status code"))
{
// Remove text until ':\n'
errorMessage.erase(0, errorMessage.find(':') + 2);
auto content = nlohmann::json::parse(errorMessage);
std::string message = content.value("Message", "");
m_draw.showMessage("Page not found!", message);
}
else if (errorMessage.starts_with("Couldn't connect to server: Failed to connect to localhost"))
{
m_draw.showMessage("Please wait...", "IPFS daemon is still spinnng-up, please try to refresh shortly...");
}
else
{
m_draw.showMessage("Something went wrong", "Error message: " + std::string(error.what()));
}
}
}
@ -278,7 +294,7 @@ void MainWindow::openFromDisk()
catch (const std::runtime_error &error)
{
std::cerr << "Error: File request failed, with message: " << error.what() << std::endl;
m_draw.showMessage("Page not found!", "Detailed error message: " + std::string(error.what()));
m_draw.showMessage("Page not found!", "Error message: " + std::string(error.what()));
}
}