1 #ifndef QFATFS_H
2 #define QFATFS_H
3 
4 #include <QtCore>
5 
6 #include "QFat.h"
7 #include "QFatFile.h"
8 
9 class FatIterator : public QAbstractFileEngineIterator
10 {
11 public:
12     FatIterator(QDir::Filters filters, const QStringList &nameFilters, QFat* fat, const QString& path, const QString& name);
13 
14     bool hasNext() const;
15     QString next();
16     QString currentFileName() const;
17 
18 private:
19     QFat* m_fat;
20     QString m_fatpath;
21     QString m_name;
22     QString m_curPath;
23 
24     FatTocEntries m_tocs;
25     int m_curIndex;
26 
27 protected:
28     int getNextIndex() const;
29 
30 };
31 
32 class QFatFsHandler : public QAbstractFileEngineHandler {
33 public:
34     QFatFsHandler(quint16 clusterCount=5120, quint16 clusterSize=2048)
m_clusterCount(clusterCount)35         : m_clusterCount(clusterCount), m_clusterSize(clusterSize) {}
36     ~QFatFsHandler();
37     QAbstractFileEngine* create(const QString& fileName) const;
38 
39 private:
40     quint16 m_clusterCount;
41     quint16 m_clusterSize;
42 
43     mutable QMutex mutex;
44 
45 };
46 
47 class QFatEngine : public QAbstractFileEngine
48 {
49 public:
50     explicit QFatEngine(QFat* fat, const QString& path, const QString& name);
51 
52     bool open(QIODevice::OpenMode mode);
53     qint64 read(char *data, qint64 maxlen);
54     qint64 readLine ( char * data, qint64 maxlen );
55     qint64 write (const char * data, qint64 len);
56     bool close();
57     bool remove();
58     bool flush ();
setSize(qint64)59     bool setSize ( qint64 /*size*/ ) { return true; }
60 
61     QString fileName(FileName file) const;
62     Iterator* beginEntryList(QDir::Filters filters, const QStringList &filterNames);
63 
caseSensitive()64     bool caseSensitive () const { return true; }
size()65     qint64 size() const { return m_toc.size; }
66     QDateTime fileTime ( FileTime time ) const;
fileFlags(FileFlags)67     FileFlags fileFlags(FileFlags) const { return m_flags; }
supportsExtension(Extension)68     bool supportsExtension ( Extension  ) const { return QAbstractFileEngine::AtEndExtension; }
69     bool extension ( Extension extension, const ExtensionOption * option = 0, ExtensionReturn * output = 0 );
isSequential()70     bool isSequential () const { return false; }
71 
72     bool mkdir ( const QString & dirName, bool createParentDirectories ) const;
73     bool rmdir ( const QString & dirName, bool recurseParentDirectories ) const;
74 
pos()75     qint64 pos () const { return fatFile->pos(); }
76     bool seek ( qint64 offset );
77 signals:
78 
79 public slots:
80 
81 private:
82     QFat* m_fat;
83     QString m_fatpath;
84     QString m_name;
85     FileFlags m_flags;
86     FatTocEntry m_toc;
87 
88     QFatFile* fatFile;
89 };
90 
91 #endif // QFATFS_H
92