Audio notifications for install progress

This commit is contained in:
Huntereb 2019-12-09 22:23:21 -05:00
parent c9e020da74
commit 2a88b56ce2
10 changed files with 61 additions and 2 deletions

View File

@ -18,4 +18,5 @@ namespace inst::util {
std::vector<uint32_t> setClockSpeed(int deviceToClock, uint32_t clockSpeed); std::vector<uint32_t> setClockSpeed(int deviceToClock, uint32_t clockSpeed);
std::string getIPAddress(); std::string getIPAddress();
int getUsbState(); int getUsbState();
void playAudio(std::string audioPath);
} }

BIN
romfs/audio/awoo.wav Executable file

Binary file not shown.

BIN
romfs/audio/bark.wav Executable file

Binary file not shown.

View File

@ -28,6 +28,7 @@ SOFTWARE.
#include <memory> #include <memory>
#include <string> #include <string>
#include <machine/endian.h> #include <machine/endian.h>
#include <thread>
#include "nx/ncm.hpp" #include "nx/ncm.hpp"
#include "install/nca.hpp" #include "install/nca.hpp"
@ -40,6 +41,7 @@ SOFTWARE.
#include "util/title_util.hpp" #include "util/title_util.hpp"
#include "sdInstall.hpp" #include "sdInstall.hpp"
#include "ui/MainApplication.hpp" #include "ui/MainApplication.hpp"
#include "util/util.hpp"
namespace inst::ui { namespace inst::ui {
extern MainApplication *mainApp; extern MainApplication *mainApp;
@ -129,7 +131,9 @@ namespace tin::install::nsp
if (!Crypto::rsa2048PssVerify(&header.magic, 0x200, header.fixed_key_sig, Crypto::NCAHeaderSignature)) if (!Crypto::rsa2048PssVerify(&header.magic, 0x200, header.fixed_key_sig, Crypto::NCAHeaderSignature))
{ {
std::thread audioThread(inst::util::playAudio,"romfs:/audio/bark.wav");
int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false); int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false);
audioThread.join();
if (rc != 1) if (rc != 1)
THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str()); THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str());
declinedValidation = true; declinedValidation = true;

View File

@ -23,6 +23,8 @@ SOFTWARE.
#include "install/install_nsp_remote.hpp" #include "install/install_nsp_remote.hpp"
#include <machine/endian.h> #include <machine/endian.h>
#include <thread>
#include "install/nca.hpp" #include "install/nca.hpp"
#include "nx/fs.hpp" #include "nx/fs.hpp"
#include "nx/ncm.hpp" #include "nx/ncm.hpp"
@ -33,6 +35,7 @@ SOFTWARE.
#include "util/debug.h" #include "util/debug.h"
#include "util/error.hpp" #include "util/error.hpp"
#include "ui/MainApplication.hpp" #include "ui/MainApplication.hpp"
#include "util/util.hpp"
namespace inst::ui { namespace inst::ui {
extern MainApplication *mainApp; extern MainApplication *mainApp;
@ -107,7 +110,9 @@ namespace tin::install::nsp
if (!Crypto::rsa2048PssVerify(&header->magic, 0x200, header->fixed_key_sig, Crypto::NCAHeaderSignature)) if (!Crypto::rsa2048PssVerify(&header->magic, 0x200, header->fixed_key_sig, Crypto::NCAHeaderSignature))
{ {
std::thread audioThread(inst::util::playAudio,"romfs:/audio/bark.wav");
int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false); int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false);
audioThread.join();
if (rc != 1) if (rc != 1)
THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str()); THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str());
declinedValidation = true; declinedValidation = true;

View File

@ -20,6 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
*/ */
#include <thread>
#include "install/install_xci.hpp" #include "install/install_xci.hpp"
#include "util/file_util.hpp" #include "util/file_util.hpp"
#include "util/title_util.hpp" #include "util/title_util.hpp"
@ -30,6 +32,7 @@ SOFTWARE.
#include "install/nca.hpp" #include "install/nca.hpp"
#include "sdInstall.hpp" #include "sdInstall.hpp"
#include "ui/MainApplication.hpp" #include "ui/MainApplication.hpp"
#include "util/util.hpp"
namespace inst::ui { namespace inst::ui {
extern MainApplication *mainApp; extern MainApplication *mainApp;
@ -108,7 +111,9 @@ namespace tin::install::xci
if (!Crypto::rsa2048PssVerify(&header->magic, 0x200, header->fixed_key_sig, Crypto::NCAHeaderSignature)) if (!Crypto::rsa2048PssVerify(&header->magic, 0x200, header->fixed_key_sig, Crypto::NCAHeaderSignature))
{ {
std::thread audioThread(inst::util::playAudio,"romfs:/audio/awoo.wav");
int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false); int rc = inst::ui::mainApp->CreateShowDialog("Invalid NCA signature detected!", "Improperly signed software should only be installed from trustworthy\nsources. Files containing cartridge repacks and DLC unlockers will always\nshow this warning. You can disable this check in Awoo Installer's settings.\n\nAre you sure you want to continue the installation?", {"Cancel", "Yes, I understand the risks"}, false);
audioThread.join();
if (rc != 1) if (rc != 1)
THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str()); THROW_FORMAT(("The requested NCA (" + tin::util::GetNcaIdString(ncaId) + ") is not properly signed").c_str());
declinedValidation = true; declinedValidation = true;

View File

@ -26,6 +26,7 @@ SOFTWARE.
#include <fcntl.h> #include <fcntl.h>
#include <sstream> #include <sstream>
#include <curl/curl.h> #include <curl/curl.h>
#include <thread>
#include <switch.h> #include <switch.h>
#include "util/network_util.hpp" #include "util/network_util.hpp"
@ -171,7 +172,9 @@ namespace netInstStuff{
fprintf(stdout, "%s", e.what()); fprintf(stdout, "%s", e.what());
inst::ui::setInstInfoText("Failed to install " + urlNames[urlItr]); inst::ui::setInstInfoText("Failed to install " + urlNames[urlItr]);
inst::ui::setInstBarPerc(0); inst::ui::setInstBarPerc(0);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/bark.wav");
inst::ui::mainApp->CreateShowDialog("Failed to install " + urlNames[urlItr] + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true); inst::ui::mainApp->CreateShowDialog("Failed to install " + urlNames[urlItr] + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true);
audioThread.join();
nspInstalled = false; nspInstalled = false;
} }
@ -189,8 +192,10 @@ namespace netInstStuff{
if(nspInstalled) { if(nspInstalled) {
inst::ui::setInstInfoText("Install complete"); inst::ui::setInstInfoText("Install complete");
inst::ui::setInstBarPerc(100); inst::ui::setInstBarPerc(100);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/awoo.wav");
if (ourUrlList.size() > 1) inst::ui::mainApp->CreateShowDialog(std::to_string(ourUrlList.size()) + " files installed successfully!", nspInstStuff::finishedMessage(), {"OK"}, true); if (ourUrlList.size() > 1) inst::ui::mainApp->CreateShowDialog(std::to_string(ourUrlList.size()) + " files installed successfully!", nspInstStuff::finishedMessage(), {"OK"}, true);
else inst::ui::mainApp->CreateShowDialog(urlNames[0] + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true); else inst::ui::mainApp->CreateShowDialog(urlNames[0] + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true);
audioThread.join();
} }
LOG_DEBUG("Done"); LOG_DEBUG("Done");

View File

@ -24,6 +24,7 @@ SOFTWARE.
#include <sstream> #include <sstream>
#include <filesystem> #include <filesystem>
#include <ctime> #include <ctime>
#include <thread>
#include "install/install_nsp.hpp" #include "install/install_nsp.hpp"
#include "install/install_xci.hpp" #include "install/install_xci.hpp"
@ -140,7 +141,9 @@ namespace nspInstStuff {
fprintf(stdout, "%s", e.what()); fprintf(stdout, "%s", e.what());
inst::ui::setInstInfoText("Failed to install " + inst::util::shortenString(ourTitleList[titleItr].filename().string(), 42, true)); inst::ui::setInstInfoText("Failed to install " + inst::util::shortenString(ourTitleList[titleItr].filename().string(), 42, true));
inst::ui::setInstBarPerc(0); inst::ui::setInstBarPerc(0);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/bark.wav");
inst::ui::mainApp->CreateShowDialog("Failed to install " + inst::util::shortenString(ourTitleList[titleItr].filename().string(), 42, true) + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true); inst::ui::mainApp->CreateShowDialog("Failed to install " + inst::util::shortenString(ourTitleList[titleItr].filename().string(), 42, true) + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true);
audioThread.join();
nspInstalled = false; nspInstalled = false;
} }
@ -160,6 +163,7 @@ namespace nspInstStuff {
if(nspInstalled) { if(nspInstalled) {
inst::ui::setInstInfoText("Install complete"); inst::ui::setInstInfoText("Install complete");
inst::ui::setInstBarPerc(100); inst::ui::setInstBarPerc(100);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/awoo.wav");
if (ourTitleList.size() > 1) { if (ourTitleList.size() > 1) {
if (inst::config::deletePrompt) { if (inst::config::deletePrompt) {
if(inst::ui::mainApp->CreateShowDialog(std::to_string(ourTitleList.size()) + " files installed successfully! Delete them from the SD card?", "The original files aren't needed anymore after they've been installed", {"No","Yes"}, false) == 1) { if(inst::ui::mainApp->CreateShowDialog(std::to_string(ourTitleList.size()) + " files installed successfully! Delete them from the SD card?", "The original files aren't needed anymore after they've been installed", {"No","Yes"}, false) == 1) {
@ -173,6 +177,7 @@ namespace nspInstStuff {
if(inst::ui::mainApp->CreateShowDialog(inst::util::shortenString(ourTitleList[0].filename().string(), 32, true) + " installed! Delete it from the SD card?", "The original file isn't needed anymore after it's been installed", {"No","Yes"}, false) == 1) if (std::filesystem::exists(ourTitleList[0])) std::filesystem::remove(ourTitleList[0]); if(inst::ui::mainApp->CreateShowDialog(inst::util::shortenString(ourTitleList[0].filename().string(), 32, true) + " installed! Delete it from the SD card?", "The original file isn't needed anymore after it's been installed", {"No","Yes"}, false) == 1) if (std::filesystem::exists(ourTitleList[0])) std::filesystem::remove(ourTitleList[0]);
} else inst::ui::mainApp->CreateShowDialog(inst::util::shortenString(ourTitleList[0].filename().string(), 42, true) + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true); } else inst::ui::mainApp->CreateShowDialog(inst::util::shortenString(ourTitleList[0].filename().string(), 42, true) + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true);
} }
audioThread.join();
} }
LOG_DEBUG("Done"); LOG_DEBUG("Done");

View File

@ -1,4 +1,5 @@
#include <string> #include <string>
#include <thread>
#include "util/error.hpp" #include "util/error.hpp"
#include "usbInstall.hpp" #include "usbInstall.hpp"
#include "install/usb_nsp.hpp" #include "install/usb_nsp.hpp"
@ -31,8 +32,6 @@ namespace usbInstStuff {
} PACKED; } PACKED;
std::vector<std::string> OnSelected() { std::vector<std::string> OnSelected() {
Result rc = 0;
TUSHeader header; TUSHeader header;
while(true) { while(true) {
if (tin::util::USBRead(&header, sizeof(TUSHeader)) != 0) break; if (tin::util::USBRead(&header, sizeof(TUSHeader)) != 0) break;
@ -111,7 +110,9 @@ namespace usbInstStuff {
fprintf(stdout, "%s", e.what()); fprintf(stdout, "%s", e.what());
inst::ui::setInstInfoText("Failed to install " + fileNames[fileItr]); inst::ui::setInstInfoText("Failed to install " + fileNames[fileItr]);
inst::ui::setInstBarPerc(0); inst::ui::setInstBarPerc(0);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/bark.wav");
inst::ui::mainApp->CreateShowDialog("Failed to install " + fileNames[fileItr] + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true); inst::ui::mainApp->CreateShowDialog("Failed to install " + fileNames[fileItr] + "!", "Partially installed contents can be removed from the System Settings applet.\n\n" + (std::string)e.what(), {"OK"}, true);
audioThread.join();
nspInstalled = false; nspInstalled = false;
} }
@ -125,8 +126,10 @@ namespace usbInstStuff {
tin::util::USBCmdManager::SendExitCmd(); tin::util::USBCmdManager::SendExitCmd();
inst::ui::setInstInfoText("Install complete"); inst::ui::setInstInfoText("Install complete");
inst::ui::setInstBarPerc(100); inst::ui::setInstBarPerc(100);
std::thread audioThread(inst::util::playAudio,"romfs:/audio/awoo.wav");
if (ourTitleList.size() > 1) inst::ui::mainApp->CreateShowDialog(std::to_string(ourTitleList.size()) + " files installed successfully!", nspInstStuff::finishedMessage(), {"OK"}, true); if (ourTitleList.size() > 1) inst::ui::mainApp->CreateShowDialog(std::to_string(ourTitleList.size()) + " files installed successfully!", nspInstStuff::finishedMessage(), {"OK"}, true);
else inst::ui::mainApp->CreateShowDialog(fileNames[0] + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true); else inst::ui::mainApp->CreateShowDialog(fileNames[0] + " installed!", nspInstStuff::finishedMessage(), {"OK"}, true);
audioThread.join();
} }
LOG_DEBUG("Done"); LOG_DEBUG("Done");

View File

@ -264,4 +264,35 @@ namespace inst::util {
usbDsGetState(&usbState); usbDsGetState(&usbState);
return usbState; return usbState;
} }
void playAudio(std::string audioPath) {
int audio_rate = 22050;
Uint16 audio_format = AUDIO_S16SYS;
int audio_channels = 2;
int audio_buffers = 4096;
if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) return;
Mix_Chunk *sound = NULL;
sound = Mix_LoadWAV(audioPath.c_str());
if(sound == NULL) {
Mix_FreeChunk(sound);
Mix_CloseAudio();
return;
}
int channel = Mix_PlayChannel(-1, sound, 0);
if(channel == -1) {
Mix_FreeChunk(sound);
Mix_CloseAudio();
return;
}
while(Mix_Playing(channel) != 0);
Mix_FreeChunk(sound);
Mix_CloseAudio();
return;
}
} }