ppsspp/UI/PluginScreen.cpp
vnctdj 509045b345 Another one
Another one (2)

And the last one

+ now "Developer" is refered by "*de" to avoid confusion with "*d" which is for "Dialog"

I hope I don't forget to move some other "Back" translations to [Dialog] in other files...

"Cancel" translation moved

Update

with papel's changes (so we can close his pull request which is now outdated)

Update (2)

with papel's changes (so we can close his pull request which is now outdated) (2)

No I have finished, so, to conclude, if we merge all my pull requests, papel's one can be closed with no loss of work :)

Rebased
2013-09-03 16:48:02 +02:00

176 lines
6.1 KiB
C++

// Copyright (c) 2012- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#include "base/functional.h"
#include "UI/PluginScreen.h"
#include "ext/vjson/json.h"
#include "i18n/i18n.h"
#include "ui/view.h"
#include "ui/viewgroup.h"
#include "ui/ui_context.h"
#include "UI/ui_atlas.h"
#include "Core/HW/atrac3plus.h"
#ifdef __APPLE__
#include "TargetConditionals.h"
#if TARGET_OS_MAC
#define MACOSX
#endif
#endif
PluginScreen::PluginScreen() {
// Let's start by downloading the json. We'll find out in Update when it's finished.
json_ = downloader_.StartDownload("http://www.ppsspp.org/update/at3plusdecoder.json", "");
}
void PluginScreen::CreateViews() {
I18NCategory *p = GetI18NCategory("Plugin");
I18NCategory *d = GetI18NCategory("Dialog");
// Build the UI.
using namespace UI;
root_ = new LinearLayout(ORIENT_VERTICAL);
Margins textMargins(20,17);
Margins buttonMargins(10,10);
root_->Add(new TextView(p->T("Atrac3+ Audio Support"), ALIGN_HCENTER, 1.5f, new LinearLayoutParams(textMargins)));
ViewGroup *scroll = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(1.0));
LinearLayout *scrollContents = new LinearLayout(ORIENT_VERTICAL);
root_->Add(scroll);
scroll->Add(scrollContents);
tvDescription_ = scrollContents->Add(new TextView(p->T("Looking for download..."), ALIGN_LEFT, 1.0f, new LinearLayoutParams(textMargins)));
const char *legalityNotice =
p->T("Origins are dubious", "* Mai's Atrac3+ decoder is currently required\n"
"for background audio and voice in many games.\n"
"Please note that the origins of this code are dubious.\n"
"Choose More Information for more information.");
scrollContents->Add(new TextView(legalityNotice, ALIGN_LEFT, 0.65f, new LinearLayoutParams(textMargins) ));
progress_ = root_->Add(new ProgressBar());
progress_->SetVisibility(V_GONE);
ViewGroup *buttonBar = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(buttonMargins));
root_->Add(buttonBar);
buttonBack_ = new Button(d->T("Back"), new LinearLayoutParams(1.0));
buttonBar->Add(buttonBack_)->OnClick.Handle<UIScreen>(this, &UIScreen::OnBack);
buttonDownload_ = new Button(p->T("Download and install"), new LinearLayoutParams(1.0));
buttonDownload_->SetEnabled(false);
buttonBar->Add(buttonDownload_)->OnClick.Handle(this, &PluginScreen::OnDownload);
buttonBar->Add(new Button(p->T("More Information"), new LinearLayoutParams(1.0)))->OnClick.Handle(this, &PluginScreen::OnInformation);
}
void PluginScreen::update(InputState &input) {
UIScreen::update(input);
I18NCategory *p = GetI18NCategory("Plugin");
downloader_.Update();
if (json_.get() && json_->Done()) {
if (json_->ResultCode() != 200) {
char codeStr[18];
sprintf(codeStr, "%i", json_->ResultCode());
tvDescription_->SetText(p->T("Failed to reach server", "Failed to reach server.\nPlease try again later and check that you have a\nworking internet connection."));
buttonDownload_->SetEnabled(false);
} else {
std::string json;
json_->buffer().TakeAll(&json);
JsonReader reader(json.data(), json.size());
const json_value *root = reader.root();
std::string abi = "";
#if defined(_M_IX86) && defined(_WIN32)
abi = "Win32";
#elif defined(_M_X64) && defined(_WIN32)
abi = "Win64";
#elif defined(ARMEABI)
abi = "armeabi";
#elif defined(ARMEABI_V7A)
abi = "armeabi-v7a";
#elif defined(ANDROID) && defined(_M_IX86)
abi = "android-x86";
#elif defined(BLACKBERRY)
abi = "blackberry10";
#elif defined(IOS)
abi = "ios";
#elif defined(MACOSX)
abi = "MacOSX64";
#endif
const char *notSupportedText = p->T("SorryNoDownload", "Sorry, there is no automatic download of the decoder\navailable for this platform.");
if (!abi.empty()) {
at3plusdecoderUrl_ = root->getString(abi.c_str(), "");
if (at3plusdecoderUrl_.empty()) {
buttonDownload_->SetEnabled(false);
tvDescription_->SetText(notSupportedText);
} else {
buttonDownload_->SetEnabled(true);
const char *notInstalledText = p->T("To download and install", "To download and install Mai's Atrac3+ decoding\n support, click Download.");
const char *reInstallText = p->T("Already installed", "Mai's Atrac3+ decoder already installed.\nWould you like to redownload and reinstall it?");
tvDescription_->SetText(Atrac3plus_Decoder::IsInstalled() ? reInstallText : notInstalledText);
}
} else {
tvDescription_->SetText(notSupportedText);
}
}
json_.reset();
}
if (at3plusdecoder_.get() && at3plusdecoder_->Done()) {
// Done! yay.
progress_->SetProgress(1.0);
if (at3plusdecoder_->ResultCode() == 200) {
// Yay!
tvDescription_->SetText(p->T("Installed Correctly", "Mai Atrac3plus plugin downloaded and installed.\n"
"Please press Back."));
buttonDownload_->SetVisibility(UI::V_GONE);
} else {
char codeStr[18];
sprintf(codeStr, "%i", at3plusdecoder_->ResultCode());
tvDescription_->SetText(p->T("Failed to download plugin", "Failed to download plugin.\nPlease try again later."));
progress_->SetVisibility(UI::V_GONE);
buttonDownload_->SetEnabled(true);
}
at3plusdecoder_.reset();
}
}
UI::EventReturn PluginScreen::OnDownload(UI::EventParams &e) {
buttonDownload_->SetEnabled(false);
std::string destination = Atrac3plus_Decoder::GetInstalledFilename();
at3plusdecoder_ = downloader_.StartDownload(at3plusdecoderUrl_, destination);
progress_->SetVisibility(UI::V_VISIBLE);
return UI::EVENT_DONE;
}
UI::EventReturn PluginScreen::OnInformation(UI::EventParams &e) {
LaunchBrowser("http://www.ppsspp.org/at3plusdecoder.html");
return UI::EVENT_DONE;
}