/*************************************************************************** copyright : (C) 2003-2006 by Robby Stephenson email : robby@periapsis.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of version 2 of the GNU General Public License as * * published by the Free Software Foundation; * * * ***************************************************************************/ #ifndef FILEHANDLER_H #define FILEHANDLER_H #include <tqstring.h> #include <tqcstring.h> // needed for TQByteArray #include <tqptrlist.h> class KURL; class KSaveFile; class KFileItem; namespace KIO { class Job; } class TQDomDocument; class TQIODevice; namespace Tellico { class ImageFactory; namespace Data { class Image; } /** * The FileHandler class contains some utility functions for reading files. * * @author Robby Stephenson */ class FileHandler { friend class ImageFactory; public: /** * An internal class to handle KIO stuff. Exposed so a FileRef pointer * can be returned from FileHandler. */ class FileRef { public: bool open(bool quiet=false); TQIODevice* file() const { return m_device; } const TQString& fileName() const { return m_filename; } bool isValid() const { return m_isValid; } ~FileRef(); private: friend class FileHandler; FileRef(const KURL& url, bool quiet=false, bool allowCompressed=false); TQIODevice* m_device; TQString m_filename; bool m_isValid; }; friend class FileRef; /** * Creates a FileRef for a given url. It's not meant to be used by methods in the class, * Rather by a class wanting direct access to a file. The caller takes ownership of the pointer. * * @param url The url * @param quiet Whether error messages should be shown * @return The fileref */ static FileRef* fileRef(const KURL& url, bool quiet=false); /** * Read contents of a file into a string. * * @param url The URL of the file * @param quiet whether the importer should report errors or not * @param useUTF8 Whether the file should be read as UTF8 or use user locale * @param allowCompressed Whether to check if the file is compressed or not * @return A string containing the contents of a file */ static TQString readTextFile(const KURL& url, bool quiet=false, bool useUTF8=false, bool allowCompressed=false); /** * Read contents of an XML file into a TQDomDocument. * * @param url The URL of the file * @param processNamespace Whether to process the namespace of the XML file * @param quiet Whether error messages should be shown * @return A TQDomDocument containing the contents of a file */ static TQDomDocument readXMLFile(const KURL& url, bool processNamespace, bool quiet=false); /** * Read contents of a data file into a TQByteArray. * * @param url The URL of the file * @param quiet Whether error messages should be shown * @return A TQByteArray of the file's contents */ static TQByteArray readDataFile(const KURL& url, bool quiet=false); /** * Writes the contents of a string to a url. If the file already exists, a "~" is appended * and the existing file is moved. If the file is remote, a temporary file is written and * then uploaded. * * @param url The url * @param text The text * @param encodeUTF8 Whether to use UTF-8 encoding, or Locale * @param force Whether to force the write * @return A boolean indicating success */ static bool writeTextURL(const KURL& url, const TQString& text, bool encodeUTF8, bool force=false, bool quiet=false); /** * Writes data to a url. If the file already exists, a "~" is appended * and the existing file is moved. If the file is remote, a temporary file is written and * then uploaded. * * @param url The url * @param data The data * @param force Whether to force the write * @return A boolean indicating success */ static bool writeDataURL(const KURL& url, const TQByteArray& data, bool force=false, bool quiet=false); /** * Checks to see if a URL exists already, and if so, queries the user. * * @param url The target URL * @return True if it is ok to continue, false otherwise. */ static bool queryExists(const KURL& url); static void clean(); private: class ItemDeleter; friend class ItemDeleter; static TQPtrList<ItemDeleter> s_deleterList; /** * Read contents of a file into an image. It's private since everything should use the * ImageFactory methods. * * @param url The URL of the file * @param quiet If errors should be quiet * @return The image */ static Data::Image* readImageFile(const KURL& url, bool quiet=false); static Data::Image* readImageFile(const KURL& url, bool quiet, const KURL& referrer); /** * Writes the contents of a string to a file. * * @param file The file object * @param text The string * @param encodeUTF8 Whether to use UTF-8 encoding, or Locale * @return A boolean indicating success */ static bool writeTextFile(KSaveFile& file, const TQString& text, bool encodeUTF8); /** * Writes data to a file. * * @param file The file object * @param data The data * @return A boolean indicating success */ static bool writeDataFile(KSaveFile& file, const TQByteArray& data); }; } // end namespace #endif