#pragma once #include #include #include #include #include #include #include #include namespace ZShell::Services { class DropImporter : public QObject { Q_OBJECT QML_ELEMENT QML_SINGLETON public: enum Decision { Ignore, InsertText, Attach }; Q_ENUM(Decision) explicit DropImporter(QObject* parent = nullptr); Q_INVOKABLE Decision decide( const QList& urls, const QString& text, const QString& html, bool hasRawImage) const; Q_INVOKABLE int importAttachments( const QList& urls, const QString& html, const QByteArray& rawImage); signals: void importFinished( int id, const QStringList& paths, const QStringList& errors); private: struct Request { int pending = 0; QStringList files; QStringList errors; }; void addLocal(int id, const QUrl& url); void download(int id, const QUrl& url); void saveBytes(int id, const QByteArray& bytes); void succeed(int id, const QString& path); void failWith(int id, const QString& message); void finishUnit(int id); QString newSubdir(); QNetworkAccessManager m_nam; QTemporaryDir m_tempDir; QHash m_requests; int m_nextId = 0; int m_counter = 0; }; } // namespace ZShell::Services