summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2025-12-27 17:25:41 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2025-12-27 17:25:41 +0100
commit7c3a271feea4b3693bf93a47924f7c682585e179 (patch)
treeb72a1f3f2780f9f22f679e18f5d1780541cc040b /src/ui
parent28c730a2e35ce81634dd4d47bf8e92e4552ec17c (diff)
mail provider settings ui
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/imgui_extensions.cpp2
-rw-r--r--src/ui/ui_invoices.cpp4
-rw-r--r--src/ui/ui_settings.cpp74
3 files changed, 60 insertions, 20 deletions
diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp
index a90549f..f8adb70 100644
--- a/src/ui/imgui_extensions.cpp
+++ b/src/ui/imgui_extensions.cpp
@@ -525,7 +525,7 @@ namespace ImGui
}
int selected_tax_rate_index = -1;
- char rate_str_buf[MAX_LEN_LONG_DESC];
+ char rate_str_buf[MAX_LEN_LONG_DESC] = {0};
if (selected_tax_rate)
{
char category_code_desc[MAX_LEN_LONG_DESC];
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index c4d393c..dc51fd6 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -503,9 +503,9 @@ static void draw_invoice_view()
if (ImGui::Selectable(locale::get("ui.sendAs.email"), false)) {
}
- if (ImGui::Selectable(locale::get("ui.sendAs.einvoice"), false)) {
+ // if (ImGui::Selectable(locale::get("ui.sendAs.einvoice"), false)) {
- }
+ // }
ImGui::EndCombo();
}
ImGui::PushItemWidth(0.0f);
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index c458260..240e376 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -33,7 +33,8 @@ u32 cost_center_count;
cost_center* cost_centers = 0;
static int select_company_tab = 0;
-static ai_service new_service;
+static ai_service new_ai_service;
+static email_service new_email_service;
void ui::destroy_settings()
{
@@ -54,7 +55,8 @@ void ui::setup_settings()
cost_centers = (cost_center*)memops::alloc(cost_center_count * sizeof(cost_center));
administration::cost_center_get_all(cost_centers);
- new_service = administration::get_ai_service();
+ new_ai_service = administration::get_ai_service();
+ new_email_service = administration::get_email_service();
}
}
@@ -242,12 +244,13 @@ static void draw_cost_centers()
}
}
-static void draw_services()
-{
+// Dropdown to select ai service.
+// If a new service is selected -> model is set to first result in available model list.
+static void draw_ai_service_ui()
+{
static importer::model_list_request* model_request = 0;
static bool set_model_on_load = false;
- // AI service
if (ImGui::CollapsingHeader(locale::get("settings.services.ai_service")))
{
char* ai_service_names[AI_PROVIDER_END];
@@ -255,13 +258,13 @@ static void draw_services()
ai_service_names[i] = importer::get_ai_provider_implementation((ai_provider)i).provider_name;
}
- if (ImGui::BeginCombo(locale::get("settings.services.ai_service.provider"), ai_service_names[new_service.provider]))
+ if (ImGui::BeginCombo(locale::get("settings.services.ai_service.provider"), ai_service_names[new_ai_service.provider]))
{
for (u32 n = 0; n < AI_PROVIDER_END; n++)
{
- bool is_selected = n == (uint32_t)new_service.provider;
+ bool is_selected = n == (uint32_t)new_ai_service.provider;
if (ImGui::Selectable(ai_service_names[n], is_selected)) {
- new_service.provider = (ai_provider)n;
+ new_ai_service.provider = (ai_provider)n;
model_request = 0;
set_model_on_load = true;
}
@@ -270,10 +273,10 @@ static void draw_services()
}
ImGui::InputTextWithHint(locale::get("settings.services.ai_service.pubkey"), locale::get("settings.services.ai_service.pubkey"),
- new_service.api_key_public, sizeof(new_service.api_key_public));
+ new_ai_service.api_key_public, sizeof(new_ai_service.api_key_public));
if (!model_request) {
- model_request = importer::ai_get_available_models(new_service.provider);
+ model_request = importer::ai_get_available_models(new_ai_service.provider);
}
// Default to first result in model list, or hardcoded default model.
@@ -282,22 +285,22 @@ static void draw_services()
set_model_on_load = false;
if (model_request->result_count > 0) {
- strops::copy(new_service.model_name, model_request->result[0], sizeof(new_service.model_name));
+ strops::copy(new_ai_service.model_name, model_request->result[0], sizeof(new_ai_service.model_name));
}
else {
- strops::copy(new_service.model_name, importer::get_ai_provider_implementation(new_service.provider).default_model, sizeof(new_service.model_name));
+ strops::copy(new_ai_service.model_name, importer::get_ai_provider_implementation(new_ai_service.provider).default_model, sizeof(new_ai_service.model_name));
}
}
}
if (model_request->status == importer::status::IMPORT_DONE && model_request->error == I_ERR_SUCCESS) {
- if (ImGui::BeginCombo(locale::get("settings.services.ai_service.model"), new_service.model_name))
+ if (ImGui::BeginCombo(locale::get("settings.services.ai_service.model"), new_ai_service.model_name))
{
for (u32 n = 0; n < model_request->result_count; n++)
{
- bool is_selected = strops::equals(new_service.model_name, model_request->result[n]);
+ bool is_selected = strops::equals(new_ai_service.model_name, model_request->result[n]);
if (ImGui::Selectable(model_request->result[n], is_selected)) {
- strops::copy(new_service.model_name, model_request->result[n], sizeof(new_service.model_name));
+ strops::copy(new_ai_service.model_name, model_request->result[n], sizeof(new_ai_service.model_name));
}
}
ImGui::EndCombo();
@@ -317,7 +320,7 @@ static void draw_services()
ImGui::SameLine();
}
- ImGui::TextUnformatted(new_service.model_name);
+ ImGui::TextUnformatted(new_ai_service.model_name);
ImGui::EndComboPreview();
}
@@ -329,11 +332,48 @@ static void draw_services()
if (ImGui::Button(locale::get("form.save"), true)) {
administration_writer::set_write_completed_event_callback(0);
- administration::set_ai_service(new_service);
+ administration::set_ai_service(new_ai_service);
}
}
}
+static void draw_email_service_ui()
+{
+ if (ImGui::CollapsingHeader(locale::get("settings.services.email_service")))
+ {
+ char* email_service_names[EMAIL_PROVIDER_END];
+ for (u32 i = 0; i < EMAIL_PROVIDER_END; i++) {
+ email_service_names[i] = importer::get_email_provider_implementation((email_provider)i).provider_name;
+ }
+
+ if (ImGui::BeginCombo(locale::get("settings.services.email_service.provider"), email_service_names[new_ai_service.provider]))
+ {
+ for (u32 n = 0; n < EMAIL_PROVIDER_END; n++)
+ {
+ bool is_selected = n == (uint32_t)new_email_service.provider;
+ if (ImGui::Selectable(email_service_names[n], is_selected)) {
+ new_email_service.provider = (email_provider)n;
+ }
+ }
+ ImGui::EndCombo();
+ }
+
+ ImGui::InputTextWithHint(locale::get("settings.services.email_service.pubkey"),
+ locale::get("settings.services.email_service.pubkey"), new_email_service.api_key, sizeof(new_email_service.api_key));
+
+ if (ImGui::Button(locale::get("form.save"), true)) {
+ administration_writer::set_write_completed_event_callback(0);
+ administration::set_email_service(new_email_service);
+ }
+ }
+}
+
+static void draw_services()
+{
+ draw_email_service_ui();
+ draw_ai_service_ui();
+}
+
void ui::draw_settings()
{
if (ImGui::BeginTabBar("SettingsTabBar"))