summaryrefslogtreecommitdiff
path: root/src/search/SearchModel.cpp
diff options
context:
space:
mode:
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);