/**************************************************************************** * Checking if an Update is available ***************************************************************************/ int UpdateTask::CheckForUpdate(void) { if(!IsNetworkInit()) return -1; int revnumber = 0; int currentrev = atoi(SvnRev()); struct block file = downloadfile(appUpdateURL); if(!file.data) return -2; file.data[file.size-1] = 0; char *revPtr = strstr((char*)file.data, "rev=\""); if(!revPtr) { free(file.data); return -3; } revPtr += strlen("rev=\""); revnumber = atoi(revPtr); if (revnumber <= currentrev) return 0; char *downloadLink = strstr(revPtr, "link=\""); if(!downloadLink) { free(file.data); return -4; } downloadLink += strlen("link=\""); char *ptr = strchr(downloadLink, '"'); if(!ptr) { free(file.data); return -5; } *ptr = 0; char text[100]; sprintf(text, tr("Update to Rev%i available"), revnumber); PromptWindow * Prompt = new PromptWindow(text, tr("Do you want to update now ?"), tr("Yes"), tr("Show Changelog"), tr("Cancel")); Prompt->DimBackground(true); Application::Instance()->Append(Prompt); Application::Instance()->SetUpdateOnly(Prompt); int choice; while((choice = Prompt->GetChoice()) < 0) usleep(10000); Application::Instance()->PushForDelete(Prompt); if(choice == 1) { if(DownloadApp(downloadLink) >= 0) { Prompt = new PromptWindow(tr("Update successfully finished"), tr("Do you want to reboot now ?"), tr("Yes"), tr("No")); Prompt->DimBackground(true); Application::Instance()->Append(Prompt); Application::Instance()->SetUpdateOnly(Prompt); while((choice = Prompt->GetChoice()) < 0) usleep(10000); Application::Instance()->PushForDelete(Prompt); if(choice) RebootApp(); } } else if(choice == 2) { ChangeLog Changelog; Changelog.DownloadChangeLog(revnumber-5, revnumber); if(!Changelog.Show()) ThrowMsg(tr("Error:"), tr("Failed to get the Changelog.")); } return revnumber; }
int UpdateSettingsMenu::GetMenuInternal() { int ret = optionBrowser->GetClickedOption(); if (ret < 0) return MENU_NONE; int Idx = -1; //! Settings: Auto Update if (ret == ++Idx) { if (++cfg.AutoConnect > 1) cfg.AutoConnect = 0; } //! Settings: Meta Update else if (ret == ++Idx) { if (++cfg.UpdateMeta > 1) cfg.UpdateMeta = 0; } //! Settings: Icon Update else if (ret == ++Idx) { if (++cfg.UpdateIcon > 2) cfg.UpdateIcon = 0; if(cfg.UpdateIcon > 0) { char text[20]; if(cfg.UpdateIcon == 1) strcpy(text, tr("Standard Icon")); else if(cfg.UpdateIcon == 2) strcpy(text, tr("Black.Pearl Icon")); MainWindow::Instance()->SetState(STATE_DISABLED); if(WindowPrompt(text, tr("Do you want to download now?"), tr("Yes"), tr("Cancel"), 0, 0, false) == 1) { UpdateIconPNG(); WindowPrompt(tr("Icon successfully downloaded."), 0, tr("OK"), 0, 0, 0, false); } MainWindow::Instance()->SetState(STATE_DEFAULT); } } //! Settings: WiiTDB Update else if (ret == ++Idx) { if (++cfg.UpdateWiiTdb > 1) cfg.UpdateWiiTdb = 0; } //! Button: Update else if (ret == ++Idx) { int res = CheckForUpdate(); if(res == 0) { MainWindow::Instance()->SetState(STATE_DISABLED); int choice = WindowPrompt(tr("No new updates available"), 0, tr("OK"), tr("Show Changelog"), 0, 0, false); if(choice == 0) { ChangeLog Changelog; if(!Changelog.Show()) WindowPrompt(tr("Failed to get the Changelog."), 0, tr("OK"), 0, 0, 0, false); } MainWindow::Instance()->SetState(STATE_DEFAULT); } } SetOptionValues(); return MainWindow::Instance()->GetBootHomebrew() ? MENU_EXIT : MENU_NONE; }