diff options
| author | Simon 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) |
| commit | 680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch) | |
| tree | 21ca16411c1687bb212369a59c5f3de2a0cf023b /src/preview/PreviewModel.cpp | |
| parent | 7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff) | |
| download | powder-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.cpp | 74 |
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; |
