Author Topic: Additional Tagging & Reporting Tools  (Read 976904 times)

phred

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 9453
do you mean typing anything in the read-only tag combo box? if you want to search the tag by the first letter only, then i could see what i can do for this.
I suppose it's a read-only combo box as I can't type anything into it. Only can use the drop-down to populate the fields.
These. But on all presents that allow the user to enter the tag, not just this present.
Thanks for taking a look at it.
Download the latest MusicBee v3.5 or 3.6 patch from here.
Unzip into your MusicBee directory and overwrite existing files.

----------
The FAQ
The Wiki
Posting screenshots is here
Searching the forum with Google is  here

phred

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 9453
@phred, i'm not able to reproduce this bug, but i've made some tweaks which could fix it. re-download debug version from the same link if you've already downloaded it.
Got it and will test over the next few hours.
Download the latest MusicBee v3.5 or 3.6 patch from here.
Unzip into your MusicBee directory and overwrite existing files.

----------
The FAQ
The Wiki
Posting screenshots is here
Searching the forum with Google is  here

hiccup

  • Hero Member
  • *****
  • Posts: 8032
could you post the right casing for these titles?
I think they should be like this:

Act I: A Gentleman's Honor (vocal)
Merry Christmas Mr.Lawrence - Theme - (live)
It Better End Soon: 3rd Movement (guitar solo)
Chalk Dust - The Umpire Strikes Back
1st of tha Month (K&D Session™)

That's probably also how they are on MusicBrainz where I most likely got these titles from.

phred

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 9453
if i correctly understood you, then not skinned combo boxed always supported searching for first letter on typing. i've added support to the skinned combo boxes (to read-only combo boxes only, when you actually can't type text). this is a bit extended support. if the combo box can't find an item begging with typed letter, then it searches for items begging with symbol (e.g. "<"), and having the typed letter as the second character.
Yes, you understand the issue correctly. And this latest debug version changes the behavior to what I was suggesting. Thank you.
Download the latest MusicBee v3.5 or 3.6 patch from here.
Unzip into your MusicBee directory and overwrite existing files.

----------
The FAQ
The Wiki
Posting screenshots is here
Searching the forum with Google is  here

boroda

  • Hero Member
  • *****
  • Posts: 4748
I think they should be like this:

Act I: A Gentleman's Honor (vocal)
Merry Christmas Mr.Lawrence - Theme - (live)
It Better End Soon: 3rd Movement (guitar solo)
Chalk Dust - The Umpire Strikes Back
1st of tha Month (K&D Session™)

for the first 4 the rules seem obvious (thought #3 not supported at this time), but #5? what to do with it? if only #1-#3 ("vocal", "live" and "guitar solo", but not "K&D Session", to define as "lower case words")?

btw. #4 is not a problem even now, and even if you define "-" in "lower case words after characters" list. because "-" is surrounded by spaces.
Last Edit: April 30, 2024, 02:08:56 PM by boroda

boroda

  • Hero Member
  • *****
  • Posts: 4748
could you post the right casing for these titles?
I think they should be like this:

Act I: A Gentleman's Honor (vocal)
Merry Christmas Mr.Lawrence - Theme - (live)
It Better End Soon: 3rd Movement (guitar solo)
Chalk Dust - The Umpire Strikes Back
1st of tha Month (K&D Session™)

That's probably also how they are on MusicBrainz where I most likely got these titles from.


new "release" build of the version 8.1:

* some bug fixes

- the option "execute ticked presets after every # of tag changes" has been removed from LR (because it has become almost useless after implementing dynamically updated LR function results caching in custom tags).

+ new "change case" command option "don't change case of the words between symbols" (in addition to existing option "don't change case of the words after symbols"). the number of opening and closing symbols must be the same, they are paired by their position in the lists.

+ new virtual tag function:

$TitleCase5(string, lowercase_words, word_separators, lowercase_words_after_symbols, lowercase_words_between_symbols_opening_list, lowercase_words_between_symbols_closing_list)



https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

boroda

  • Hero Member
  • *****
  • Posts: 4748
new version:

* various UI/UX bug fixes (mostly related to LR, but not only)
+ some UI/UX improvements, e.g. now you can use up/down/page up/page down keys in opened combo box dropdown lists
* code refactoring and cleanup

https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

---------------

Steven has partially implemented my request for extending the syntax of custom function (only for MB 3.6), so i'll replace five $TitleCase#() functions by one function $TitleCase() soon (there will be two plugin versions for MB 3.5 and MB 3.6). you will be able to omit any number of end parameters simply by putting closing parenthesis earlier, e.g.:

$TitleCase(<tag>,param1,param2,param3)
$TitleCase(<tag>,param1,param2)
$TitleCase(<tag>,param1)
$TitleCase(<tag>)

the only solution i have now for omitting parameters in the middle of $TitleCase() function is to put some character in parameter, which will hardly be used in tags, e.g. @ or `

P.S. i can add support for some special character for "empty parameter", and special "escape sequence" to pass this character to the plugin.
Last Edit: May 20, 2024, 02:35:54 PM by boroda

boroda

  • Hero Member
  • *****
  • Posts: 4748
new release of the version 8.1
it's the last release for MB 3.5 (except for possible bug fixes). further plugin versions will be built for MB 3.6+.

* some bug fixes and improvements related to LR
* case changing functions are now the following (note that the order of parameters has been changed!):

$SentenceCase(string)

$SentenceCase2(string,sentence_separators) : where sentence_separators is the list of characters after which the words will become capitalized. Characters in sentence_separators list may be separated by spaces or not separated at all. For example, these two character lists mean the same: ". , -" and ".,-". Dot followed by space is always treated as sentence separator

----------

$TitleCase(string)

$TitleCase2(string,lower_case_words)

$TitleCase3(string,lower_case_words,word_separators)

$TitleCase4(string,lower_case_words,word_separators,lower_case_between_chars_opening_list,lower_case_between_chars_closing_list)

$TitleCase5(string,lower_case_words,word_separators,lower_case_between_chars_opening_list,lower_case_between_chars_closing_list,lower_case_after_chars) : where lower_case_words is the list of words separated by spaces, which will become lowercase (always except for the first word and except for the last words if not lowercase by other parameters); word_separators is the list of characters after which the words will be capitalized. lower_case_between_chars_opening_list and lower_case_between_chars_closing_list are the lists of characters between which the words become lowercase. The number of characters in both lists must be the same, the opening and closing characters are paired by their position in the lists (the lists may be, e.g. "( [ {" and ") ] }"). lower_case_after_chars consists of a list of characters, after which the words become lowercase (e.g. ' for something like "Someone's"). The first word will always be capitalized. It’s recommended to enclose the last four lists into quotes (e.g. "& . -"). Characters in all character lists may be separated by spaces or not separated at all. For example, these two character lists mean the same: ". , -" and ".,-". You can omit any parameter except for the first one: use a single character ` not surrounded by spaces to pass empty parameter. You can safely use character ` in its literal meaning if it’s typed in the list along with other characters. To use the single character ` in its literal meaning (not as omitted parameter) type "\`", and to use the single character \ in its literal meaning type "\\"

----------

https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1139
  • Heal The World
Steven has partially implemented my request for extending the syntax of custom function (only for MB 3.6),
so i'll replace five $TitleCase#() functions by one function. you will be able to omit any number of end parameters...
Thanks for reporting this one boroda.
I cannot recall seeing a thread with this line of discussion. Can you please link the topic here for me,
The source code to any of my contributions is available on the same download link as the add-ons

boroda

  • Hero Member
  • *****
  • Posts: 4748
I cannot recall seeing a thread with this line of discussion. Can you please link the topic here for me,

we have been conversing with Steven via PMs, if you mean this by "a thread with this line of discussion".

----------

new plugin zip. it's now (at last "official" version 8.1  8) ) uploaded to add-on's page of the site.

documentation (.chm files) is updated according to the latest plugin release:

https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

new full plugin zip:

https://www.mediafire.com/file/dm3rhfze89n3qwi/Additional-Tagging-Tools-Plugin.zip/file

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1139
  • Heal The World
we have been conversing with Steven via PMs, if you mean this by "a thread with this line of discussion".
Ah, I see. No worries, I have linked your post above on the v3.6 topic in the general discussions board in an attempt to compile all the various changes.
The source code to any of my contributions is available on the same download link as the add-ons

boroda

  • Hero Member
  • *****
  • Posts: 4748
I have linked your post above on the v3.6 topic in the general discussions board in an attempt to compile all the various changes.

thanks, this might be useful for plugin developers.

-----------

note for developers:

any "overloaded" function must be implemented in a plugin as the single function with the maximum number of supported parameters, and this function must be able to handle "null" parameter values (not just empty strings, it's a new feature of MB 3.6). so the new "overloaded" custom functions are not actually overloaded internally in plugins.

boroda

  • Hero Member
  • *****
  • Posts: 4748
Plugin version 8.2. Requires MusicBee 3.6 or later.

* Two $SentenceCase() and five $TitleCase() have been replaced by one $SentenceCase() and one $TitleCase() functions. They correspond to the previous $SentenceCase2() and $TitleCase5() functions, but you can omit any number of end parameters simply by putting the closing parenthesis earlier. For example:

Code
 $TitleCase(string,lower_case_words,word_separators)

instead of the full syntax:

Code
$TitleCase(string,lower_case_words,word_separators,lower_case_between_chars_opening_list,lower_case_between_chars_closing_list,lower_case_after_chars)

https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

boroda

  • Hero Member
  • *****
  • Posts: 4748
"Backup & Restore" relies on MusicBee internal track IDs specific to the library. Because of this, you can't restore tags to a library other than the library from which the tags have been backed up.

+ New option for the plugin to save a copy of the track IDs to a custom tag of your choice (see "Backup settings" plugin menu item), and to restore backed-up tags using this custom tag to identify tracks instead of actual track IDs. This will let you restore the tags to the new library containing the same tracks, if you have recreated the library from scratch, e.g., on another computer. Make sure that this custom tag is stored in the file tag, not in the MusicBee database.

* "Example: Copy Tag" ASR preset has been extended/improved. You might want to "Install All" or "Install New" ASR presets.

* Some UI/UX fixes

Version 8.2 (for MB 3.6):

https://www.mediafire.com/file/h2t08o9562efboi/mb_TagTools_latest.zip/file

Full plugin package 8.1 (for MB 3.5):

https://www.mediafire.com/file/dm3rhfze89n3qwi/Additional-Tagging-Tools-Plugin.zip/file

-----------

P.S. Now plugin file version (which is shown in Windows File Manager/Windows Explorer) has x.x.yymm.dd format. But date version format is only for approximate reference, and I don't promise to update it after every minor change.

Internal plugin version (shown, e.g. in plugin menu) is still auto-generated, and means the number of days of build time elapsed since 01/01/2000.
Last Edit: May 25, 2024, 07:59:19 AM by boroda

Dizza17

  • Jr. Member
  • **
  • Posts: 88
Hi Boroda,

using the latest version of this plug in, I'm receiving this error at the completion of the reading/generating of a library totals report. it completely shuts down musicbee. Any ideas?

MusicBee v3.6.8905.12923P  (Win10.0), 26 May 2024 14:43:

System.OverflowException: TimeSpan overflowed because the duration is too long.
   at System.TimeSpan.Interval(Double value, Int32 scale)
   at MusicBeePlugin.Plugin.ConvertStringsResult.getFormattedResult(Int32 operation, String mulDivFactorRepr, String precisionDigitsRepr, String appendedText)
   at MusicBeePlugin.LibraryReports.AggregatedTags.GetField(String composedGroupings, ConvertStringsResult[] convertResults, Int32 fieldNumber, ColumnAttributesDict groupings, Int32 operation, String mulDivFactorRepr, String precisionDigitsRepr, String appendedText)
   at MusicBeePlugin.LibraryReports.applyPresetResults(String[] queriedFiles, AggregatedTags tags, SortedDictionary`2 filesActualComposedSplitGroupingTagsLists, Boolean interactive, Boolean saveResultsToTags, String functionId, Boolean filterResults)
   at MusicBeePlugin.LibraryReports.executePreset(String[] queriedFiles, Boolean interactive, Boolean saveResultsToTags, String functionId, Boolean filterResults, Boolean forceCacheUpdate)
   at MusicBeePlugin.LibraryReports.previewTrackList()
   at MusicBeePlugin.PluginWindowTemplate.serializedOperation()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
When the rich wage war, it’s the poor who suffer.