1 #include "console_ui_library_creator.h"
2 
3 #include <iostream>
4 
5 #include "library_creator.h"
6 #include "yacreader_libraries.h"
7 
ConsoleUILibraryCreator(QObject * parent)8 ConsoleUILibraryCreator::ConsoleUILibraryCreator(QObject *parent)
9     : QObject(parent), numComicsProcessed(0)
10 {
11 }
12 
createLibrary(const QString & name,const QString & path)13 void ConsoleUILibraryCreator::createLibrary(const QString &name, const QString &path)
14 {
15     QDir pathDir(path);
16     if (!pathDir.exists()) {
17         std::cout << "Directory not found." << std::endl;
18         return;
19     }
20 
21     QEventLoop eventLoop;
22     LibraryCreator *libraryCreator = new LibraryCreator();
23     QString cleanPath = QDir::cleanPath(pathDir.absolutePath());
24 
25     YACReaderLibraries yacreaderLibraries;
26     yacreaderLibraries.load();
27     if (yacreaderLibraries.contains(name)) {
28         std::cout << "A Library named \"" << name.toUtf8().constData() << "\" already exists in database." << std::endl;
29         delete libraryCreator;
30         return;
31     }
32 
33     libraryCreator->createLibrary(cleanPath, QDir::cleanPath(pathDir.absolutePath() + "/.yacreaderlibrary"));
34 
35     connect(libraryCreator, &LibraryCreator::finished, this, &ConsoleUILibraryCreator::done);
36     connect(libraryCreator, &LibraryCreator::comicAdded, this, &ConsoleUILibraryCreator::newComic);
37     connect(libraryCreator, &LibraryCreator::failedCreatingDB, this, &ConsoleUILibraryCreator::manageCreatingError);
38 
39     connect(libraryCreator, &LibraryCreator::finished, &eventLoop, &QEventLoop::quit);
40 
41     std::cout << "Processing comics";
42 
43     libraryCreator->start();
44     eventLoop.exec();
45 
46     yacreaderLibraries.addLibrary(name, cleanPath);
47     yacreaderLibraries.save();
48 }
49 
updateLibrary(const QString & path)50 void ConsoleUILibraryCreator::updateLibrary(const QString &path)
51 {
52     QDir pathDir(path);
53     if (!pathDir.exists()) {
54         std::cout << "Directory not found." << std::endl;
55         return;
56     }
57 
58     QEventLoop eventLoop;
59     LibraryCreator *libraryCreator = new LibraryCreator();
60     QString cleanPath = QDir::cleanPath(pathDir.absolutePath());
61 
62     libraryCreator->updateLibrary(cleanPath, QDir::cleanPath(pathDir.absolutePath() + "/.yacreaderlibrary"));
63 
64     connect(libraryCreator, &LibraryCreator::finished, this, &ConsoleUILibraryCreator::done);
65     connect(libraryCreator, &LibraryCreator::comicAdded, this, &ConsoleUILibraryCreator::newComic);
66     connect(libraryCreator, &LibraryCreator::failedOpeningDB, this, &ConsoleUILibraryCreator::manageUpdatingError);
67 
68     connect(libraryCreator, &LibraryCreator::finished, &eventLoop, &QEventLoop::quit);
69 
70     std::cout << "Processing comics";
71 
72     libraryCreator->start();
73     eventLoop.exec();
74 }
75 
addExistingLibrary(const QString & name,const QString & path)76 void ConsoleUILibraryCreator::addExistingLibrary(const QString &name, const QString &path)
77 {
78     QDir pathDir(path);
79     if (!pathDir.exists()) {
80         std::cout << "Directory not found." << std::endl;
81         return;
82     }
83     QString cleanPath = QDir::cleanPath(pathDir.absolutePath());
84 
85     if (!QDir(cleanPath + "/.yacreaderlibrary").exists()) {
86         std::cout << "No library database found in directory." << std::endl;
87         return;
88     }
89 
90     YACReaderLibraries yacreaderLibraries;
91     yacreaderLibraries.load();
92     if (yacreaderLibraries.contains(name)) {
93         std::cout << "A Library named \"" << name.toUtf8().constData() << "\" already exists in the database." << std::endl;
94         return;
95     }
96     yacreaderLibraries.addLibrary(name, cleanPath);
97     yacreaderLibraries.save();
98 
99     std::cout << "Library added : " << name.toUtf8().constData() << " at " << cleanPath.toUtf8().constData() << std::endl;
100 }
101 
removeLibrary(const QString & name)102 void ConsoleUILibraryCreator::removeLibrary(const QString &name)
103 {
104     //TODO add error handling
105     YACReaderLibraries yacreaderLibraries;
106     yacreaderLibraries.load();
107     if (!yacreaderLibraries.contains(name)) {
108         std::cout << "No Library named \"" << name.toUtf8().constData() << "\" in database." << std::endl;
109         return;
110     }
111     yacreaderLibraries.remove(name);
112     yacreaderLibraries.save();
113 
114     std::cout << "Library removed : " << name.toUtf8().constData() << std::endl;
115 }
116 
newComic(const QString &,const QString &)117 void ConsoleUILibraryCreator::newComic(const QString & /*relativeComicPath*/, const QString & /*coverPath*/)
118 {
119     numComicsProcessed++;
120     std::cout << ".";
121 }
122 
manageCreatingError(const QString & error)123 void ConsoleUILibraryCreator::manageCreatingError(const QString &error)
124 {
125     std::cout << std::endl
126               << "Error creating library! " << error.toUtf8().constData() << std::endl;
127 }
128 
manageUpdatingError(const QString & error)129 void ConsoleUILibraryCreator::manageUpdatingError(const QString &error)
130 {
131     std::cout << std::endl
132               << "Error updating library! " << error.toUtf8().constData() << std::endl;
133 }
134 
done()135 void ConsoleUILibraryCreator::done()
136 {
137     std::cout << "Done!" << std::endl;
138 
139     if (numComicsProcessed > 0)
140         std::cout << "Number of comics processed = " << numComicsProcessed << std::endl;
141 }
142