163 lines
4.7 KiB
C++
163 lines
4.7 KiB
C++
/*
|
|
* Copyright (C) EdgeTX
|
|
*
|
|
* Based on code named
|
|
* opentx - https://github.com/opentx/opentx
|
|
* th9x - http://code.google.com/p/th9x
|
|
* er9x - http://code.google.com/p/er9x
|
|
* gruvin9x - http://code.google.com/p/gruvin9x
|
|
*
|
|
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* 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 for more details.
|
|
*/
|
|
|
|
#include "updatesounds.h"
|
|
#include "chooserdialog.h"
|
|
|
|
#include <QMessageBox>
|
|
#include <QStandardItem>
|
|
#include <QItemSelectionModel>
|
|
|
|
UpdateSounds::UpdateSounds(QWidget * parent) :
|
|
UpdateInterface(parent),
|
|
langPacks(new QStandardItemModel())
|
|
{
|
|
setName("Sounds");
|
|
setRepo(QString(GH_REPOS_EDGETX).append("/edgetx-sdcard-sounds"));
|
|
|
|
UpdateParameters::AssetParams &ap = dfltParams->addAsset();
|
|
ap.filterType = UpdateParameters::UFT_Startswith;
|
|
ap.filter = QString("edgetx-sdcard-sounds-%LANGUAGE%-");
|
|
ap.flags = dfltParams->data.flags | UPDFLG_CopyStructure;
|
|
}
|
|
|
|
UpdateSounds::~UpdateSounds()
|
|
{
|
|
delete langPacks;
|
|
}
|
|
|
|
bool UpdateSounds::flagAssets()
|
|
{
|
|
progressMessage(tr("Processing available sounds"));
|
|
|
|
QString pattern("sounds.json");
|
|
assets->setFilterPattern(pattern);
|
|
|
|
if (assets->count() < 0) {
|
|
reportProgress(tr("Asset not found in release '%1' using filter pattern '%2'").arg(releases->name().arg(pattern)), QtCriticalMsg);
|
|
return false;
|
|
}
|
|
else if (assets->count() > 1) {
|
|
reportProgress(tr("%1 assets found when %2 expected in release '%3' using filter pattern '%4'")
|
|
.arg(assets->count()).arg(1).arg(releases->name().arg(pattern)), QtCriticalMsg);
|
|
return false;
|
|
}
|
|
|
|
if (!downloadAssetToBuffer(assets->getSetId(0))) {
|
|
return false;
|
|
}
|
|
|
|
QJsonDocument *json = new QJsonDocument();
|
|
|
|
if (!convertDownloadToJson(json)) {
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
{
|
|
"language": "en-GB",
|
|
"name": "British English Female",
|
|
"description": "British English Female Voice (en-GB-Libby)",
|
|
"directory": "en_gb-libby"
|
|
},
|
|
*/
|
|
|
|
// always refresh to allow for language change in radio profile
|
|
langPacks->clear();
|
|
|
|
if (json->isArray()) {
|
|
const QJsonArray &arr = json->array();
|
|
|
|
foreach (const QJsonValue &v, arr) {
|
|
if (v.isObject()) {
|
|
const QJsonObject obj = v.toObject();
|
|
QString langVariant;
|
|
QString lang;
|
|
|
|
if (!obj.value("language").isUndefined()) {
|
|
langVariant = obj.value("language").toString();
|
|
lang = langVariant.split("-").at(0);
|
|
}
|
|
|
|
if (lang == runParams->data.language) {
|
|
QStandardItem * item = new QStandardItem();
|
|
|
|
if (!obj.value("language").isUndefined())
|
|
item->setData(obj.value("language").toString(), IMDR_Language);
|
|
if (!obj.value("name").isUndefined())
|
|
item->setData(obj.value("name").toString(), IMDR_Name);
|
|
if (!obj.value("description").isUndefined())
|
|
item->setData(obj.value("description").toString(), Qt::DisplayRole);
|
|
if (!obj.value("directory").isUndefined())
|
|
item->setData(obj.value("directory").toString(), IMDR_Directory);
|
|
|
|
langPacks->appendRow(item);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
delete json;
|
|
|
|
if (langPacks->rowCount() < 1) {
|
|
reportProgress(tr("Language %1 not listed in %2").arg(runParams->data.language).arg(pattern), QtCriticalMsg);
|
|
return false;
|
|
}
|
|
|
|
if (langPacks->rowCount() > 1) {
|
|
ChooserDialog *dlg = new ChooserDialog(nullptr, tr("Choose Language Packs"), langPacks);
|
|
|
|
bool ok = dlg->exec();
|
|
|
|
QItemSelectionModel *selItems = dlg->selectedItems();
|
|
|
|
if (!ok || !selItems->hasSelection()) {
|
|
QMessageBox::warning(this, CPN_STR_APP_NAME, tr("No language packs have been selected. Sounds update will be skipped!"));
|
|
dlg->deleteLater();
|
|
return true;
|
|
}
|
|
|
|
QModelIndexList selIndexes = selItems->selectedIndexes();
|
|
|
|
for (int i = 0; i < selIndexes.size(); i++) {
|
|
if (!flagLanguageAsset(langPacks->data(selIndexes.at(i), IMDR_Directory).toString()))
|
|
return false;
|
|
}
|
|
|
|
dlg->deleteLater();
|
|
}
|
|
else if (langPacks->rowCount() == 1) {
|
|
if (!flagLanguageAsset(langPacks->data(langPacks->index(0, 0), IMDR_Directory).toString()))
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool UpdateSounds::flagLanguageAsset(QString lang)
|
|
{
|
|
progressMessage(tr("Flagging assets"));
|
|
|
|
runParams->data.language = lang;
|
|
UpdateParameters::AssetParams ap = runParams->data.assets[0];
|
|
return getSetAssets(ap);
|
|
}
|