diff --git a/application/main.cpp b/application/main.cpp index 65a8ee0..5bf2a9c 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -7,6 +7,8 @@ #include "resources/config.h" +#include + #if defined(GUI_QTWIDGETS) || defined(GUI_QTQUICK) # include #else @@ -21,6 +23,7 @@ using namespace std; using namespace std::placeholders; +using namespace ConversionUtilities; using namespace ApplicationUtilities; namespace Cli { @@ -227,7 +230,7 @@ int main(int argc, char *argv[]) parser.parseArgs(argc, argv); if(qtConfigArgs.areQtGuiArgsPresent()) { #ifdef GUI_QTWIDGETS - return QtGui::runWidgetsGui(argc, argv, qtConfigArgs, defaultFileArg.isPresent() && !defaultFileArg.values().empty() ? QString::fromLocal8Bit(defaultFileArg.values().front()) : QString(), renamingUtilityArg.isPresent()); + return QtGui::runWidgetsGui(argc, argv, qtConfigArgs, defaultFileArg.isPresent() && !defaultFileArg.values().empty() ? fromNativeFileName(defaultFileArg.values().front()) : QString(), renamingUtilityArg.isPresent()); #else CMD_UTILS_START_CONSOLE; cerr << "Application has not been build with Qt widgets GUI support." << endl; diff --git a/cli/mainfeatures.cpp b/cli/mainfeatures.cpp index 156f1e2..e4fcfe1 100644 --- a/cli/mainfeatures.cpp +++ b/cli/mainfeatures.cpp @@ -12,6 +12,8 @@ #include #include +#include + #include #include #include @@ -733,7 +735,7 @@ void generateFileInfo(const ArgumentOccurrence &, const Argument &inputFileArg, (outputFileArg.isPresent() ? cout : cerr) << "Saving file info for \"" << inputFileArg.values().front() << "\" ..." << endl; NotificationList origNotify; if(outputFileArg.isPresent()) { - QFile file(QString::fromLocal8Bit(outputFileArg.values().front())); + QFile file(fromNativeFileName(outputFileArg.values().front())); if(file.open(QFile::WriteOnly) && file.write(HtmlInfo::generateInfo(inputFileInfo, origNotify)) && file.flush()) { cout << "File information has been saved to \"" << outputFileArg.values().front() << "\"." << endl; } else { diff --git a/gui/entertargetdialog.cpp b/gui/entertargetdialog.cpp index 0971efe..345612d 100644 --- a/gui/entertargetdialog.cpp +++ b/gui/entertargetdialog.cpp @@ -37,7 +37,7 @@ void addIds(ChecklistModel *targetModel, const T &fileIds, const vector QList items; for(const auto &i : fileIds) { items << ChecklistItem(QVariant::fromValue(i->id()), - QString::fromLocal8Bit(i->label().c_str()), + QString::fromUtf8(i->label().data()), std::find(targetIds.cbegin(), targetIds.cend(), i->id()) == targetIds.cend() ? Qt::Unchecked : Qt::Checked); ids << i->id(); } @@ -116,7 +116,7 @@ void EnterTargetDialog::setTarget(const TagTarget &target, const MediaFileInfo * } else { m_ui->levelWarningLabel->setHidden(false); } - m_ui->levelNameLineEdit->setText(QString::fromLocal8Bit(target.levelName().c_str())); + m_ui->levelNameLineEdit->setText(QString::fromUtf8(target.levelName().c_str())); if(file) { // add track IDs addIds(m_tracksModel, file->tracks(), target.tracks()); diff --git a/gui/fileinfomodel.cpp b/gui/fileinfomodel.cpp index 1392a26..beddfe2 100644 --- a/gui/fileinfomodel.cpp +++ b/gui/fileinfomodel.cpp @@ -1,5 +1,7 @@ #include "./fileinfomodel.h" +#include + #include #include #include @@ -65,7 +67,7 @@ public: void appendRow(const QString &label, const char *text) { - appendRow(label, QString::fromLocal8Bit(text)); + appendRow(label, QString::fromUtf8(text)); } void appendRow(const QString &label, const string &text) @@ -121,7 +123,7 @@ void addNotifications(Media::NotificationList *notifications, QStandardItem *par QList notificationRow; notificationRow.reserve(3); - auto *firstItem = defaultItem(QString::fromLocal8Bit(notification.creationTime().toString().data())); + auto *firstItem = defaultItem(QString::fromUtf8(notification.creationTime().toString().data())); switch(notification.type()) { case NotificationType::Critical: firstItem->setIcon(FileInfoModel::errorIcon()); @@ -138,8 +140,8 @@ void addNotifications(Media::NotificationList *notifications, QStandardItem *par } parent->appendRow(QList() << firstItem - << defaultItem(QString::fromLocal8Bit(notification.message().data())) - << defaultItem(QString::fromLocal8Bit(notification.context().data()))); + << defaultItem(QString::fromUtf8(notification.message().data())) + << defaultItem(QString::fromUtf8(notification.context().data()))); } } @@ -276,7 +278,7 @@ void FileInfoModel::updateCache() ItemHelper rootHelper(rootItem); // add general information - rootHelper.appendRow(tr("Path"), m_file->path()); + rootHelper.appendRow(tr("Path"), fromNativeFileName(m_file->path().data())); rootHelper.appendRow(tr("Size"), dataSizeToString(m_file->size())); const TimeSpan duration = m_file->duration(); if(!duration.isNull()) { @@ -302,9 +304,9 @@ void FileInfoModel::updateCache() QString containerName; const char *const subversion = m_file->containerFormatSubversion(); if(*subversion) { - containerName = QString::fromLocal8Bit(m_file->containerFormatName()) % QChar(' ') % QString::fromLocal8Bit(m_file->containerFormatSubversion()); + containerName = QString::fromUtf8(m_file->containerFormatName()) % QChar(' ') % QString::fromUtf8(m_file->containerFormatSubversion()); } else { - containerName = QString::fromLocal8Bit(m_file->containerFormatName()); + containerName = QString::fromUtf8(m_file->containerFormatName()); } setItem(currentRow, 1, defaultItem(containerName)); @@ -406,8 +408,8 @@ void FileInfoModel::updateCache() trackHelper.appendRow(tr("Resolution"), track->resolution()); if(track->channelConfigString()) { trackHelper.appendRow(tr("Channel config"), track->extensionChannelConfigString() - ? QString::fromLocal8Bit(track->extensionChannelConfigString()) % QStringLiteral(" / ") % QString::fromLocal8Bit(track->channelConfigString()) - : QString::fromLocal8Bit(track->channelConfigString())); + ? QString::fromUtf8(track->extensionChannelConfigString()) % QStringLiteral(" / ") % QString::fromUtf8(track->channelConfigString()) + : QString::fromUtf8(track->channelConfigString())); } else { trackHelper.appendRow(tr("Channel count"), track->channelCount()); } @@ -474,7 +476,7 @@ void FileInfoModel::updateCache() for(const LocaleAwareString &name : chapter->names()) { static const string delim(", "); const string locale = joinStrings(initializer_list{joinStrings(name.languages(), delim, true), joinStrings(name.countries(), delim, true)}, delim, true); - chapterHelper.appendRow(tr("Name (%1)").arg(QString::fromLocal8Bit(locale.data())), name); + chapterHelper.appendRow(tr("Name (%1)").arg(QString::fromUtf8(locale.data())), name); } if(!chapter->startTime().isNegative()) { chapterHelper.appendRow(tr("Start time"), chapter->startTime()); diff --git a/gui/notificationmodel.cpp b/gui/notificationmodel.cpp index aa7a8e9..9b96e4a 100644 --- a/gui/notificationmodel.cpp +++ b/gui/notificationmodel.cpp @@ -73,13 +73,13 @@ QVariant NotificationModel::data(const QModelIndex &index, int role) const if(context.empty()) { return tr("unspecified"); } else { - return QString::fromLocal8Bit(context.c_str()); + return QString::fromUtf8(context.c_str()); } } case 1: - return QString::fromLocal8Bit(m_notifications.at(index.row()).message().c_str()); + return QString::fromUtf8(m_notifications.at(index.row()).message().c_str()); case 2: - return QString::fromLocal8Bit(m_notifications.at(index.row()).creationTime().toString(DateTimeOutputFormat::DateAndTime, true).c_str()); + return QString::fromUtf8(m_notifications.at(index.row()).creationTime().toString(DateTimeOutputFormat::DateAndTime, true).c_str()); default: ; } diff --git a/gui/picturepreviewselection.cpp b/gui/picturepreviewselection.cpp index f5623bb..80f240a 100644 --- a/gui/picturepreviewselection.cpp +++ b/gui/picturepreviewselection.cpp @@ -320,7 +320,7 @@ void PicturePreviewSelection::addOfSelectedType(const QString &path) MediaFileInfo fileInfo(toNativeFileName(path).constData()); fileInfo.open(true); fileInfo.parseContainerFormat(); - auto mimeType = QString::fromLocal8Bit(fileInfo.mimeType()); + auto mimeType = QString::fromUtf8(fileInfo.mimeType()); bool ok; mimeType = QInputDialog::getText(this, tr("Enter/confirm mime type"), tr("Confirm or enter the mime type of the selected file."), QLineEdit::Normal, mimeType, &ok); if(ok) { @@ -437,7 +437,7 @@ void PicturePreviewSelection::changeMimeTypeOfSelected() { assert(m_currentTypeIndex < static_cast(m_values.size())); TagValue &selectedCover = m_values[m_currentTypeIndex]; - auto mimeType = QString::fromLocal8Bit(selectedCover.mimeType().data()); + auto mimeType = QString::fromUtf8(selectedCover.mimeType().data()); bool ok; mimeType = QInputDialog::getText(this, tr("Enter/confirm mime type"), tr("Confirm or enter the mime type of the selected file."), QLineEdit::Normal, mimeType, &ok); if(ok) { diff --git a/gui/tagedit.cpp b/gui/tagedit.cpp index bd6b4f0..f801602 100644 --- a/gui/tagedit.cpp +++ b/gui/tagedit.cpp @@ -135,7 +135,7 @@ QString TagEdit::generateLabel() const QStringList tagNames; tagNames.reserve(m_tags.size()); for(const Tag *tag : m_tags) { - tagNames << QString::fromLocal8Bit(tag->typeName()); + tagNames << QString::fromUtf8(tag->typeName()); if(!differentTargets && !(target == tag->target())) { differentTargets = true; } @@ -147,7 +147,7 @@ QString TagEdit::generateLabel() const if(differentTargets) { res.append(tr(" with different targets")); } else if(haveMatroskaTags || !target.isEmpty()) { - res.append(tr(" targeting %1").arg(QString::fromLocal8Bit(m_tags.front()->targetString().c_str()))); + res.append(tr(" targeting %1").arg(QString::fromUtf8(m_tags.front()->targetString().c_str()))); } return res; } diff --git a/gui/tageditorwidget.cpp b/gui/tageditorwidget.cpp index f238540..0c27c67 100644 --- a/gui/tageditorwidget.cpp +++ b/gui/tageditorwidget.cpp @@ -548,9 +548,9 @@ void TagEditorWidget::updateTagManagementMenu() } } - connect(m_removeTagMenu->addAction(QString::fromLocal8Bit(tag->toString().c_str())), &QAction::triggered, std::bind(&TagEditorWidget::removeTag, this, tag)); + connect(m_removeTagMenu->addAction(QString::fromUtf8(tag->toString().c_str())), &QAction::triggered, std::bind(&TagEditorWidget::removeTag, this, tag)); if(tag->supportsTarget()) { - connect(m_changeTargetMenu->addAction(QString::fromLocal8Bit(tag->toString().c_str())), &QAction::triggered, std::bind(&TagEditorWidget::changeTarget, this, tag)); + connect(m_changeTargetMenu->addAction(QString::fromUtf8(tag->toString().c_str())), &QAction::triggered, std::bind(&TagEditorWidget::changeTarget, this, tag)); } } } @@ -1168,7 +1168,7 @@ void TagEditorWidget::showSavingResult(bool processingError, bool ioError) emit nextFileSelected(); } else { // the current path might have changed through "save file path" mechanism - startParsing(m_currentPath = QString::fromLocal8Bit(m_fileInfo.path().data()), true); + startParsing(m_currentPath = fromNativeFileName(m_fileInfo.path()), true); } m_nextFileAfterSaving = false; } else { diff --git a/misc/htmlinfo.cpp b/misc/htmlinfo.cpp index 20b661e..59be33d 100644 --- a/misc/htmlinfo.cpp +++ b/misc/htmlinfo.cpp @@ -62,12 +62,12 @@ namespace HtmlInfo { inline QString qstr(const char *cstr) { - return QString::fromLocal8Bit(cstr); + return QString::fromUtf8(cstr); } inline QString qstr(const string &stdstr) { - return qstr(stdstr.c_str()); + return QString::fromUtf8(stdstr.data(), static_cast(stdstr.size())); } class RowMaker @@ -589,9 +589,9 @@ public: } if(track->channelConfigString()) { if(track->extensionChannelConfigString()) { - rowMaker.mkRow(QCoreApplication::translate("HtmlInfo", "Channel config"), QCoreApplication::translate("HtmlInfo", "Channel configuration"), QStringLiteral("%1 / %2").arg(QString::fromLocal8Bit(track->extensionChannelConfigString()), QString::fromLocal8Bit(track->channelConfigString()))); + rowMaker.mkRow(QCoreApplication::translate("HtmlInfo", "Channel config"), QCoreApplication::translate("HtmlInfo", "Channel configuration"), QStringLiteral("%1 / %2").arg(QString::fromUtf8(track->extensionChannelConfigString()), QString::fromUtf8(track->channelConfigString()))); } else { - rowMaker.mkRow(QCoreApplication::translate("HtmlInfo", "Channel config"), QCoreApplication::translate("HtmlInfo", "Channel configuration"), QString::fromLocal8Bit(track->channelConfigString())); + rowMaker.mkRow(QCoreApplication::translate("HtmlInfo", "Channel config"), QCoreApplication::translate("HtmlInfo", "Channel configuration"), QString::fromUtf8(track->channelConfigString())); } } else if(track->channelCount()) { rowMaker.mkRow(QCoreApplication::translate("HtmlInfo", "Channel count"), QString::number(track->channelCount())); diff --git a/misc/utility.cpp b/misc/utility.cpp index daf242c..b02d218 100644 --- a/misc/utility.cpp +++ b/misc/utility.cpp @@ -56,7 +56,7 @@ QString tagValueToQString(const TagValue &value) case TagDataType::StandardGenreIndex: case TagDataType::TimeSpan: case TagDataType::PositionInSet: - return QString::fromLocal8Bit(value.toString().c_str()); + return QString::fromUtf8(value.toString().c_str()); default: ; } @@ -66,13 +66,13 @@ QString tagValueToQString(const TagValue &value) QString dataToQString(const char *data, size_t dataSize, TagTextEncoding encoding) { - if(data && dataSize > 0) { + if(data && dataSize) { const char *codecName = textEncodingToCodecName(encoding); auto *codec = QTextCodec::codecForName(codecName); if(!codec) { codec = QTextCodec::codecForLocale(); } - return codec->toUnicode(data, dataSize); + return codec->toUnicode(data, static_cast(dataSize)); } return QString(); } diff --git a/renamingutility/tageditorobject.cpp b/renamingutility/tageditorobject.cpp index 4702f00..e56283f 100644 --- a/renamingutility/tageditorobject.cpp +++ b/renamingutility/tageditorobject.cpp @@ -39,7 +39,7 @@ TAGEDITOR_JS_VALUE &operator <<(TAGEDITOR_JS_VALUE ¬ificationsObject, const S quint32 counter = 0; for(const auto ¬ification : statusProvider.notifications()) { TAGEDITOR_JS_VALUE val; - val.setProperty("msg", QString::fromLocal8Bit(notification.message().data()) TAGEDITOR_JS_READONLY); + val.setProperty("msg", QString::fromUtf8(notification.message().data()) TAGEDITOR_JS_READONLY); val.setProperty("critical", notification.type() == NotificationType::Critical TAGEDITOR_JS_READONLY); notificationsObject.setProperty(counter, val); ++counter; @@ -140,9 +140,9 @@ TAGEDITOR_JS_VALUE TagEditorObject::parseFileInfo(const QString &fileName) MediaFileInfo fileInfo(toNativeFileName(fileName).data()); auto fileInfoObject = m_engine->newObject(); - fileInfoObject.setProperty(QStringLiteral("currentName"), QString::fromLocal8Bit(fileInfo.fileName(false).data())); - fileInfoObject.setProperty(QStringLiteral("currentBaseName"), QString::fromLocal8Bit(fileInfo.fileName(true).data())); - QString suffix = QString::fromLocal8Bit(fileInfo.extension().data()); + fileInfoObject.setProperty(QStringLiteral("currentName"), QString::fromUtf8(fileInfo.fileName(false).data())); + fileInfoObject.setProperty(QStringLiteral("currentBaseName"), QString::fromUtf8(fileInfo.fileName(true).data())); + QString suffix = fromNativeFileName(fileInfo.extension().data()); if(suffix.startsWith('.')) { suffix.remove(0, 1); } @@ -164,8 +164,8 @@ TAGEDITOR_JS_VALUE TagEditorObject::parseFileInfo(const QString &fileName) fileInfoObject.setProperty(QStringLiteral("hasCriticalNotifications"), critical); fileInfoObject.setProperty(QStringLiteral("notifications"), mainNotificationObject); - fileInfoObject.setProperty(QStringLiteral("mimeType"), QString::fromLocal8Bit(fileInfo.mimeType()) TAGEDITOR_JS_READONLY); - fileInfoObject.setProperty(QStringLiteral("suitableSuffix"), QString::fromLocal8Bit(fileInfo.containerFormatAbbreviation()) TAGEDITOR_JS_READONLY); + fileInfoObject.setProperty(QStringLiteral("mimeType"), QString::fromUtf8(fileInfo.mimeType()) TAGEDITOR_JS_READONLY); + fileInfoObject.setProperty(QStringLiteral("suitableSuffix"), QString::fromUtf8(fileInfo.containerFormatAbbreviation()) TAGEDITOR_JS_READONLY); vector tags; fileInfo.tags(tags);