a?adido guid para identificar a YACReaderLibrary

a?adidas las clases server y client para los mecanismos IPC que permitir?n la integraci?n entre YACReader y YACReaderLibrary

a?adido check que permite ejecutar YACReaderLibray como una aplicaci?n stand alone

a?adidos ficheros de clases POCO para gesti?nar los objetos de las bibliotecas

eliminado c?digo muerto en LibraryWindow y c?digo comentado en LibraryCreator
This commit is contained in:
Luis Ángel San Martín
2013-05-25 15:44:25 +02:00
parent 2fcb25ac0b
commit 7319993b6d
15 changed files with 255 additions and 211 deletions

View File

@ -60,7 +60,8 @@ HEADERS += comic.h \
../common/qnaturalsorting.h \
../common/yacreader_flow_gl.h \
../common/yacreader_global.h \
../common/onstart_flow_selection_dialog.h
../common/onstart_flow_selection_dialog.h \
yacreader_local_client.h
SOURCES += comic.cpp \
configuration.cpp \
@ -88,7 +89,8 @@ SOURCES += comic.cpp \
../common/check_new_version.cpp \
../common/qnaturalsorting.cpp \
../common/yacreader_flow_gl.cpp \
../common/onstart_flow_selection_dialog.cpp
../common/onstart_flow_selection_dialog.cpp \
yacreader_local_client.cpp
include(../custom_widgets/custom_widgets.pri)

View File

@ -0,0 +1,31 @@
#include "yacreader_local_client.h"
#include "yacreader_comic_library.h"
#include "yacreader_comic_info_library.h"
#include <QLocalSocket>
YACReaderLocalClient::YACReaderLocalClient(QObject *parent) :
QObject(parent)
{
localSocket = new QLocalSocket(this);
connect(localSocket, SIGNAL(readyRead()), this, SLOT(readMessage()));
/*connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
this, SLOT(displayError(QLocalSocket::LocalSocketError)));*/
}
//información de comic recibida...
void YACReaderLocalClient::readMessage()
{
}
void YACReaderLocalClient::requestComicInfo(QString library, YACReaderComicLibrary & comic)
{
}
void YACReaderLocalClient::sendComicInfo(QString library, YACReaderComicLibrary & comic)
{
}

View File

@ -0,0 +1,27 @@
#ifndef YACREADER_LOCAL_CLIENT_H
#define YACREADER_LOCAL_CLIENT_H
#include <QObject>
class QLocalSocket;
class YACReaderComicLibrary;
class YACReaderLocalClient : public QObject
{
Q_OBJECT
public:
explicit YACReaderLocalClient(QObject *parent = 0);
signals:
public slots:
void readMessage();
void requestComicInfo(QString library, YACReaderComicLibrary & comic);
void sendComicInfo(QString library, YACReaderComicLibrary & comic);
private:
QLocalSocket * localSocket;
};
#endif // YACREADER_LOCAL_CLIENT_H

View File

@ -73,7 +73,10 @@ HEADERS += comic_flow.h \
../common/yacreader_global.h \
../common/onstart_flow_selection_dialog.h \
no_libraries_widget.h \
import_widget.h
import_widget.h \
yacreader_local_server.h \
../common/yacreader_comic_library.h \
../common/yacreader_comic_info_library.h
SOURCES += comic_flow.cpp \
create_library_dialog.cpp \
@ -110,6 +113,9 @@ SOURCES += comic_flow.cpp \
../common/onstart_flow_selection_dialog.cpp \
no_libraries_widget.cpp \
import_widget.cpp \
yacreader_local_server.cpp \
../common/yacreader_comic_library.cpp \
../common/yacreader_comic_info_library.cpp
include(./server/server.pri)

View File

@ -11,16 +11,8 @@
#include <algorithm>
using namespace std;
//QMutex mutex;
#include "poppler-qt4.h"
/*int numThreads = 0;
QWaitCondition waitCondition;
QMutex mutex;
*/
//--------------------------------------------------------------------------------
LibraryCreator::LibraryCreator()
:creation(false)
@ -143,39 +135,6 @@ qulonglong LibraryCreator::insertFolders()
return 0;
}
/*qulonglong LibraryCreator::insertFolder(qulonglong parentId,const Folder & folder)
{
QSqlQuery query(_database);
query.prepare("INSERT INTO folder (parentId, name, path) "
"VALUES (:parentId, :name, :path)");
query.bindValue(":parentId", parentId);
query.bindValue(":name", folder.name);
query.bindValue(":path", folder.path);
query.exec();
return query.lastInsertId().toULongLong();
}*/
/*qulonglong LibraryCreator::insertComic(const Comic & comic)
{
//TODO comprobar si ya hay comic info con ese hash
QSqlQuery comicInfoInsert(_database);
comicInfoInsert.prepare("INSERT INTO comic_info (hash) "
"VALUES (:hash)");
comicInfoInsert.bindValue(":hash", comic.hash);
comicInfoInsert.exec();
qulonglong comicInfoId =comicInfoInsert.lastInsertId().toULongLong();
QSqlQuery query(_database);
query.prepare("INSERT INTO comic (parentId, comicInfoId, fileName, path) "
"VALUES (:parentId,:comicInfoId,:name, :path)");
query.bindValue(":parentId", comic.parentId);
query.bindValue(":comicInfoId", comicInfoId);
query.bindValue(":name", comic.name);
query.bindValue(":path", comic.path);
query.exec();
return query.lastInsertId().toULongLong();
}*/
void LibraryCreator::create(QDir dir)
{
dir.setNameFilters(_nameFilter);
@ -525,26 +484,3 @@ void ThumbnailCreator::create()
delete _7z;
}
}
/*void ThumbnailCreator::openingError(QProcess::ProcessError error)
{
//TODO : move to the gui thread
switch(error)
{
case QProcess::FailedToStart:
QMessageBox::critical(NULL,tr("7z not found"),tr("7z wasn't found in your PATH."));
break;
case QProcess::Crashed:
QMessageBox::critical(NULL,tr("7z crashed"),tr("7z crashed."));
break;
case QProcess::ReadError:
QMessageBox::critical(NULL,tr("7z reading"),tr("problem reading from 7z"));
break;
case QProcess::UnknownError:
QMessageBox::critical(NULL,tr("7z problem"),tr("Unknown error 7z"));
break;
default:
//TODO
break;
}
}*/

View File

@ -234,7 +234,7 @@ void LibraryWindow::doLayout()
comics = new QWidget;
QVBoxLayout * comicsLayout = new QVBoxLayout;
comicsLayout->setSpacing(0);
comicsLayout->setContentsMargins(2,2,0,0);
comicsLayout->setContentsMargins(0,0,0,0);
comicsLayout->addWidget(editInfoToolBar = new QToolBar(comics));
comicsLayout->addWidget(comicView);
comics->setLayout(comicsLayout);
@ -308,19 +308,13 @@ void LibraryWindow::doDialogs()
void LibraryWindow::doModels()
{
//dirmodels
//folders
dm = new TreeModel();
//comics
dmCV = new TableModel();
//comics selection
sm = new QItemSelectionModel(dm);
/*proxyFilter = new YACReaderTreeSearch();
proxyFilter->setSourceModel(dm);
proxyFilter->setFilterRole(Qt::DisplayRole);*/
/*proxySort = new YACReaderSortComics();
proxySort->setSourceModel(dmCV);
proxySort->setFilterRole(Qt::DisplayRole);*/
setFoldersFilter("");
}
@ -1162,12 +1156,6 @@ void LibraryWindow::updateLibrary()
void LibraryWindow::deleteCurrentLibrary()
{
//QSqlDatabase db = dm->getDatabase();
//db.commit();
//db.close();
//QSqlDatabase::removeDatabase(db.connectionName());
//if(!dm->getDatabase().isOpen())
//{
QString path = libraries.value(selectedLibrary->currentText());
libraries.remove(selectedLibrary->currentText());
selectedLibrary->removeItem(selectedLibrary->currentIndex());
@ -1184,7 +1172,6 @@ void LibraryWindow::deleteCurrentLibrary()
comicFlow->clear();
}
saveLibraries();
//}
}
void LibraryWindow::removeLibrary()
@ -1337,21 +1324,10 @@ void LibraryWindow::showProperties()
ComicDB c = comics[0];
_comicIdEdited = c.id;//static_cast<TableItem*>(indexList[0].internalPointer())->data(4).toULongLong();
//QModelIndex mi = comicView->currentIndex();
//QString path = QDir::cleanPath(currentPath()+dmCV->getComicPath(mi));
//ThumbnailCreator tc(path,"");
//tc.create();
propertiesDialog->databasePath = dm->getDatabase();
propertiesDialog->basePath = currentPath();
propertiesDialog->setComics(comics);
/*propertiesDialog->setCover(tc.getCover());
propertiesDialog->setFilename(path.split("/").last());
propertiesDialog->setNumpages(tc.getNumPages());
QFile file(path);
propertiesDialog->setSize(file.size()/(1024.0*1024));
file.close();*/
propertiesDialog->show();
}
@ -1468,76 +1444,6 @@ void LibraryWindow::showImportComicsInfo()
importComicsInfoDialog->show();
}
QList<LibraryItem *> LibraryWindow::getFolderContentFromLibrary(const QString & libraryName, qulonglong folderId)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
QList<LibraryItem *> list = Folder::getFoldersFromParent(folderId,db,false);
db.close();
QSqlDatabase::removeDatabase(libraries.value(libraryName));
return list;
}
QList<LibraryItem *> LibraryWindow::getFolderComicsFromLibrary(const QString & libraryName, qulonglong folderId)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
QList<LibraryItem *> list = ComicDB::getComicsFromParent(folderId,db,false);
db.close();
QSqlDatabase::removeDatabase(libraries.value(libraryName));
return list;
}
qulonglong LibraryWindow::getParentFromComicFolderId(const QString & libraryName, qulonglong id)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
Folder f(id,db);
db.close();
QSqlDatabase::removeDatabase(libraries.value(libraryName));
return f.parentId;
}
ComicDB LibraryWindow::getComicInfo(const QString & libraryName, qulonglong id)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
ComicDB comic;
comic.load(id,db);
db.close();
QSqlDatabase::removeDatabase(libraries.value(libraryName));
return comic;
}
QString LibraryWindow::getFolderName(const QString & libraryName, qulonglong id)
{
QSqlDatabase db = DataBaseManagement::loadDatabase(libraries.value(libraryName)+"/.yacreaderlibrary");
QString name="";
{
QSqlQuery selectQuery(db); //TODO check
selectQuery.prepare("SELECT name FROM folder WHERE id = :id");
selectQuery.bindValue(":id", id);
selectQuery.exec();
if(selectQuery.next())
{
QSqlRecord record = selectQuery.record();
name = record.value(0).toString();
}
}
db.close();
QSqlDatabase::removeDatabase(libraries.value(libraryName));
return name;
}
void LibraryWindow::closeEvent ( QCloseEvent * event )
{
settings->setValue(MAIN_WINDOW_GEOMETRY, saveGeometry());

View File

@ -233,14 +233,6 @@ public:
void manageCreatingError(const QString & error);
void manageUpdatingError(const QString & error);
void manageOpeningLibraryError(const QString & error);
//server interface
QMap<QString,QString> getLibraries(){return libraries;};
QList<LibraryItem *> getFolderContentFromLibrary(const QString & libraryName, qulonglong folderId);
QList<LibraryItem *> getFolderComicsFromLibrary(const QString & libraryName, qulonglong folderId);
qulonglong getParentFromComicFolderId(const QString & libraryName, qulonglong id);
ComicDB getComicInfo(const QString & libraryName, qulonglong id);
QString getFolderName(const QString & libraryName, qulonglong id);
};
#endif

View File

@ -1,44 +1,53 @@
#include "library_window.h"
#include <QApplication>
#include <QTranslator>
#include <QSettings>
#include <QLocale>
#include "yacreader_global.h"
#include "startup.h"
#define PICTUREFLOW_QT4 1
//interfaz al servidor
Startup * s;
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
QTranslator translator;
QString sufix = QLocale::system().name();
translator.load(QCoreApplication::applicationDirPath()+"/languages/yacreaderlibrary_"+sufix);
app.installTranslator(&translator);
app.setApplicationName("YACReaderLibrary");
#ifdef SERVER_RELEASE
#include "library_window.h"
#include <QApplication>
#include <QTranslator>
#include <QSettings>
#include <QLocale>
#include "yacreader_global.h"
#include "startup.h"
#include "yacreader_local_server.h"
#define PICTUREFLOW_QT4 1
//interfaz al servidor
Startup * s;
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
QTranslator translator;
QString sufix = QLocale::system().name();
translator.load(QCoreApplication::applicationDirPath()+"/languages/yacreaderlibrary_"+sufix);
app.installTranslator(&translator);
app.setApplicationName("YACReaderLibrary");
#ifdef SERVER_RELEASE
QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creaci<63>n del fichero de config con el servidor
settings->beginGroup("libraryConfig");
s = new Startup();
if(settings->value(SERVER_ON,true).toBool())
{
s->start();
}
#endif
LibraryWindow * mw = new LibraryWindow();
mw->show();
/*mw->resize(800,480);
mw->showMaximized();*/
return app.exec();
}
{
s->start();
}
#endif
if(YACReaderLocalServer::isRunning()) //s<>lo se permite una instancia de YACReaderLibrary
return 0;
YACReaderLocalServer * localServer = new YACReaderLocalServer();
LibraryWindow * mw = new LibraryWindow();
//connections to localServer
mw->show();
/*mw->resize(800,480);
mw->showMaximized();*/
return app.exec();
}

View File

@ -0,0 +1,77 @@
#include "yacreader_local_server.h"
#include <QLocalServer>
#include <QLocalSocket>
#include "yacreader_global.h"
YACReaderLocalServer::YACReaderLocalServer(QObject *parent) :
QObject(parent)
{
localServer = new QLocalServer(this);
if (!localServer->listen(YACREADERLIBRARY_GUID)) {
//error...........
}
connect(localServer, SIGNAL(newConnection()), this, SLOT(sendResponse()));
}
bool YACReaderLocalServer::isListening()
{
return localServer->isListening();
}
void YACReaderLocalServer::sendResponse()
{
/*QLocalSocket *clientConnection = localServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
QDataStream in(clientConnection);
in.setVersion(QDataStream::Qt_4_0);
if (clientConnection->bytesAvailable() == 0)
return;
if (in.atEnd())
return;
QString message;
in >> message;
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << QString("OK");
clientConnection->write(block);
clientConnection->flush();
clientConnection->disconnectFromServer();*/
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << QString("ok");
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
QLocalSocket *clientConnection = localServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
clientConnection->write(block);
clientConnection->flush();
clientConnection->disconnectFromServer();
}
bool YACReaderLocalServer::isRunning()
{
QLocalSocket socket;
socket.connectToServer(YACREADERLIBRARY_GUID);
if (socket.waitForConnected(500))
return true; // Server is running (another instance of YACReaderLibrary has been launched)
return false;
}

View File

@ -0,0 +1,26 @@
#ifndef YACREADER_LOCAL_SERVER_H
#define YACREADER_LOCAL_SERVER_H
#include <QObject>
class QLocalServer;
class YACReaderLocalServer : public QObject
{
Q_OBJECT
public:
explicit YACReaderLocalServer(QObject *parent = 0);
signals:
public slots:
bool isListening();
void sendResponse();
static bool isRunning();
private:
QLocalServer * localServer;
};
#endif // YACREADER_LOCAL_SERVER_H

View File

@ -0,0 +1,5 @@
#include "yacreader_comic_info_library.h"
YACReaderComicInfoLibrary::YACReaderComicInfoLibrary()
{
}

View File

@ -0,0 +1,10 @@
#ifndef YACREADER_COMIC_INFO_LIBRARY_H
#define YACREADER_COMIC_INFO_LIBRARY_H
class YACReaderComicInfoLibrary
{
public:
YACReaderComicInfoLibrary();
};
#endif // YACREADER_COMIC_INFO_LIBRARY_H

View File

@ -0,0 +1,5 @@
#include "yacreader_comic_library.h"
YACReaderComicLibrary::YACReaderComicLibrary()
{
}

View File

@ -0,0 +1,10 @@
#ifndef YACREADER_COMIC_LIBRARY_H
#define YACREADER_COMIC_LIBRARY_H
class YACReaderComicLibrary
{
public:
YACReaderComicLibrary();
};
#endif // YACREADER_COMIC_LIBRARY_H

View File

@ -46,6 +46,8 @@
#define MAIN_WINDOW_GEOMETRY "MAIN_WINDOW_GEOMETRY"
#define MAIN_WINDOW_STATE "MAIN_WINDOW_STATE"
#define YACREADERLIBRARY_GUID "ea343ff3-2005-4865-b212-7fa7c43999b8"
enum FlowType
{
CoverFlowLike=0,