diff options
| author | Simon 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) |
| commit | 680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch) | |
| tree | 21ca16411c1687bb212369a59c5f3de2a0cf023b /src/search/SearchModel.cpp | |
| parent | 7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff) | |
| download | powder-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.cpp | 60 |
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); |
