summaryrefslogtreecommitdiff
path: root/src/preview/PreviewModel.cpp
diff options
context:
space:
mode:
authorBryan Hoyle <starfoxprime@gmail.com>2012-06-22 16:00:17 (GMT)
committer Bryan Hoyle <starfoxprime@gmail.com>2012-06-22 16:00:17 (GMT)
commit6fa05d1930964d0a09093c627b30241d73c69dda (patch)
treeb2d9856f5f0c26529de8eff8fc8b8f39cb234b64 /src/preview/PreviewModel.cpp
parent58f3494f6fce58729e6e3fe91e1234a9bd636d55 (diff)
parent55d90a44a8425f70b08d864570e255f4bad8ba4c (diff)
downloadpowder-6fa05d1930964d0a09093c627b30241d73c69dda.zip
powder-6fa05d1930964d0a09093c627b30241d73c69dda.tar.gz
Merge branch 'master' of github.com:FacialTurd/PowderToypp
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();