summaryrefslogtreecommitdiff
path: root/src/search/SearchModel.cpp
diff options
context:
space:
mode:
authorSimon 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)
commit680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch)
tree21ca16411c1687bb212369a59c5f3de2a0cf023b /src/search/SearchModel.cpp
parent7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff)
downloadpowder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.zip
powder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.tar.gz
Background retrieval of save info and save list.
Diffstat (limited to 'src/search/SearchModel.cpp')
-rw-r--r--src/search/SearchModel.cpp60
1 files changed, 49 insertions, 11 deletions
diff --git a/src/search/SearchModel.cpp b/src/search/SearchModel.cpp
index d740620..e40c4b0 100644
--- a/src/search/SearchModel.cpp
+++ b/src/search/SearchModel.cpp
@@ -6,29 +6,43 @@
SearchModel::SearchModel():
currentSort("votes"),
showOwn(false),
- loadedSave(NULL)
+ loadedSave(NULL),
+ updateSaveListWorking(false),
+ updateSaveListFinished(false),
+ saveListLoaded(false)
{
}
+void * SearchModel::updateSaveListTHelper(void * obj)
+{
+ return ((SearchModel *)obj)->updateSaveListT();
+}
+
+void * SearchModel::updateSaveListT()
+{
+ vector<Save*> * tempSaveList = Client::Ref().SearchSaves((currentPage-1)*20, 20, lastQuery, currentSort, resultCount);
+ updateSaveListFinished = true;
+ return tempSaveList;
+}
+
void SearchModel::UpdateSaveList(int pageNumber, std::string query)
{
lastQuery = query;
lastError = "";
+ saveListLoaded = false;
saveList.clear();
- currentPage = 1;
- resultCount = 0;
+ //resultCount = 0;
+ currentPage = pageNumber;
notifySaveListChanged();
notifyPageChanged();
- vector<Save*> * tempSaveList = Client::Ref().SearchSaves((pageNumber-1)*20, 20, query, currentSort, resultCount);
- saveList = *tempSaveList;
- delete tempSaveList;
- if(!saveList.size())
+
+ //Threading
+ if(!updateSaveListWorking)
{
- lastError = Client::Ref().GetLastError();
+ updateSaveListFinished = false;
+ updateSaveListWorking = true;
+ pthread_create(&updateSaveListThread, 0, &SearchModel::updateSaveListTHelper, this);
}
- currentPage = pageNumber;
- notifyPageChanged();
- notifySaveListChanged();
}
void SearchModel::SetLoadedSave(Save * save)
@@ -45,6 +59,30 @@ vector<Save*> SearchModel::GetSaveList()
return saveList;
}
+void SearchModel::Update()
+{
+ if(updateSaveListWorking)
+ {
+ if(updateSaveListFinished)
+ {
+ updateSaveListWorking = false;
+ lastError = "";
+ saveListLoaded = true;
+ vector<Save*> * tempSaveList;
+ pthread_join(updateSaveListThread, (void**)(&tempSaveList));
+ saveList = *tempSaveList;
+ delete tempSaveList;
+ if(!saveList.size())
+ {
+ lastError = Client::Ref().GetLastError();
+ }
+ //currentPage = pageNumber;
+ notifyPageChanged();
+ notifySaveListChanged();
+ }
+ }
+}
+
void SearchModel::AddObserver(SearchView * observer)
{
observers.push_back(observer);