/****************************************************************************
 * 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;
}