#include "menus.h" #include "usbloader/usbstorage2.h" #include "usbloader/wbfs.h" #include "usbloader/disc.h" #include "usbloader/utils.h" #include "usbloader/GameList.h" #include "prompts/ProgressWindow.h" float gamesize; /**************************************************************************** * MenuInstall ***************************************************************************/ int MenuInstall() { gprintf("\nMenuInstall()"); int menu = MENU_NONE; static struct discHdr headerdisc ATTRIBUTE_ALIGN( 32 ); Disc_SetUSB(NULL); int ret, choice = 0; char name[200]; GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume); char imgPath[100]; snprintf(imgPath, sizeof(imgPath), "%sbattery.png", Settings.theme_path); GuiImageData battery(imgPath, battery_png); snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", Settings.theme_path); GuiImageData batteryBar(imgPath, battery_bar_png); snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", Settings.theme_path); GuiImageData batteryRed(imgPath, battery_red_png); snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_red.png", Settings.theme_path); GuiImageData batteryBarRed(imgPath, battery_bar_red_png); HaltGui(); GuiWindow w(screenwidth, screenheight); mainWindow->Append(&w); ResumeGui(); while (menu == MENU_NONE) { VIDEO_WaitVSync(); ret = DiscWait(tr( "Insert Disk" ), tr( "Waiting..." ), tr( "Cancel" ), 0, 0); if (ret < 0) { WindowPrompt(tr( "Error reading Disc" ), 0, tr( "Back" )); menu = MENU_DISCLIST; break; } ret = Disc_Open(); if (ret < 0) { WindowPrompt(tr( "Could not open Disc" ), 0, tr( "Back" )); menu = MENU_DISCLIST; break; } ret = Disc_IsWii(); if (ret < 0) { choice = WindowPrompt(tr( "Not a Wii Disc" ), tr( "Insert a Wii Disc!" ), tr( "OK" ), tr( "Back" )); if (choice == 1) { menu = MENU_INSTALL; break; } else menu = MENU_DISCLIST; break; } Disc_ReadHeader(&headerdisc); snprintf(name, sizeof(name), "%s", headerdisc.title); ret = WBFS_CheckGame(headerdisc.id); if (ret) { WindowPrompt(tr( "Game is already installed:" ), name, tr( "Back" )); menu = MENU_DISCLIST; break; } f32 freespace, used; WBFS_DiskSpace(&used, &freespace); gamesize = WBFS_EstimeGameSize() / GB_SIZE; char gametxt[50]; sprintf(gametxt, "%s : %.2fGB", name, gamesize); wiilight(1); choice = WindowPrompt(tr( "Continue to install game?" ), gametxt, tr( "OK" ), tr( "Cancel" )); if (choice == 1) { sprintf(gametxt, "%s", tr( "Installing game:" )); if (gamesize > freespace) { char errortxt[50]; sprintf(errortxt, "%s: %.2fGB, %s: %.2fGB", tr( "Game Size" ), gamesize, tr( "Free Space" ), freespace); WindowPrompt(tr( "Not enough free space!" ), errortxt, tr( "OK" )); menu = MENU_DISCLIST; break; } else { USBStorage2_Watchdog(0); SetupGameInstallProgress(gametxt, name); ret = WBFS_AddGame(); ProgressStop(); USBStorage2_Watchdog(1); wiilight(0); if (ret != 0) { WindowPrompt(tr( "Install Error!" ), 0, tr( "Back" )); menu = MENU_DISCLIST; break; } else { gameList.ReadGameList(); //get the entries again gameList.FilterList(); GuiSound * instsuccess = NULL; bgMusic->Pause(); instsuccess = new GuiSound(success_ogg, success_ogg_size, Settings.sfxvolume); instsuccess->SetVolume(Settings.sfxvolume); instsuccess->SetLoop(0); instsuccess->Play(); WindowPrompt(tr( "Successfully installed:" ), name, tr( "OK" )); instsuccess->Stop(); delete instsuccess; bgMusic->Resume(); menu = MENU_DISCLIST; break; } } } else { menu = MENU_DISCLIST; break; } if (shutdown == 1) { wiilight(0); Sys_Shutdown(); } if (reset == 1) { wiilight(0); Sys_Reboot(); } } //Turn off the WiiLight wiilight(0); HaltGui(); mainWindow->Remove(&w); ResumeGui(); return menu; }