Threaded the storage of the scene. Asynchronous reading of the previous and next scene to be stored on cache.
parent
817b69fd4f
commit
61e588bb94
@ -0,0 +1,69 @@ |
||||
/*
|
||||
* Copyright (C) 2013 Open Education Foundation |
||||
* |
||||
* |
||||
* This file is part of OpenBoard. |
||||
* |
||||
* OpenBoard is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, |
||||
* with a specific linking exception for the OpenSSL project's |
||||
* "OpenSSL" library (or with modified versions of it that use the |
||||
* same license as the "OpenSSL" library). |
||||
* |
||||
* OpenBoard is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
|
||||
|
||||
#include "UBPersistenceWorker.h" |
||||
#include "adaptors/UBSvgSubsetAdaptor.h" |
||||
#include "adaptors/UBThumbnailAdaptor.h" |
||||
|
||||
UBPersistenceWorker::UBPersistenceWorker(QObject *parent) : |
||||
QObject(parent) |
||||
, mReceivedApplicationClosing(false) |
||||
{ |
||||
} |
||||
|
||||
void UBPersistenceWorker::saveScene(UBDocumentProxy* proxy, UBGraphicsScene* scene, const int pageIndex) |
||||
{ |
||||
saves.append({WriteScene,proxy,scene,pageIndex}); |
||||
mSemaphore.release(); |
||||
} |
||||
|
||||
void UBPersistenceWorker::readScene(UBDocumentProxy* proxy, const int pageIndex) |
||||
{ |
||||
saves.append({ReadScene,proxy,0,pageIndex}); |
||||
mSemaphore.release(); |
||||
} |
||||
|
||||
void UBPersistenceWorker::applicationWillClose() |
||||
{ |
||||
qDebug() << "applicaiton Will close signal received"; |
||||
mReceivedApplicationClosing = true; |
||||
mSemaphore.release(); |
||||
} |
||||
|
||||
void UBPersistenceWorker::process() |
||||
{ |
||||
qDebug() << "process starts"; |
||||
mSemaphore.acquire(); |
||||
do{ |
||||
PersistenceInformation info = saves.takeFirst(); |
||||
if(info.action == WriteScene) |
||||
UBSvgSubsetAdaptor::persistScene(info.proxy, info.scene, info.sceneIndex); |
||||
else{ |
||||
emit sceneLoaded(UBSvgSubsetAdaptor::loadSceneAsText(info.proxy,info.sceneIndex), info.proxy, info.sceneIndex); |
||||
} |
||||
mSemaphore.acquire(); |
||||
}while(!mReceivedApplicationClosing); |
||||
qDebug() << "process will stop"; |
||||
emit finished(); |
||||
} |
@ -0,0 +1,68 @@ |
||||
/*
|
||||
* Copyright (C) 2013-2014 Open Education Foundation |
||||
* |
||||
* |
||||
* This file is part of OpenBoard. |
||||
* |
||||
* OpenBoard is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, |
||||
* with a specific linking exception for the OpenSSL project's |
||||
* "OpenSSL" library (or with modified versions of it that use the |
||||
* same license as the "OpenSSL" library). |
||||
* |
||||
* OpenBoard is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with OpenBoard. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
|
||||
#ifndef UBPERSISTENCEWORKER_H |
||||
#define UBPERSISTENCEWORKER_H |
||||
|
||||
#include <QObject> |
||||
#include <QSemaphore> |
||||
#include "document/UBDocumentProxy.h" |
||||
#include "domain/UBGraphicsScene.h" |
||||
|
||||
typedef enum{ |
||||
WriteScene = 0, |
||||
ReadScene |
||||
}ActionType; |
||||
|
||||
typedef struct{ |
||||
ActionType action; |
||||
UBDocumentProxy* proxy; |
||||
UBGraphicsScene* scene; |
||||
int sceneIndex; |
||||
}PersistenceInformation; |
||||
|
||||
class UBPersistenceWorker : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
public: |
||||
explicit UBPersistenceWorker(QObject *parent = 0); |
||||
|
||||
void saveScene(UBDocumentProxy* proxy, UBGraphicsScene* scene, const int pageIndex); |
||||
void readScene(UBDocumentProxy* proxy, const int pageIndex); |
||||
|
||||
signals: |
||||
void finished(); |
||||
void error(QString string); |
||||
void sceneLoaded(QByteArray text,UBDocumentProxy* proxy, const int pageIndex); |
||||
|
||||
public slots: |
||||
void process(); |
||||
void applicationWillClose(); |
||||
|
||||
protected: |
||||
bool mReceivedApplicationClosing; |
||||
QSemaphore mSemaphore; |
||||
QList<PersistenceInformation> saves; |
||||
}; |
||||
|
||||
#endif // UBPERSISTENCEWORKER_H
|
Loading…
Reference in new issue