#pragma once #include #include #include #include #include #include "javascript/engine/AtlasJsEngine.hpp" /** * Represent a JavaScript file. * This is a wrapper around `QFile` */ class FileJsObject : public QObject { Q_OBJECT public: explicit FileJsObject(AtlasJsEngine* engine, const std::filesystem::path& virtualPath); /** * Open the file to access its content. * @param mode the opening mode of the file, using "r", "w", "+", etc... */ Q_INVOKABLE void open(const QString& mode = QStringLiteral("r")); /** * Read the content of the file. * @param size the size of the content to read. * @return the content of the file */ Q_INVOKABLE QJSValue read(size_t size = std::numeric_limits::max()) const; /** * Write data into the file * @param data the data to write into the file * @return the size of the data written */ Q_INVOKABLE std::size_t write(const QJSValue& data) const; Q_INVOKABLE std::size_t tell() const; Q_INVOKABLE void seek(std::size_t position) const; /** * Close the file. */ Q_INVOKABLE void close() const; private: AtlasJsEngine* engine; std::unique_ptr _internal; QIODevice::OpenMode mode; std::unique_ptr textStream; };