Skip to content

Commit

Permalink
fix: Fix file extension and file filter on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
Foxushka authored Nov 23, 2024
1 parent 8126b49 commit bae9a59
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions windows/file_saver_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,16 @@ std::vector<int64_t> WideStringToVector(const wchar_t* wideStr) {
}

std::wstring FileExtensionToFileFilter(std::string fileExtension) {
if (fileExtension.empty()) {
return L"All Files (*.*)|*.*|";
}

std::string fileExtensionName = fileExtension.substr(1);
for (auto& c : fileExtensionName) c = (char) std::toupper(c);

std::wstring wideFileExtension = std::wstring(fileExtension.begin(), fileExtension.end());
std::wstring wideFileExtensionName = std::wstring(fileExtensionName.begin(), fileExtensionName.end());
return wideFileExtensionName + L" File\0*." + wideFileExtensionName + L"\0\0";
return wideFileExtensionName + L" File|*." + wideFileExtensionName + L"|";
}

void FileSaverPlugin::HandleMethodCall(
Expand All @@ -91,22 +95,24 @@ void FileSaverPlugin::HandleMethodCall(
const std::string inputFileName = std::get<std::string>(inputFileNameValue);

const flutter::EncodableValue& inputExtensionValue = mapArgs.at(flutter::EncodableValue("ext"));
const std::string inputExtension = std::get<std::string>(inputExtensionValue);
std::string inputExtension = std::get<std::string>(inputExtensionValue);

if (!inputExtension.empty() && inputExtension[0] != '.') {
inputExtension = "." + inputExtension;
}

const std::string defaultFileName = inputFileName + inputExtension;
static wchar_t szFile[MAX_PATH] = L"";
wcscpy_s(szFile, std::wstring(defaultFileName.begin(), defaultFileName.end()).c_str());

const std::wstring defaultFileFilter = FileExtensionToFileFilter(inputExtension);
static wchar_t lpstrFilter[MAX_PATH] = L"";
wcscpy_s(lpstrFilter, defaultFileFilter.c_str());
std::wstring defaultFileFilter = FileExtensionToFileFilter(inputExtension);
std::replace(defaultFileFilter.begin(), defaultFileFilter.end(), '|', '\0');

OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
// ofn.lpstrFilter = L"All Files\0*.*\0";
ofn.lpstrFilter = lpstrFilter;
ofn.lpstrFilter = defaultFileFilter.data();
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
Expand Down

0 comments on commit bae9a59

Please sign in to comment.