summaryrefslogtreecommitdiff
path: root/src/gui/preview/PreviewModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/preview/PreviewModel.cpp')
-rw-r--r--src/gui/preview/PreviewModel.cpp115
1 files changed, 55 insertions, 60 deletions
diff --git a/src/gui/preview/PreviewModel.cpp b/src/gui/preview/PreviewModel.cpp
index 04830d0..5903f77 100644
--- a/src/gui/preview/PreviewModel.cpp
+++ b/src/gui/preview/PreviewModel.cpp
@@ -23,7 +23,7 @@ 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 (((threadInfo*)obj)->previewExited && tempSave)
delete tempSave;
return tempSave;
}
@@ -36,8 +36,10 @@ void * PreviewModel::updateSaveDataT(void * obj)
((threadInfo*)obj)->threadFinished = true;
if (((threadInfo*)obj)->previewExited)
{
- delete tempSave;
- free(tempData);
+ if (tempSave)
+ delete tempSave;
+ if (tempData)
+ free(tempData);
}
return tempSave;
}
@@ -46,7 +48,7 @@ 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 (((threadInfo*)obj)->previewExited && tempComments)
{
for(int i = 0; i < tempComments->size(); i++)
delete tempComments->at(i);
@@ -244,81 +246,74 @@ void PreviewModel::AddObserver(PreviewView * observer)
void PreviewModel::Update()
{
- if (updateSaveDataInfo)
+ if (updateSaveDataInfo && updateSaveDataInfo->threadFinished)
{
- if (updateSaveDataInfo->threadFinished)
- {
- delete updateSaveDataInfo;
- updateSaveDataInfo = NULL;
- pthread_join(updateSaveDataThread, (void**)(&saveData));
+ pthread_join(updateSaveDataThread, (void**)(&saveData));
+ delete updateSaveDataInfo;
+ updateSaveDataInfo = NULL;
- if (save)
+ if (save)
+ {
+ commentsTotal = save->Comments;
+ try
{
- 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();
+ 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)
+ if (updateSaveInfoInfo && updateSaveInfoInfo->threadFinished)
{
- if (updateSaveInfoInfo->threadFinished)
+ if (save)
{
- if (save)
+ delete save;
+ save = NULL;
+ }
+ pthread_join(updateSaveInfoThread, (void**)(&save));
+ delete updateSaveInfoInfo;
+ updateSaveInfoInfo = NULL;
+
+ if (save)
+ {
+ commentsTotal = save->Comments;
+ try
{
- delete save;
- save = NULL;
+ save->SetGameSave(new GameSave((char*)saveData->data, saveData->length));
}
- delete updateSaveInfoInfo;
- updateSaveInfoInfo = NULL;
- pthread_join(updateSaveInfoThread, (void**)(&save));
- if (save)
+ catch(ParseException &e)
{
- 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();
+ throw PreviewModelException("Save file corrupt or from newer version");
}
- notifySaveChanged();
-
- if(!save)
- throw PreviewModelException("Unable to load save");
+ notifyCommentsPageChanged();
}
+ notifySaveChanged();
+
+ if(!save)
+ throw PreviewModelException("Unable to load save");
}
- if (updateSaveCommentsInfo)
+ if (updateSaveCommentsInfo && updateSaveCommentsInfo->threadFinished)
{
- if (updateSaveCommentsInfo->threadFinished)
+ if(saveComments)
{
- if(saveComments)
- {
- for(int i = 0; i < saveComments->size(); i++)
- delete saveComments->at(i);
- saveComments->clear();
- delete saveComments;
- saveComments = NULL;
- }
- commentsLoaded = true;
- delete updateSaveCommentsInfo;
- updateSaveCommentsInfo = NULL;
- pthread_join(updateSaveCommentsThread, (void**)(&saveComments));
- notifySaveCommentsChanged();
+ 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();
}
}