diff --git a/cli/mainfeatures.cpp b/cli/mainfeatures.cpp index 6c992c7..8c3f699 100644 --- a/cli/mainfeatures.cpp +++ b/cli/mainfeatures.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -180,7 +181,7 @@ TagUsage parseUsageDenotation(const Argument &usageArg, TagUsage defaultUsage) } else if(!strcmp(val, "always")) { return TagUsage::Always; } else { - cout << "Warning: The specified tag usage \"" << val << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The specified tag usage \"" << val << "\" is invalid and will be ignored." << endl; } } return defaultUsage; @@ -200,7 +201,7 @@ TagTextEncoding parseEncodingDenotation(const Argument &encodingArg, TagTextEnco return TagTextEncoding::Utf16LittleEndian; } else if(!strcmp(val, "auto")) { } else { - cout << "Warning: The specified encoding \"" << val << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The specified encoding \"" << val << "\" is invalid and will be ignored." << endl; } } return defaultEncoding; @@ -217,7 +218,7 @@ ElementPosition parsePositionDenotation(const Argument &posArg, ElementPosition } else if(!strcmp(val, "keep")) { return ElementPosition::Keep; } else { - cout << "Warning: The specified position \"" << val << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The specified position \"" << val << "\" is invalid and will be ignored." << endl; } } return defaultPos; @@ -233,7 +234,7 @@ uint64 parseUInt64(const Argument &arg, uint64 defaultValue) return stringToNumber(arg.values().front()); } } catch(const ConversionException &) { - cout << "Warning: The specified value \"" << arg.values().front() << "\" is no valid unsigned integer and will be ignored." << endl; + cerr << "Warning: The specified value \"" << arg.values().front() << "\" is no valid unsigned integer and will be ignored." << endl; } } return defaultValue; @@ -248,7 +249,7 @@ TagTarget::IdContainerType parseIds(const std::string &concatenatedIds) try { convertedIds.push_back(stringToNumber(id)); } catch(const ConversionException &) { - cout << "Warning: The specified ID \"" << id << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The specified ID \"" << id << "\" is invalid and will be ignored." << endl; } } return convertedIds; @@ -261,7 +262,7 @@ bool applyTargetConfiguration(TagTarget &target, const std::string &configStr) try { target.setLevel(stringToNumber(configStr.substr(13))); } catch (const ConversionException &) { - cout << "Warning: The specified target level \"" << configStr.substr(13) << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The specified target level \"" << configStr.substr(13) << "\" is invalid and will be ignored." << endl; } } else if(configStr.compare(0, 17, "target-levelname=") == 0) { target.setLevelName(configStr.substr(17)); @@ -295,7 +296,7 @@ vector parseFieldDenotations(const std::vector &f const auto fieldDenotationLen = strlen(fieldDenotationString); if(strncmp(fieldDenotationString, "tag:", 4) == 0) { if(fieldDenotationLen == 4) { - cout << "Warning: The \"tag\"-specifier has been used with no value(s) and hence is ignored. Possible values are: id3,id3v1,id3v2,itunes,vorbis,matroska,all" << endl; + cerr << "Warning: The \"tag\"-specifier has been used with no value(s) and hence is ignored. Possible values are: id3,id3v1,id3v2,itunes,vorbis,matroska,all" << endl; } else { TagType tagType = TagType::Unspecified; for(const auto &part : splitString(fieldDenotationString + 4, ",", EmptyPartsTreat::Omit)) { @@ -315,7 +316,7 @@ vector parseFieldDenotations(const std::vector &f tagType = TagType::Unspecified; break; } else { - cout << "Warning: The value provided with the \"tag\"-specifier is invalid and will be ignored. Possible values are: id3,id3v1,id3v2,itunes,vorbis,matroska,all" << endl; + cerr << "Warning: The value provided with the \"tag\"-specifier is invalid and will be ignored. Possible values are: id3,id3v1,id3v2,itunes,vorbis,matroska,all" << endl; tagType = currentTagType; break; } @@ -352,7 +353,7 @@ vector parseFieldDenotations(const std::vector &f fileIndex += static_cast(fieldName.at(fieldNamePos) - '0') * mult; } if(fieldNamePos == static_cast(-1)) { - cout << "Warning: Ignoring field denotation \"" << fieldDenotationString << "\" because no field name has been specified." << endl; + cerr << "Warning: Ignoring field denotation \"" << fieldDenotationString << "\" because no field name has been specified." << endl; continue; } else if(++fieldNamePos < fieldName.size()) { fieldName = string(fieldName, fieldNamePos); @@ -416,7 +417,7 @@ vector parseFieldDenotations(const std::vector &f field = KnownField::Description; } else { // no "KnownField" value matching -> discard the field denotation - cout << "The field name \"" << fieldName << "\" is unknown and will be ingored." << endl; + cerr << "Warning: The field name \"" << fieldName << "\" is unknown and will be ingored." << endl; continue; } // add field denotation with parsed values @@ -427,7 +428,7 @@ vector parseFieldDenotations(const std::vector &f fieldDenotation.tagTarget = currentTagTarget; if(equationPos) { if(readOnly) { - cout << "Warning: Specified value for \"" << fieldName << "\" will be ignored." << endl; + cerr << "Warning: Specified value for \"" << fieldName << "\" will be ignored." << endl; } else { fieldDenotation.values.emplace_back(make_pair(mult == 1 ? fieldDenotation.values.size() : fileIndex, QString::fromLocal8Bit(equationPos + 1))); } @@ -586,12 +587,13 @@ void generateFileInfo(const std::vector ¶meterValues, const Ar 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 { - cout << "Error: An IO error occured when writing the file \"" << outputFileArg.values().front() << "\"." << endl; + cerr << "Error: An IO error occured when writing the file \"" << outputFileArg.values().front() << "\"." << endl; } - } catch(ios_base::failure &) { - cout << "Error: An IO failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; - } catch(ApplicationUtilities::Failure &) { - cout << "Error: A parsing failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; + } catch(const ApplicationUtilities::Failure &) { + cerr << "Error: A parsing failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; + } catch(...) { + ::IoUtilities::catchIoFailure(); + cerr << "Error: An IO failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; } } @@ -757,10 +759,11 @@ void displayFileInfo(const std::vector &, const Argument &filesArg } } } - } catch(ios_base::failure &) { - cout << "Error: An IO failure occured when reading the file \"" << file << "\"." << endl; - } catch(ApplicationUtilities::Failure &) { - cout << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl; + } catch(const ApplicationUtilities::Failure &) { + cerr << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl; + } catch(...) { + ::IoUtilities::catchIoFailure(); + cerr << "Error: An IO failure occured when reading the file \"" << file << "\"." << endl; } printNotifications(fileInfo, "Parsing notifications:", verboseArg.isPresent()); cout << endl; @@ -815,7 +818,7 @@ void displayTagInfo(const std::vector ¶meterValues, const Argu } else { cout << textValue.toLocal8Bit().data(); } - } catch(ConversionException &) { + } catch(const ConversionException &) { cout << "conversion error"; } cout << endl; @@ -843,7 +846,7 @@ void displayTagInfo(const std::vector ¶meterValues, const Argu } else { cout << textValue.toLocal8Bit().data(); } - } catch(ConversionException &) { + } catch(const ConversionException &) { cout << "conversion error"; } } @@ -855,10 +858,11 @@ void displayTagInfo(const std::vector ¶meterValues, const Argu } else { cout << " File has no (supported) tag information." << endl; } - } catch(ios_base::failure &) { - cout << "Error: An IO failure occured when reading the file \"" << file << "\"." << endl; - } catch(ApplicationUtilities::Failure &) { - cout << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl; + } catch(const ApplicationUtilities::Failure &) { + cerr << "Error: A parsing failure occured when reading the file \"" << file << "\"." << endl; + } catch(...) { + ::IoUtilities::catchIoFailure(); + cerr << "Error: An IO failure occured when reading the file \"" << file << "\"." << endl; } printNotifications(fileInfo, "Parsing notifications:", verboseArg.isPresent()); cout << endl; @@ -869,12 +873,12 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn { CMD_UTILS_START_CONSOLE; if(args.setTagInfoArg.values().empty()) { - cout << "Error: No files have been specified." << endl; + cerr << "Error: No files have been specified." << endl; return; } auto fields = parseFieldDenotations(parameterValues, false); if(fields.empty() && args.attachmentsArg.values().empty() && args.docTitleArg.values().empty()) { - cout << "Error: No fields/attachments have been specified." << endl; + cerr << "Error: No fields/attachments have been specified." << endl; return; } // determine required targets @@ -896,7 +900,7 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn } else if(applyTargetConfiguration(targetsToRemove.back(), targetDenotation)) { validRemoveTargetsSpecified = true; } else { - cout << "Warning: The given target specification \"" << targetDenotation << "\" is invalid and will be ignored." << endl; + cerr << "Warning: The given target specification \"" << targetDenotation << "\" is invalid and will be ignored." << endl; } } // parse other settings @@ -909,7 +913,7 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn } } catch (const ConversionException &) { id3v2Version = 3; - cout << "Warning: The specified ID3v2 version \"" << args.id3v2VersionArg.values().front() << "\" is invalid and will be ingored." << endl; + cerr << "Warning: The specified ID3v2 version \"" << args.id3v2VersionArg.values().front() << "\" is invalid and will be ingored." << endl; } } const TagTextEncoding denotedEncoding = parseEncodingDenotation(args.encodingArg, TagTextEncoding::Utf8); @@ -959,12 +963,12 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn container->setTitle(newTitle, segmentIndex); docTitleModified = true; } else { - cout << "Warning: The specified document title \"" << newTitle << "\" can not be set because the file has not that many segments." << endl; + cerr << "Warning: The specified document title \"" << newTitle << "\" can not be set because the file has not that many segments." << endl; } ++segmentIndex; } } else { - cout << "Warning: Setting the document title is not supported for the file." << endl; + cerr << "Warning: Setting the document title is not supported for the file." << endl; } } fileInfo.tags(tags); @@ -1004,10 +1008,11 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn TagValue value(move(buff), fileInfo.size(), TagDataType::Picture); value.setMimeType(fileInfo.mimeType()); tag->setValue(fieldDenotation.field, move(value)); - } catch (ios_base::failure &) { - fileInfo.addNotification(NotificationType::Critical, "An IO error occured when parsing the specified cover file.", context); - } catch (Media::Failure &) { + } catch(const Media::Failure &) { fileInfo.addNotification(NotificationType::Critical, "Unable to parse specified cover file.", context); + } catch(...) { + ::IoUtilities::catchIoFailure(); + fileInfo.addNotification(NotificationType::Critical, "An IO error occured when parsing the specified cover file.", context); } } } else { @@ -1090,15 +1095,15 @@ void setTagInfo(const std::vector ¶meterValues, const SetTagIn fileInfo.gatherRelatedNotifications(notifications); cout << "Changes have been applied." << endl; } catch(const ApplicationUtilities::Failure &) { - cout << "Error: Failed to apply changes." << endl; + cerr << "Error: Failed to apply changes." << endl; } } else { - cout << "Warning: No changed to be applied." << endl; + cerr << "Warning: No changed to be applied." << endl; } } catch(const ios_base::failure &) { - cout << "Error: An IO failure occured when reading/writing the file \"" << file << "\"." << endl; + cerr << "Error: An IO failure occured when reading/writing the file \"" << file << "\"." << endl; } catch(const ApplicationUtilities::Failure &) { - cout << "Error: A parsing failure occured when reading/writing the file \"" << file << "\"." << endl; + cerr << "Error: A parsing failure occured when reading/writing the file \"" << file << "\"." << endl; } printNotifications(notifications, "Notifications:", args.verboseArg.isPresent()); ++fileIndex; @@ -1110,7 +1115,7 @@ void extractField(const std::vector ¶meterValues, const Argume CMD_UTILS_START_CONSOLE; const auto fields = parseFieldDenotations(parameterValues, true); if(fields.size() != 1) { - cout << "Error: Excactly one field needs to be specified." << endl; + cerr << "Error: Excactly one field needs to be specified." << endl; return; } MediaFileInfo inputFileInfo; @@ -1132,7 +1137,7 @@ void extractField(const std::vector ¶meterValues, const Argume } } if(values.empty()) { - cout << "File has no (supported) " << parameterValues.front() << " field." << endl; + cerr << "File has no (supported) " << parameterValues.front() << " field." << endl; } else { string outputFilePathWithoutExtension, outputFileExtension; if(values.size() > 1) { @@ -1148,15 +1153,17 @@ void extractField(const std::vector ¶meterValues, const Argume outputFileStream.write(value.first->dataPointer(), value.first->dataSize()); outputFileStream.flush(); cout << "Value has been saved to \"" << path << "\"." << endl; - } catch(ios_base::failure &) { - cout << "An IO error occured when writing the file \"" << path << "\"." << endl; + } catch(...) { + ::IoUtilities::catchIoFailure(); + cerr << "Error: An IO error occured when writing the file \"" << path << "\"." << endl; } } } - } catch(ios_base::failure &) { - cout << "Error: An IO failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; - } catch(ApplicationUtilities::Failure &) { - cout << "Error: A parsing failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; + } catch(const ApplicationUtilities::Failure &) { + cerr << "Error: A parsing failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; + } catch(...) { + ::IoUtilities::catchIoFailure(); + cerr << "Error: An IO failure occured when reading the file \"" << inputFileArg.values().front() << "\"." << endl; } printNotifications(inputFileInfo, "Parsing notifications:", verboseArg.isPresent()); } diff --git a/gui/attachmentsedit.cpp b/gui/attachmentsedit.cpp index 87cb8c1..15b1e40 100644 --- a/gui/attachmentsedit.cpp +++ b/gui/attachmentsedit.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -106,7 +107,8 @@ void AttachmentsEdit::showFileSelection() addFile(path); } catch(const Failure &) { QMessageBox::warning(this, QApplication::applicationName(), tr("The file couldn't be added because the attachments of the file could not be parsed successfully.")); - } catch(const ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); QMessageBox::warning(this, QApplication::applicationName(), tr("The file couldn't be added because an IO error occured.")); } } @@ -129,7 +131,8 @@ void AttachmentsEdit::extractSelected() file.open(fileName.toLocal8Bit().data(), ios_base::out | ios_base::binary); CopyHelper<0x1000> helper; helper.copy(input, file, data->size()); - } catch (ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); QMessageBox::warning(this, QApplication::applicationName(), tr("An IO error occured when extracting the attached file.")); } } diff --git a/gui/picturepreviewselection.cpp b/gui/picturepreviewselection.cpp index 46c2f1c..53b5c81 100644 --- a/gui/picturepreviewselection.cpp +++ b/gui/picturepreviewselection.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -330,10 +331,11 @@ void PicturePreviewSelection::addOfSelectedType(const QString &path) emit pictureChanged(); } } - } catch (const ios_base::failure &) { - QMessageBox::critical(this, QApplication::applicationName(), tr("An IO error occured when parsing the specified cover file.")); - } catch (Media::Failure &) { + } catch (const Media::Failure &) { QMessageBox::critical(this, QApplication::applicationName(), tr("Unable to parse specified cover file.")); + } catch(...) { + ::IoUtilities::catchIoFailure(); + QMessageBox::critical(this, QApplication::applicationName(), tr("An IO error occured when parsing the specified cover file.")); } updatePreview(m_currentTypeIndex); } diff --git a/gui/tageditorwidget.cpp b/gui/tageditorwidget.cpp index f02e28d..21f7078 100644 --- a/gui/tageditorwidget.cpp +++ b/gui/tageditorwidget.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -754,7 +755,8 @@ bool TagEditorWidget::startParsing(const QString &path, bool forceRefresh) try { // try to open with write access m_fileInfo.reopen(false); - } catch(const ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); // try to open read-only if opening with write access failed m_fileInfo.reopen(true); } @@ -764,7 +766,8 @@ bool TagEditorWidget::startParsing(const QString &path, bool forceRefresh) } catch(const Failure &) { // the file has been opened; parsing notifications will be shown in the info box result = FatalParsingError; - } catch(const ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); // the file could not be opened because an IO error occured m_fileInfo.close(); // ensure file is closed result = IoError; @@ -1076,7 +1079,8 @@ bool TagEditorWidget::startSaving() m_fileInfo.applyChanges(); } catch(const Failure &) { processingError = true; - } catch(const ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); ioError = true; } m_fileInfo.unregisterAllCallbacks(); diff --git a/renamingutility/tageditorobject.cpp b/renamingutility/tageditorobject.cpp index 287ab0a..4b97eca 100644 --- a/renamingutility/tageditorobject.cpp +++ b/renamingutility/tageditorobject.cpp @@ -11,6 +11,7 @@ #include #include +#include #include @@ -147,10 +148,11 @@ TAGEDITOR_JS_VALUE TagEditorObject::parseFileInfo(const QString &fileName) bool critical = false; try { fileInfo.parseEverything(); - } catch(Failure &) { + } catch(const Failure &) { // parsing notifications will be addded anyways critical = true; - } catch(ios_base::failure &) { + } catch(...) { + ::IoUtilities::catchIoFailure(); critical = true; } diff --git a/translations/tageditor_de_DE.ts b/translations/tageditor_de_DE.ts index b300829..a539346 100644 --- a/translations/tageditor_de_DE.ts +++ b/translations/tageditor_de_DE.ts @@ -574,37 +574,37 @@ - + Select a file to attach - + The file couldn't be added because the attachments of the file could not be parsed successfully. - + The file couldn't be added because an IO error occured. - + Select where to store the extracted file - + An IO error occured when extracting the attached file. - + There must be exactly one attachment selected. - + currently attached @@ -1999,7 +1999,7 @@ another position would prevent rewriting the entire file - + Add @@ -2024,210 +2024,210 @@ another position would prevent rewriting the entire file - + Other - + 32x32 File icon - + Other file icon - + Cover (front) - + Cover (back) - + Leaflet page - + Media (e. g. label side of CD) - + Lead artist/performer/soloist - + Artist/performer - + Conductor - + Band/Orchestra - + Composer - + Lyricist/text writer - + Recording Location - + During recording - + During performance - + Movie/video screen capture - + A bright coloured fish - + Illustration - + Band/artist logotype - + Publisher/Studio logotype - + Select a picture to add as cover - - + + Enter/confirm mime type - - + + Confirm or enter the mime type of the selected file. - + The selected file is very large (for a cover). Do you want to continue? - - An IO error occured when parsing the specified cover file. - - - - + Unable to parse specified cover file. - + + An IO error occured when parsing the specified cover file. + + + + There is no cover to remove. - + There is no image attached to be extracted. - + Where do you want to save the cover? - + The cover has extracted. - + Unable to write to output file. - + Unable to open output file. - - + + The attached image can't be found. - + The attached image can't be displayed. - + Cover - %1 - + There is no image attached. - + No image (of the selected type) attached. - + Unable to display attached image. - + Change - + Change MIME-type @@ -2611,7 +2611,7 @@ the file reverting all unsaved changings. - + Abort @@ -2676,214 +2676,214 @@ the file reverting all unsaved changings. - + Add tag - + Remove tag - + Change target - + Segment %1 - + Attachments - + Matroska tag - + MP4/iTunes tag - - + + Vorbis comment - + Tag - + ID3v1 tag - + ID3v2 tag - - + + Copy - + Expand all - + Collapse all - + The file is beeing parsed ... - + Unable to load the selected file "%1" because the current process hasn't finished yet. - + Currently is not file opened. - + Unable to reload the file because the current process hasn't finished yet. - + The file could not be opened because an IO error occurred. - + Opening file - %1 - + Opening file: - + File could be parsed correctly. - + File couldn't be parsed correctly. - + There are critical parsing notifications. - + There are warnings. - + No write access; the file has been opened in read-only mode. - + File format is not supported (an ID3 tag can be added anyways). - + The file is composed of multiple segments. Dealing with such files has not been tested yet and might be broken. - + There is no (supported) tag assigned. - + The file %1 has been opened. - + Saving tags ... - + No file has been opened. - + Unable to apply the entered tags to the file because the current process hasn't finished yet. - + Do you really want to delete all tags from the file? - + don't show this message again - + Deleting all tags ... - + The selected file stores no tag (at least no supported), so there is nothing to delete. - + No file has been opened, so no tags can be deleted. - + Unable to delete all tags from the file because the current process hasn't been finished yet. - + Cancelling ... - + Unable to start saving process because there an other process hasn't finished yet. - + The tags have been saved, but there is/are %1 warning(s) @@ -2891,7 +2891,7 @@ the file reverting all unsaved changings. - + and %1 error(s). @@ -2899,7 +2899,7 @@ the file reverting all unsaved changings. - + The tags have been saved, but there is/are %1 warning(s). @@ -2907,72 +2907,72 @@ the file reverting all unsaved changings. - + The tags have been saved. - + The tags couldn't be saved. See the info box for detail. - + The tags couldn't be saved because an IO error occured. - + Automatic tag management - + The container format of the selected file is not supported. The file can be treated as MP3 file (an ID3 tag according to the settings will be created). This might break the file. Do you want to continue? - + Treat file as MP3 file - + The currently opened file changed on the disk. - + A tag (with the selected target) already exists. - + The tag can not be created. - + Unable to remove the tag because no file is opened. - + Unable to remove the tag because the current process hasn't been finished yet. - + Unable to change the target because no file is opened. - + Can not change the target of the selected tag because the tag does not support targets. - + Unable to change the target because the current process hasn't been finished yet. diff --git a/translations/tageditor_en_US.ts b/translations/tageditor_en_US.ts index 7acd42a..a4ee34b 100644 --- a/translations/tageditor_en_US.ts +++ b/translations/tageditor_en_US.ts @@ -574,37 +574,37 @@ - + Select a file to attach - + The file couldn't be added because the attachments of the file could not be parsed successfully. - + The file couldn't be added because an IO error occured. - + Select where to store the extracted file - + An IO error occured when extracting the attached file. - + There must be exactly one attachment selected. - + currently attached @@ -1999,7 +1999,7 @@ another position would prevent rewriting the entire file - + Add @@ -2024,210 +2024,210 @@ another position would prevent rewriting the entire file - + Other - + 32x32 File icon - + Other file icon - + Cover (front) - + Cover (back) - + Leaflet page - + Media (e. g. label side of CD) - + Lead artist/performer/soloist - + Artist/performer - + Conductor - + Band/Orchestra - + Composer - + Lyricist/text writer - + Recording Location - + During recording - + During performance - + Movie/video screen capture - + A bright coloured fish - + Illustration - + Band/artist logotype - + Publisher/Studio logotype - + Select a picture to add as cover - - + + Enter/confirm mime type - - + + Confirm or enter the mime type of the selected file. - + The selected file is very large (for a cover). Do you want to continue? - - An IO error occured when parsing the specified cover file. - - - - + Unable to parse specified cover file. - + + An IO error occured when parsing the specified cover file. + + + + There is no cover to remove. - + There is no image attached to be extracted. - + Where do you want to save the cover? - + The cover has extracted. - + Unable to write to output file. - + Unable to open output file. - - + + The attached image can't be found. - + The attached image can't be displayed. - + Cover - %1 - + There is no image attached. - + No image (of the selected type) attached. - + Unable to display attached image. - + Change - + Change MIME-type @@ -2611,7 +2611,7 @@ the file reverting all unsaved changings. - + Abort @@ -2676,214 +2676,214 @@ the file reverting all unsaved changings. - + Add tag - + Remove tag - + Change target - + Segment %1 - + Attachments - + Matroska tag - + MP4/iTunes tag - - + + Vorbis comment - + Tag - + ID3v1 tag - + ID3v2 tag - - + + Copy - + Expand all - + Collapse all - + The file is beeing parsed ... - + Unable to load the selected file "%1" because the current process hasn't finished yet. - + Currently is not file opened. - + Unable to reload the file because the current process hasn't finished yet. - + The file could not be opened because an IO error occurred. - + Opening file - %1 - + Opening file: - + File could be parsed correctly. - + File couldn't be parsed correctly. - + There are critical parsing notifications. - + There are warnings. - + No write access; the file has been opened in read-only mode. - + File format is not supported (an ID3 tag can be added anyways). - + The file is composed of multiple segments. Dealing with such files has not been tested yet and might be broken. - + There is no (supported) tag assigned. - + The file %1 has been opened. - + Saving tags ... - + No file has been opened. - + Unable to apply the entered tags to the file because the current process hasn't finished yet. - + Do you really want to delete all tags from the file? - + don't show this message again - + Deleting all tags ... - + The selected file stores no tag (at least no supported), so there is nothing to delete. - + No file has been opened, so no tags can be deleted. - + Unable to delete all tags from the file because the current process hasn't been finished yet. - + Cancelling ... - + Unable to start saving process because there an other process hasn't finished yet. - + The tags have been saved, but there is/are %1 warning(s) @@ -2891,7 +2891,7 @@ the file reverting all unsaved changings. - + and %1 error(s). @@ -2899,7 +2899,7 @@ the file reverting all unsaved changings. - + The tags have been saved, but there is/are %1 warning(s). @@ -2907,72 +2907,72 @@ the file reverting all unsaved changings. - + The tags have been saved. - + The tags couldn't be saved. See the info box for detail. - + The tags couldn't be saved because an IO error occured. - + Automatic tag management - + The container format of the selected file is not supported. The file can be treated as MP3 file (an ID3 tag according to the settings will be created). This might break the file. Do you want to continue? - + Treat file as MP3 file - + The currently opened file changed on the disk. - + A tag (with the selected target) already exists. - + The tag can not be created. - + Unable to remove the tag because no file is opened. - + Unable to remove the tag because the current process hasn't been finished yet. - + Unable to change the target because no file is opened. - + Can not change the target of the selected tag because the tag does not support targets. - + Unable to change the target because the current process hasn't been finished yet.