void PreviewModel::OnResponseReady(void * object, int identifier) { if (identifier == 1) { delete saveData; saveData = (std::vector<unsigned char>*)object; } if (identifier == 2) { delete save; save = (SaveInfo*)object; } if (identifier == 3) { if (saveComments) { for (size_t i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); delete saveComments; saveComments = NULL; } saveComments = (std::vector<SaveComment*>*)object; commentsLoaded = true; notifySaveCommentsChanged(); notifyCommentsPageChanged(); } if (identifier == 1 || identifier == 2) { if (save && saveData) { commentsTotal = save->Comments; try { GameSave *gameSave = new GameSave(*saveData); if (gameSave->fromNewerVersion) new ErrorMessage("This save is from a newer version", "Please update TPT in game or at http://powdertoy.co.uk"); save->SetGameSave(gameSave); } catch(ParseException &e) { new ErrorMessage("Error", e.what()); canOpen = false; } notifySaveChanged(); notifyCommentsPageChanged(); //make sure author name comments are red if (commentsLoaded) notifySaveCommentsChanged(); } } }
void PreviewModel::UpdateSave(int saveID, int saveDate) { this->tSaveID = saveID; this->tSaveDate = saveDate; if (save) { delete save; save = NULL; } if (saveData) { delete saveData; saveData = NULL; } if (saveComments) { for (size_t i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); delete saveComments; saveComments = NULL; } notifySaveChanged(); notifySaveCommentsChanged(); RequestBroker::Ref().Start(Client::Ref().GetSaveDataAsync(saveID, saveDate), this, 1); RequestBroker::Ref().Start(Client::Ref().GetSaveAsync(saveID, saveDate), this, 2); if (!GetDoOpen()) { commentsLoaded = false; RequestBroker::Ref().Start(Client::Ref().GetCommentsAsync(saveID, (commentsPageNumber-1)*20, 20), this, 3); } }
void PreviewModel::Update() { if(updateSavePreviewWorking) { if(updateSavePreviewFinished) { if(savePreview) { delete savePreview; savePreview = NULL; } updateSavePreviewWorking = false; pthread_join(updateSavePreviewThread, (void**)(&savePreview)); notifyPreviewChanged(); } } if(updateSaveInfoWorking) { if(updateSaveInfoFinished) { if(save) { delete save; save = NULL; } updateSaveInfoWorking = false; pthread_join(updateSaveInfoThread, (void**)(&save)); notifySaveChanged(); } } if(updateSaveCommentsWorking) { if(updateSaveCommentsFinished) { if(saveComments) { for(int i = 0; i < saveComments->size(); i++) delete saveComments->at(i); delete saveComments; saveComments = NULL; } updateSaveCommentsWorking = false; pthread_join(updateSaveCommentsThread, (void**)(&saveComments)); notifySaveCommentsChanged(); } } }
void PreviewModel::UpdateSave(int saveID, int saveDate) { this->tSaveID = saveID; this->tSaveDate = saveDate; if(save) { delete save; save = NULL; } if(savePreview) { delete savePreview; savePreview = NULL; } if(saveComments) { for(int i = 0; i < saveComments->size(); i++) delete saveComments->at(i); delete saveComments; saveComments = NULL; } notifyPreviewChanged(); notifySaveChanged(); notifySaveCommentsChanged(); if(!updateSavePreviewWorking) { updateSavePreviewWorking = true; updateSavePreviewFinished = false; pthread_create(&updateSavePreviewThread, 0, &PreviewModel::updateSavePreviewTHelper, this); } if(!updateSaveInfoWorking) { updateSaveInfoWorking = true; updateSaveInfoFinished = false; pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoTHelper, this); } if(!updateSaveCommentsWorking) { updateSaveCommentsWorking = true; updateSaveCommentsFinished = false; pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); } }
void PreviewModel::UpdateComments(int pageNumber) { if (commentsLoaded) { commentsLoaded = false; if (saveComments) { for (size_t i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); delete saveComments; saveComments = NULL; } commentsPageNumber = pageNumber; if (!GetDoOpen()) RequestBroker::Ref().Start(Client::Ref().GetCommentsAsync(tSaveID, (commentsPageNumber-1)*20, 20), this, 3); notifySaveCommentsChanged(); notifyCommentsPageChanged(); } }
void PreviewModel::UpdateComments(int pageNumber) { commentsLoaded = false; if(saveComments) { for(int i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); saveComments = NULL; } //resultCount = 0; commentsPageNumber = pageNumber; notifySaveCommentsChanged(); notifyCommentsPageChanged(); //Threading if(!updateSaveCommentsWorking) { updateSaveCommentsFinished = false; updateSaveCommentsWorking = true; pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); } }
void PreviewModel::OnResponseFailed(int identifier) { if (identifier == 3) { if (saveComments) { for (size_t i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); delete saveComments; saveComments = NULL; } saveComments = NULL; commentsLoaded = true; notifySaveCommentsChanged(); } else { for (size_t i = 0; i < observers.size(); i++) { observers[i]->SaveLoadingError(Client::Ref().GetLastError()); } } }
void PreviewModel::Update() { if(updateSaveDataWorking) { if(updateSaveDataFinished) { updateSaveDataWorking = false; pthread_join(updateSaveDataThread, NULL); if(updateSaveInfoFinished && save) { commentsTotal = save->Comments; try { save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size())); } catch(ParseException &e) { throw PreviewModelException("Save file corrupt or from newer version"); } notifySaveChanged(); notifyCommentsPageChanged(); } } } if(updateSaveInfoWorking) { if(updateSaveInfoFinished) { if(save) { delete save; save = NULL; } updateSaveInfoWorking = false; pthread_join(updateSaveInfoThread, (void**)(&save)); if(updateSaveDataFinished && save) { commentsTotal = save->Comments; try { save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size())); } catch(ParseException &e) { throw PreviewModelException("Save file corrupt or from newer version"); } notifyCommentsPageChanged(); } notifySaveChanged(); if(!save) throw PreviewModelException("Unable to load save"); } } if(updateSaveCommentsWorking) { if(updateSaveCommentsFinished) { if(saveComments) { for(int i = 0; i < saveComments->size(); i++) delete saveComments->at(i); saveComments->clear(); saveComments = NULL; } commentsLoaded = true; updateSaveCommentsWorking = false; pthread_join(updateSaveCommentsThread, (void**)(&saveComments)); notifySaveCommentsChanged(); } } }