Avoid code duplication to determine track number

This commit is contained in:
Martchus 2019-05-30 14:45:26 +02:00
parent ea708f5ad1
commit 777f3b114e
3 changed files with 29 additions and 41 deletions

View File

@ -116,29 +116,9 @@ void DbQueryWidget::insertSearchTermsFromTagEdit(TagEdit *tagEdit, bool songSpec
return;
}
// set title
// set title and track number
m_ui->titleLineEdit->setText(tagValueToQString(tagEdit->value(KnownField::Title)));
// set track number, or if not available part number
bool trackValueOk = false;
try {
const auto trackValue = tagEdit->value(KnownField::TrackPosition);
if (!trackValue.isEmpty()) {
m_ui->trackSpinBox->setValue(trackValue.toPositionInSet().position());
trackValueOk = true;
}
} catch (const ConversionException &) {
}
if (!trackValueOk) {
const auto trackValue = tagEdit->value(KnownField::PartNumber);
if (!trackValue.isEmpty()) {
m_ui->trackSpinBox->setValue(trackValue.toInteger());
trackValueOk = true;
}
}
if (!trackValueOk) {
m_ui->trackSpinBox->clear();
}
m_ui->trackSpinBox->setValue(tagEdit->trackNumber());
}
SongDescription DbQueryWidget::currentSongDescription() const
@ -308,25 +288,7 @@ void DbQueryWidget::applyMatchingResults(TagEdit *tagEdit)
const auto givenTitle = tagEdit->value(KnownField::Title);
const auto givenAlbum = tagEdit->value(KnownField::Album);
const auto givenArtist = tagEdit->value(KnownField::Artist);
// also determine already present track number (which is a little bit more complex -> TODO: improve backend API)
int givenTrack;
try {
givenTrack = tagEdit->value(KnownField::TrackPosition).toPositionInSet().position();
} catch (const ConversionException &) {
givenTrack = 0;
}
if (!givenTrack) {
for (const Tag *tag : tagEdit->tags()) {
if (!tag->supportsTarget() || tag->targetLevel() == TagTargetLevel::Track) {
try {
givenTrack = tagEdit->value(KnownField::PartNumber).toInteger();
} catch (const ConversionException &) {
}
break;
}
}
}
const auto givenTrack = tagEdit->trackNumber();
if (givenTitle.isEmpty() || !givenTrack) {
return;

View File

@ -64,6 +64,31 @@ TagValue TagEdit::value(KnownField field, TagTextEncoding encoding) const
}
}
std::int32_t TagEdit::trackNumber() const
{
std::int32_t trackNumber = 0;
try {
trackNumber = value(KnownField::TrackPosition).toPositionInSet().position();
} catch (const ConversionException &) {
}
if (trackNumber) {
return trackNumber;
}
for (const auto *const tag : tags()) {
if (tag->supportsTarget() && tag->targetLevel() != TagTargetLevel::Track) {
continue;
}
try {
trackNumber = value(KnownField::PartNumber).toInteger();
} catch (const ConversionException &) {
}
if (trackNumber) {
return trackNumber;
}
}
return trackNumber;
}
/*!
* \brief Assigns the specified \a tag to the edit.
* \param updateUi Specifies whether the UI of should be updated.

View File

@ -32,6 +32,7 @@ public:
explicit TagEdit(QWidget *parent = nullptr);
const QList<TagParser::Tag *> &tags() const;
TagParser::TagValue value(TagParser::KnownField field, TagParser::TagTextEncoding encoding = TagParser::TagTextEncoding::Utf16LittleEndian) const;
std::int32_t trackNumber() const;
void setTag(TagParser::Tag *tag, bool updateUi = true);
void setTags(const QList<TagParser::Tag *> &tags, bool updateUi = true);
bool setValue(