summaryrefslogtreecommitdiff
path: root/src/preview/PreviewModel.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-29 14:44:36 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-29 14:44:36 (GMT)
commit680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch)
tree21ca16411c1687bb212369a59c5f3de2a0cf023b /src/preview/PreviewModel.cpp
parent7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff)
downloadpowder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.zip
powder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.tar.gz
Background retrieval of save info and save list.
Diffstat (limited to 'src/preview/PreviewModel.cpp')
-rw-r--r--src/preview/PreviewModel.cpp74
1 files changed, 70 insertions, 4 deletions
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
index 07396cb..658a767 100644
--- a/src/preview/PreviewModel.cpp
+++ b/src/preview/PreviewModel.cpp
@@ -11,18 +11,63 @@
PreviewModel::PreviewModel():
save(NULL),
savePreview(NULL),
- doOpen(false)
+ doOpen(false),
+ updateSavePreviewWorking(false),
+ updateSavePreviewFinished(false),
+ updateSaveInfoWorking(false),
+ updateSaveInfoFinished(false)
{
// TODO Auto-generated constructor stub
}
+void * PreviewModel::updateSaveInfoTHelper(void * obj)
+{
+ return ((PreviewModel*)obj)->updateSaveInfoT();
+}
+
+void * PreviewModel::updateSavePreviewTHelper(void * obj)
+{
+ return ((PreviewModel*)obj)->updateSavePreviewT();
+}
+
+void * PreviewModel::updateSaveInfoT()
+{
+ Save * tempSave = Client::Ref().GetSave(tSaveID, tSaveDate);
+ updateSaveInfoFinished = true;
+ return tempSave;
+}
+
+void * PreviewModel::updateSavePreviewT()
+{
+ Thumbnail * tempThumb = Client::Ref().GetPreview(tSaveID, tSaveDate);
+ updateSavePreviewFinished = true;
+ return tempThumb;
+}
+
void PreviewModel::UpdateSave(int saveID, int saveDate)
{
- save = Client::Ref().GetSave(saveID, saveDate);
- notifySaveChanged();
- savePreview = Client::Ref().GetPreview(saveID, saveDate);
+ this->tSaveID = saveID;
+ this->tSaveDate = saveDate;
+
+ save = NULL;
+ savePreview = NULL;
notifyPreviewChanged();
+ notifySaveChanged();
+
+ if(!updateSavePreviewWorking)
+ {
+ updateSavePreviewWorking = true;
+ updateSavePreviewFinished = false;
+ pthread_create(&updateSavePreviewThread, 0, &PreviewModel::updateSavePreviewTHelper, this);
+ }
+
+ if(!updateSaveInfoWorking)
+ {
+ updateSaveInfoWorking = true;
+ updateSaveInfoFinished = false;
+ pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoTHelper, this);
+ }
}
void PreviewModel::SetDoOpen(bool doOpen)
@@ -67,6 +112,27 @@ void PreviewModel::AddObserver(PreviewView * observer) {
observer->NotifySaveChanged(this);
}
+void PreviewModel::Update()
+{
+ if(updateSavePreviewWorking)
+ {
+ if(updateSavePreviewFinished)
+ {
+ pthread_join(updateSavePreviewThread, (void**)(&savePreview));
+ notifyPreviewChanged();
+ }
+ }
+
+ if(updateSaveInfoWorking)
+ {
+ if(updateSaveInfoFinished)
+ {
+ pthread_join(updateSaveInfoThread, (void**)(&save));
+ notifySaveChanged();
+ }
+ }
+}
+
PreviewModel::~PreviewModel() {
if(save)
delete save;