diff options
Diffstat (limited to 'src/preview/PreviewModel.cpp')
| -rw-r--r-- | src/preview/PreviewModel.cpp | 84 |
1 files changed, 81 insertions, 3 deletions
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp index dba7aa1..371d917 100644 --- a/src/preview/PreviewModel.cpp +++ b/src/preview/PreviewModel.cpp @@ -11,11 +11,14 @@ PreviewModel::PreviewModel(): save(NULL), savePreview(NULL), + saveComments(NULL), doOpen(false), updateSavePreviewWorking(false), updateSavePreviewFinished(false), updateSaveInfoWorking(false), - updateSaveInfoFinished(false) + updateSaveInfoFinished(false), + updateSaveCommentsWorking(false), + updateSaveCommentsFinished(false) { // TODO Auto-generated constructor stub @@ -31,6 +34,11 @@ void * PreviewModel::updateSavePreviewTHelper(void * obj) return ((PreviewModel*)obj)->updateSavePreviewT(); } +void * PreviewModel::updateSaveCommentsTHelper(void * obj) +{ + return ((PreviewModel*)obj)->updateSaveCommentsT(); +} + void * PreviewModel::updateSaveInfoT() { Save * tempSave = Client::Ref().GetSave(tSaveID, tSaveDate); @@ -45,15 +53,38 @@ void * PreviewModel::updateSavePreviewT() return tempThumb; } +void * PreviewModel::updateSaveCommentsT() +{ + std::vector<Comment*> * tempComments = Client::Ref().GetComments(tSaveID, 0, 10); + updateSaveCommentsFinished = true; + return tempComments; +} + void PreviewModel::UpdateSave(int saveID, int saveDate) { this->tSaveID = saveID; this->tSaveDate = saveDate; - save = NULL; - savePreview = NULL; + if(save) + { + delete save; + save = NULL; + } + if(savePreview) + { + delete savePreview; + savePreview = NULL; + } + if(saveComments) + { + for(int i = 0; i < saveComments->size(); i++) + delete saveComments->at(i); + delete saveComments; + saveComments = NULL; + } notifyPreviewChanged(); notifySaveChanged(); + notifySaveCommentsChanged(); if(!updateSavePreviewWorking) { @@ -68,6 +99,13 @@ void PreviewModel::UpdateSave(int saveID, int saveDate) updateSaveInfoFinished = false; pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoTHelper, this); } + + if(!updateSaveCommentsWorking) + { + updateSaveCommentsWorking = true; + updateSaveCommentsFinished = false; + pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); + } } void PreviewModel::SetDoOpen(bool doOpen) @@ -90,6 +128,11 @@ Save * PreviewModel::GetSave() return save; } +std::vector<Comment*> * PreviewModel::GetComments() +{ + return saveComments; +} + void PreviewModel::notifyPreviewChanged() { for(int i = 0; i < observers.size(); i++) @@ -106,6 +149,14 @@ void PreviewModel::notifySaveChanged() } } +void PreviewModel::notifySaveCommentsChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyCommentsChanged(this); + } +} + void PreviewModel::AddObserver(PreviewView * observer) { observers.push_back(observer); observer->NotifyPreviewChanged(this); @@ -118,6 +169,11 @@ void PreviewModel::Update() { if(updateSavePreviewFinished) { + if(savePreview) + { + delete savePreview; + savePreview = NULL; + } updateSavePreviewWorking = false; pthread_join(updateSavePreviewThread, (void**)(&savePreview)); notifyPreviewChanged(); @@ -128,11 +184,33 @@ void PreviewModel::Update() { if(updateSaveInfoFinished) { + if(save) + { + delete save; + save = NULL; + } updateSaveInfoWorking = false; pthread_join(updateSaveInfoThread, (void**)(&save)); notifySaveChanged(); } } + + if(updateSaveCommentsWorking) + { + if(updateSaveCommentsFinished) + { + if(saveComments) + { + for(int i = 0; i < saveComments->size(); i++) + delete saveComments->at(i); + delete saveComments; + saveComments = NULL; + } + updateSaveCommentsWorking = false; + pthread_join(updateSaveCommentsThread, (void**)(&saveComments)); + notifySaveCommentsChanged(); + } + } } PreviewModel::~PreviewModel() { |
