Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regarding issue #6468 (tagreader problems) #6903

Open
wants to merge 19 commits into
base: master
Choose a base branch
from

Conversation

HorstFiedler
Copy link

External tagreader adaptions
to enhance usage of playlist for tag editting including fix to get BPM from mp4 tag 'tmpo'.
Main change: Instead of posting whole song properties to external tagreader
only single tag (aka the one just editted) is posted. That required a new
tagreader interface and changes on whole path from ext to playlist.
As a side effect the tag translation which differs depending on
audio file type (mp3, aac, flac, ...) is delegated to propertymap in
3rdparty tagreader. On the other hand tagnames are made available to
playlist class (matching the columns enumeration) which should provide an
easier way to add additional filepersistence tags.
Sorry for huge commit list (some are simple reverts) but I'm new to git.

Horst Fiedler added 19 commits January 19, 2021 20:21
When using Apple style Mp4 tags the tmpo property which normally is translated to BPM is not fetched from audio file metadata.
This adds this feature without fixing other problems, e.g. when changing tags within clementine existing but unchanged tags become deranged. I strongly suggest to change taglib interface in a way kid3 is using (explicit adding/removing tags).
The minor change within utilities is just to  avoid searching for a file within huge direcories as simply showing directory without positioning or at least highlighting is unuseable.
…dded

to allow single tag editting while the original method SaveFile was overtwriting existing tags with invalid data. Therefor the original method now only effects basic attributes as required e.g. after ripping.
in single tag mode. This avoids to overwrite uneffected properties
within audiofiles as it occured when using SaveFile interface.
Quite sure not all names are used for tagging, only those  marked
edittable can be updated/inserted/removed.
The names are taken from taglib translations when available (by convention
written in uppercase allthough taglib name mapping is caseinsensitive).
Main source:  3rdparty/taglib/.../id3v2frame translations.
Names written lowercase miss a taglib equivalent and are used for
internal informations.
Note: When adding lines to column enumeration: Try to add mappable taglib
properties.
When using Apple style Mp4 tags the tmpo property which normally is translated to BPM is not fetched from audio file metadata.
This adds this feature without fixing other problems, e.g. when changing tags within clementine existing but unchanged tags become deranged. I strongly suggest to change taglib interface in a way kid3 is using (explicit adding/removing tags).
The minor change within utilities is just to  avoid searching for a file within huge direcories as simply showing directory without positioning or at least highlighting is unuseable.
…dded

to allow single tag editting while the original method SaveFile was overtwriting existing tags with invalid data. Therefor the original method now only effects basic attributes as required e.g. after ripping.
in single tag mode. This avoids to overwrite uneffected properties
within audiofiles as it occured when using SaveFile interface.
Quite sure not all names are used for tagging, only those  marked
edittable can be updated/inserted/removed.
The names are taken from taglib translations when available (by convention
written in uppercase allthough taglib name mapping is caseinsensitive).
Main source:  3rdparty/taglib/.../id3v2frame translations.
Names written lowercase miss a taglib equivalent and are used for
internal informations.
Note: When adding lines to column enumeration: Try to add mappable taglib
properties.
mp4 tag 'tmpo'.
Main change: Instead of posting whole song properties to external tagreader
only single tag (aka the one just editted) is posted. That required a new
tagreader interface.
As a side effect the tag translation which differs depending on
audio file type (mp3, aac, flac, ...) is delegated to propertymap in
3rdparty tagreader. On the other hand tagname are made available to
playlist class (matching the columns enumeration) which should provide an
easier way to add additional filepersistent tags.
@jbroadus
Copy link
Contributor

jbroadus commented Feb 7, 2021

You mentioned that you're new to git, so here are some quick squash instructions that I posted in a different PR recently: #6887 (comment)

<< "MOOD"
<< "performer"
<< "GROUPING"
<< "ORIGINALDATE";
Copy link
Contributor

@jbroadus jbroadus Feb 7, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A static GetTagName method with a case statement is probably less error prone.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QStringList Song::kColumns was taken as example. QStringList might cause more runtime overhead but readability is much better to name enumeration items.

if (ret) {
// Linux: inotify doesn't seem to notice the change to the file unless we
// change the timestamps as well. (this is what touch does)
utimensat(0, QFile::encodeName(filename).constData(), nullptr, 0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why that would be. The Qt code that handles the inotify specifies the IN_MODIFY flag. And the modification of the file would be updating the timestamp as well. Not sure what games taglib would be playing to circumvent this.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just a copy from former code. I would like to remove that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants