1 #ifndef __LIBRARY_CREATOR_H
2 #define __LIBRARY_CREATOR_H
3 
4 #include <QObject>
5 #include <QString>
6 #include <QDir>
7 #include <QFile>
8 #include <QByteArray>
9 #include <QRegExp>
10 #include <QProcess>
11 #include <QtCore>
12 #include <QtGui>
13 #include <QMutex>
14 #include <QThread>
15 #include <QSqlDatabase>
16 #include <QModelIndex>
17 
18 #include "folder.h"
19 #include "comic_db.h"
20 
21 class LibraryCreator : public QThread
22 {
23     Q_OBJECT
24 public:
25     LibraryCreator();
26     void createLibrary(const QString &source, const QString &target);
27     void updateLibrary(const QString &source, const QString &target);
28     void updateFolder(const QString &source, const QString &target, const QString &folder, const QModelIndex &dest);
29     void stop();
30 
31 private:
32     void processLibrary(const QString &source, const QString &target);
33     enum Mode { CREATOR,
34                 UPDATER };
35     //atributos "globales" durante el proceso de creación y actualización
36     enum Mode _mode;
37     QString _source;
38     QString _target;
39     QString _sourceFolder; //used for partial updates
40     QStringList _nameFilter;
41     QString _databaseConnection;
42     QList<Folder> _currentPathFolders; //lista de folders en el orden en el que están siendo explorados, el último es el folder actual
43     //recursive method
44     void create(QDir currentDirectory);
45     void update(QDir currentDirectory);
46     void run() override;
47     qulonglong insertFolders(); //devuelve el id del último folder añadido (último en la ruta)
48     bool checkCover(const QString &hash);
49     void insertComic(const QString &relativePath, const QFileInfo &fileInfo);
50     //qulonglong insertFolder(qulonglong parentId,const Folder & folder);
51     //qulonglong insertComic(const Comic & comic);
52     bool stopRunning;
53     //LibraryCreator está en modo creación si creation == true;
54     bool creation;
55     bool partialUpdate;
56     QModelIndex folderDestinationModelIndex;
57 
58 signals:
59     void finished();
60     void coverExtracted(QString);
61     void folderUpdated(QString);
62     void comicAdded(QString, QString);
63     void updated();
64     void created();
65     void failedCreatingDB(QString);
66     void failedOpeningDB(QString);
67     void updatedCurrentFolder(QModelIndex);
68 };
69 
70 class ThumbnailCreator : public QObject
71 {
72     Q_OBJECT
73 
74 public:
75     ThumbnailCreator(QString fileSource, QString target = "", int coverPage = 1);
76 
77 private:
78     QString _fileSource;
79     QString _target;
80     QString _currentName;
81     int _numPages;
82     QPair<int, int> _coverSize;
83     QImage _cover;
84     int _coverPage;
85     static bool crash;
86 
87 public slots:
88     void create();
getNumPages()89     int getNumPages() { return _numPages; }
getCover()90     QPixmap getCover() { return QPixmap::fromImage(_cover); }
getOriginalCoverSize()91     QPair<int, int> getOriginalCoverSize() { return _coverSize; }
92 signals:
93     void openingError(QProcess::ProcessError error);
94 };
95 
96 #endif
97