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