diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/importer.cpp | 10 | ||||
| -rw-r--r-- | src/locales/en.cpp | 2 | ||||
| -rw-r--r-- | src/main_linux.cpp | 4 | ||||
| -rw-r--r-- | src/providers/MailerSend.cpp | 11 | ||||
| -rw-r--r-- | src/ui/imgui_extensions.cpp | 14 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 20 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 13 |
7 files changed, 52 insertions, 22 deletions
diff --git a/src/importer.cpp b/src/importer.cpp index 23bdcbe..0027da9 100644 --- a/src/importer.cpp +++ b/src/importer.cpp @@ -210,8 +210,8 @@ static int _ai_document_to_invoice_t(void *arg) char* file_path = request->file_path; importer::ai_provider_impl impl = importer::get_ai_provider_implementation(administration::get_active_ai_service().provider); + #if !SIMULATE_AI_IMPORT request->status = importer::import_status::IMPORT_UPLOADING_FILE; - char file_id[100]; if (!impl.upload_file(file_path, file_id, 100)) { request->status = importer::import_status::IMPORT_DONE; @@ -256,6 +256,14 @@ static int _ai_document_to_invoice_t(void *arg) request->error = I_ERR_FAILED_QUERY; return 0; } + #else + invoice inv = administration::invoice_create_empty(); + usleep(5000 * 1000); + request->status = importer::import_status::IMPORT_UPLOADING_FILE; + usleep(5000 * 1000); + request->status = importer::import_status::IMPORT_WAITING_FOR_RESPONSE; + usleep(5000 * 1000); + #endif inv.extras.status = invoice_status::INVOICE_RECEIVED; diff --git a/src/locales/en.cpp b/src/locales/en.cpp index c03fcc3..673c3b7 100644 --- a/src/locales/en.cpp +++ b/src/locales/en.cpp @@ -343,7 +343,7 @@ locale_entry en_locales[] = { {"settings.services.ai_service.model", "Model"}, {"settings.services.ai_service.apikey", "API key"}, - {"settings.services.ai_service", "Email Service"}, + {"settings.services.email_service", "Email Service"}, {"settings.services.email_service.provider", "Provider"}, {"settings.services.email_service.apikey", "API key"}, diff --git a/src/main_linux.cpp b/src/main_linux.cpp index 95177ef..092fd80 100644 --- a/src/main_linux.cpp +++ b/src/main_linux.cpp @@ -69,13 +69,13 @@ static void _create_window(bool is_setup_window) else { glfwWindowHint(GLFW_RESIZABLE, true); } - + + glfwWindowHint(GLFW_SAMPLES, 4); window = glfwCreateWindow(windowWidth, windowHeight, "OpenBooks", nullptr, nullptr); if (window == nullptr) return; glfwMakeContextCurrent(window); glfwSwapInterval(1); - glfwWindowHint(GLFW_SAMPLES, 4); IMGUI_CHECKVERSION(); ImGui::CreateContext(); diff --git a/src/providers/MailerSend.cpp b/src/providers/MailerSend.cpp index dbae4c6..fe83aea 100644 --- a/src/providers/MailerSend.cpp +++ b/src/providers/MailerSend.cpp @@ -31,7 +31,6 @@ bool _MailerSend_send_email(const char* sender, const char* recipient, const cha const char *api_key = administration::get_email_service().api_key; httplib::SSLClient cli("api.mailersend.com", 443); - cli.enable_server_certificate_verification(false); cli.set_connection_timeout(15, 0); size_t body_size = 10000; @@ -60,9 +59,15 @@ bool _MailerSend_send_email(const char* sender, const char* recipient, const cha httplib::Result res = cli.Post("/v1/email", headers, body, "application/json"); memops::unalloc(body); + + if (!res) { + logger::error("Failed to send email. Reason: Timeout"); + return E_ERR_FAILED_REQUEST; + } - if (!res || (res->status != 200 && res->status != 202)) { - logger::error("Failed to send email."); + if (res->status != 200 && res->status != 202) { + int status = res->status; + logger::error("Failed to send email. Status code: '%d'", status); return E_ERR_FAILED_REQUEST; } diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp index 496bbe2..dee36a7 100644 --- a/src/ui/imgui_extensions.cpp +++ b/src/ui/imgui_extensions.cpp @@ -41,7 +41,7 @@ namespace ImGui float radius = 10.0f; const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorFg); const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorBg); - ImGui::LoadingIndicatorCircle(radius, bg, col, 6, 4.0f); + ImGui::LoadingIndicatorCircle(radius, bg, col, 6, 4.0f, 0.0f); } bool CheckboxX(const char* label, bool* v, bool disabled, bool show_loading_indicator_while_disabled) @@ -85,14 +85,14 @@ namespace ImGui static void DrawSuccessMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_SUCCESS); - if (isButton) ImGui::Button(ICON_FA_CHECK_SQUARE, ImVec2(bWidth, 0)); else ImGui::Text("√"); + if (isButton) ImGui::Button(ICON_FA_CHECK_SQUARE, ImVec2(bWidth, 0)); else ImGui::Text(ICON_FA_CHECK_SQUARE); ImGui::PopStyleColor(); } static void DrawFailureMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_ERROR); - if (isButton) ImGui::Button(ICON_FA_BAN, ImVec2(bWidth, 0)); else ImGui::Text("√"); + if (isButton) ImGui::Button(ICON_FA_BAN, ImVec2(bWidth, 0)); else ImGui::Text(ICON_FA_BAN); ImGui::PopStyleColor(); } @@ -796,7 +796,7 @@ namespace ImGui { static bool is_new_request = false; static bool show_status_change = false; - static time_t status_changed_at = 0; + static double status_changed_at = 0; static e_err last_err; if (active_request && active_request->status == exporter::export_status::EXPORT_DONE && is_new_request) @@ -804,7 +804,7 @@ namespace ImGui is_new_request = false; show_status_change = true; last_err = active_request->error; - status_changed_at = time(NULL); + status_changed_at = ImGui::GetTime(); } if (active_request && active_request->status != exporter::export_status::EXPORT_DONE) { @@ -834,14 +834,14 @@ namespace ImGui } else { DrawFailureMark(0, false); - ImGui::Text(locale::get("form.failure")); + ImGui::Text(locale::get("form.failed")); } ImGui::EndComboPreview(); } } ImGui::EndDisabled(); - if (difftime(time(NULL), status_changed_at) > 0.5f) { + if (ImGui::GetTime() - status_changed_at >= 1.0f) { show_status_change = false; } } diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 6ac043f..64dbc18 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -20,6 +20,7 @@ #include "ui.hpp" #include "memops.hpp" +#include "assets.hpp" #include "strops.hpp" #include "locales.hpp" #include "importer.hpp" @@ -431,6 +432,9 @@ static void draw_import_request() } } + ai_service ai = administration::get_active_ai_service(); + importer::ai_provider_impl ai_impl = importer::get_ai_provider_implementation(ai.provider); + ImGui::PushFont(ui::fontBig); ImVec2 windowSize = ImGui::GetWindowSize(); @@ -439,17 +443,25 @@ static void draw_import_request() const char* text = importer::status_to_string(active_import_request->status); if (active_import_request->error != I_ERR_SUCCESS) text = importer::error_to_string(active_import_request->error); ImVec2 textSize = ImGui::CalcTextSize(text); - ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f, + + ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f - 24, (windowSize.y) * 0.5f - radius - 40.0f)); + ImGui::Image(assets::load_image(ai_impl.icon_name), ImVec2(24, 24)); + + + ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f + 10, + (windowSize.y) * 0.5f - radius - 40.0f - 2)); ImGui::Text(text); if (active_import_request->error == I_ERR_SUCCESS) { ImGui::SetCursorPos(ImVec2((windowSize.x - radius*2) * 0.5f, (windowSize.y - radius*2) * 0.5f)); - const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered); - const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_Button); - ImGui::LoadingIndicatorCircle(radius, bg, col, 10, 4.0f); + const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorFg); + const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorBg); + ImGui::LoadingIndicatorCircle(radius, bg, col, 10, 4.0f, 0.0f); + + ImGui::Dummy(ImVec2(200,200)); } ImGui::PopFont(); diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index ffdfb9b..e7872d1 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -49,11 +49,13 @@ static void _set_active_invoice(invoice inv) void ui::destroy_invoices() { - memops::unalloc(invoice_items_buffer); - memops::unalloc(activity_buffer); + // Currently causes crash because of multithreaded imports. + // Main thread needs to be locked. + //memops::unalloc(invoice_items_buffer); + //memops::unalloc(activity_buffer); - invoice_items_buffer = 0; - activity_buffer = 0; + //invoice_items_buffer = 0; + //activity_buffer = 0; } void ui::setup_invoices() @@ -497,6 +499,9 @@ static void draw_send_options() _reload_activities(); } + else { + // @TODO show failure reason + } }); } // if (ImGui::Selectable(locale::get("ui.sendAs.einvoice"), false)) { |
