summaryrefslogtreecommitdiff
path: root/src/preview/PreviewModel.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-06-22 15:35:32 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-06-22 15:35:32 (GMT)
commitbeee75d9d1f9bc4a897887a0ac5b427449213f80 (patch)
tree5b76724ab9c7ae8ea719066b01e301ec8cbacec8 /src/preview/PreviewModel.cpp
parente6e23669eea8768ec004c16437c67717b66fb1a0 (diff)
downloadpowder-beee75d9d1f9bc4a897887a0ac5b427449213f80.zip
powder-beee75d9d1f9bc4a897887a0ac5b427449213f80.tar.gz
Multiple pages of comments
Diffstat (limited to 'src/preview/PreviewModel.cpp')
-rw-r--r--src/preview/PreviewModel.cpp61
1 files changed, 59 insertions, 2 deletions
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
index f923ceb..3066ac3 100644
--- a/src/preview/PreviewModel.cpp
+++ b/src/preview/PreviewModel.cpp
@@ -5,6 +5,7 @@
* Author: Simon
*/
+#include <cmath>
#include "PreviewModel.h"
#include "client/Client.h"
#include "PreviewModelException.h"
@@ -18,7 +19,9 @@ PreviewModel::PreviewModel():
updateSaveInfoWorking(false),
updateSaveInfoFinished(false),
updateSaveCommentsWorking(false),
- updateSaveCommentsFinished(false)
+ updateSaveCommentsFinished(false),
+ commentsTotal(0),
+ commentsPageNumber(1)
{
// TODO Auto-generated constructor stub
@@ -58,7 +61,7 @@ void * PreviewModel::updateSaveDataT()
void * PreviewModel::updateSaveCommentsT()
{
- std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(tSaveID, 0, 10);
+ std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(tSaveID, (commentsPageNumber-1)*10, 10);
updateSaveCommentsFinished = true;
return tempComments;
}
@@ -110,6 +113,7 @@ void PreviewModel::UpdateSave(int saveID, int saveDate)
if(!updateSaveCommentsWorking)
{
+ commentsLoaded = false;
updateSaveCommentsWorking = true;
updateSaveCommentsFinished = false;
pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this);
@@ -131,6 +135,46 @@ SaveInfo * PreviewModel::GetSave()
return save;
}
+int PreviewModel::GetCommentsPageNum()
+{
+ return commentsPageNumber;
+}
+
+int PreviewModel::GetCommentsPageCount()
+{
+ return max(1, (int)(ceil(commentsTotal/10)));
+}
+
+bool PreviewModel::GetCommentsLoaded()
+{
+ return commentsLoaded;
+}
+
+void PreviewModel::UpdateComments(int pageNumber)
+{
+ commentsLoaded = false;
+ if(saveComments)
+ {
+ for(int i = 0; i < saveComments->size(); i++)
+ delete saveComments->at(i);
+ delete saveComments;
+ saveComments = NULL;
+ }
+
+ //resultCount = 0;
+ commentsPageNumber = pageNumber;
+ notifySaveCommentsChanged();
+ notifyCommentsPageChanged();
+
+ //Threading
+ if(!updateSaveCommentsWorking)
+ {
+ updateSaveCommentsFinished = false;
+ updateSaveCommentsWorking = true;
+ pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this);
+ }
+}
+
std::vector<SaveComment*> * PreviewModel::GetComments()
{
return saveComments;
@@ -144,6 +188,14 @@ void PreviewModel::notifySaveChanged()
}
}
+void PreviewModel::notifyCommentsPageChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyCommentsPageChanged(this);
+ }
+}
+
void PreviewModel::notifySaveCommentsChanged()
{
for(int i = 0; i < observers.size(); i++)
@@ -155,6 +207,8 @@ void PreviewModel::notifySaveCommentsChanged()
void PreviewModel::AddObserver(PreviewView * observer) {
observers.push_back(observer);
observer->NotifySaveChanged(this);
+ observer->NotifyCommentsChanged(this);
+ observer->NotifyCommentsPageChanged(this);
}
void PreviewModel::Update()
@@ -194,6 +248,7 @@ void PreviewModel::Update()
pthread_join(updateSaveInfoThread, (void**)(&save));
if(updateSaveDataFinished && save)
{
+ commentsTotal = save->Comments;
try
{
save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size()));
@@ -204,6 +259,7 @@ void PreviewModel::Update()
}
}
notifySaveChanged();
+ notifyCommentsPageChanged();
if(!save)
throw PreviewModelException("Unable to load save");
}
@@ -220,6 +276,7 @@ void PreviewModel::Update()
delete saveComments;
saveComments = NULL;
}
+ commentsLoaded = true;
updateSaveCommentsWorking = false;
pthread_join(updateSaveCommentsThread, (void**)(&saveComments));
notifySaveCommentsChanged();