diff --git a/krita/plugins/formats/bmp/kis_bmp_export.cpp b/krita/plugins/formats/bmp/kis_bmp_export.cpp --- a/krita/plugins/formats/bmp/kis_bmp_export.cpp +++ b/krita/plugins/formats/bmp/kis_bmp_export.cpp @@ -57,8 +57,7 @@ if (from != "application/x-krita") return KisImportExportFilter::NotImplemented; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); qApp->processEvents(); // For vector layers to be updated input->image()->waitForDone(); diff --git a/krita/plugins/formats/bmp/kis_bmp_import.cpp b/krita/plugins/formats/bmp/kis_bmp_import.cpp --- a/krita/plugins/formats/bmp/kis_bmp_import.cpp +++ b/krita/plugins/formats/bmp/kis_bmp_import.cpp @@ -66,7 +66,7 @@ doc->prepareForImport(); if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty() || !url.isLocalFile()) { return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/exr/exr_export.cc b/krita/plugins/formats/exr/exr_export.cc --- a/krita/plugins/formats/exr/exr_export.cc +++ b/krita/plugins/formats/exr/exr_export.cc @@ -100,8 +100,7 @@ QString filename = m_chain->outputFile(); if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); exrConverter kpc(input, !m_chain->manager()->getBatchMode()); diff --git a/krita/plugins/formats/exr/exr_import.cc b/krita/plugins/formats/exr/exr_import.cc --- a/krita/plugins/formats/exr/exr_import.cc +++ b/krita/plugins/formats/exr/exr_import.cc @@ -58,7 +58,7 @@ if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/heightmap/kis_heightmap_import.cpp b/krita/plugins/formats/heightmap/kis_heightmap_import.cpp --- a/krita/plugins/formats/heightmap/kis_heightmap_import.cpp +++ b/krita/plugins/formats/heightmap/kis_heightmap_import.cpp @@ -92,7 +92,7 @@ return KisImportExportFilter::FileNotFound; } - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); dbgFile << "Import: " << url; diff --git a/krita/plugins/formats/jp2/jp2_export.cc b/krita/plugins/formats/jp2/jp2_export.cc --- a/krita/plugins/formats/jp2/jp2_export.cc +++ b/krita/plugins/formats/jp2/jp2_export.cc @@ -108,8 +108,7 @@ KisConfig().setExportConfiguration("JP2", cfg); - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); image->refreshGraph(); image->lock(); diff --git a/krita/plugins/formats/jp2/jp2_import.cc b/krita/plugins/formats/jp2/jp2_import.cc --- a/krita/plugins/formats/jp2/jp2_import.cc +++ b/krita/plugins/formats/jp2/jp2_import.cc @@ -56,7 +56,7 @@ if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/jpeg/kis_jpeg_export.cc b/krita/plugins/formats/jpeg/kis_jpeg_export.cc --- a/krita/plugins/formats/jpeg/kis_jpeg_export.cc +++ b/krita/plugins/formats/jpeg/kis_jpeg_export.cc @@ -189,8 +189,7 @@ if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); image->refreshGraph(); image->lock(); diff --git a/krita/plugins/formats/jpeg/kis_jpeg_import.cc b/krita/plugins/formats/jpeg/kis_jpeg_import.cc --- a/krita/plugins/formats/jpeg/kis_jpeg_import.cc +++ b/krita/plugins/formats/jpeg/kis_jpeg_import.cc @@ -59,7 +59,7 @@ if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/oiio/kis_oiio_export.cpp b/krita/plugins/formats/oiio/kis_oiio_export.cpp --- a/krita/plugins/formats/oiio/kis_oiio_export.cpp +++ b/krita/plugins/formats/oiio/kis_oiio_export.cpp @@ -57,8 +57,7 @@ if (from != "application/x-krita") return KisImportExportFilter::NotImplemented; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); qApp->processEvents(); // For vector layers to be updated input->image()->waitForDone(); diff --git a/krita/plugins/formats/ora/ora_export.cc b/krita/plugins/formats/ora/ora_export.cc --- a/krita/plugins/formats/ora/ora_export.cc +++ b/krita/plugins/formats/ora/ora_export.cc @@ -89,8 +89,7 @@ if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); KisImageWSP image = input->image(); Q_CHECK_PTR(image); diff --git a/krita/plugins/formats/ora/ora_import.cc b/krita/plugins/formats/ora/ora_import.cc --- a/krita/plugins/formats/ora/ora_import.cc +++ b/krita/plugins/formats/ora/ora_import.cc @@ -55,7 +55,7 @@ if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/png/kis_png_export.cc b/krita/plugins/formats/png/kis_png_export.cc --- a/krita/plugins/formats/png/kis_png_export.cc +++ b/krita/plugins/formats/png/kis_png_export.cc @@ -82,6 +82,7 @@ if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; + QUrl url = QUrl::fromLocalFile(filename); if (from != "application/x-krita") return KisImportExportFilter::NotImplemented; @@ -216,9 +217,6 @@ delete kdb; - QUrl url; - url.setPath(filename); - KisPNGConverter kpc(input); vKisAnnotationSP_it beginIt = image->beginAnnotations(); diff --git a/krita/plugins/formats/png/kis_png_import.cc b/krita/plugins/formats/png/kis_png_import.cc --- a/krita/plugins/formats/png/kis_png_import.cc +++ b/krita/plugins/formats/png/kis_png_import.cc @@ -60,7 +60,7 @@ if (!filename.isEmpty()) { - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/ppm/kis_ppm_import.cpp b/krita/plugins/formats/ppm/kis_ppm_import.cpp --- a/krita/plugins/formats/ppm/kis_ppm_import.cpp +++ b/krita/plugins/formats/ppm/kis_ppm_import.cpp @@ -72,7 +72,7 @@ return KisImportExportFilter::FileNotFound; } - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/plugins/formats/psd/psd_export.cc b/krita/plugins/formats/psd/psd_export.cc --- a/krita/plugins/formats/psd/psd_export.cc +++ b/krita/plugins/formats/psd/psd_export.cc @@ -111,8 +111,7 @@ if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); PSDSaver kpc(input); KisImageBuilder_Result res; diff --git a/krita/plugins/formats/qml/qml_export.cc b/krita/plugins/formats/qml/qml_export.cc --- a/krita/plugins/formats/qml/qml_export.cc +++ b/krita/plugins/formats/qml/qml_export.cc @@ -61,8 +61,7 @@ return KisImportExportFilter::FileNotFound; } - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); KisImageWSP image = input->image(); diff --git a/krita/plugins/formats/tga/kis_tga_export.cpp b/krita/plugins/formats/tga/kis_tga_export.cpp --- a/krita/plugins/formats/tga/kis_tga_export.cpp +++ b/krita/plugins/formats/tga/kis_tga_export.cpp @@ -60,9 +60,6 @@ if (from != "application/x-krita") return KisImportExportFilter::NotImplemented; - QUrl url; - url.setPath(filename); - qApp->processEvents(); // For vector layers to be updated input->image()->waitForDone(); diff --git a/krita/plugins/formats/tiff/kis_tiff_export.cc b/krita/plugins/formats/tiff/kis_tiff_export.cc --- a/krita/plugins/formats/tiff/kis_tiff_export.cc +++ b/krita/plugins/formats/tiff/kis_tiff_export.cc @@ -100,8 +100,7 @@ if (filename.isEmpty()) return KisImportExportFilter::FileNotFound; - QUrl url; - url.setPath(filename); + QUrl url = QUrl::fromLocalFile(filename); KisImageSP image; diff --git a/krita/plugins/formats/xcf/kis_xcf_import.cpp b/krita/plugins/formats/xcf/kis_xcf_import.cpp --- a/krita/plugins/formats/xcf/kis_xcf_import.cpp +++ b/krita/plugins/formats/xcf/kis_xcf_import.cpp @@ -116,7 +116,7 @@ return KisImportExportFilter::FileNotFound; } - QUrl url(filename); + QUrl url = QUrl::fromLocalFile(filename); if (url.isEmpty()) return KisImportExportFilter::FileNotFound; diff --git a/krita/ui/KisDocument.cpp b/krita/ui/KisDocument.cpp --- a/krita/ui/KisDocument.cpp +++ b/krita/ui/KisDocument.cpp @@ -719,6 +719,7 @@ KisImportExportFilter::ConversionStatus status = d->filterManager->exportDocument(localFilePath(), outputMimeType); ret = status == KisImportExportFilter::OK; suppressErrorDialog = (status == KisImportExportFilter::UserCancelled || status == KisImportExportFilter::BadConversionGraph); + dbgFile << "Export status was" << status; } else { // Native format => normal save Q_ASSERT(!localFilePath().isEmpty()); @@ -1270,7 +1271,7 @@ d->specialOutputFlag = 0; QByteArray _native_format = nativeFormatMimeType(); - QUrl u(localFilePath()); + QUrl u = QUrl::fromLocalFile(localFilePath()); QString typeName = mimeType(); if (typeName.isEmpty()) { diff --git a/krita/ui/KisFilterChain.cpp b/krita/ui/KisFilterChain.cpp --- a/krita/ui/KisFilterChain.cpp +++ b/krita/ui/KisFilterChain.cpp @@ -503,8 +503,7 @@ KisDocument* KisFilterChain::createDocument(const QString& file) { - QUrl url; - url.setPath(file); + QUrl url = QUrl::fromLocalFile(file); QMimeDatabase db; QMimeType t = db.mimeTypeForFile(url.path(), QMimeDatabase::MatchExtension); if (t.isDefault()) { diff --git a/krita/ui/KisImportExportManager.h b/krita/ui/KisImportExportManager.h --- a/krita/ui/KisImportExportManager.h +++ b/krita/ui/KisImportExportManager.h @@ -25,6 +25,7 @@ #include #include #include +#include #include "KisFilterChain.h" #include "KisFilterGraph.h" @@ -69,33 +70,34 @@ /** * Create a filter manager for a filter which wants to embed something. - * The url it passes is the file to convert, obviously. You cannot use + * The path it passes is the file to convert. You cannot use * the @ref importDocument() method -- use @ref exportDocument() to convert * the file to the destination mimetype you prefer. * - * @param url The file you want to export + * @param path The location you want to export * @param mimetypeHint The mimetype of the file you want to export. You have * to specify this information only if the automatic detection will * fail because e.g. you saved an embedded stream to a *.tmp file. * Most likely you do not have to care about that. * @param parentChain The parent filter chain of this filter manager. Used * to allow embedding for filters. Most likely you do not have to care. */ - explicit KisImportExportManager(const QString& url, const QByteArray& mimetypeHint = QByteArray(), + explicit KisImportExportManager(const QString& location, const QByteArray& mimetypeHint = QByteArray(), KisFilterChain * const parentChain = 0); virtual ~KisImportExportManager(); /** - * Imports the passed URL and returns the resultant filename + * Imports the specified document and returns the resultant filename * (most likely some file in /tmp). + * @p path can be either a URL or a filename. * @p documentMimeType gives importDocument a hint about what type * the document may be. It can be left empty. - * The @p status variable signals the success/error of the conversion + * @p status signals the success/error of the conversion. * If the QString which is returned isEmpty() and the status is OK, * then we imported the file directly into the document. */ - QString importDocument(const QString& url, + QString importDocument(const QString& location, const QString& documentMimeType, KisImportExportFilter::ConversionStatus& status); @@ -106,7 +108,7 @@ * and when the method returns @p mimeType contains this mimetype. * Oh, well, export is a C++ keyword ;) */ - KisImportExportFilter::ConversionStatus exportDocument(const QString& url, QByteArray& mimeType); + KisImportExportFilter::ConversionStatus exportDocument(const QString& location, QByteArray& mimeType); ///@name Static API //@{ @@ -160,11 +162,11 @@ // pretty safe. friend QString KisFilterChain::filterManagerImportFile() const; QString importFile() const { - return m_importUrl; + return m_importUrl.toLocalFile(); } friend QString KisFilterChain::filterManagerExportFile() const; QString exportFile() const { - return m_exportUrl; + return m_exportUrl.toLocalFile(); } friend KisDocument *KisFilterChain::filterManagerKisDocument() const; KisDocument *document() const { @@ -183,11 +185,15 @@ KisImportExportManager(const KisImportExportManager& rhs); KisImportExportManager &operator=(const KisImportExportManager& rhs); + // Convert file path string or URL string into QUrl + QUrl locationToUrl(QString location) const; + void importErrorHelper(const QString& mimeType, const bool suppressDialog = false); KisDocument *m_document; KisFilterChain *const m_parentChain; - QString m_importUrl, m_exportUrl; + QUrl m_importUrl; + QUrl m_exportUrl; QByteArray m_importUrlMimetypeHint; ///< suggested mimetype CalligraFilter::Graph m_graph; Direction m_direction; diff --git a/krita/ui/KisImportExportManager.cpp b/krita/ui/KisImportExportManager.cpp --- a/krita/ui/KisImportExportManager.cpp +++ b/krita/ui/KisImportExportManager.cpp @@ -58,11 +58,11 @@ } -KisImportExportManager::KisImportExportManager(const QString& url, const QByteArray& mimetypeHint, +KisImportExportManager::KisImportExportManager(const QString& location, const QByteArray& mimetypeHint, KisFilterChain* const parentChain) : m_document(0) , m_parentChain(parentChain) - , m_importUrl(url) + , m_importUrl(locationToUrl(location)) , m_importUrlMimetypeHint(mimetypeHint) , m_graph("") , d(new Private) @@ -82,13 +82,14 @@ delete d; } -QString KisImportExportManager::importDocument(const QString& url, +QString KisImportExportManager::importDocument(const QString& location, const QString& documentMimeType, KisImportExportFilter::ConversionStatus& status) { + QUrl u = locationToUrl(location); + // Find the mime type for the file to be imported. QString typeName(documentMimeType); - QUrl u(url); QMimeType t; if (documentMimeType.isEmpty()) { QMimeDatabase db; @@ -118,7 +119,7 @@ if (f == nativeFormat) { status = KisImportExportFilter::OK; QApplication::restoreOverrideCursor(); - return url; + return u.toString(); } m_graph.setSourceMimeType(f); @@ -170,9 +171,8 @@ // Okay, let's invoke the filters one after the other m_direction = Import; // vital information! - m_importUrl = url; // We want to load that file - m_exportUrl.clear(); // This is null for sure, as embedded stuff isn't - // allowed to use that method + m_importUrl = u; + m_exportUrl.clear(); status = chain->invokeChain(); m_importUrl.clear(); // Reset the import URL @@ -182,14 +182,14 @@ return QString(); } -KisImportExportFilter::ConversionStatus KisImportExportManager::exportDocument(const QString& url, QByteArray& mimeType) +KisImportExportFilter::ConversionStatus KisImportExportManager::exportDocument(const QString& location, QByteArray& mimeType) { bool userCancelled = false; // The import url should already be set correctly (null if we have a KisDocument // file manager and to the correct URL if we have an embedded manager) m_direction = Export; // vital information! - m_exportUrl = url; + m_exportUrl = locationToUrl(location); KisFilterChain::Ptr chain; if (m_document) { @@ -208,21 +208,19 @@ dbgFile << "Using the mimetype hint:" << m_importUrlMimetypeHint; m_graph.setSourceMimeType(m_importUrlMimetypeHint); } else { - QUrl u; - u.setPath(m_importUrl); QMimeDatabase db; - QMimeType t = db.mimeTypeForFile(u.path(), QMimeDatabase::MatchExtension); + QMimeType t = db.mimeTypeForUrl(m_importUrl); if (!t.isValid() || t.isDefault()) { - errFile << "No mimetype found for" << m_importUrl; + errFile << "No mimetype found for" << m_importUrl.toDisplayString(); return KisImportExportFilter::BadMimeType; } m_graph.setSourceMimeType(t.name().toLatin1()); if (!m_graph.isValid()) { warnFile << "Can't open" << t.name() << ", trying filter chooser"; QApplication::setOverrideCursor(Qt::ArrowCursor); - KisFilterChooser chooser(0, KisImportExportManager::mimeFilter(), QString(), u); + KisFilterChooser chooser(0, KisImportExportManager::mimeFilter(), QString(), m_importUrl); if (chooser.exec()) m_graph.setSourceMimeType(chooser.filterSelected().toLatin1()); else @@ -564,6 +562,12 @@ return d->progressUpdater.data(); } +QUrl KisImportExportManager::locationToUrl(QString location) const +{ + QUrl u = QUrl::fromLocalFile(location); + return (u.isEmpty()) ? QUrl(location) : u; +} + #include #include #include