#include #include #include #include "../file.h" #include "../logcat_entry.h" #include "export.h" enum class ExportAmount : int { All = 0, Filtered = 1, }; static inline void export_logcat_entries(File& file, const LogcatEntries& logcat_entries, ExportAmount export_amount, bool export_buffers); static inline std::optional save_file_picker(); void export_fragment(const LogcatEntries& logcat_entries) { static ExportAmount export_amount = ExportAmount::Filtered; static bool export_buffers = true; ImGui::RadioButton("Export all entries", reinterpret_cast(&export_amount), static_cast(ExportAmount::All)); ImGui::RadioButton("Export filtered entries", reinterpret_cast(&export_amount), static_cast(ExportAmount::Filtered)); ImGui::Checkbox("Export buffers", &export_buffers); ImGui::Separator(); if (ImGui::Button("Export to File")) { std::optional file = save_file_picker(); if (file) { export_logcat_entries(*file, logcat_entries, export_amount, export_buffers); ImGui::CloseCurrentPopup(); } } ImGui::SameLine(); if (ImGui::Button("Export to Clipboard")) { // TODO exist } } static inline void export_logcat_entries(File& file, const LogcatEntries& logcat_entries, ExportAmount export_amount, bool export_buffers) { // TODO actually do the job file.write(std::string("Count of all entries: ") + std::to_string(logcat_entries.size_all()) + '\n'); file.write(std::string("Count of filtered entries: ") + std::to_string(logcat_entries.size_filtered()) + '\n'); file.write(std::string("Export amount: ") + (export_amount == ExportAmount::All ? "all" : "filtered") + '\n'); file.write(std::string("Export buffers: ") + (export_buffers ? "true" : "false") + '\n'); } static inline std::optional save_file_picker() { nfdchar_t* path; nfdfilteritem_t filters[1] = {{"Log file", "log"}}; nfdresult_t res = NFD_SaveDialog(&path, filters, 1, nullptr, "logcat.log"); if (res == NFD_OKAY) { try { File file(path, "w"); NFD_FreePath(path); return std::move(file); } catch (const std::exception& e) { NFD_FreePath(path); log(std::string("Failed to open file from file picker: ") + e.what()); } } else if (res == NFD_CANCEL) { // dialog was canceled, shrug } else { log(std::string("Failed to open file picker: ") + NFD_GetError()); } return std::nullopt; }