void InputRoku::handleQueryDeviceInfo(QHttpRequest* request, QHttpResponse* response) { QByteArray data; QXmlStreamWriter writer(&data); writer.setAutoFormatting(true); writer.writeStartDocument(); writer.writeStartElement("device-info"); writer.writeTextElement("udn", Utils::ClientUUID()); writer.writeTextElement("serial-number", ROKU_SERIAL_NUMBER); writer.writeTextElement("device-id", ROKU_SERIAL_NUMBER); writer.writeTextElement("vendor-name", "Roku"); writer.writeTextElement("model-number", "4200X"); writer.writeTextElement("model-name", "Roku 3"); writer.writeTextElement("wifi-mac", "00:00:00:00:00:00"); writer.writeTextElement("ethernet-mac", "00:00:00:00:00:00"); writer.writeTextElement("network-type", "ethernet"); writer.writeTextElement("user-device-name", Utils::ComputerName()); writer.writeTextElement("software-version", "7.00"); writer.writeTextElement("software-build", "09021"); QLocale locale = QLocale::system(); QString lcl = locale.name(); QStringList landc = lcl.split("_"); writer.writeTextElement("language", landc.value(0)); writer.writeTextElement("country", landc.value(1)); writer.writeTextElement("locale", locale.name()); QTimeZone tz = QTimeZone::systemTimeZone(); writer.writeTextElement("time-zone", tz.displayName(QTimeZone::StandardTime, QTimeZone::LongName)); writer.writeTextElement("time-zone-offset", QString::number(tz.offsetFromUtc(QDateTime::currentDateTime()) / 60)); writer.writeEndElement(); // device-info writer.writeEndDocument(); response->setStatusCode(qhttp::ESTATUS_OK); response->write(data); response->end(); }
QString TimeZone::TimeZone::readAllCities() { // get translation list QString lines = cityTranslations(); QSettings settings; int sortOrder = settings.value("sortorder_completeList", "").toInt(); QList<QByteArray> ids = QTimeZone::availableTimeZoneIds(); QString output; QString sign; QString timeoffset; QMultiMap<int, QString> map; QMultiMap<QString, QString> sorted_map; // QMultiMap is sorted by key by default // We use QMultiMap (not QMap) so we can have duplicates int dummy_counter_for_sort = 0; // to inverse reverted sorting foreach (QByteArray id, ids) { QTimeZone zone = QTimeZone(id); QDateTime zoneTime = QDateTime(QDate::currentDate(), QTime::currentTime(), zone).toLocalTime(); int offset = zone.offsetFromUtc(QDateTime::currentDateTime()); QString countryName = QLocale::countryToString(zone.country()); QString countryNameOrg = countryName; // insert space where appropriate. Can't be done in one regex replace? QRegularExpression rx("([a-z])([A-Z])"); QRegularExpressionMatch match = rx.match(countryName); for (int i = 1; i <= 6; i++) { match = rx.match(countryName); if (match.hasMatch()) { QString lowerChar1 = match.captured(1); QString upperChar1 = match.captured(2); countryName.replace(lowerChar1+upperChar1,lowerChar1 + " " + upperChar1); } } int index = lines.indexOf('\n'+countryName+';', 0, Qt::CaseInsensitive); if (index != -1) { index++; // Replace countryName with translation countryName = lines.mid(index+countryName.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } if ( countryName == "Default") { // UTC name countryName = ""; } else { countryName = " [" + countryName + "]"; } if (offset < 0) sign = "-"; else sign = "+"; if((offset % 3600)==0) // offset equals to whole hour timeoffset = QString("UTC %3").arg(sign+QString::number(abs(offset)/3600)); else { int minutes = offset/60 %60; timeoffset = QString("UTC %3:%4").arg(sign+QString::number(abs(offset)/3600)).arg(abs(minutes)); } const int delimiter = id.lastIndexOf('/'); int nbrSlashes = id.count("/"); QString cityNameTr = id.mid(delimiter + 1).replace("_"," "); QString continentTr = id.mid(0, delimiter); QString stateTr = ""; if ( nbrSlashes == 2) { // eg (America/North Dakota/Beulah) continentTr = id.mid(0, id.indexOf('/')); //first part stateTr = id.mid(id.indexOf('/')+1, delimiter - continentTr.length() - 1 ); //second part } if (!lines.isEmpty()) { int index = lines.indexOf(cityNameTr+';', 0, Qt::CaseInsensitive); if (index != -1) { cityNameTr = lines.mid(index+cityNameTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } index = lines.indexOf(continentTr+';', 0, Qt::CaseInsensitive); if (index != -1) { continentTr = lines.mid(index+continentTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } if (!stateTr.isEmpty()) { index = lines.indexOf(stateTr+';', 0, Qt::CaseInsensitive); if (index != -1) { stateTr = lines.mid(index+stateTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } continentTr = continentTr + "/" + stateTr; } } if (sortOrder == 1) { dummy_counter_for_sort ++; map.insert(offset + dummy_counter_for_sort,timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else if (sortOrder == 2) { sorted_map.insert(cityNameTr, timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else if (sortOrder == 3) { sorted_map.insert(countryName, timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else { output += timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + + ";" + countryNameOrg + "\n"; } }