diff options
| -rw-r--r-- | src/main.cpp | 16 | ||||
| -rw-r--r-- | src/search.cpp | 15 | ||||
| -rw-r--r-- | src/search.h | 2 |
3 files changed, 21 insertions, 12 deletions
diff --git a/src/main.cpp b/src/main.cpp index f50cd8e..424c1b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,14 +10,18 @@ #include <stdio.h> +// Search params. utf8_int8_t path_buffer[MAX_INPUT_LENGTH]; utf8_int8_t filter_buffer[MAX_INPUT_LENGTH]; utf8_int8_t query_buffer[MAX_INPUT_LENGTH]; +int ts_thread_count = 4; +int max_file_size = megabytes(1000); +// Popups bool open_settings_window = false; bool open_about_window = false; -int ts_thread_count = 4; +// Localization int current_locale_index = 0; int locales_count = 2; char* locales[] = { @@ -35,7 +39,7 @@ static void _ts_create_popups() { // Settings window if (ImGui::BeginPopupModal("Text-Search settings", NULL, ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove)) { ImGui::SetWindowSize({300, 0}); - ImGui::DragInt("Threads", &ts_thread_count, 1.0f, 1, 64); + ImGui::DragInt("Threads", &ts_thread_count, 1.0f, 1, 4); ImGui::Combo("Language", ¤t_locale_index, locales, locales_count); ImGui::Dummy({0, 70}); @@ -125,7 +129,7 @@ void ts_init() { int _tb_query_input_cb(ImGuiInputTextCallbackData* data) { if (data->EventFlag == ImGuiInputTextFlags_CallbackEdit) { utf8ncpy(query_buffer, data->Buf, MAX_INPUT_LENGTH); - ts_start_search(path_buffer, filter_buffer, query_buffer); + ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size); } return 0; @@ -230,7 +234,7 @@ void ts_create_gui(int window_w, int window_h) { ImGui::PushItemWidth(-1); if (ImGui::InputTextWithHint("query", "Query", query_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_CallbackEdit|ImGuiInputTextFlags_EnterReturnsTrue, _tb_query_input_cb)) { - ts_start_search(path_buffer, filter_buffer, query_buffer); + ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size); } ImGui::PopItemWidth(); ImGui::PopStyleVar(); @@ -243,7 +247,7 @@ void ts_create_gui(int window_w, int window_h) { ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); ImGui::PushItemWidth(-1); if (ImGui::InputTextWithHint("filter-ti", "Filter", filter_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_EnterReturnsTrue)) { - ts_start_search(path_buffer, filter_buffer, query_buffer); + ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size); } ImGui::PopItemWidth(); ImGui::PopStyleVar(); @@ -254,7 +258,7 @@ void ts_create_gui(int window_w, int window_h) { else { ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); if (ImGui::Button("Search")) { - ts_start_search(path_buffer, filter_buffer, query_buffer); + ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size); } ImGui::PopStyleVar(); } diff --git a/src/search.cpp b/src/search.cpp index 38bda76..82ffc64 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -303,17 +303,20 @@ static void *_ts_search_thread(void *args) keep_going:; while (new_result->file_list_read_cursor < new_result->files.length) { + ts_thread_sleep(10); if (new_result->cancel_search) goto finish_early; ts_mutex_lock(&new_result->files.mutex); - int read_cursor = new_result->file_list_read_cursor++; + int read_cursor = new_result->file_list_read_cursor+1; + if (read_cursor >= new_result->files.length) { + ts_mutex_unlock(&new_result->files.mutex); + continue; + } new_result->file_count++; + new_result->file_list_read_cursor++; ts_mutex_unlock(&new_result->files.mutex); - if (read_cursor >= new_result->files.length) - continue; - ts_found_file *f = *(ts_found_file **)ts_array_at(&new_result->files, read_cursor); ts_file_content content = ts_platform_read_file(f->path, "rb, ccs=UTF-8"); @@ -366,7 +369,7 @@ static void _ts_list_files(ts_search_result* result) ts_thread_detach(&thr); } -void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query) +void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size) { if (utf8len(query) > 0 && utf8len(query) <= 2) { // need a string of atleast 3 characters return; @@ -381,6 +384,8 @@ void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query) snprintf(new_result->directory_to_search, MAX_INPUT_LENGTH, "%s", path); snprintf(new_result->search_text, MAX_INPUT_LENGTH, "%s", query); new_result->filters = ts_get_filters(filter); + new_result->max_ts_thread_count = thread_count; + new_result->max_file_size = max_file_size; if (utf8len(query) == 0) { new_result->search_text = nullptr; diff --git a/src/search.h b/src/search.h index e9464b5..400edbe 100644 --- a/src/search.h +++ b/src/search.h @@ -68,6 +68,6 @@ int ts_filter_matches(ts_array *filters, utf8_int8_t *string, utf8_int8_t ** int ts_string_match(utf8_int8_t *first, utf8_int8_t *second); ts_search_result* ts_create_empty_search_result(); bool ts_string_contains(utf8_int8_t *text_to_search, utf8_int8_t *text_to_find, ts_array *text_matches); -void ts_start_search(utf8_int8_t* path, utf8_int8_t* filter, utf8_int8_t* query); +void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size); #endif
\ No newline at end of file |
