File indexing completed on 2024-04-14 03:46:37

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Andreas Xavier <andxav at zoho dot com>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "readermanager.h"
0007 
0008 #include "readerwriters/dummyreader.h"
0009 #include "readerwriters/failedreader.h"
0010 #include "readerwriters/readerbase.h"
0011 
0012 #include "readerwriters/keduvoccsvreader.h"
0013 #include "readerwriters/keduvockvtml2reader.h"
0014 #include "readerwriters/keduvocpaukerreader.h"
0015 #include "readerwriters/keduvocvokabelnreader.h"
0016 #include "readerwriters/keduvocwqlreader.h"
0017 #include "readerwriters/keduvocxdxfreader.h"
0018 
0019 #include <QDebug>
0020 
0021 ReaderManager::ReaderPtr ReaderManager::reader(QIODevice &dev)
0022 {
0023     if (!dev.isReadable()) {
0024         //@todo add a useful error message
0025         return ReaderPtr(new FailedReader(KEduVocDocument::FileCannotRead));
0026     }
0027 
0028     if (dev.isSequential()) {
0029         //@todo add a useful error message
0030         return ReaderPtr(new FailedReader(KEduVocDocument::FileCannotRead));
0031     }
0032 
0033     ReaderPtr reader;
0034 
0035     reader = ReaderPtr(new DummyReader(dev));
0036     if (reader->isParsable()) {
0037         return reader;
0038     }
0039     dev.seek(0);
0040 
0041     reader = ReaderPtr(new KEduVocVokabelnReader(dev));
0042     if (reader->isParsable()) {
0043         return reader;
0044     }
0045     dev.seek(0);
0046 
0047     reader = ReaderPtr(new KEduVocPaukerReader(dev));
0048     if (reader->isParsable()) {
0049         return reader;
0050     }
0051     dev.seek(0);
0052 
0053     reader = ReaderPtr(new KEduVocXdxfReader(dev));
0054     if (reader->isParsable()) {
0055         return reader;
0056     }
0057     dev.seek(0);
0058 
0059     reader = ReaderPtr(new KEduVocKvtml2Reader(dev));
0060     if (reader->isParsable()) {
0061         return reader;
0062     }
0063     dev.seek(0);
0064 
0065     reader = ReaderPtr(new KEduVocWqlReader(dev));
0066     if (reader->isParsable()) {
0067         return reader;
0068     }
0069     dev.seek(0);
0070 
0071     reader = ReaderPtr(new KEduVocCsvReader(dev));
0072     if (reader->isParsable()) {
0073         return reader;
0074     }
0075     dev.seek(0);
0076 
0077     return ReaderPtr(new FailedReader(KEduVocDocument::FileTypeUnknown));
0078 }