diff options
Diffstat (limited to 'src/core/file_picker_controller.cpp')
-rw-r--r-- | src/core/file_picker_controller.cpp | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp index 65e2c6f00..22c18ec6f 100644 --- a/src/core/file_picker_controller.cpp +++ b/src/core/file_picker_controller.cpp @@ -53,16 +53,32 @@ namespace QtWebEngineCore { -FilePickerController::FilePickerController(FileChooserMode mode, std::unique_ptr<content::FileSelectListener> listener, const QString &defaultFileName, const QStringList &acceptedMimeTypes, QObject *parent) +class FilePickerControllerPrivate { +public: + FilePickerController::FileChooserMode mode; + scoped_refptr<content::FileSelectListener> listener; + QString defaultFileName; + QStringList acceptedMimeTypes; +}; + +FilePickerController *createFilePickerController( + FilePickerController::FileChooserMode mode, scoped_refptr<content::FileSelectListener> listener, + const QString &defaultFileName, const QStringList &acceptedMimeTypes, QObject *parent = nullptr) +{ + auto priv = new FilePickerControllerPrivate{mode, listener, defaultFileName, acceptedMimeTypes}; + return new FilePickerController(priv, parent); +} + +FilePickerController::FilePickerController(FilePickerControllerPrivate *priv, QObject *parent) : QObject(parent) - , m_defaultFileName(defaultFileName) - , m_acceptedMimeTypes(acceptedMimeTypes) - , m_listener(std::move(listener)) - , m_mode(mode) + , d_ptr(priv) { } -FilePickerController::~FilePickerController() = default; +FilePickerController::~FilePickerController() +{ + delete d_ptr; +} void FilePickerController::accepted(const QStringList &files) { @@ -79,7 +95,7 @@ void FilePickerController::accepted(const QStringList &files) if (urlString.startsWith("file:")) { base::FilePath filePath = toFilePath(urlString).NormalizePathSeparators(); std::vector<base::FilePath::StringType> pathComponents; - // Splits the file URL into host name, path and file name. + // Splits the file URL into scheme, host name, path and file name. filePath.GetComponents(&pathComponents); QString absolutePath; @@ -91,7 +107,7 @@ void FilePickerController::accepted(const QStringList &files) if (scheme.size() > 5) { #if defined(OS_WIN) // There is no slash at the end of the file scheme and it is valid on Windows: file:C:/ - if (scheme.at(5).isLetter() && scheme.at(6) != ':') { + if (scheme.size() == 7 && scheme.at(5).isLetter() && scheme.at(6) == ':') { absolutePath += scheme.at(5) + ":/"; } else { #endif @@ -178,9 +194,13 @@ ASSERT_ENUMS_MATCH(FilePickerController::Save, blink::mojom::FileChooserParams_M void FilePickerController::filesSelectedInChooser(const QStringList &filesList) { QStringList files(filesList); - if (this->m_mode == UploadFolder && !filesList.isEmpty() - && QFileInfo(filesList.first()).isDir()) // Enumerate the directory + base::FilePath baseDir; + if (d_ptr->mode == UploadFolder && !filesList.isEmpty() + && QFileInfo(filesList.first()).isDir()) { + // Enumerate the directory files = listRecursively(QDir(filesList.first())); + baseDir = toFilePath(filesList.first()); + } std::vector<blink::mojom::FileChooserFileInfoPtr> chooser_files; for (const auto &file : qAsConst(files)) { @@ -189,26 +209,26 @@ void FilePickerController::filesSelectedInChooser(const QStringList &filesList) } if (files.isEmpty()) - m_listener->FileSelectionCanceled(); + d_ptr->listener->FileSelectionCanceled(); else - m_listener->FileSelected(std::move(chooser_files), - /* FIXME? */ base::FilePath(), - static_cast<blink::mojom::FileChooserParams::Mode>(this->m_mode)); + d_ptr->listener->FileSelected(std::move(chooser_files), + baseDir, + static_cast<blink::mojom::FileChooserParams::Mode>(d_ptr->mode)); } QStringList FilePickerController::acceptedMimeTypes() const { - return m_acceptedMimeTypes; + return d_ptr->acceptedMimeTypes; } FilePickerController::FileChooserMode FilePickerController::mode() const { - return m_mode; + return d_ptr->mode; } QString FilePickerController::defaultFileName() const { - return m_defaultFileName; + return d_ptr->defaultFileName; } QStringList FilePickerController::nameFilters(const QStringList &acceptedMimeTypes) |