summaryrefslogtreecommitdiff
path: root/src/gui/preview/PreviewModel.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-07-28 09:30:32 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-07-28 09:30:32 (GMT)
commit8cfead7d5a89e0b1ef5db97d5c4ee85b2526ab37 (patch)
tree575b42207cc1dc45414ed9808eed210b402e0926 /src/gui/preview/PreviewModel.cpp
parentddd51aed3d354fc81ec764fb72aa76f56884a840 (diff)
downloadpowder-8cfead7d5a89e0b1ef5db97d5c4ee85b2526ab37.zip
powder-8cfead7d5a89e0b1ef5db97d5c4ee85b2526ab37.tar.gz
Use async requests/RequestBroker for PreviewModel
Diffstat (limited to 'src/gui/preview/PreviewModel.cpp')
-rw-r--r--src/gui/preview/PreviewModel.cpp263
1 files changed, 78 insertions, 185 deletions
diff --git a/src/gui/preview/PreviewModel.cpp b/src/gui/preview/PreviewModel.cpp
index 6776445..2f58107 100644
--- a/src/gui/preview/PreviewModel.cpp
+++ b/src/gui/preview/PreviewModel.cpp
@@ -5,68 +5,18 @@
#include "PreviewModelException.h"
PreviewModel::PreviewModel():
+ doOpen(false),
save(NULL),
- saveComments(NULL),
saveData(NULL),
- doOpen(false),
- commentsTotal(0),
- commentsPageNumber(1),
+ saveComments(NULL),
commentBoxEnabled(false),
- updateSaveDataInfo(NULL),
- updateSaveInfoInfo(NULL),
- updateSaveCommentsInfo(NULL)
+ commentsLoaded(false),
+ commentsTotal(0),
+ commentsPageNumber(1)
{
}
-void * PreviewModel::updateSaveInfoT(void * obj)
-{
- SaveInfo * tempSave = Client::Ref().GetSave(((threadInfo*)obj)->saveID, ((threadInfo*)obj)->saveDate);
- ((threadInfo*)obj)->threadFinished = true;
- if (((threadInfo*)obj)->previewExited)
- {
- if (tempSave)
- delete tempSave;
- delete obj;
- }
- return tempSave;
-}
-
-void * PreviewModel::updateSaveDataT(void * obj)
-{
- int tempDataSize;
- unsigned char * tempData = Client::Ref().GetSaveData(((threadInfo*)obj)->saveID, ((threadInfo*)obj)->saveDate, tempDataSize);
- SaveData * tempSave = new SaveData(tempData, tempDataSize);
- ((threadInfo*)obj)->threadFinished = true;
- if (((threadInfo*)obj)->previewExited)
- {
- if (tempSave)
- delete tempSave;
- if (tempData)
- free(tempData);
- delete obj;
- }
- return tempSave;
-}
-
-void * PreviewModel::updateSaveCommentsT(void * obj)
-{
- std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(((threadInfo*)obj)->saveID, (((threadInfo*)obj)->saveDate-1)*20, 20); //saveDate is used as commentsPageNumber
- ((threadInfo*)obj)->threadFinished = true;
- if (((threadInfo*)obj)->previewExited)
- {
- if (tempComments)
- {
- for(int i = 0; i < tempComments->size(); i++)
- delete tempComments->at(i);
- tempComments->clear();
- delete tempComments;
- }
- delete obj;
- }
- return tempComments;
-}
-
void PreviewModel::SetFavourite(bool favourite)
{
if(save)
@@ -107,8 +57,6 @@ void PreviewModel::UpdateSave(int saveID, int saveDate)
}
if (saveData)
{
- if (saveData->data)
- free(saveData->data);
delete saveData;
saveData = NULL;
}
@@ -123,32 +71,13 @@ void PreviewModel::UpdateSave(int saveID, int saveDate)
notifySaveChanged();
notifySaveCommentsChanged();
- if (!updateSaveDataInfo)
- updateSaveDataInfo = new threadInfo(saveID, saveDate);
- if (updateSaveDataInfo->threadFinished)
- {
- updateSaveDataInfo->threadFinished = false;
- pthread_create(&updateSaveDataThread, 0, &PreviewModel::updateSaveDataT, updateSaveDataInfo);
- }
-
- if (!updateSaveInfoInfo)
- updateSaveInfoInfo = new threadInfo(saveID, saveDate);
- if(updateSaveInfoInfo->threadFinished)
- {
- updateSaveInfoInfo->threadFinished = false;
- pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoT, updateSaveInfoInfo);
- }
+ RequestBroker::Ref().Start(Client::Ref().GetSaveDataAsync(saveID, saveDate), this, 1);
+ RequestBroker::Ref().Start(Client::Ref().GetSaveAsync(saveID, saveDate), this, 2);
- if (!GetDoOpen())
+ if(!GetDoOpen())
{
- if (!updateSaveCommentsInfo)
- updateSaveCommentsInfo = new threadInfo(saveID, commentsPageNumber);
- if (updateSaveCommentsInfo->threadFinished)
- {
- commentsLoaded = false;
- updateSaveCommentsInfo->threadFinished = false;
- pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsT, updateSaveCommentsInfo);
- }
+ commentsLoaded = false;
+ RequestBroker::Ref().Start(Client::Ref().GetCommentsAsync(saveID, (commentsPageNumber-1)*20, 20), this, 3);
}
}
@@ -184,32 +113,77 @@ bool PreviewModel::GetCommentsLoaded()
void PreviewModel::UpdateComments(int pageNumber)
{
- commentsLoaded = false;
- if(saveComments)
- {
- for(int i = 0; i < saveComments->size(); i++)
- delete saveComments->at(i);
- saveComments->clear();
- delete saveComments;
- saveComments = NULL;
+ if(commentsLoaded){
+ commentsLoaded = false;
+ if(saveComments)
+ {
+ for(int i = 0; i < saveComments->size(); i++)
+ delete saveComments->at(i);
+ saveComments->clear();
+ delete saveComments;
+ saveComments = NULL;
+ }
+
+ commentsPageNumber = pageNumber;
+ if(!GetDoOpen())
+ RequestBroker::Ref().Start(Client::Ref().GetCommentsAsync(tSaveID, (commentsPageNumber-1)*20, 20), this, 3);
+
+ notifySaveCommentsChanged();
+ notifyCommentsPageChanged();
}
+}
- //resultCount = 0;
- commentsPageNumber = pageNumber;
- notifySaveCommentsChanged();
- notifyCommentsPageChanged();
+void PreviewModel::OnResponseReady(void * object, int identifier)
+{
+ if(identifier == 1){
+ if(saveData)
+ delete saveData;
+ saveData = (std::vector<unsigned char>*)object;
+ }
+ if(identifier == 2){
+ if(save)
+ delete save;
+ save = (SaveInfo*)object;
+ }
+ if(identifier == 3){
+ if(saveComments)
+ {
+ for(int i = 0; i < saveComments->size(); i++)
+ delete saveComments->at(i);
+ saveComments->clear();
+ delete saveComments;
+ saveComments = NULL;
+ }
+ saveComments = (std::vector<SaveComment*>*)object;
+ std::cout << object << std::endl;
+ commentsLoaded = true;
+ notifySaveCommentsChanged();
+ }
- //Threading
- if (!updateSaveCommentsInfo)
- updateSaveCommentsInfo = new threadInfo(tSaveID, commentsPageNumber);
- if (updateSaveCommentsInfo->threadFinished)
- {
- commentsLoaded = false;
- updateSaveCommentsInfo->threadFinished = false;
- pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsT, updateSaveCommentsInfo);
+ if(identifier == 1 || identifier == 2) {
+ if (save && saveData)
+ {
+ commentsTotal = save->Comments;
+ try
+ {
+ save->SetGameSave(new GameSave(*saveData));
+ }
+ catch(ParseException &e)
+ {
+ throw PreviewModelException("Save file corrupt or from newer version");
+ }
+ notifySaveChanged();
+ notifyCommentsPageChanged();
+ }
}
}
+
+void PreviewModel::Update()
+{
+
+}
+
std::vector<SaveComment*> * PreviewModel::GetComments()
{
return saveComments;
@@ -256,89 +230,14 @@ void PreviewModel::AddObserver(PreviewView * observer)
observer->NotifyCommentBoxEnabledChanged(this);
}
-void PreviewModel::Update()
-{
- if (updateSaveDataInfo && updateSaveDataInfo->threadFinished)
- {
- pthread_join(updateSaveDataThread, (void**)(&saveData));
- delete updateSaveDataInfo;
- updateSaveDataInfo = NULL;
-
- if (save && saveData)
- {
- commentsTotal = save->Comments;
- try
- {
- save->SetGameSave(new GameSave((char*)saveData->data, saveData->length));
- }
- catch(ParseException &e)
- {
- throw PreviewModelException("Save file corrupt or from newer version");
- }
- notifySaveChanged();
- notifyCommentsPageChanged();
- }
- }
-
- if (updateSaveInfoInfo && updateSaveInfoInfo->threadFinished)
- {
- if (save)
- {
- delete save;
- save = NULL;
- }
- pthread_join(updateSaveInfoThread, (void**)(&save));
- delete updateSaveInfoInfo;
- updateSaveInfoInfo = NULL;
-
- if (save && saveData)
- {
- commentsTotal = save->Comments;
- try
- {
- save->SetGameSave(new GameSave((char*)saveData->data, saveData->length));
- }
- catch(ParseException &e)
- {
- throw PreviewModelException("Save file corrupt or from newer version");
- }
- notifyCommentsPageChanged();
- }
- notifySaveChanged();
-
- if(!save)
- throw PreviewModelException("Unable to load save");
- }
-
- if (updateSaveCommentsInfo && updateSaveCommentsInfo->threadFinished)
- {
- if(saveComments)
- {
- for(int i = 0; i < saveComments->size(); i++)
- delete saveComments->at(i);
- saveComments->clear();
- delete saveComments;
- saveComments = NULL;
- }
-
- commentsLoaded = true;
- pthread_join(updateSaveCommentsThread, (void**)(&saveComments));
- delete updateSaveCommentsInfo;
- updateSaveCommentsInfo = NULL;
- notifySaveCommentsChanged();
- }
-}
PreviewModel::~PreviewModel()
{
- if (updateSaveDataInfo)
- updateSaveDataInfo->previewExited = true;
- if (updateSaveInfoInfo)
- updateSaveInfoInfo->previewExited = true;
- if (updateSaveCommentsInfo)
- updateSaveCommentsInfo->previewExited = true;
+ RequestBroker::Ref().DetachRequestListener(this);
if(save)
delete save;
+ if (saveData)
+ delete saveData;
if(saveComments)
{
for(int i = 0; i < saveComments->size(); i++)
@@ -346,10 +245,4 @@ PreviewModel::~PreviewModel()
saveComments->clear();
delete saveComments;
}
- if (saveData)
- {
- if (saveData->data)
- free(saveData->data);
- delete saveData;
- }
}