summaryrefslogtreecommitdiff
path: root/src/preview/PreviewModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/preview/PreviewModel.cpp')
-rw-r--r--src/preview/PreviewModel.cpp84
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() {