load(path,atPage) added in viewer,render and comic classes

updated CHANGELOG
This commit is contained in:
Luis Ángel San Martín
2013-07-16 21:50:02 +02:00
parent e7fa648461
commit e886f160cc
15 changed files with 352 additions and 63 deletions

View File

@ -1,3 +1,9 @@
6.6 (No p<>blica)
Modificado YACReader para que abra los archivos comprimidos usando 7z.dll (.so, .dylib)
YACReader abre ahora los c<>mics por la <20>ltima p<>gina le<6C>da.
Corregido bug que causaba que algunos c<>mics no se pudiesen abrir desde YACReaderLibrary en YACReader
Corregido el modo en el que se actualizaba la "information label"
6.5
Nueva interfaz principal de YACReaderLibrary y YACReader
Corregido bug que causaba que el servidor no se activase en el primer arranque en MacOSX

View File

@ -19,8 +19,8 @@ Comic::Comic()
setup();
}
//-----------------------------------------------------------------------------
Comic::Comic(const QString & pathFile)
:_pages(),_index(0),_path(pathFile),_loaded(false),bm(new Bookmarks()),_loadedPages(),_isPDF(false)
Comic::Comic(const QString & pathFile, int atPage )
:_pages(),_index(0),_path(pathFile),_loaded(false),bm(new Bookmarks()),_loadedPages(),_isPDF(false),_firstPage(atPage)
{
setup();
}
@ -180,10 +180,10 @@ FileComic::FileComic()
}
FileComic::FileComic(const QString & path)
:Comic(path)
FileComic::FileComic(const QString & path, int atPage )
:Comic(path,atPage)
{
load(path);
load(path,atPage);
}
FileComic::~FileComic()
@ -191,14 +191,18 @@ FileComic::~FileComic()
//Comic::~Comic();
}
bool FileComic::load(const QString & path)
bool FileComic::load(const QString & path, int atPage)
{
QFileInfo fi(path);
if(fi.exists())
{
bm->newComic(path);
emit bookmarksUpdated();
if(atPage == -1)
{
bm->newComic(path);
emit bookmarksUpdated();
}
_firstPage = atPage;
//emit bookmarksLoaded(*bm);
_path = QDir::cleanPath(path);
@ -393,8 +397,9 @@ void FileComic::process()
out << "tiempo en ordenar : " << myTimer.elapsed() << endl;
_firstPage = bm->getLastPage();
_index = bm->getLastPage();
if(_firstPage == -1)
_firstPage = bm->getLastPage();
_index = _firstPage;
emit(openAt(_index));
int sectionIndex;
@ -463,10 +468,10 @@ FolderComic::FolderComic()
}
FolderComic::FolderComic(const QString & path)
:Comic(path)
FolderComic::FolderComic(const QString & path, int atPage )
:Comic(path, atPage )
{
load(path);
load(path, atPage );
}
FolderComic::~FolderComic()
@ -474,11 +479,15 @@ FolderComic::~FolderComic()
}
bool FolderComic::load(const QString & path)
bool FolderComic::load(const QString & path, int atPage )
{
_path = path;
bm->newComic(_path);
emit bookmarksUpdated();
if(atPage == -1)
{
bm->newComic(_path);
emit bookmarksUpdated();
}
_firstPage = atPage;
//emit bookmarksLoaded(*bm);
return true;
}
@ -508,8 +517,11 @@ void FolderComic::process()
}
else
{
_firstPage = bm->getLastPage();
_index = bm->getLastPage();
if(_firstPage == -1)
_firstPage = bm->getLastPage();
_index = _firstPage;
emit(openAt(_index));
emit pageChanged(0); // this indicates new comic, index=0
@ -544,10 +556,10 @@ PDFComic::PDFComic()
}
PDFComic::PDFComic(const QString & path)
:Comic(path)
PDFComic::PDFComic(const QString & path, int atPage)
:Comic(path,atPage)
{
load(path);
load(path,atPage);
}
PDFComic::~PDFComic()
@ -555,11 +567,15 @@ PDFComic::~PDFComic()
}
bool PDFComic::load(const QString & path)
bool PDFComic::load(const QString & path, int atPage)
{
_path = path;
bm->newComic(_path);
emit bookmarksUpdated();
if(atPage == -1)
{
bm->newComic(_path);
emit bookmarksUpdated();
}
_firstPage = atPage;
//emit bookmarksLoaded(*bm);
return true;
}
@ -590,8 +606,9 @@ void PDFComic::process()
_pages.resize(nPages);
_loadedPages = QVector<bool>(nPages,false);
_firstPage = bm->getLastPage();
_index = bm->getLastPage();
if(_firstPage == -1)
_firstPage = bm->getLastPage();
_index = _firstPage;
emit(openAt(_index));
for(int i=_index;i<nPages;i++)

View File

@ -38,11 +38,11 @@
//Constructors
Comic();
Comic(const QString & pathFile);
Comic(const QString & pathFile, int atPage = -1);
~Comic();
void setup();
//Load pages from file
virtual bool load(const QString & path) = 0;
virtual bool load(const QString & path, int atPage = -1) = 0;
/*void loadFromFile(const QString & pathFile);
void loadFromDir(const QString & pathDir);
@ -90,10 +90,10 @@
QList<QVector<quint32> > getSections(int & sectionIndex);
public:
FileComic();
FileComic(const QString & path);
FileComic(const QString & path, int atPage = -1);
~FileComic();
void fileExtracted(int index, const QByteArray & rawData);
virtual bool load(const QString & path);
virtual bool load(const QString & path, int atPage = -1);
public slots:
void process();
@ -109,10 +109,10 @@
//void run();
public:
FolderComic();
FolderComic(const QString & path);
FolderComic(const QString & path, int atPage = -1);
~FolderComic();
virtual bool load(const QString & path);
virtual bool load(const QString & path, int atPage = -1);
public slots:
void process();
@ -129,10 +129,10 @@
//void run();
public:
PDFComic();
PDFComic(const QString & path);
PDFComic(const QString & path, int atPage = -1);
~PDFComic();
virtual bool load(const QString & path);
virtual bool load(const QString & path, int atPage = -1);
public slots:
void process();
};

View File

@ -13,6 +13,9 @@
#include "help_about_dialog.h"
#include "yacreader_tool_bar_stretch.h"
#include "comic_db.h"
#include "yacreader_local_client.h"
#include <ctime>
#include <algorithm>
@ -115,7 +118,7 @@ void MainWindowViewer::setupUI()
setWindowTitle("YACReader");
if(QCoreApplication::argc()>1)
if(QCoreApplication::argc() == 2) //only path...
{
//TODO: new method open(QString)
QString pathFile = QCoreApplication::arguments().at(1);
@ -124,12 +127,37 @@ void MainWindowViewer::setupUI()
getSiblingComics(fi.absolutePath(),fi.fileName());
setWindowTitle("YACReader - " + fi.fileName());
enableActions();
viewer->open(pathFile);
}
/*else if(QCoreApplication::argc() == 5)
{
QString pathFile = QCoreApplication::arguments().at(1);
currentDirectory = pathFile;
quint64 comicId = QCoreApplication::arguments().at(2).toULongLong();
quint64 libraryId = QCoreApplication::arguments().at(3).toULongLong();
int page = QCoreApplication::arguments().at(4).toULongLong();
QFileInfo fi(pathFile);
enableActions();
//TODO request data to the server
ComicDB comic;
comic.id = comicId;
YACReaderLocalClient client;
viewer->open(pathFile);
}
//if(client.requestComicInfo(libraryId,comic))
{
if(comic.info.title == 0 || comic.info.title->isEmpty() )
setWindowTitle("YACReader - " + fi.fileName());
else
setWindowTitle("YACReader - " + *comic.info.title);
}
//else
setWindowTitle("YACReader : " + fi.fileName());
viewer->open(pathFile,page);
} */
versionChecker = new HttpVersionChecker();

View File

@ -564,7 +564,7 @@ void Render::update()
//-----------------------------------------------------------------------------
// Comic interface
//-----------------------------------------------------------------------------
void Render::load(const QString & path)
void Render::load(const QString & path, int atPage)
{
if(comic!=0)
{
@ -612,7 +612,7 @@ void Render::load(const QString & path)
pagesReady.clear();
comic->load(path); //garantiza que se va a intentar abrir el c<>mic
comic->load(path,atPage); //garantiza que se va a intentar abrir el c<>mic
if(thread != NULL)
thread->start();

View File

@ -132,7 +132,7 @@ public slots:
//--comic interface
void nextPage();
void previousPage();
void load(const QString & path);
void load(const QString & path, int atPage);
void rotateRight();
void rotateLeft();
unsigned int getIndex();

View File

@ -156,14 +156,14 @@ void Viewer::createConnections()
connect(render,SIGNAL(bookmarksUpdated()),this,SLOT(setBookmarks()));
}
void Viewer::open(QString pathFile)
void Viewer::open(QString pathFile, int atPage)
{
if(render->hasLoadedComic())
save();
//bd->setBookmarks(*bm);
goToFlow->reset();
render->load(pathFile);
render->load(pathFile, atPage);
//render->update();
verticalScrollBar()->setSliderPosition(verticalScrollBar()->minimum());

View File

@ -35,7 +35,7 @@ class NotificationsLabelWidget;
public:
bool fullscreen; //TODO, change by the right use of windowState();
public slots:
void open(QString pathFile);
void open(QString pathFile, int atPage = -1);
void prev();
void next();
void showGoToDialog();

View File

@ -1,5 +1,6 @@
#include "yacreader_local_client.h"
#include "comic_db.h"
#include "yacreader_global.h"
#include <QLocalSocket>
@ -9,6 +10,7 @@ YACReaderLocalClient::YACReaderLocalClient(QObject *parent) :
localSocket = new QLocalSocket(this);
connect(localSocket, SIGNAL(readyRead()), this, SLOT(readMessage()));
/*connect(socket, SIGNAL(error(QLocalSocket::LocalSocketError)),
this, SLOT(displayError(QLocalSocket::LocalSocketError)));*/
}
@ -19,12 +21,45 @@ void YACReaderLocalClient::readMessage()
}
void YACReaderLocalClient::requestComicInfo(QString library, ComicDB & comic)
bool YACReaderLocalClient::requestComicInfo(quint64 libraryId, ComicDB & comic)
{
localSocket->connectToServer(YACREADERLIBRARY_GUID);
if(localSocket->isOpen())
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << libraryId;
out << comic;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
int written = 0;
while(written != block.size())
{
written += localSocket->write(block);
localSocket->flush();
}
localSocket->waitForReadyRead();
QByteArray data;
QDataStream in(data);
in.setVersion(QDataStream::Qt_4_0);
int totalSize = 0;
while((data.size()-sizeof(quint16)) != totalSize )
{
data.append(localSocket->read(1000000000));
if(data.size()>=sizeof(quint16) && totalSize == 0)
in >> totalSize;
}
in >> comic;
return true;
}
else
return false;
}
void YACReaderLocalClient::sendComicInfo(QString library, ComicDB & comic)
bool YACReaderLocalClient::sendComicInfo(quint64 libraryId, ComicDB & comic)
{
return true;
}

View File

@ -16,8 +16,8 @@ signals:
public slots:
void readMessage();
void requestComicInfo(QString library, ComicDB & comic);
void sendComicInfo(QString library, ComicDB & comic);
bool requestComicInfo(quint64 libraryId, ComicDB & comic);
bool sendComicInfo(quint64 libraryId, ComicDB & comic);
private:
QLocalSocket * localSocket;

View File

@ -1004,15 +1004,20 @@ void LibraryWindow::openComic()
{
if(!importedCovers)
{
QString path = currentPath() + dmCV->getComicPath(comicView->currentIndex());
ComicDB comic = dmCV->getComic(comicView->currentIndex());
QString path = currentPath() + comic.path;
/*quint64 comicId = comic.id;
//TODO generate IDS for libraries...
quint64 libraryId = selectedLibrary->currentIndex();
int page = *(comic.info.numPages) / 2;*/
#ifdef Q_OS_MAC
QProcess::startDetached("open", QStringList() << "-n" << QDir::cleanPath(QCoreApplication::applicationDirPath()+"/../../../YACReader.app") << "--args" << path);//,QStringList() << path);
QProcess::startDetached("open", QStringList() << "-n" << QDir::cleanPath(QCoreApplication::applicationDirPath()+"/../../../YACReader.app") << "--args" << path /*<< comicId << libraryId << page*/);//,QStringList() << path);
//Comic is readed
#else
QProcess::startDetached(QDir::cleanPath(QCoreApplication::applicationDirPath())+QString("/YACReader \"%1\"").arg(path),QStringList());
QProcess::startDetached(QDir::cleanPath(QCoreApplication::applicationDirPath())+QString("/YACReader \"%1\"").arg(path)/*.arg(comicId).arg(libraryId).arg(page)*/,QStringList());
#endif
//Comic is readed
setCurrentComicReaded();

View File

@ -4,6 +4,9 @@
#include <QLocalSocket>
#include "yacreader_global.h"
#include "db_helper.h"
#include "comic_db.h"
YACReaderLocalServer::YACReaderLocalServer(QObject *parent) :
QObject(parent)
@ -49,24 +52,52 @@ void YACReaderLocalServer::sendResponse()
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();
quint64 libraryId;
ComicDB comic;
clientConnection->waitForReadyRead();
QByteArray data;
QDataStream inputStream(data);
inputStream.setVersion(QDataStream::Qt_4_0);
int totalSize = 0;
while((data.size()-sizeof(quint16)) != totalSize )
{
data.append(clientConnection->read(1000000000));
if(data.size()>=sizeof(quint16) && totalSize == 0)
inputStream >> totalSize;
}
inputStream >> libraryId;
inputStream >> comic;
getComicInfo(libraryId,comic);
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << comic;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
int written = 0;
while(written != block.size())
{
written += clientConnection->write(block);
clientConnection->flush();
}
//clientConnection->waitForBytesWritten();
clientConnection->disconnectFromServer();
}
void YACReaderLocalServer::getComicInfo(quint64 libraryId, ComicDB & comic)
{
comic = DBHelper::getComicInfo(DBHelper::getLibrariesNames().at(libraryId), comic.id);
}
bool YACReaderLocalServer::isRunning()
{
QLocalSocket socket;

View File

@ -4,6 +4,7 @@
#include <QObject>
class QLocalServer;
class ComicDB;
class YACReaderLocalServer : public QObject
{
@ -17,7 +18,7 @@ public slots:
bool isListening();
void sendResponse();
static bool isRunning();
void getComicInfo(quint64 libraryId, ComicDB & comic);
private:
QLocalServer * localServer;

View File

@ -405,4 +405,163 @@ QPixmap ComicInfo::getCover(const QString & basePath)
QPixmap c;
c.convertFromImage(cover);
return c;
}
QDataStream &operator<<(QDataStream & stream, const ComicDB & comic)
{
stream << comic.id;
stream << comic.name;
stream << comic.parentId;
stream << comic.path;
stream << comic._hasCover;
stream << comic.info;
return stream;
}
QDataStream &operator>>(QDataStream & stream, ComicDB & comic)
{
stream >> comic.id;
stream >> comic.name;
stream >> comic.parentId;
stream >> comic.path;
stream >> comic._hasCover;
stream >> comic.info;
return stream;
}
void serializeField(QDataStream & stream, QString * field)
{
stream << (field!=0);
if (field!=0) stream << *field;
}
void serializeField(QDataStream & stream, int * field)
{
stream << (field!=0);
if (field!=0) stream << *field;
}
void serializeField(QDataStream & stream, bool * field)
{
stream << (field!=0);
if (field!=0) stream << *field;
}
void deserializeField(QDataStream & stream, QString * & field)
{
bool isData;
stream >> isData;
if(isData)
{
field = new QString();
stream >> *field;
}
}
void deserializeField(QDataStream & stream, int * & field)
{
bool isData;
stream >> isData;
if(isData)
{
field = new int;
stream >> *field;
}
}
void deserializeField(QDataStream & stream, bool * & field)
{
bool isData;
stream >> isData;
if(isData)
{
field = new bool;
stream >> *field;
}
}
QDataStream &operator<<(QDataStream & stream, const ComicInfo & comicInfo)
{
stream << comicInfo.id;
stream << comicInfo.read;
stream << comicInfo.edited;
stream << comicInfo.hash;
stream << comicInfo.existOnDb;
serializeField(stream,comicInfo.title);
serializeField(stream,comicInfo.coverPage);
serializeField(stream,comicInfo.numPages);
serializeField(stream,comicInfo.number);
serializeField(stream,comicInfo.isBis);
serializeField(stream,comicInfo.count);
serializeField(stream,comicInfo.volume);
serializeField(stream,comicInfo.storyArc);
serializeField(stream,comicInfo.arcNumber);
serializeField(stream,comicInfo.arcCount);
serializeField(stream,comicInfo.genere);
serializeField(stream,comicInfo.writer);
serializeField(stream,comicInfo.penciller);
serializeField(stream,comicInfo.inker);
serializeField(stream,comicInfo.colorist);
serializeField(stream,comicInfo.letterer);
serializeField(stream,comicInfo.coverArtist);
serializeField(stream,comicInfo.date);
serializeField(stream,comicInfo.publisher);
serializeField(stream,comicInfo.format);
serializeField(stream,comicInfo.color);
serializeField(stream,comicInfo.ageRating);
serializeField(stream,comicInfo.synopsis);
serializeField(stream,comicInfo.characters);
serializeField(stream,comicInfo.notes);
return stream;
}
QDataStream &operator>>(QDataStream & stream, ComicInfo & comicInfo)
{
stream >> comicInfo.id;
stream >> comicInfo.read;
stream >> comicInfo.edited;
stream >> comicInfo.hash;
stream >> comicInfo.existOnDb;
deserializeField(stream,comicInfo.title);
deserializeField(stream,comicInfo.coverPage);
deserializeField(stream,comicInfo.numPages);
deserializeField(stream,comicInfo.number);
deserializeField(stream,comicInfo.isBis);
deserializeField(stream,comicInfo.count);
deserializeField(stream,comicInfo.volume);
deserializeField(stream,comicInfo.storyArc);
deserializeField(stream,comicInfo.arcNumber);
deserializeField(stream,comicInfo.arcCount);
deserializeField(stream,comicInfo.genere);
deserializeField(stream,comicInfo.writer);
deserializeField(stream,comicInfo.penciller);
deserializeField(stream,comicInfo.inker);
deserializeField(stream,comicInfo.colorist);
deserializeField(stream,comicInfo.letterer);
deserializeField(stream,comicInfo.coverArtist);
deserializeField(stream,comicInfo.date);
deserializeField(stream,comicInfo.publisher);
deserializeField(stream,comicInfo.format);
deserializeField(stream,comicInfo.color);
deserializeField(stream,comicInfo.ageRating);
deserializeField(stream,comicInfo.synopsis);
deserializeField(stream,comicInfo.characters);
deserializeField(stream,comicInfo.notes);
return stream;
}

View File

@ -91,6 +91,10 @@ public:
QPixmap getCover(const QString & basePath);
friend QDataStream &operator<<(QDataStream & stream, const ComicInfo & comicInfo);
friend QDataStream &operator>>(QDataStream & stream, ComicInfo & comicInfo);
private:
void setValue(QString * & field, const QString & value);
void setValue(int * & field, int value);
@ -115,6 +119,9 @@ public:
QString toTXT();
ComicInfo info;
friend QDataStream &operator<<(QDataStream &, const ComicDB &);
friend QDataStream &operator>>(QDataStream &, ComicDB &);
};