mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
feat(CI): Disallow unsafe implicit casts to QString
Covers char* without size, and QByteArray.
Catches the case of QByteArray to QString implicit conversion like was
fixed in 47ee51c61d
, but still allows
construction or assignment from string literals in source. Gives most
of the type safety of QT_NO_CAST_FROM_ASCII without having to wrap
every literal string in QStringLiteral.
No functional issues found during change.
This commit is contained in:
parent
b5aa5dac63
commit
9571434df9
|
@ -104,6 +104,7 @@ endif()
|
||||||
|
|
||||||
add_definitions(-DQT_NO_CAST_FROM_BYTEARRAY)
|
add_definitions(-DQT_NO_CAST_FROM_BYTEARRAY)
|
||||||
add_definitions(-DQT_NO_CAST_TO_ASCII)
|
add_definitions(-DQT_NO_CAST_TO_ASCII)
|
||||||
|
add_definitions(-DQT_RESTRICTED_CAST_FROM_ASCII)
|
||||||
|
|
||||||
include(CheckAtomic)
|
include(CheckAtomic)
|
||||||
|
|
||||||
|
|
|
@ -690,7 +690,7 @@ QString ChatWidget::getSelectedText() const
|
||||||
QString msg = line->content[1]->getText();
|
QString msg = line->content[1]->getText();
|
||||||
|
|
||||||
out +=
|
out +=
|
||||||
QString(out.isEmpty() ? "[%2] %1: %3" : "\n[%2] %1: %3").arg(author, timestamp, msg);
|
QString(out.isEmpty() ? QStringLiteral("[%2] %1: %3") : QStringLiteral("\n[%2] %1: %3")).arg(author, timestamp, msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
|
|
@ -328,7 +328,7 @@ void FileTransferWidget::updateFileProgress(ToxFile const& file)
|
||||||
if (speed > 0) {
|
if (speed > 0) {
|
||||||
// ETA
|
// ETA
|
||||||
QTime toGo = QTime(0, 0).addSecs(remainingTime);
|
QTime toGo = QTime(0, 0).addSecs(remainingTime);
|
||||||
QString format = toGo.hour() > 0 ? "hh:mm:ss" : "mm:ss";
|
QString format = toGo.hour() > 0 ? QStringLiteral("hh:mm:ss") : QStringLiteral("mm:ss");
|
||||||
ui->etaLabel->setText(toGo.toString(format));
|
ui->etaLabel->setText(toGo.toString(format));
|
||||||
} else {
|
} else {
|
||||||
ui->etaLabel->setText("");
|
ui->etaLabel->setText("");
|
||||||
|
|
|
@ -77,7 +77,7 @@ bool ChatId::operator<(const ChatId& other) const
|
||||||
*/
|
*/
|
||||||
QString ChatId::toString() const
|
QString ChatId::toString() const
|
||||||
{
|
{
|
||||||
return id.toHex().toUpper();
|
return QString::fromUtf8(id.toHex()).toUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -379,7 +379,7 @@ void CoreFile::onFileReceiveCallback(Tox* tox, uint32_t friendId, uint32_t fileI
|
||||||
#endif
|
#endif
|
||||||
qDebug() << QString("Received file request %1:%2 kind %3").arg(friendId).arg(fileId).arg(kind);
|
qDebug() << QString("Received file request %1:%2 kind %3").arg(friendId).arg(fileId).arg(kind);
|
||||||
|
|
||||||
ToxFile file{fileId, friendId, filename.getBytes(), "", filesize, ToxFile::RECEIVING};
|
ToxFile file{fileId, friendId, filename.getQString(), "", filesize, ToxFile::RECEIVING};
|
||||||
file.fileKind = kind;
|
file.fileKind = kind;
|
||||||
file.resumeFileId.resize(TOX_FILE_ID_LENGTH);
|
file.resumeFileId.resize(TOX_FILE_ID_LENGTH);
|
||||||
Tox_Err_File_Get fileGetErr;
|
Tox_Err_File_Get fileGetErr;
|
||||||
|
|
|
@ -114,7 +114,7 @@ ToxId::ToxId(const uint8_t* rawId, int len)
|
||||||
|
|
||||||
void ToxId::constructToxId(const QByteArray& rawId)
|
void ToxId::constructToxId(const QByteArray& rawId)
|
||||||
{
|
{
|
||||||
if (rawId.length() == ToxId::size && isToxId(rawId.toHex().toUpper())) {
|
if (rawId.length() == ToxId::size && isToxId(QString::fromUtf8(rawId.toHex()).toUpper())) {
|
||||||
toxId = QByteArray(rawId); // construct from full toxid
|
toxId = QByteArray(rawId); // construct from full toxid
|
||||||
} else {
|
} else {
|
||||||
assert(!"ToxId constructed with invalid input");
|
assert(!"ToxId constructed with invalid input");
|
||||||
|
@ -149,7 +149,7 @@ bool ToxId::operator!=(const ToxId& other) const
|
||||||
*/
|
*/
|
||||||
QString ToxId::toString() const
|
QString ToxId::toString() const
|
||||||
{
|
{
|
||||||
return toxId.toHex().toUpper();
|
return QString::fromUtf8(toxId.toHex()).toUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,7 +194,7 @@ ToxPk ToxId::getPublicKey() const
|
||||||
QString ToxId::getNoSpamString() const
|
QString ToxId::getNoSpamString() const
|
||||||
{
|
{
|
||||||
if (toxId.length() == ToxId::size) {
|
if (toxId.length() == ToxId::size) {
|
||||||
return toxId.mid(ToxPk::size, ToxId::nospamSize).toHex().toUpper();
|
return QString::fromUtf8(toxId.mid(ToxPk::size, ToxId::nospamSize).toHex()).toUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -33,7 +33,7 @@ QByteArray cleanPath(const char *file)
|
||||||
{
|
{
|
||||||
// for privacy, make the path relative to the c-toxcore source directory
|
// for privacy, make the path relative to the c-toxcore source directory
|
||||||
const QRegularExpression pathCleaner(QLatin1String{"[\\s|\\S]*c-toxcore."});
|
const QRegularExpression pathCleaner(QLatin1String{"[\\s|\\S]*c-toxcore."});
|
||||||
QByteArray cleanedPath = QString{file}.remove(pathCleaner).toUtf8();
|
QByteArray cleanedPath = QString::fromUtf8(file).remove(pathCleaner).toUtf8();
|
||||||
cleanedPath.append('\0');
|
cleanedPath.append('\0');
|
||||||
return cleanedPath;
|
return cleanedPath;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ namespace
|
||||||
qWarning() << "Failed to get current username. Will use a global IPC.";
|
qWarning() << "Failed to get current username. Will use a global IPC.";
|
||||||
user = "";
|
user = "";
|
||||||
}
|
}
|
||||||
return QString("qtox-" IPC_PROTOCOL_VERSION "-") + user;
|
return QString("qtox-" IPC_PROTOCOL_VERSION "-") + QString::fromUtf8(user);
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
10
src/main.cpp
10
src/main.cpp
|
@ -95,7 +95,7 @@ void cleanup()
|
||||||
void logMessageHandler(QtMsgType type, const QMessageLogContext& ctxt, const QString& msg)
|
void logMessageHandler(QtMsgType type, const QMessageLogContext& ctxt, const QString& msg)
|
||||||
{
|
{
|
||||||
// Silence qWarning spam due to bug in QTextBrowser (trying to open a file for base64 images)
|
// Silence qWarning spam due to bug in QTextBrowser (trying to open a file for base64 images)
|
||||||
if (ctxt.function == QString("virtual bool QFSFileEngine::open(QIODevice::OpenMode)")
|
if (QString::fromUtf8(ctxt.function) == QString("virtual bool QFSFileEngine::open(QIODevice::OpenMode)")
|
||||||
&& msg == QString("QFSFileEngine::open: No file name specified")) {
|
&& msg == QString("QFSFileEngine::open: No file name specified")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ void logMessageHandler(QtMsgType type, const QMessageLogContext& ctxt, const QSt
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString file = ctxt.file;
|
QString file = QString::fromUtf8(ctxt.file);
|
||||||
// We're not using QT_MESSAGELOG_FILE here, because that can be 0, NULL, or
|
// We're not using QT_MESSAGELOG_FILE here, because that can be 0, NULL, or
|
||||||
// nullptr in release builds.
|
// nullptr in release builds.
|
||||||
QString path = QString(__FILE__);
|
QString path = QString(__FILE__);
|
||||||
|
@ -199,7 +199,7 @@ bool toxURIEventHandler(const QByteArray& eventData, void* userData)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uriDialog->handleToxURI(eventData);
|
uriDialog->handleToxURI(QString::fromUtf8(eventData));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,9 +438,9 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
// Event was not handled by already running instance therefore we handle it ourselves
|
// Event was not handled by already running instance therefore we handle it ourselves
|
||||||
if (eventType == "uri") {
|
if (eventType == "uri") {
|
||||||
uriDialog->handleToxURI(firstParam.toUtf8());
|
uriDialog->handleToxURI(firstParam);
|
||||||
} else if (eventType == "save") {
|
} else if (eventType == "save") {
|
||||||
toxSave->handleToxSave(firstParam.toUtf8());
|
toxSave->handleToxSave(firstParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject::connect(a.get(), &QApplication::aboutToQuit, cleanup);
|
QObject::connect(a.get(), &QApplication::aboutToQuit, cleanup);
|
||||||
|
|
|
@ -47,11 +47,11 @@ namespace {
|
||||||
}
|
}
|
||||||
--splitPos;
|
--splitPos;
|
||||||
}
|
}
|
||||||
splittedMsgs.append(QString{ba_message.left(splitPos + 1)});
|
splittedMsgs.append(QString::fromUtf8(ba_message.left(splitPos + 1)));
|
||||||
ba_message = ba_message.mid(splitPos + 1);
|
ba_message = ba_message.mid(splitPos + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
splittedMsgs.append(QString{ba_message});
|
splittedMsgs.append(QString::fromUtf8(ba_message));
|
||||||
return splittedMsgs;
|
return splittedMsgs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,7 +163,7 @@ QList<DhtServer> loadNodesFile(QString file)
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QString nodesJson = nodesFile.readAll();
|
QString nodesJson = QString::fromUtf8(nodesFile.readAll());
|
||||||
nodesFile.close();
|
nodesFile.close();
|
||||||
|
|
||||||
auto jsonDoc = QJsonDocument::fromJson(nodesJson.toUtf8());
|
auto jsonDoc = QJsonDocument::fromJson(nodesJson.toUtf8());
|
||||||
|
|
|
@ -696,7 +696,7 @@ QString RawDatabase::deriveKey(const QString& password)
|
||||||
const std::unique_ptr<Tox_Pass_Key, PassKeyDeleter> key(tox_pass_key_derive_with_salt(
|
const std::unique_ptr<Tox_Pass_Key, PassKeyDeleter> key(tox_pass_key_derive_with_salt(
|
||||||
reinterpret_cast<const uint8_t*>(passData.data()),
|
reinterpret_cast<const uint8_t*>(passData.data()),
|
||||||
static_cast<std::size_t>(passData.size()), expandConstant, nullptr));
|
static_cast<std::size_t>(passData.size()), expandConstant, nullptr));
|
||||||
return QByteArray(reinterpret_cast<char*>(key.get()) + 32, 32).toHex();
|
return QString::fromUtf8(QByteArray(reinterpret_cast<char*>(key.get()) + 32, 32).toHex());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -724,7 +724,7 @@ QString RawDatabase::deriveKey(const QString& password, const QByteArray& salt)
|
||||||
reinterpret_cast<const uint8_t*>(passData.data()),
|
reinterpret_cast<const uint8_t*>(passData.data()),
|
||||||
static_cast<std::size_t>(passData.size()),
|
static_cast<std::size_t>(passData.size()),
|
||||||
reinterpret_cast<const uint8_t*>(salt.constData()), nullptr));
|
reinterpret_cast<const uint8_t*>(salt.constData()), nullptr));
|
||||||
return QByteArray(reinterpret_cast<char*>(key.get()) + 32, 32).toHex();
|
return QString::fromUtf8(QByteArray(reinterpret_cast<char*>(key.get()) + 32, 32).toHex());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -876,7 +876,7 @@ void RawDatabase::process()
|
||||||
*/
|
*/
|
||||||
QString RawDatabase::anonymizeQuery(const QByteArray& query)
|
QString RawDatabase::anonymizeQuery(const QByteArray& query)
|
||||||
{
|
{
|
||||||
QString queryString(query);
|
QString queryString = QString::fromUtf8(query);
|
||||||
queryString.replace(QRegularExpression("chat.public_key='[A-F0-9]{64}'"),
|
queryString.replace(QRegularExpression("chat.public_key='[A-F0-9]{64}'"),
|
||||||
"char.public_key='<HERE IS PUBLIC KEY>'");
|
"char.public_key='<HERE IS PUBLIC KEY>'");
|
||||||
queryString.replace(QRegularExpression("timestamp BETWEEN \\d{5,} AND \\d{5,}"),
|
queryString.replace(QRegularExpression("timestamp BETWEEN \\d{5,} AND \\d{5,}"),
|
||||||
|
@ -935,8 +935,8 @@ void RawDatabase::regexp(sqlite3_context* ctx, int argc, sqlite3_value** argv, c
|
||||||
{
|
{
|
||||||
std::ignore = argc;
|
std::ignore = argc;
|
||||||
QRegularExpression regex;
|
QRegularExpression regex;
|
||||||
const QString str1(reinterpret_cast<const char*>(sqlite3_value_text(argv[0])));
|
const QString str1 = QString::fromUtf8(reinterpret_cast<const char*>(sqlite3_value_text(argv[0])));
|
||||||
const QString str2(reinterpret_cast<const char*>(sqlite3_value_text(argv[1])));
|
const QString str2 = QString::fromUtf8(reinterpret_cast<const char*>(sqlite3_value_text(argv[1])));
|
||||||
|
|
||||||
regex.setPattern(str1);
|
regex.setPattern(str1);
|
||||||
regex.setPatternOptions(cs);
|
regex.setPatternOptions(cs);
|
||||||
|
|
|
@ -553,7 +553,7 @@ QString Profile::avatarPath(const ToxPk& owner, bool forceUnencrypted)
|
||||||
QByteArray hash(hashSize, 0);
|
QByteArray hash(hashSize, 0);
|
||||||
crypto_generichash(reinterpret_cast<uint8_t*>(hash.data()), hashSize, reinterpret_cast<uint8_t*>(idData.data()), idData.size(),
|
crypto_generichash(reinterpret_cast<uint8_t*>(hash.data()), hashSize, reinterpret_cast<uint8_t*>(idData.data()), idData.size(),
|
||||||
reinterpret_cast<uint8_t*>(pubkeyData.data()), pubkeyData.size());
|
reinterpret_cast<uint8_t*>(pubkeyData.data()), pubkeyData.size());
|
||||||
return paths.getSettingsDirPath() + "avatars/" + hash.toHex().toUpper() + ".png";
|
return paths.getSettingsDirPath() + "avatars/" + QString::fromUtf8(hash.toHex()).toUpper() + ".png";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -44,7 +44,7 @@ QString dataToString(QByteArray data)
|
||||||
data.remove(0, i);
|
data.remove(0, i);
|
||||||
data.truncate(strlen);
|
data.truncate(strlen);
|
||||||
|
|
||||||
return QString(data);
|
return QString::fromUtf8(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t dataToUint64(const QByteArray& data)
|
uint64_t dataToUint64(const QByteArray& data)
|
||||||
|
|
|
@ -36,7 +36,7 @@ bool ToxSave::toxSaveEventHandler(const QByteArray& eventData, void* userData)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
toxSave->handleToxSave(eventData);
|
toxSave->handleToxSave(QString::fromUtf8(eventData));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ QVector<QPair<QString, QString>> DirectShow::getDeviceList()
|
||||||
goto fail;
|
goto fail;
|
||||||
devHumanName = wcharToUtf8(var.bstrVal);
|
devHumanName = wcharToUtf8(var.bstrVal);
|
||||||
|
|
||||||
devices += {QString("video=") + devIdString, devHumanName};
|
devices += {QString("video=") + QString::fromUtf8(devIdString), QString::fromUtf8(devHumanName)};
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (olestr && coMalloc)
|
if (olestr && coMalloc)
|
||||||
|
@ -156,7 +156,7 @@ static IBaseFilter* getDevFilter(QString devName)
|
||||||
if (devIdString[i] == ':')
|
if (devIdString[i] == ':')
|
||||||
devIdString[i] = '_';
|
devIdString[i] = '_';
|
||||||
|
|
||||||
if (devName != devIdString)
|
if (devName.toUtf8().constData() != devIdString)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (m->BindToObject(nullptr, nullptr, IID_IBaseFilter, reinterpret_cast<void**>(&devFilter)) != S_OK)
|
if (m->BindToObject(nullptr, nullptr, IID_IBaseFilter, reinterpret_cast<void**>(&devFilter)) != S_OK)
|
||||||
|
|
|
@ -195,7 +195,7 @@ QVector<QPair<QString, QString>> v4l2::getDeviceList()
|
||||||
dirent* e;
|
dirent* e;
|
||||||
while ((e = readdir(dir)))
|
while ((e = readdir(dir)))
|
||||||
if (!strncmp(e->d_name, "video", 5) || !strncmp(e->d_name, "vbi", 3))
|
if (!strncmp(e->d_name, "video", 5) || !strncmp(e->d_name, "vbi", 3))
|
||||||
deviceFiles += QString("/dev/") + e->d_name;
|
deviceFiles += QString("/dev/") + QString::fromUtf8(e->d_name);
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
for (QString file : deviceFiles) {
|
for (QString file : deviceFiles) {
|
||||||
|
@ -210,7 +210,7 @@ QVector<QPair<QString, QString>> v4l2::getDeviceList()
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
if (caps.device_caps & V4L2_CAP_VIDEO_CAPTURE)
|
if (caps.device_caps & V4L2_CAP_VIDEO_CAPTURE)
|
||||||
devices += {file, reinterpret_cast<const char*>(caps.card)};
|
devices += {file, QString::fromUtf8(reinterpret_cast<const char*>(caps.card))};
|
||||||
}
|
}
|
||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,7 +195,7 @@ CameraDevice* CameraDevice::open(QString devName, VideoMode mode)
|
||||||
devName += QString("+%1,%2").arg(QString().setNum(mode.x), QString().setNum(mode.y));
|
devName += QString("+%1,%2").arg(QString().setNum(mode.x), QString().setNum(mode.y));
|
||||||
|
|
||||||
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
||||||
} else if (iformat->name == QString("video4linux2,v4l2") && mode) {
|
} else if (QString::fromUtf8(iformat->name) == QString("video4linux2,v4l2") && mode) {
|
||||||
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
||||||
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
||||||
const std::string pixelFormatStr = v4l2::getPixelFormatString(mode.pixel_format).toStdString();
|
const std::string pixelFormatStr = v4l2::getPixelFormatString(mode.pixel_format).toStdString();
|
||||||
|
@ -215,13 +215,13 @@ CameraDevice* CameraDevice::open(QString devName, VideoMode mode)
|
||||||
av_dict_set(&options, "offset_x", offsetX.c_str(), 0);
|
av_dict_set(&options, "offset_x", offsetX.c_str(), 0);
|
||||||
av_dict_set(&options, "offset_y", offsetY.c_str(), 0);
|
av_dict_set(&options, "offset_y", offsetY.c_str(), 0);
|
||||||
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
||||||
} else if (iformat->name == QString("dshow") && mode) {
|
} else if (QString::fromUtf8(iformat->name) == QString("dshow") && mode) {
|
||||||
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
||||||
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
else if (iformat->name == QString("avfoundation")) {
|
else if (QString::fromUtf8(iformat->name) == QString("avfoundation")) {
|
||||||
if (mode) {
|
if (mode) {
|
||||||
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
av_dict_set(&options, "video_size", videoSize.c_str(), 0);
|
||||||
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
av_dict_set(&options, "framerate", framerate.c_str(), 0);
|
||||||
|
@ -330,8 +330,8 @@ QVector<QPair<QString, QString>> CameraDevice::getRawDeviceListGeneric()
|
||||||
devices.resize(devlist->nb_devices);
|
devices.resize(devlist->nb_devices);
|
||||||
for (int i = 0; i < devlist->nb_devices; ++i) {
|
for (int i = 0; i < devlist->nb_devices; ++i) {
|
||||||
AVDeviceInfo* dev = devlist->devices[i];
|
AVDeviceInfo* dev = devlist->devices[i];
|
||||||
devices[i].first = dev->device_name;
|
devices[i].first = QString::fromUtf8(dev->device_name);
|
||||||
devices[i].second = dev->device_description;
|
devices[i].second = QString::fromUtf8(dev->device_description);
|
||||||
}
|
}
|
||||||
avdevice_free_list_devices(&devlist);
|
avdevice_free_list_devices(&devlist);
|
||||||
return devices;
|
return devices;
|
||||||
|
@ -354,34 +354,34 @@ QVector<QPair<QString, QString>> CameraDevice::getDeviceList()
|
||||||
if (!iformat)
|
if (!iformat)
|
||||||
;
|
;
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
else if (iformat->name == QString("dshow"))
|
else if (QString::fromUtf8(iformat->name) == QString("dshow"))
|
||||||
devices += DirectShow::getDeviceList();
|
devices += DirectShow::getDeviceList();
|
||||||
#endif
|
#endif
|
||||||
#if USING_V4L
|
#if USING_V4L
|
||||||
else if (iformat->name == QString("video4linux2,v4l2"))
|
else if (QString::fromUtf8(iformat->name) == QString("video4linux2,v4l2"))
|
||||||
devices += v4l2::getDeviceList();
|
devices += v4l2::getDeviceList();
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
else if (iformat->name == QString("avfoundation"))
|
else if (QString::fromUtf8(iformat->name) == QString("avfoundation"))
|
||||||
devices += avfoundation::getDeviceList();
|
devices += avfoundation::getDeviceList();
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
devices += getRawDeviceListGeneric();
|
devices += getRawDeviceListGeneric();
|
||||||
|
|
||||||
if (idesktopFormat) {
|
if (idesktopFormat) {
|
||||||
if (idesktopFormat->name == QString("x11grab")) {
|
if (QString::fromUtf8(idesktopFormat->name) == QString("x11grab")) {
|
||||||
QString dev = "x11grab#";
|
QString dev = "x11grab#";
|
||||||
QByteArray display = qgetenv("DISPLAY");
|
QByteArray display = qgetenv("DISPLAY");
|
||||||
|
|
||||||
if (display.isNull())
|
if (display.isNull())
|
||||||
dev += ":0";
|
dev += ":0";
|
||||||
else
|
else
|
||||||
dev += display.constData();
|
dev += QString::fromUtf8(display.constData());
|
||||||
|
|
||||||
devices.push_back(QPair<QString, QString>{
|
devices.push_back(QPair<QString, QString>{
|
||||||
dev, QObject::tr("Desktop", "Desktop as a camera input for screen sharing")});
|
dev, QObject::tr("Desktop", "Desktop as a camera input for screen sharing")});
|
||||||
}
|
}
|
||||||
if (idesktopFormat->name == QString("gdigrab"))
|
if (QString::fromUtf8(idesktopFormat->name) == QString("gdigrab"))
|
||||||
devices.push_back(QPair<QString, QString>{
|
devices.push_back(QPair<QString, QString>{
|
||||||
"gdigrab#desktop",
|
"gdigrab#desktop",
|
||||||
QObject::tr("Desktop", "Desktop as a camera input for screen sharing")});
|
QObject::tr("Desktop", "Desktop as a camera input for screen sharing")});
|
||||||
|
@ -459,15 +459,15 @@ QVector<VideoMode> CameraDevice::getVideoModes(QString devName)
|
||||||
else if (isScreen(devName))
|
else if (isScreen(devName))
|
||||||
return getScreenModes();
|
return getScreenModes();
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
else if (iformat->name == QString("dshow"))
|
else if (QString::fromUtf8(iformat->name) == QString("dshow"))
|
||||||
return DirectShow::getDeviceModes(devName);
|
return DirectShow::getDeviceModes(devName);
|
||||||
#endif
|
#endif
|
||||||
#if USING_V4L
|
#if USING_V4L
|
||||||
else if (iformat->name == QString("video4linux2,v4l2"))
|
else if (QString::fromUtf8(iformat->name) == QString("video4linux2,v4l2"))
|
||||||
return v4l2::getDeviceModes(devName);
|
return v4l2::getDeviceModes(devName);
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
else if (iformat->name == QString("avfoundation"))
|
else if (QString::fromUtf8(iformat->name) == QString("avfoundation"))
|
||||||
return avfoundation::getDeviceModes(devName);
|
return avfoundation::getDeviceModes(devName);
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
|
|
|
@ -288,7 +288,7 @@ void ChatForm::onTextEditChanged()
|
||||||
void ChatForm::onAttachClicked()
|
void ChatForm::onAttachClicked()
|
||||||
{
|
{
|
||||||
QStringList paths = QFileDialog::getOpenFileNames(Q_NULLPTR, tr("Send a file"),
|
QStringList paths = QFileDialog::getOpenFileNames(Q_NULLPTR, tr("Send a file"),
|
||||||
QDir::homePath(), nullptr, nullptr);
|
QDir::homePath(), QString(), nullptr);
|
||||||
|
|
||||||
if (paths.isEmpty()) {
|
if (paths.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -302,7 +302,7 @@ QString ProfileForm::getSupportedImageFilter()
|
||||||
{
|
{
|
||||||
QString res;
|
QString res;
|
||||||
for (auto type : QImageReader::supportedImageFormats()) {
|
for (auto type : QImageReader::supportedImageFormats()) {
|
||||||
res += QString("*.%1 ").arg(QString(type));
|
res += QString("*.%1 ").arg(QString::fromUtf8(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
return tr("Images (%1)", "filetype filter").arg(res.left(res.size() - 1));
|
return tr("Images (%1)", "filetype filter").arg(res.left(res.size() - 1));
|
||||||
|
|
|
@ -157,7 +157,7 @@ void AboutForm::replaceVersions()
|
||||||
"Replaces `%2` in the `A list of all known…`"))));
|
"Replaces `%2` in the `A list of all known…`"))));
|
||||||
|
|
||||||
bodyUI->clickToReport->setText(
|
bodyUI->clickToReport->setText(
|
||||||
createLink("https://github.com/qTox/qTox/issues/new?body=" + QUrl(issueBody).toEncoded(),
|
createLink("https://github.com/qTox/qTox/issues/new?body=" + QString::fromUtf8(QUrl(issueBody).toEncoded()),
|
||||||
QString("<b>%1</b>").arg(tr("Click here to report a bug."))));
|
QString("<b>%1</b>").arg(tr("Click here to report a bug."))));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -434,7 +434,7 @@ void FriendWidget::onAvatarRemoved(const ToxPk& friendPk)
|
||||||
|
|
||||||
isDefaultAvatar = true;
|
isDefaultAvatar = true;
|
||||||
|
|
||||||
const QString path = QString(":/img/contact%1.svg").arg(isActive() ? "_dark" : "");
|
const QString path = QString(":/img/contact%1.svg").arg(isActive() ? QStringLiteral("_dark") : QString());
|
||||||
avatar->setPixmap(QPixmap(path));
|
avatar->setPixmap(QPixmap(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ QString getToolTipDisplayingImage(const QPixmap& image)
|
||||||
previewImage.save(&buffer, "PNG");
|
previewImage.save(&buffer, "PNG");
|
||||||
buffer.close();
|
buffer.close();
|
||||||
|
|
||||||
return "<img src=data:image/png;base64," + imageData.toBase64() + "/>";
|
return "<img src=data:image/png;base64," + QString::fromUtf8(imageData.toBase64()) + "/>";
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -233,7 +233,7 @@ const QString Style::resolve(const QString& filename, Settings& settings, const
|
||||||
|
|
||||||
QFile file{fullPath};
|
QFile file{fullPath};
|
||||||
if (file.open(QFile::ReadOnly | QFile::Text)) {
|
if (file.open(QFile::ReadOnly | QFile::Text)) {
|
||||||
qss = file.readAll();
|
qss = QString::fromUtf8(file.readAll());
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Failed to open file:" << fullPath;
|
qWarning() << "Failed to open file:" << fullPath;
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ const QString Style::resolve(const QString& filename, Settings& settings, const
|
||||||
QFile defaultFile{fullPath};
|
QFile defaultFile{fullPath};
|
||||||
|
|
||||||
if (defaultFile.open(QFile::ReadOnly | QFile::Text)) {
|
if (defaultFile.open(QFile::ReadOnly | QFile::Text)) {
|
||||||
qss = defaultFile.readAll();
|
qss = QString::fromUtf8(defaultFile.readAll());
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Failed to open default file:" << fullPath;
|
qWarning() << "Failed to open default file:" << fullPath;
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -556,7 +556,7 @@ void Widget::updateIcons()
|
||||||
|
|
||||||
const QString assetSuffix = Status::getAssetSuffix(static_cast<Status::Status>(
|
const QString assetSuffix = Status::getAssetSuffix(static_cast<Status::Status>(
|
||||||
ui->statusButton->property("status").toInt()))
|
ui->statusButton->property("status").toInt()))
|
||||||
+ (eventIcon ? "_event" : "");
|
+ (eventIcon ? QStringLiteral("_event") : QString());
|
||||||
|
|
||||||
// Some builds of Qt appear to have a bug in icon loading:
|
// Some builds of Qt appear to have a bug in icon loading:
|
||||||
// QIcon::hasThemeIcon is sometimes unaware that the icon returned
|
// QIcon::hasThemeIcon is sometimes unaware that the icon returned
|
||||||
|
@ -588,7 +588,7 @@ void Widget::updateIcons()
|
||||||
if (!hasThemeIconBug && QIcon::hasThemeIcon("qtox-" + assetSuffix)) {
|
if (!hasThemeIconBug && QIcon::hasThemeIcon("qtox-" + assetSuffix)) {
|
||||||
ico = QIcon::fromTheme("qtox-" + assetSuffix);
|
ico = QIcon::fromTheme("qtox-" + assetSuffix);
|
||||||
} else {
|
} else {
|
||||||
QString color = settings.getLightTrayIcon() ? "light" : "dark";
|
QString color = settings.getLightTrayIcon() ? QStringLiteral("light") : QStringLiteral("dark");
|
||||||
QString path = ":/img/taskbar/" + color + "/taskbar_" + assetSuffix + ".svg";
|
QString path = ":/img/taskbar/" + color + "/taskbar_" + assetSuffix + ".svg";
|
||||||
QSvgRenderer renderer(path);
|
QSvgRenderer renderer(path);
|
||||||
|
|
||||||
|
@ -2484,9 +2484,9 @@ inline QIcon Widget::prepareIcon(QString path, int w, int h)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
|
|
||||||
QString desktop = getenv("XDG_CURRENT_DESKTOP");
|
QString desktop = QString::fromUtf8(getenv("XDG_CURRENT_DESKTOP"));
|
||||||
if (desktop.isEmpty()) {
|
if (desktop.isEmpty()) {
|
||||||
desktop = getenv("DESKTOP_SESSION");
|
desktop = QString::fromUtf8(getenv("DESKTOP_SESSION"));
|
||||||
}
|
}
|
||||||
|
|
||||||
desktop = desktop.toLower();
|
desktop = desktop.toLower();
|
||||||
|
|
|
@ -400,7 +400,7 @@ void TestFriendMessageDispatcher::testActionMessagesSplitWithExtensions()
|
||||||
auto reallyLongMessage = QString("a");
|
auto reallyLongMessage = QString("a");
|
||||||
|
|
||||||
for (uint64_t i = 0; i < testMaxExtendedMessageSize + 50; ++i) {
|
for (uint64_t i = 0; i < testMaxExtendedMessageSize + 50; ++i) {
|
||||||
reallyLongMessage += i;
|
reallyLongMessage += QString().number(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
friendMessageDispatcher->sendMessage(true, reallyLongMessage);
|
friendMessageDispatcher->sendMessage(true, reallyLongMessage);
|
||||||
|
|
|
@ -116,7 +116,7 @@ void TestSmileyPack::testSmilifyAsciiEmoticon()
|
||||||
auto result = smileyPack.smileyfied(":-)");
|
auto result = smileyPack.smileyfied(":-)");
|
||||||
QVERIFY(result == SmileyPack::getAsRichText(":-)"));
|
QVERIFY(result == SmileyPack::getAsRichText(":-)"));
|
||||||
|
|
||||||
constexpr auto testMsg = "Some:-)Letters";
|
const auto testMsg = QStringLiteral("Some:-)Letters");
|
||||||
result = smileyPack.smileyfied(testMsg);
|
result = smileyPack.smileyfied(testMsg);
|
||||||
|
|
||||||
// Nothing has changed. Ascii smileys are only considered
|
// Nothing has changed. Ascii smileys are only considered
|
||||||
|
|
|
@ -30,5 +30,5 @@ QString getHumanReadableSize(uint64_t size)
|
||||||
exp = std::min(static_cast<int>(log(size) / log(1024)), static_cast<int>(sizeof(suffix) / sizeof(suffix[0]) - 1));
|
exp = std::min(static_cast<int>(log(size) / log(1024)), static_cast<int>(sizeof(suffix) / sizeof(suffix[0]) - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return QString().setNum(size / pow(1024, exp), 'f', exp > 1 ? 2 : 0).append(suffix[exp]);
|
return QString().setNum(size / pow(1024, exp), 'f', exp > 1 ? 2 : 0).append(QString::fromUtf8(suffix[exp]));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user