CaTRoX (QWR Edition)
(https://i.imgur.com/15LCGzs.png) (https://i.imgur.com/15LCGzs.png)
CUI theme based on the design and color scheme of eXtremeHunter1972's infamous CaTRoX theme!
Features (https://theqwertiest.github.io/CaTRoX_QWR/docs/features/):
- Three player modes: Full, Playlist and Art.
- Custom playlist with extensive customization.
- Integrated YouTube support (via foo_youtube and Find & Play script).
- Tree style media library viewer (via `Library Tree` script).
- Borderless player window.
- Fully modularized via script packages.
- And more!
See Installation Guide (https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/) to get started!
Links
- Download link (https://github.com/TheQwertiest/CaTRoX_QWR/releases/latest)
- Homepage (https://theqwertiest.github.io/CaTRoX_QWR)
- Changelog (https://github.com/TheQwertiest/CaTRoX_QWR/blob/master/CHANGELOG.md)
Included 3rd party scripts
- Find & Play (Panel_YT.js): https://hydrogenaud.io/index.php?topic=121006 by WilB.
- Library Tree (Panel_Library.js): https://hydrogenaud.io/index.php/topic,110938.0.html by WilB.
- Various samples from foo_jscript_panel: https://github.com/TheQwertiest/smp_2003 by marc2003.
Credits
- eXtremeHunter1972: original CaTRoX theme (http://extremehunter1972.deviantart.com/art/CaTRoX-1-April-2014-368146015 (http://extremehunter1972.deviantart.com/art/CaTRoX-1-April-2014-368146015)).
- marc2003: original foo_jscript_panel, sample scripts and various JS consultations.
- WilB: YouTube Track Manager script and Library Tree script.
- Respective authors of the components used in the theme.
Some bugs. :P
1)
thumbs doesn't download anything because this line in thumbs.js points to a file that doesn't exist - you chose not to bundle any files with your component.
this.vbs_file = fb.ComponentPath + 'samples\\complete\\vbs\\download.vbs';
2)
last.fm similar artists crashes because you've updated lodash without adding bind to this map function...
this.data = _(_.get(_.jsonParseFile(this.filename), 'similarartists.artist', []))
.map(function (item) {
return {
name : item.name,
width : _.textWidth(item.name, panel.fonts.normal),
url : this.properties.link.value == 0 ? item.url : 'artist HAS ' + item.name
};
}, this)
.value();
Some bugs. :P
1)
thumbs doesn't download anything because this line in thumbs.js points to a file that doesn't exist - you chose not to bundle any files with your component.
2)
last.fm similar artists crashes because you've updated lodash without adding bind to this map function...
Thanks! =)
So much for the smooth release...
Another thing... because the site hosting panel stack splitter has gone, you should post a link to this thread in the uploads section:
https://hydrogenaud.io/index.php/topic,114249.0.html
Another thing... because the site hosting panel stack splitter has gone, you should post a link to this thread in the uploads section:
https://hydrogenaud.io/index.php/topic,114249.0.html
That's weird: http://foo2k.chottu.net/ is accessible for me as well as link to PSS (http://foo2k.chottu.net/foo_uie_panel_splitter.zip)
That IS weird. Last time I looked it was just a holding page. As you can see from the thread I linked to, that was some months ago.
Version: 4.0.2
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.2
Changelog:Changed
- First theme launch now sets window size according to player mode.
- Spectrum visualization is now enabled by default.
- Updated theme.fcl.
Fixed
- Fixed crash on LAST tab when 'similar artists' mode is chosen.
- Fixed bug: 'thumbs' panel on BIO tab was not downloading images.
Kudos
@marc2003 for bug hunting =)
JScript Panel (Cover Panel)
JavaScript 运行时错误:
正则表达式中缺少 ']'
File: ...\js\lodash.min.js
Line: 1, Col: 6969
<source text only available at compile time>
JScript Panel (Cover Panel)
JavaScript 运行时错误:
正则表达式中缺少 ']'
File: ...\js\lodash.min.js
Line: 1, Col: 6969
<source text only available at compile time>
What OS and IE version do you have?
Did you import theme.fcl?
What OS and IE version do you have?
Did you import theme.fcl?
windows 10 pro insider per 17035 + IE 11.1000.17035.0.
I import theme.fcl.
Panel_yt.js file encoding needs to be converted to UTF-8 with BOM.
(1)Playlist modes > Click on the volume bar
“setInterval”未定义
...\js\volume.js
Line: 141, Col: 21
(2)Display > Columns UI > Layout > Mini > OK, > Aw,crashed...
(1)Playlist modes > Click on the volume bar
“setInterval”未定义
...\js\volume.js
Line: 141, Col: 21
Welp, hard to test everything myself ^^.
(2)Display > Columns UI > Layout > Mini > OK, > Aw,crashed...
Heh, this one is a relic of old times, I even forgot that it existed :D
Thanks for the bug reports. These two will be fixed soon.
JScript Panel (Cover Panel)
JavaScript 运行时错误:
正则表达式中缺少 ']'
File: ...\js\lodash.min.js
Line: 1, Col: 6969
<source text only available at compile time>
Does it crash on fb2k launch?
Try selecting\creating empty playlist and reloading fb2k. Does it crash in such case as well?
Panel_yt.js file encoding needs to be converted to UTF-8 with BOM.
Why though? Does it break something when it is without BOM?
Still at my wits end about lodash crash in Cover Panel though...Oooohkay.... Now I'm getting somewhere - it seems this has something to do with character encoding. Probably you have a track with kanji characters selected, which somehow breaks lodash.
Try the standard (not minified) version and then you'll see where the problem is.
Try the standard (not minified) version and then you'll see where the problem is.
Well, I know, where the problem is: https://github.com/lodash/lodash/blob/4.17.4/lodash.js#L253
I've even found a mention of the problem: https://github.com/lodash/lodash/issues/2625
But still wondering what actually causes it and how to fix it. :\
Version: 4.0.2a
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.2a
Changelog:Changed
- Updated theme.fcl.
- Removed unused CUI layout.
Fixed
- Fixed crash when clicking on volume bar in Playlist Mode.
Kudos
@always.beta ;)
4.0.2a has the same problem. I need to convert panel_yt.js and lodash.min.js file codes to utf-8 with BOM before I can use it normally.
The panel_yt.js file 884 line has full-width characters.
Still crashes when clicking on volume bar in Playlist Mode, PREPROCESSOR is still missing the timeout-shim.js file.
4.0.2a has the same problem. I need to convert panel_yt.js and lodash.min.js file codes to utf-8 with BOM before I can use it normally.
The panel_yt.js file 884 line has full-width characters.
Still crashes when clicking on volume bar in Playlist Mode, PREPROCESSOR is still missing the timeout-shim.js file.
Damn, wrong .fcl uploaded...
Does adding BOM fix the crash in Cover Panel?
Always nice to see JScript Panel see some use, and with a dark theme, too.
Does adding BOM fix the crash in Cover Panel?
Yes, it will fix the crash in Cover Panel. (Almost all of the panels on startup have this error, not just the cover panel. :D )
Version: 4.0.2b
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.2b
Changelog:Fixed
- Fixed UTF8 encoding related crashes.
- First time launch resizes window properly now .
- Updated theme.fcl:
- Fixed crash when clicking on volume bar in Playlist Mode ( again ).
Kudos
@always.beta :P
That lodash thing was bugging me so I looked in to it some more...
a) that lodash file is not the original from source. It's been mangled in some way and I'm almost certain the original would have worked correctly without adding a BOM.
b) having said that, utf8 files without BOM (like the youtube script) are not handled correctly in the preprocessor section and this is a component issue which needs to be fixed.
a) that lodash file is not the original from source. It's been mangled in some way and I'm almost certain the original would have worked correctly without adding a BOM.
Welp, I used CDNJS to get lodash, but I doubt that CDN choice really matters here, since the original problem was caused by invalid unicode decoding of the script file. Who knows though, I might be wrong, but I don't have a VM with chinese locale to test it properly ¯\_(ツ)_/¯
[EDIT]: On the second thought, you are probably right, since the problematic line is handled differently in minified version from CDNJS compared to vanilla one: it replaced all unicode character codes with the actual characters, which is very likely to be the source of problem...
It's more luck than judgement no one else has noticed/complained about this.
A most simple test which shows the shortcoming:
Save as
a.js (plain UTF8 without BOM in your foobar profile)
var a = "’";
Then in a fresh panel...
// ==PREPROCESSOR==
// @import "%fb2k_profile_path%a.js"
// ==/PREPROCESSOR==
fb.trace(a);
outputs this..
’
edit: I have now fixed this for the next release. Luckily the functions for handling it were already in place - I never would have figured it out myself. :'(
Version: 4.0.3
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.3
Changelog:Added
- Track Info Panel: added ability to change tracking mode (auto/playing/selected).
- Playlist Panel: header grouping type is now synced between Playlist Mode and Full Mode.
Changed
- Top Panel: Made 'Last.FM Scrobbling Disabled' icon a bit prettier ^^.
- Updated theme.fcl: moved timeout shim to helpers.js.
- Compiled latest foo_jscript_panel with extensions (v1.3.2.1).
Fixed
- Art Mode: fixed cropped 'mute' button.
- Playlist Panel:
- Fixed text overlapping with lock image.
- Fixed lock image not appearing after locking playlist.
- Fixed list width not adjusting when scrollbar disappears\appears.
- Fixed inconsistencies with queue position display.
- Cover Panel:
- Fixed panel being stuck with "Loading" text.
- Fixed thumb images not clearing on track change.
- Fixed crash on resize.
- Fixed small text in thumb placeholders.
- Fixed thumb placeholder placement.
- Added missing menu separators to context menus.
- Fixed theme not adjusting window size correctly after import.
Version: 4.0.4
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.4
Changelog:Changed
- Playlist: date and album now won't be displayed if unavailable (previously was displayed as '?').
- Better handling of vanilla JScript component.
Fixed
- Updated theme.fcl: fixed inability to use theme with standard fb2k installation.
- Playlist Panel: clicking on Header now always selects all it's rows.
- Top Panel: compatibility fixes for foo_youtube v2.2.
- Menu Panel: fixed some buttons not responding after changing border mode.
Version: 4.0.5
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.0.5
Changelog:Added
- Art Mode: title queries and title cycle interval can be configured now through Panel Properties.
Changed
- Art Mode: empty title text is skipped skipped now.
- Top Panel: adjusted fb2k logo color :D
- Compiled latest v1.3.x foo_jscript_panel with extensions (v1.3.2.2).
Fixed
- Playlist Panel: fixed various errors with custom grouping query.
- Menu Panel: fixed pseudo caption not always working.
- Fixed wrong window sizes on Player Mode change when FrameStyle is
other than NoBorder. - Removed unneeded resizes on mode change.
Is the modded jscript panel your development of marc2003's last version? Did I miss some other post about it?
Is the modded jscript panel your development of marc2003's last version? Did I miss some other post about it?
Not really: v1.3.2.2 is the the latest available JScript from marc2003 prior git take-down. The included component is just a rebase of my old extensions on top of it =)
I'm not sure if marc2003 is coming back to these boards, but he resumed the development of the original JScript. This theme will be updated once the new version of JScript is ready for release.
Version: 4.1.0
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.1.0
Changelog:Added- Added compatibility fixes for vanilla JScript v2.0.0 component.
- Track Info Panel:
- Added ability to add, copy, edit and remove metadata tags (through double-click and context menu).
- Added tooltips on hover, which display full tag value.
- Made possible to hide file info tags and show only metadata tags.
- Added animation on mouse click.
- Playlist Panel:
- Added ESplaylist-like ability to customize grouping presets (right-click > Grouping > Manage presets):
- Presets can be added, changed, moved and removed.
- Customizable title and sub-title queries in group header.
- Added CTRL-SHIFT-up/down hotkeys - moves selection up/down.
- Added 'pressed' animation to playlist manager.
- Context Menus: developer context menu (accessible via SHIFT-right-click) now contains all base panel scripts in it's 'Edit panel scripts' sub-menu.
Changed- Updated WilB's scripts:
- Library Tree 1.3.9.2.
- YouTube Track Manager 3.9.4.
- Track Info Panel: rewritten from scratch.
- Playlist Panel: date and album are not displayed now in compact header if empty.
- Various performance improvements.
- Updated theme.fcl:
- Added compatibility fixes for vanilla JScript v2.0.0 component.
- Added new script files.
- Changed default panel properties.
- Major internal changes.
- Compiled latest foo_jscript_panel with extensions (v2.0.2).
Fixed- Fixed crashes when starting fb2k in minimized state.
- Playlist Panel:
- List padding (set via panel properties) is respected now.
- Fixed incorrect scroll position that appeared in some cases.
- Fixed invalid drag-n-drop position.
- Fixed various errors with drag-n-drop on empty playlist area.
- Fixed invalid position of CTRL-V pasted items.
- Fixed CTRL-X not removing cut item.
- Fixed various crashes during playlist navigation while focused track is not set.
- Fixed grouping settings not respecting playlist changes.
- Cover Panel:
- Fixed 'Loading' text being stuck on script load.
- Fixed crashes when track is deleted during art load.
hi, just looking your theme. you have release version 4.1.0 but with file name catrox_qwr_edition_4.0.5.zip, is it just wrong naming or completely different release?
anyway link above is invalid. regards :)
hi, just looking your theme. you have release version 4.1.0 but with file name catrox_qwr_edition_4.0.5.zip, is it just wrong naming or completely different release?
anyway link above is invalid. regards :)
Darn! Thanks for noticing! That's why copy-pasting is a bad practice... >_<""
Correct link for v4.1.0: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.1.0
still catrox_qwr_edition_4.0.5.zip.
foo_jscript_panel_modded [JScript Panel (foo_jscript_panel)]
↑Please change component name, file name and version. ;)
Fixed >_<""""""""""""""""""""""
PS: No need to redownload, it was just a wrong zip name, the contents are correct.
Hey QWR, kind of a weird question, but how much work did you do with the playlist side of things? With ExtremeHunter's permission I ripped his playlist code out for use in my theme about 4-5 years ago. I've fixed most of the bugs I think, but there's a lot of code that seems unnecessary. I'm interested if you've changed it drastically.
Currently considering whether I want to update.
Hey QWR, kind of a weird question, but how much work did you do with the playlist side of things? With ExtremeHunter's permission I ripped his playlist code out for use in my theme about 4-5 years ago. I've fixed most of the bugs I think, but there's a lot of code that seems unnecessary. I'm interested if you've changed it drastically.
Currently considering whether I want to update.
Well, uh, actually, like most of the theme, it does not share any code with the extremehunter's version at all =)
Playlist was rewritten from scratch and only the original design was retained. It became quite big though (feature-wise as well), but hopefully code is much easier to understand and to modify (it is for me obviously :P).
Feel free to ask here or via PM if you have any questions about the code.
Haha, cool. Everytime I have to touch it I think of how it needs a complete rewrite, but then I think of how it works 95% and how I've spent so much time already fixing it....
If you're okay with me potentially cribbing large chunks of your code for my own theme, I'll give it a looksee. :)
Haha, cool. Everytime I have to touch it I think of how it needs a complete rewrite, but then I think of how it works 95% and how I've spent so much time already fixing it....
Those 5% that were nearly impossible to fix and being unable to add new features without breaking something somewhere is what forced the rewrite...
If you're okay with me potentially cribbing large chunks of your code for my own theme, I'll give it a looksee. :)
You can use whatever code you want as long as the credit is given where it's due =) Theme uses @marc2003 samples and also includes some of the
@WilB scripts (see https://github.com/TheQwertiest/CaTRoX_QWR and it's wiki for more info)
Version: 4.1.1
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.1.1
Changelog:Changed
- Playlist Panel:
- Playlist Manager: changed button animation style for better consistency with the rest of the theme.
- Grouping Dialogs:
- Added workaround for borked buttons in Windows 7.
- Added fb2k icon to the window.
- 'Apply' and 'Update' buttons are now active only when there are pending changes.
- Dialog windows are now centered.
- Compiled latest foo_jscript_panel with extensions (v2.0.4).
Interesting. Is there a way to do without foo_ui_hacks, which violates the SDK license?
Interesting. Is there a way to do without foo_ui_hacks, which violates the SDK license?
Nope, not possible: most of the major theme features rely on functionality provided by foo_ui_hacks and are impossible to implement with vanilla JScript alone.
PS: And as was said many times before, technically foo_ui_hacks does not violate SDK license, since it does not use fb2k SDK at all. Moreover, in 2018-02-05 SDK license update Peter
removed the following part
Usage restrictions:
It is illegal to use this SDK as a part of foobar2000 components that operate outside of legally documented programming interfaces (APIs), such as using window procedure hooks to modify user interface behaviors. We believe components doing so to be harmful to our userbase by introducing compatibility issues and dependencies on undocumented behaviors of our code that may change at any time without any notice or an update to the SDK which would reflect the change.
thus even if foo_ui_hacks was using vanilla fb2k C++ SDK it would not violate it's license.
PPS: Loved
@Peter 's comment in that SDK update changelog: "A less restrictive license -
common sense cannot be enforced" - so true >_<
Ah! Thanks for updating me.
Added a short description about Track Grouping feature on CaTRoX wiki (https://github.com/TheQwertiest/CaTRoX_QWR/wiki/Playlist-panel#group-header)
Great work man, I really like the theme except for the library tree.
Is there an easy way to replace it with the standard Album List viewer? I'm not so experienced with modding things myself.
Great work man, I really like the theme except for the library tree.
Is there an easy way to replace it with the standard Album List viewer? I'm not so experienced with modding things myself.
Replace the highlighted JScript Panel with the one you like =)
(https://i.imgur.com/jYoK4Uo.png)
Alright that works. I had to download a Columns UI component for it too.
Any idea how I can adjust the size of it? It still looks a bit awkward and covers most of the bottom 2 tabs.
Also I found these colour options but I can't adjust them. Are they set in a script?
(https://i.imgur.com/2osa3n5.png)
Appreciate the help =)
Alright that works. I had to download a Columns UI component for it too.
Any idea how I can adjust the size of it? It still looks a bit awkward and covers most of the bottom 2 tabs.
(https://i.imgur.com/2osa3n5.png)
Appreciate the help =)
You probably replaced the wrong panel. The panel you need to replace is called 'Library' in Panel Stack Splitter.
Also I found these colour options but I can't adjust them. Are they set in a script?
Most of the theme colors are hard-coded in script files (i.e. it does not use CUI color settings), so you'll have to replace them manually if you want to change them.
First of all, many thanks for your incredible theme. I have found some odd behaviour with "Various Artists" compilations showing the very first artist instead of album artist:
(https://i.imgur.com/VghjiQF.png)
Can I change it on my side or is a randomly generated feature (aka bug)?
Kind regards
First of all, many thanks for your incredible theme. I have found some odd behaviour with "Various Artists" compilations showing the very first artist instead of album artist.
Can I change it on my side or is a randomly generated feature (aka bug)?
Rather it's a randomly generated oversight (aka lack of testing) =)
Title query in header uses first track in group for evaluation.
You can change this title query in grouping preset manager (see >>link<< (https://github.com/TheQwertiest/CaTRoX_QWR/wiki/Playlist-panel#track-grouping)) with something like
$if($greater($len(%album artist%),0),%album artist%,%artist%)
That did the trick, many thanks!
(https://i.imgur.com/fjMsL7x.png)
Hey,
so WilB is an awesome guy who asked me for feedback and wants to fix most of the issues I had with Library Tree.
Looking at the components I didn't install it myself though. So is this somewhere in your modded JScript thing? Would I be able to change to a new version of Library Tree myself without breaking a bunch of other stuff? His update is not done yet, I'm just asking.
Also I've had some issues with hotkeys.
Middle mouseclick on an item in Library Tree is supposed to add to playlist but does nothing.
CTRL-O for 'Open Folder Containing Selected Item' opens my Documents folder, not the proper album folder.
CTRL-Q for 'Add Selected Item to Playback Queue', SHIFT-Q for 'Remove Selected Item from Playback Queue', CTRL-SHIFT-Q for 'Clear Playback Queue' Are these supposed to add to the playlist or just go inbetween the end of the current and the start of the next song? Either way I see a 0 pop up for the Library Tree jump search thing and nothing happens.
I had the same problem with some other hotkeys I tried to set up in the foobar options.
Not sure if you're the right person to ask here but the Top Rated filter finds nothing, even though I've tagged a few songs with 5 stars.
So despite that it's been fun exploring your theme. I like it a lot. ;)
You may need to set up the top rating "View Filter" in library tree panel properties.
Default:
rating IS 5. That works if the rating field is really present in a tag. "$meta(rating)" IS 5 can also be used.
If you just put the rating in the playback statistics database it needs to be:
%rating% IS 5
As I said, I couldn't reproduce the middle click thing either on CaTRoX or my own themes. I have no idea what's going on, but you said you had a lot of errors on installation??? I suppose something in CaTRoX could be interfering???
Playback queue is not related to library tree. I've stopped jump search occasionally showing when it shouldn't in next version of library tree.
I have also added the user-definable hot keys you pm'd me about for the next version of library tree.
so WilB is an awesome guy
Yes, he is ;)
Hey,
so WilB is an awesome guy who asked me for feedback and wants to fix most of the issues I had with Library Tree.
Looking at the components I didn't install it myself though. So is this somewhere in your modded JScript thing? Would I be able to change to a new version of Library Tree myself without breaking a bunch of other stuff? His update is not done yet, I'm just asking.
Can't guarantee that, since I've tested the latest version of my theme only with the 1.3.9.2 version of Library Tree script, but the future versions will still most likely work fine with the theme. My modded JScript does not really change anything in the functionality of the original JScript component, it only adds new features needed for the theme.
Also I've had some issues with hotkeys.
Middle mouseclick on an item in Library Tree is supposed to add to playlist but does nothing.
CTRL-O for 'Open Folder Containing Selected Item' opens my Documents folder, not the proper album folder.
CTRL-Q for 'Add Selected Item to Playback Queue', SHIFT-Q for 'Remove Selected Item from Playback Queue', CTRL-SHIFT-Q for 'Clear Playback Queue' Are these supposed to add to the playlist or just go inbetween the end of the current and the start of the next song? Either way I see a 0 pop up for the Library Tree jump search thing and nothing happens.
I had the same problem with some other hotkeys I tried to set up in the foobar options.
Hotkey for 'Open Folder Containing Selected Item' is actually SHIFT-O (fixed documentation on wiki), but it is bugged in the current theme release and causes a script crash, sorry for that >_<""
CTRL-O is the fb2k default hotkey for File/Open...
CTRL/SHIFT-Q are used to manage playback queue and not a playlist. Playback queue contains tracks that will be played next and does not affect the playlist in any way. E.g. you have a playlist [item_1, item_2, item_3]; currently your playback order is 'Default' and item_1 is playing; you add item_3 to the playback queue; after item_1 finishes playing item_3 will be played next instead of item_2, whilst the playlist remains unchanged.
Middle-click does not work for me either, I'll try to find if it is caused by something in my theme or if it is the problem in the original
@WilB 's script.
Not sure if you're the right person to ask here but the Top Rated filter finds nothing, even though I've tagged a few songs with 5 stars.
Will test it later and see if it works.
So despite that it's been fun exploring your theme. I like it a lot. ;)
Thanks! Glad you liked it! Keep having fun :D
[EDIT] Welp, I've just crashed the Library Tree script (stack overflow error), while trying to test Top Rated filter -_-
I couldn't reproduce the middle click thing either on CaTRoX or my own themes
Is middle-click adding selected item to the current playlist supposed to be the default behaviour in Library Tree script? Cause it does not work for me either =(
About 'Top Rated' filter: when I rate any song in my playlist with Top Rated filter open, it causes Library Tree to hang and then crash with 'stack overflow' error.
PS: I can move this discussion to the Library Tree thread, if desired.
Middle-click was a feature put in by request to add tracks to the end of the playlist in the order clicked. With es_playlist, el_playlist and sim_playlist they refocus so the added tracks are always visible. The add function includes plman.EnsurePlaylistItemVisible... So it works properly for me with those playlist viewers.
I can kind of reproduce with CaTRoX if the playlist is already filled. The track(s) are added but the focus position of the CaTRoX playlist doesn't change. So since they're added to the end you may not see them & may not realise they're added. The same issue is present if the right click menu "Add to Current Playlist" is used. Again its working properly with the standard playlist viewers mentioned above.
Regarding the hang, I was aware of a stability issue with 1.3.9.2 that I had fixed for the next release and hopefully it covers the issue you encountered. But I will test further...
[EDIT] I just tried CUI album list in CaTRoX with album list right click menu "Add to Playlist". That doesn't work properly with CaTRoX playlist either, i.e. it behaves the same as Library Tree.
HTH
Middle-click was a feature put in by request to add tracks to the end of the playlist in the order clicked.
It seems that on my system mbtn_down and mbtn_up callbacks are not called at all, i.e. it's not a problem in your script, but probably in JScript itself (or may be in my system).
With es_playlist, el_playlist and sim_playlist they refocus so the added tracks are always visible. The add function includes plman.EnsurePlaylistItemVisible... So it works properly for me with those playlist viewers.
Hm... I've never actually bothered with plman.EnsurePlaylistItemVisible before, so it might be not working at all in my theme =) Will try to fix it though.
If you just put the rating in the playback statistics database it needs to be:
%rating% IS 5
Yup, that fixed it.
As I said, I couldn't reproduce the middle click thing either on CaTRoX or my own themes. I have no idea what's going on, but you said you had a lot of errors on installation??? I suppose something in CaTRoX could be interfering???
I had messed around with a lot of the options and crashed the script several times yeah.
Since then I've reinstalled everything and haven't seen that behaviour again. Unfortunately I can't tell you anymore what settings I had used. Might have been just a typo in a settings dialogue though.
Playback queue is not related to library tree. I've stopped jump search occasionally showing when it shouldn't in next version of library tree.
I have also added the user-definable hot keys you pm'd me about for the next version of library tree.
Awesome!
It seems that on my system mbtn_down and mbtn_up callbacks are not called at all, i.e. it's not a problem in your script, but probably in JScript itself (or may be in my system).
Sounds like that's the problem.
My middle mouse button works normally in other programs but doesn't register in library tree. It's not that I don't see it being added, but nothing happens.
Ok, I've found out what causes middle mouse to misbehave: when caption is hidden via foo_ui_hacks it sets middle mouse button to behave as window mover (i.e. when you press the mbtn you can move the player window), it can be changed back via Preferences > Display > Main Window > Move With... > Caption only. Not sure how to workaround that, but I have a few ideas...
The add function includes plman.EnsurePlaylistItemVisible
Yup, should be fixed now, that is in the next theme release =)
Okay, for now I will just patch foo_ui_hacks to disable automatic 'Move With...' change. More hacks to ui_hacks! :D
Darn, actually it was in my script all along... Will be fixed in the next release...
If you just put the rating in the playback statistics database it needs to be:
%rating% IS 5
Yup, that fixed it.
You can also force CaTRoX to read and write rating to tags instead of foo_playcount: SHIFT-Right-Click on playlist > Panel Properties > user.row.rating.from_tags > true
Note, that you have to do this for both playlists panels in Full and Playlist modes.
You can also force CaTRoX to read and write rating to tags instead of foo_playcount: SHIFT-Right-Click on playlist > Panel Properties > user.row.rating.from_tags > true
Note, that you have to do this for both playlists panels in Full and Playlist modes.
Even better. Mousemiddleclick works now as well, thanks
Version: 4.2.0
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.2.0
Changelog:Added
- Playlist Panel:
- Increased playlist initialization speed by 100%-180% (thanks to elia-is-me (https://github.com/elia-is-me) and marc2k3 (https://github.com/marc2k3))!
- Copy/Cut/Paste now works with native clipboard, e.g. copy mp3 file to/from Windows Explorer (thanks to marc2k3 (https://github.com/marc2k3)).
- Added ability to drag tracks from panel, e.g. drag mp3 file to another panel or to Windows Explorer.
- Added option to display original release date in grouping header (right-click > Appearance > Headers > Show original release date).
Changed
- Playlist Panel:
- Changed default title query in header to %albumartist%.
- Cleaned up various queries used in group header.
- Drag-n-drop behaviour is now much more in line with the native Windows behaviour.
- Track Info Panel:
- Remade 'New Tag' dialog window.
- Updated @WilB's scripts:
- Library Tree v1.4 (new features! (https://hydrogenaud.io/index.php/topic,111060.msg954816.html#msg954816)).
- YouTube Track Manager v3.9.5 (new features! (https://hydrogenaud.io/index.php/topic,111059.msg954815.html#msg954815)).
- Updated theme.fcl:
- Changed contained script files.
- Adjusted default panel properties.
- Compiled latest foo_jscript_panel with extensions (v2.1.0.2).
Fixed
- General:
- Fixed frame shadow not being enabled on frame style switch.
- Fixed mouse middle button not always working.
- Playlist Panel:
- Fixed items not refocusing after external drag-n-drop.
- Fixed items not refocusing if added from external script\components.
- Fixed handling of title and sub-title queries when evaluation result is empty.
- Fixed track info not always updating when played from dynamic sources.
- Fixed invalid info in Group Header when playing from dynamic sources.
- Fixed 'Open Containing Folder' (SHIFT-O).
- Fixed overlap of queue index and album artist.
- Fixed playlist manager not always reflecting changes in playlist content, when adding or removing playlist items.
- Top Panel:
- Fixed crash on double-click.
- Fixed track info not updating when playing from dynamic sources.
- Bottom Panel:
- Fixed invalid playback time with dynamic sources.
theme.fcl was changed, so it must be re-imported for theme to work!
Special thanks to
@Senchou,
@N4s7y,
@WilB and marc2k3 (https://github.com/marc2k3) for bug reports o/
Version: 4.2.0a
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.2.0a
Changelog:Fixed
- Playlist Panel: fixed wrong scroll position when refocusing on item.
Hm my foobar crashes on start after installing that.
I just copied in the files from the catrox folder and put the jscript panel dll in the components folder. Did I miss anything there?
It seems to be the jscript file. I tried importing the fcl while still using the old jscript (just so I can actually open foobar) but that doesn't work either.
Illegal operation:
Code: AA67913Ch, flags: 00000001h, address: 769608F2h
Bug check
Call path:
entry=>initquit::on_init
Code bytes (769608F2h):
769608B2h: 04 24 8B 45 0C 83 E0 01 C7 44 24 0C 90 08 96 76
769608C2h: 89 44 24 04 85 C9 74 39 8B 45 10 83 F8 0F 77 38
769608D2h: 89 44 24 10 C1 E0 02 50 51 8D 44 24 1C 50 E8 CF
769608E2h: BF 01 00 83 C4 0C 8D 04 24 50 FF 15 90 83 A0 76
769608F2h: 8B 4C 24 54 33 CC E8 93 EF 00 00 8B E5 5D C2 10
76960902h: 00 83 64 24 10 00 EB DE 6A 0F 58 EB C3 8B FF 55
76960912h: 8B EC 83 EC 50 A1 34 4D A0 76 33 C5 89 45 FC 53
76960922h: 56 33 DB 66 C7 45 F8 00 05 57 8D 45 E0 89 5D F4
Stack (0096F558h):
0096F538h: 7422AA8B 00000000 00000100 D52D0DC8
0096F548h: 0096F564 0096F5B0 769608F2 0096F558
0096F558h: AA67913C 00000001 00000000 769608F2
0096F568h: 00000000 062E01D4 00000057 00000053
0096F578h: 00000055 00415299 00004152 00004152
0096F588h: 00000000 054366B0 0096F5C4 0096F5C4
0096F598h: 00FC07D5 054366A0 0096F5B4 00000010
0096F5A8h: 52FFA2C8 D7A42211 0096F5EC 6E5E7ACE
0096F5B8h: AA67913C 00000001 00000000 00000000
0096F5C8h: 52FFA2C8 52FFA2C0 00000000 0096F5C8
0096F5D8h: 0096EF9C 0096F60C 6E5F422D 6E5F8158
0096F5E8h: 00000000 0096F618 52F46C4D 6E5E7C30
0096F5F8h: 010D8752 00000002 00000000 0111B4C8
0096F608h: 00000000 0096F634 52FD8172 00000001
0096F618h: 0096F640 01008BB3 00600000 00000012
0096F628h: 05436AA8 00000005 52FFA2C0 0096F74C
0096F638h: 010C6A42 00000001 0096F758 01009ACB
0096F648h: 00000000 01122888 00608000 00000028
0096F658h: 00000018 00000060 00800000 00000078
0096F668h: 008000FA 00000020 000000F6 00C89D30
Registers:
EAX: 0096F558, EBX: 00000000, ECX: 00000000, EDX: 010DDF50
ESI: 52FFA2C0, EDI: 52FFA2C8, EBP: 0096F5B0, ESP: 0096F558
Crash location:
Module: KERNELBASE
Offset: 1008F2h
Symbol: "RaiseException" (+62h)
Loaded modules:
foobar2000 loaded at 00F80000h - 0115F000h
ntdll loaded at 770B0000h - 7723D000h
KERNEL32 loaded at 73B40000h - 73C10000h
KERNELBASE loaded at 76860000h - 76A37000h
SHLWAPI loaded at 73FF0000h - 74035000h
msvcrt loaded at 74680000h - 7473D000h
COMCTL32 loaded at 6E240000h - 6E451000h
combase loaded at 73C10000h - 73E56000h
WINMM loaded at 6BBD0000h - 6BBF4000h
ucrtbase loaded at 76100000h - 76217000h
GDI32 loaded at 74C30000h - 74C52000h
RPCRT4 loaded at 73F30000h - 73FEE000h
gdi32full loaded at 74520000h - 7467E000h
DSOUND loaded at 50D00000h - 50D80000h
msvcp_win loaded at 74190000h - 7420C000h
WINMMBASE loaded at 6BBA0000h - 6BBC3000h
advapi32 loaded at 766A0000h - 76718000h
sechost loaded at 73AF0000h - 73B33000h
cfgmgr32 loaded at 74930000h - 74968000h
USER32 loaded at 74740000h - 748B5000h
win32u loaded at 73F10000h - 73F26000h
powrprof loaded at 74040000h - 74085000h
SHELL32 loaded at 74C60000h - 75F93000h
shcore loaded at 73E60000h - 73EE8000h
windows.storage loaded at 76AD0000h - 77096000h
kernel.appcore loaded at 76690000h - 7669E000h
profapi loaded at 76AB0000h - 76AC4000h
UxTheme loaded at 71A30000h - 71AA9000h
dbghelp loaded at 6E640000h - 6E7C1000h
ole32 loaded at 74090000h - 74187000h
OLEAUT32 loaded at 74210000h - 742A3000h
CRYPT32 loaded at 74390000h - 74512000h
MSASN1 loaded at 76250000h - 7625E000h
zlib1 loaded at 63080000h - 63099000h
shared loaded at 6E5E0000h - 6E601000h
MSVCP140 loaded at 6E560000h - 6E5D1000h
MSIMG32 loaded at 72EA0000h - 72EA6000h
OLEACC loaded at 6AAF0000h - 6AB46000h
gdiplus loaded at 6B6E0000h - 6B84B000h
Secur32 loaded at 6ACC0000h - 6ACCA000h
WINHTTP loaded at 72EB0000h - 72F5D000h
VCRUNTIME140 loaded at 6E540000h - 6E555000h
imagehlp loaded at 73EF0000h - 73F09000h
COMDLG32 loaded at 742B0000h - 74384000h
SSPICLI loaded at 00F60000h - 00F80000h
CRYPTBASE loaded at 73AC0000h - 73ACA000h
dbgcore loaded at 6E610000h - 6E634000h
bcryptPrimitives loaded at 76800000h - 76857000h
IMM32 loaded at 76220000h - 76245000h
MSCTF loaded at 74AE0000h - 74C24000h
dwmapi loaded at 6C780000h - 6C7A3000h
foo_albumlist loaded at 6E4F0000h - 6E535000h
foo_freedb2 loaded at 6E4C0000h - 6E4F0000h
foo_converter loaded at 6C420000h - 6C4A5000h
foo_playcount loaded at 6E480000h - 6E4BE000h
foo_utils loaded at 61AC0000h - 61B04000h
foo_ui_columns loaded at 61930000h - 61ABA000h
urlmon loaded at 6BA00000h - 6BB8C000h
USP10 loaded at 65A50000h - 65A67000h
iertutil loaded at 6AED0000h - 6B0EA000h
foo_dsp_std loaded at 61900000h - 61929000h
foo_discogs loaded at 10000000h - 100AB000h
foo_youtube loaded at 056F0000h - 05D21000h
WS2_32 loaded at 76090000h - 760F6000h
VERSION loaded at 73A50000h - 73A58000h
QUARTZ loaded at 53590000h - 53734000h
bcrypt loaded at 71A10000h - 71A29000h
foo_ui_hacks loaded at 618B0000h - 618F1000h
psapi loaded at 74920000h - 74926000h
wtsapi32 loaded at 73A40000h - 73A4F000h
foo_rgscan loaded at 61860000h - 618A9000h
foo_cdda loaded at 61330000h - 61367000h
foo_ui_std loaded at 53490000h - 5358F000h
foo_input_std loaded at 53330000h - 53488000h
MSACM32 loaded at 65C90000h - 65CA9000h
avutil-fb2k-55 loaded at 53290000h - 5332E000h
avcodec-fb2k-57 loaded at 53020000h - 5328B000h
foo_jscript_panel loaded at 52F20000h - 53012000h
foo_uie_lyrics3 loaded at 05EE0000h - 05F9B000h
WININET loaded at 6DB80000h - 6DE44000h
foo_dsp_eq loaded at 6E460000h - 6E47D000h
foo_uie_albumlist loaded at 52EB0000h - 52F1B000h
foo_facets loaded at 52CF0000h - 52EA5000h
foo_musical_spectrum loaded at 05E30000h - 05E4C000h
foo_unpack loaded at 52CB0000h - 52CE4000h
foo_uie_panel_splitter loaded at 05E60000h - 05EB9000h
foo_fileops loaded at 52C70000h - 52CAA000h
clbcatq loaded at 76000000h - 76082000h
MMDevApi loaded at 612C0000h - 6131B000h
DEVOBJ loaded at 6DA60000h - 6DA82000h
PROPSYS loaded at 6C210000h - 6C38A000h
AUDIOSES loaded at 5D000000h - 5D0F4000h
wintypes loaded at 5CF30000h - 5CFFB000h
AVRT loaded at 65970000h - 65978000h
sxs loaded at 65AB0000h - 65B36000h
atlthunk loaded at 72E80000h - 72E8D000h
Windows.UI loaded at 0F3C0000h - 0F48E000h
TextInputFramework loaded at 61E80000h - 61EF7000h
CoreUIComponents loaded at 61B60000h - 61D94000h
CoreMessaging loaded at 61DA0000h - 61E2C000h
ntmarta loaded at 6EDD0000h - 6EDF8000h
WindowsCodecs loaded at 66AD0000h - 66C3E000h
dataexchange loaded at 6BCC0000h - 6BD08000h
d3d11 loaded at 656C0000h - 658FE000h
dcomp loaded at 6B900000h - 6B9FE000h
dxgi loaded at 6D9C0000h - 6DA53000h
twinapi.appcore loaded at 65B40000h - 65C74000h
RMCLIENT loaded at 6C3B0000h - 6C3CA000h
jscript9 loaded at 528E0000h - 52C6A000h
mlang loaded at 528A0000h - 528D5000h
mshtml loaded at 51510000h - 52897000h
msiso loaded at 659F0000h - 65A4E000h
srpapi loaded at 60DD0000h - 60DF3000h
wshom loaded at 514E0000h - 51503000h
MPR loaded at 6C390000h - 6C3A7000h
ScrRun loaded at 514B0000h - 514DC000h
msscript loaded at 5B1B0000h - 5B1CC000h
vbscript loaded at 51430000h - 514A6000h
amsi loaded at 6D960000h - 6D96F000h
cryptsp loaded at 6FFE0000h - 6FFF3000h
USERENV loaded at 73A10000h - 73A32000h
MpOav loaded at 51410000h - 51429000h
coml2 loaded at 76A50000h - 76AAE000h
WLDP loaded at 513F0000h - 51401000h
WINTRUST loaded at 76720000h - 76766000h
DWrite loaded at 683C0000h - 68640000h
msxml3 loaded at 51260000h - 513EE000h
ieframe loaded at 0F490000h - 0FFF8000h
NETAPI32 loaded at 718D0000h - 718E3000h
NETUTILS loaded at 718C0000h - 718CB000h
WKSCLI loaded at 72E90000h - 72EA0000h
Stack dump analysis:
Address: 769608F2h (KERNELBASE+1008F2h), symbol: "RaiseException" (+62h)
Address: 00FC07D5h (foobar2000+407D5h)
Address: 52FFA2C8h (foo_jscript_panel+DA2C8h), symbol: "foobar2000_get_interface" (+85ED8h)
Address: 6E5E7ACEh (shared+7ACEh), symbol: "uBugCheck" (+3Eh)
Address: 52FFA2C8h (foo_jscript_panel+DA2C8h), symbol: "foobar2000_get_interface" (+85ED8h)
Address: 52FFA2C0h (foo_jscript_panel+DA2C0h), symbol: "foobar2000_get_interface" (+85ED0h)
Address: 6E5F422Dh (shared+1422Dh), symbol: "GetInfiniteWaitEvent" (+24Dh)
Address: 6E5F8158h (shared+18158h), symbol: "GetInfiniteWaitEvent" (+4178h)
Address: 52F46C4Dh (foo_jscript_panel+26C4Dh)
Address: 6E5E7C30h (shared+7C30h), symbol: "uPrintCrashInfo_OnEvent" (+0h)
Address: 010D8752h (foobar2000+158752h)
Address: 0111B4C8h (foobar2000+19B4C8h)
Address: 52FD8172h (foo_jscript_panel+B8172h), symbol: "foobar2000_get_interface" (+63D82h)
Address: 01008BB3h (foobar2000+88BB3h)
Address: 52FFA2C0h (foo_jscript_panel+DA2C0h), symbol: "foobar2000_get_interface" (+85ED0h)
Address: 010C6A42h (foobar2000+146A42h)
Address: 01009ACBh (foobar2000+89ACBh)
Address: 01122888h (foobar2000+1A2888h)
Address: 770F1659h (ntdll+41659h), symbol: "RtlAllocateHeap" (+2A9h)
Address: 010F0E4Ch (foobar2000+170E4Ch)
Address: 010F0E4Ch (foobar2000+170E4Ch)
Address: 010CA9D0h (foobar2000+14A9D0h)
Address: 01009E31h (foobar2000+89E31h)
Address: 01122888h (foobar2000+1A2888h)
Address: 010C2FD7h (foobar2000+142FD7h)
Address: 010C2FE4h (foobar2000+142FE4h)
Address: 010CA9F3h (foobar2000+14A9F3h)
Address: 010C2BBDh (foobar2000+142BBDh)
Address: 00F80000h (foobar2000+0h)
Address: 010C2C37h (foobar2000+142C37h)
Address: 010C2C37h (foobar2000+142C37h)
Address: 010C2886h (foobar2000+142886h)
Address: 73B58654h (KERNEL32+18654h), symbol: "BaseThreadInitThunk" (+24h)
Address: 73B58630h (KERNEL32+18630h), symbol: "BaseThreadInitThunk" (+0h)
Address: 77114A77h (ntdll+64A77h), symbol: "RtlGetAppContainerNamedObjectPath" (+137h)
Address: 77126A50h (ntdll+76A50h), symbol: "wcstombs" (+90h)
Address: 77114A47h (ntdll+64A47h), symbol: "RtlGetAppContainerNamedObjectPath" (+107h)
Address: 77139ECDh (ntdll+89ECDh), symbol: "RtlCaptureContext" (+FDh)
Address: 010C2C37h (foobar2000+142C37h)
Environment:
App: foobar2000 v1.4 beta 6
UI: Columns UI 0.5.1
Components:
Core (2018-02-05 12:48:16 UTC)
foobar2000 core 1.4 beta 6
foo_albumlist.dll (2018-02-05 12:47:30 UTC)
Album List 4.6
foo_cdda.dll (2018-02-05 12:47:30 UTC)
CD Audio Decoder 3.0
foo_converter.dll (2018-02-05 12:47:42 UTC)
Converter 1.5.3
foo_discogs.dll (2018-02-19 18:23:22 UTC)
Discogs Tagger 2.13
foo_dsp_eq.dll (2018-02-05 12:47:34 UTC)
Equalizer 1.2.1
foo_dsp_std.dll (2018-02-05 12:47:26 UTC)
Standard DSP Array 1.3.1
foo_facets.dll (2018-02-18 23:23:01 UTC)
Facets 1.0
foo_fileops.dll (2018-02-05 12:47:30 UTC)
File Operations 2.2.2
foo_freedb2.dll (2018-02-05 12:47:30 UTC)
Online Tagger 0.7
foo_input_std.dll (2018-02-05 12:48:02 UTC)
FFmpeg Decoders 3.2.4
Standard Input Array 1.0
foo_jscript_panel.dll (2018-03-26 14:58:48 UTC)
JScript Panel 2.1.0.2
foo_musical_spectrum.dll (2018-02-18 23:18:39 UTC)
Musical Spectrum 0.9.1
foo_playcount.dll (2018-02-18 23:18:39 UTC)
Playback Statistics 3.0.2
foo_rgscan.dll (2018-02-05 12:47:44 UTC)
ReplayGain Scanner 2.3
foo_ui_columns.dll (2018-02-18 23:18:41 UTC)
Columns UI 0.5.1
foo_ui_hacks.dll (2018-02-18 23:18:41 UTC)
UI Hacks 2013-02-19
foo_ui_std.dll (2018-02-05 12:48:00 UTC)
Default User Interface 0.9.5
foo_uie_albumlist.dll (2018-02-20 16:32:32 UTC)
Album list panel 0.4.0-beta.2
foo_uie_lyrics3.dll (2018-02-18 23:18:42 UTC)
Lyric Show Panel 3 0.5
foo_uie_panel_splitter.dll (2018-02-18 23:18:42 UTC)
Panel Stack Splitter 0.3.8.3(alpha)
foo_unpack.dll (2018-02-05 12:47:48 UTC)
ZIP/GZIP/RAR Reader 1.8
foo_utils.dll (2018-02-18 23:18:42 UTC)
Playlist Tools 0.6.2 beta 6
foo_youtube.dll (2018-02-18 23:18:42 UTC)
Youtube Source 2.2.2 beta 1
Recent events:
Loading DLL: C:\Users\Nasty\AppData\Roaming\foobar2000\user-components\foo_uie_panel_splitter\foo_uie_panel_splitter.dll
Loading DLL: C:\Program Files (x86)\foobar2000\components\foo_fileops.dll
UI Hacks: DLL-hijacking failed
UI Hacks: hooks status 0x5a0000
Components loaded in: 0:00.036927
Pre config read
Configuration read in: 0:00.003813
Starting playlist loading
Watching: C:\Users\Nasty\Music
Watching: F:\Musik
JScript Panel v2.1.0.2 (Menu Panel): initialised in 57 ms
JScript Panel v2.1.0.2 (Playlist Mini): initialised in 36 ms
JScript Panel v2.1.0.2 (Bottom Panel Mini): initialised in 23 ms
JScript Panel v2.1.0.2 (Playback Panel Mini): initialised in 22 ms
JScript Panel v2.1.0.2 (Top Panel): initialised in 22 ms
JScript Panel v2.1.0.2 (Lib Panel): initialised in 24 ms
JScript Panel v2.1.0.2 (Youtube Panel): initialised in 29 ms
JScript Panel v2.1.0.2 (Thumbs): initialised in 30 ms
JScript Panel v2.1.0.2 (Last.fm Bio by marc2003): initialised in 29 ms
JScript Panel v2.1.0.2 (Cover Panel): initialised in 20 ms
JScript Panel v2.1.0.2 (Info Panel): initialised in 25 ms
JScript Panel v2.1.0.2 (Last.fm Artist Info/User Charts/Recent Tracks by marc2003): initialised in 65 ms
JScript Panel v2.1.0.2 (Playlist): initialised in 41 ms
JScript Panel v2.1.0.2 (Playback Panel): initialised in 21 ms
JScript Panel v2.1.0.2 (Bottom Panel): initialised in 27 ms
JScript Panel v2.1.0.2 (UltraMini Panel): initialised in 26 ms
User Interface initialized in: 0:00.876147
Processing commandline
initquit::init entry
Loading
Machine specifications:
OS: Windows 10.0.16299 x64
CPU: Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz, features: MMX SSE SSE2 SSE3 SSE4.1 SSE4.2
CPU threads: 4
Audio: OUT (DUO-CAPTURE EX)
Hm my foobar crashes on start after installing that.
Updating fb2k to the latest beta 11 should solve your crashes ;)
It did, thanks.
Looking really good so far.
Just one question: How does the original release date work? Does it need a specific tag? That looks quite useful.
Just one question: How does the original release date work? Does it need a specific tag? That looks quite useful.
It uses "ORIGINAL RELEASE DATE" field, which takes values from TORY and TDOR meta-tags (see http://wiki.hydrogenaud.io/index.php?title=Foobar2000:ID3_Tag_Mapping). So if you want to use it, you have to set TORY or TDOR meta-tag.
Version: 4.2.0b
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.2.0b
Changelog:Changed
- Updated @WilB's Library Tree to v1.401 (bugfix (https://hydrogenaud.io/index.php/topic,111060.msg954850.html#msg954850)).
It uses "ORIGINAL RELEASE DATE" field, which takes values from TORY and TDOR meta-tags (see http://wiki.hydrogenaud.io/index.php?title=Foobar2000:ID3_Tag_Mapping). So if you want to use it, you have to set TORY or TDOR meta-tag.
I tried a few tags but can't get it to work. Am I missing something?
Also is there a good way to automatically tag things with orginal year included?
(https://i.imgur.com/GSfpYqK.png)
I tried a few tags but can't get it to work. Am I missing something?
Yep, it seems my understanding of this metatag is lacking, I will test it more thoroughly now and will write a better description.
Also is there a good way to automatically tag things with orginal year included?
Dunno =)
There are probably tools to automate this, but this feature was done on request (i.e. I don't use this tag in my library), so...
[EDIT] Oookaaaay... So, I've researched a bit: if you are editing tags from fb2k, you should use ORIGINAL RELEASE DATE meta tag name. This field maps to the source file tags as mentioned here: http://wiki.hydrogenaud.io/index.php?title=Tag_Mapping#Dates
PS: Mp3Tag equivalent is ORIGYEAR
Alright ORIGINAL RELEASE DATE works for both mp3 and flac, meaning it shows in the playlist. ORIGYEAR doesn't for me.
Anyway that works for me. Thanks for getting rid of yet another slight annoyance for me =)
ORIGYEAR doesn't for me.
By Mp3Tag I meant this program: https://www.mp3tag.de
For tagging done in fb2k ORIGINAL RELEASE DATE must be used (as you did)
Thanks for getting rid of yet another slight annoyance for me =)
Yw =)
Many thanks for your work with this awesome theme.
Could it be possible to add Replay Gain information (album header or per file, dunno)? I recently noticed some files with very low volume and I realized that the issue was that they had a replaygain tag, but I figured it out by accident.
Thanks
Many thanks for your work with this awesome theme.
Could it be possible to add Replay Gain information (album header or per file, dunno)? I recently noticed some files with very low volume and I realized that the issue was that they had a replaygain tag, but I figured it out by accident.
Thanks
Actually, %replaygain_album_gain% is already present in grouping header :P
Example:
(https://i.imgur.com/DGLQMGO.png)
Then I don't know what happened :-[
Thanks!
Version: 4.2.1
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.2.1
Changelog:Changed
- Updated @WilB's scripts:
- Library Tree v1.4.0.2 (new features! (https://hydrogenaud.io/index.php/topic,111060.msg955697.html#msg955697)).
- YouTube Track Manager v3.9.5.2 (bug (https://hydrogenaud.io/index.php/topic,111059.msg955695.html#msg955695)fix (https://hydrogenaud.io/index.php/topic,111059.msg955738.html#msg955738)).
- Compiled latest foo_jscript_panel with extensions (v2.1.1).
Fixed
- Fixed various bugz with player window when it's maximized.
So, this is slightly tangential to the purpose of this thread, but I need some help ripping off your shit ;)
I finally decided I needed to switch from my version of Catrox's playlist circa 2013 to your version, after trying out your theme and seeing how silky smooth everything operated. Really awesome work, and the code is a billion times cleaner. So I copied all the code from your playlist panel, and tried to cram it into my theme.
My theme is just a single JScript panel, with no PSS's to be found. Your playlist assumes that it will take up the entire space of a panel. It wasn't too much work to shrink the playlist to the appropriate size in on_size, but now positioning it is turning out to be a pain in the ass.
(https://i.imgur.com/XKzFaNa.png)
It looks like PlaylistManager and Playlist both get initialized with x/y set to 0, but it doesn't look like there's a way to reposition them after creation, and when I try to hack it in the on_size, things go terribly wrong.
Do you have any ideas here? I'll keep plugging away at it, but at the moment I'm not making much progress on this front.
Edit: One other thing you might be able to help with. Everytime I update the playlist (i.e. due to a on_playlist_XXXX event) I get a crash in this.init_rows Fixed this. Hadn't deleted my Row constructor O:)
Nevermind. Took me about 4 hours, and some head to desk, but I finally got it.
In PlaylistPanel.on_size(), I had to calculate what the x,y,w,h should be based on ww, wh, then set all of those properties.
I had to modify Playlist.on_size to accept the new properties, and pass them along to List:
this.on_size = function (w, h, x, y) {
List.prototype.on_size.apply(this, [w, h, x, y]);
this.x = x;
this.y = y;
this.h = h;
this.w = w;
was_on_size_called = true;
this.reinitialize();
};
I think the only changes I made to Control_list.js were:
List.prototype.on_size = function (w, h, x, y) {
var w_changed = this.w !== w || this.x !== x;
var h_changed = this.h !== h || this.y !== y;
if (h_changed) {
this.y = y;
this.on_h_size(h);
}
if (w_changed) {
this.x = x;
this.list_x = this.x + g_properties.list_left_pad;
this.on_w_size(w);
}
};
I saw you had some comments in initialize_rows about array[ i] being a lot faster, but I noticed you didn't maximize your gains. Using direct index instead of .push ought to show noticeable savings on really large playlists as it's twice as fast in modern browsers. I'd expect IE9's difference might even be more pronounced.
function initialize_rows(playlist_items, playlist_size) {
// Magic! For some reason using array[i] instead of IFbMetadbHandleList.Item(i) greatly increases performance :\
var playlist_items_arr = [];
for (var i = 0; i < playlist_size; ++i) {
playlist_items_arr[i] = playlist_items.Item(i);
}
var rows = [];
for (var i = 0; i < playlist_size; ++i) {
rows[i] = new Row(that.list_x, 0, that.list_w, that.row_h, playlist_items_arr[i], i, cur_playlist_idx);
if (!g_properties.show_header) {
rows[i].is_odd = (i + 1) % 2;
}
}
return rows;
}
I saw you had some comments in initialize_rows about array[ i] being a lot faster, but I noticed you didn't maximize your gains. Using direct index instead of .push ought to show noticeable savings on really large playlists as it's twice as fast in modern browsers. I'd expect IE9's difference might even be more pronounced.
Welp, dunno about twice the performance, but it did yield me 10-15% in rows initialization speed and 6.5-7% in total playlist initialization speed, thanks!
PS: See https://stackoverflow.com/questions/614126/why-is-array-push-sometimes-faster-than-arrayn-value, i.e. it's not always viable to replace push() with [idx] =)
Nevermind. Took me about 4 hours, and some head to desk, but I finally got it.
Congrats =) But, IMO, you should've added this to PlaylistPanel instead (+ pass the x,y to the PlaylistManager and Playlist ctors).
Adding 'Disc' separator Row (like you did in your theme) won't be that simple though...
Also there is another problem: playlist's bottom part is cropped by the panel in my theme. Since you don't have that you'll have to crop it yourself somehow.
Additionally, FontAwesome is needed for some icons (like the Lock icon above the scrollbar).
Fell free to ask if you have any further questions about the script ;)
Welp, dunno about twice the performance, but it did yield me 10-15% in rows initialization speed and 6.5-7% in total playlist initialization speed, thanks!
Awesome! I meant just the insert to the array was 2x over .push. I'm pleasantly surprised the gains were that big (I didn't have time to test last night). Figured it would definitely be noticeable on 1-2k entry playlists.
Congrats =) But, IMO, you should've added this to PlaylistPanel instead (+ pass the x,y to the PlaylistManager and Playlist ctors).
Adding 'Disc' separator Row (like you did in your theme) won't be that simple though...
Also there is another problem: playlist's bottom part is cropped by the panel in my theme. Since you don't have that you'll have to crop it yourself somehow.
Additionally, FontAwesome is needed for some icons (like the Lock icon above the scrollbar).
Fell free to ask if you have any further questions about the script ;)
I mistyped. I added it to the PlaylistPanel.on_size, and not Playlist.on_size. I'm nervous about the disc separator, but I'm also determined, so we'll see how it goes :D
I solved the cropping problem last night. You were already using a clipImg (which wasn't being clipped 8) ) so I updated Playlist.on_paint to have this code:
if (this.items_to_draw.length) {
var that = this;
_.forEachRight(this.items_to_draw, function (item) {
item.draw(gr, that.y, that.y + that.h);
}, that);
Then I have Header.draw call those two variables top and bottom, and threw this code at the very bottom of Header.draw_normal_header():
clipImg.ReleaseGraphics(grClip);
var y = this.y;
var h = this.h;
var srcY = 0;
if (this.y < top) {
y = top;
h = this.h - (top - this.y);
srcY = this.h - h;
} else if (this.y + this.h > bottom) {
h = bottom - this.y;
}
gr.DrawImage(clipImg, this.x, y, this.w, h, 0, srcY, this.w, h, 0, 255);
clipImg.Dispose();
The individual rows don't draw to a clip image, so no way to clip the top and bottom rows, but your code is already set up to cover up rows if the list has some spacing around it, so I just used that.
BTW, my To-Do list is:
- Disc header rows - maybe special case of Row, or a new DiscHeader object, can't decide yet
- Caching artwork on playlist refresh to avoid reloading images
- playlist_info to bottom of window - I might hate how this ends up looking
- Various cosmetic stuff you probably won't care about
To avoid spamming up this thread, are you interested in the first three at all? It might be a little hard for me to do PRs in github since I've changed a few things that I know you DON'T want in the main branch, but I can at least open issues and share code snippets there if you prefer. I can also continue pasting stuff here if you like, or just STFU. :) Let me know what you want.
BTW, my To-Do list is:
- Disc header rows - maybe special case of Row, or a new DiscHeader object, can't decide yet - actually I've wanted to implement it myself =)
- Caching artwork on playlist refresh to avoid reloading images - the idea is nice, but it all depends on the implementation (I'm not a fan of quick and dirty solutions =) )
- playlist_info to bottom of window - I might hate how this ends up looking - this won't be compatible with my theme's looks, so that's a no
To avoid spamming up this thread, are you interested in the first three at all? It might be a little hard for me to do PRs in github since I've changed a few things that I know you DON'T want in the main branch, but I can at least open issues and share code snippets there if you prefer. I can also continue pasting stuff here if you like, or just STFU. :) Let me know what you want.
New feature suggestions or suggestions about modifying the existing ones are fine here, I think.
@MordredKLB : I'll try to implement artwork caching
After a lot of thinking, I went with the simpler solution of making discHeader just a special case of Row. I'm not entirely happy with this, but the interaction with Header got complicated, and it allowed me to handle one special case really well.
function initialize_rows(playlist_items, playlist_size) {
// Magic! For some reason using array[i] instead of IFbMetadbHandleList.Item(i) greatly increases performance :\
var playlist_items_arr = [];
for (var i = 0; i < playlist_size; ++i) {
playlist_items_arr[i] = playlist_items.Item(i);
}
var rows = [];
var disc, lastDisc = '';
var tfo = fb.TitleFormat('$ifgreater(%totaldiscs%,1,,false)[' + tf.disc_subtitle + ']');
var disc_group = fb.TitleFormat('%album artist% %album% %edition% %discnumber%' + tf.disc_subtitle);
for (var i = 0; i < playlist_size; ++i) {
discHeader = false;
if (tfo.EvalWithMetadb(playlist_items_arr[i]) !== 'false') {
disc = disc_group.EvalWithMetadb(playlist_items_arr[i]);
if (disc != lastDisc) {
discHeader = true;
lastDisc = disc;
}
}
rows[i] = new Row(that.list_x, 0, that.list_w, discHeader ? that.row_h * 2 : that.row_h, playlist_items_arr[i], i, cur_playlist_idx, discHeader);
if (!g_properties.show_header) {
rows[i].is_odd = (i + 1) % 2;
}
}
_.dispose(tfo);
_.dispose(disc_group);
return rows;
}
So discHeaders are a row that's double height, and in the Row.draw I just check for the discHeader flag, and adjust what and where I draw the text. This solution handles multi-disc releases with and without subtitles, single disc releases with a subtitle (I just don't show the Disc 1 in that case), and if for example, I've got a single disc reissue which combines multiple releases, I can just tag tracks 10-15 with a discsubtitle of "1985 Demo" and the header will show in the middle of the track list which is what I want.
The one problem with doing this is that it almost doubles the speed of initialize_rows, although I can still load 30k entries in <700ms which seems acceptable. I also think that's a problem even creating a DiscHeader object type would still run into because you're going to be forced to do a bunch of TF queries. The other problem is that I can't think of a "clean" way to get the run time of the individual disc, something that would be much simpler with DiscHeader.
Well, I didn't think this thoroughly yet, but I wanted disc sub-header to be something like grouping header, i.e. selecting entirety of one disc, when clicked on, maybe collapsible and surely 100% optional. The actual implementation idea is yet to form, but we'll see how it goes...
No, of course. Like I said, I went for the simplest solution at the moment. Doing it my way, I miss out on collapsible/selectable functionality which would be great to have... and it's much uglier if you want it disabled or if you're already grouping by discnumber.
I also ultimately decided that this early in my theme development I didn't want to drift too far from your main branch if I could help it :)
Just now though I did have another idea of how to approach this as it's own item when the groups are being created, so I might give this another pass and see how difficult it is.
So I'm trying to implement DiscHeaders using the new BaseHeader stuff, but I'm running into some issues with interactions with sub_items and iterate_level() inside generate_all_items_to_draw().
I'm doing my DiscHeaders inside Headers' initialize_items() method. This allows me to create them in one pass which seemed far more efficient than my old method. It works so long as I don't have to scroll or calculate what to draw:
Here's my code:
this.initialize_items = function (rows_to_process) {
this.sub_items = [];
if (!rows_to_process.length) {
return 0;
}
var rows_processed = 0;
var disc_header = undefined;
var header = this;
var num_disc_headers = 0;
var query = grouping_handler.get_query();
var tfo = fb.TitleFormat(query ? query : ''); // workaround a bug, because of which '' is sometimes treated as null :\
var disc_tfo = fb.TitleFormat('$ifgreater(%totaldiscs%,1,%discnumber%,)[%discsubtitle%]');
var disc_group = disc_tfo.EvalWithMetadb(_.head(rows_to_process).metadb);
if (disc_group.length) {
disc_header = new DiscHeader(this.x, 0, this.w, g_properties.row_h, _.head(rows_to_process).metadb, 0);
disc_header.parent = this;
disc_header.is_odd = true;
disc_header.idx_in_header = num_disc_headers++;
disc_header.idx = 0;
header = disc_header;
this.sub_items.push(disc_header);
}
var group = tfo.EvalWithMetadb(_.head(rows_to_process).metadb);
_.forEach(rows_to_process, _.bind(function (item, i) {
var cur_group = tfo.EvalWithMetadb(item.metadb);
if (group !== cur_group) {
return false;
}
var cur_disc = disc_tfo.EvalWithMetadb(item.metadb);
if (cur_disc !== disc_group) {
disc_group = cur_disc;
if (disc_header) {
disc_header.initialize_items(disc_header.sub_items);
}
disc_header = new DiscHeader(this.x, 0, this.w, g_properties.row_h, item.metadb, 0);
disc_header.parent = this;
disc_header.idx_in_header = i + num_disc_headers++;
disc_header.idx = num_disc_headers;
header = disc_header;
this.sub_items.push(disc_header);
}
item.idx_in_header = i + num_disc_headers;
if (g_properties.show_header) {
item.is_odd = !(i & 1);
}
item.parent = header;
header.sub_items.push(item);
rows_processed++;
}, this));
if (disc_header) {
disc_header.initialize_items(disc_header.sub_items);
}
_.dispose(tfo);
_.dispose(disc_tfo);
metadb = _.head(this.sub_items).metadb;
return rows_processed;
};
Here's my confusion. What do idx and idx_in_header mean for DiscHeaders? Say I've got the following layout:
Header1
* DiscHeader1
- - Row1
- - Row2
* DiscHeader2
- - Row3
Does the Header1 just have two sub_items (DiscHeader1 and 2) or does it have 5? DiscHeader1 presumably has two sub_items, right? Does Row3's idx_in_header referring to DiscHeader2 or Header? i.e. is does Row3 have idx_in_header = 0, 3, or 5?
I coded this assuming that Header1 would have two sub_items, and DiscHeader1 would also have two sub_items, but something isn't working right (or I've got a bug I haven't spotted).
Here's my confusion. What do idx and idx_in_header mean for DiscHeaders? Say I've got the following layout:
Header1
* DiscHeader1
- - Row1
- - Row2
* DiscHeader2
- - Row3
Does the Header1 just have two sub_items (DiscHeader1 and 2) or does it have 5? DiscHeader1 presumably has two sub_items, right? Does Row3's idx_in_header referring to DiscHeader2 or Header? i.e. is does Row3 have idx_in_header = 0, 3, or 5?
I coded this assuming that Header1 would have two sub_items, and DiscHeader1 would also have two sub_items, but something isn't working right (or I've got a bug I haven't spotted).
For BaseHeader derived objects idx field contains the position of the object in the parent's sub_items field.
For Row objects idx contains a track's index in playlist instead. So idx_in_header is used to deduce it's position in parent. I.e. only Row objects have idx_in_header field.
sub_items hierarchy:
PlaylistContent.sub_items = [
Header1.sub_items = [
* DiscHeader1.sub_items = [
- - Row1
- - Row2
];
* DiscHeader2.sub_items = [
- - Row3
];
];
];
Index enumeration:
Header1 | idx: 0
* DiscHeader1 | idx: 0
- - Row1 | idx_in_header: 0, idx: 0
- - Row2 | idx_in_header: 1, idx: 1
* DiscHeader2 | idx: 1
- - Row3 | idx_in_header: 0, idx: 2
Thanks for the info, updated my DiscHeader initialization accordingly.
You've got a bug in all three instances of your iterate_level code. Took me a while to find it, but basically you can remove every assignment of:
var is_next_level_row = ...
and then replace all 3 lines that are
if (!is_next_level_row) {
with
if (_.isInstanceOf(_.head(header.sub_items), BaseHeader)) {
That'll get you iterating through every BaseHeader, and not just if the current BaseHeader's children are rows. Once I made the change magically everything started working.
Once I made the change magically everything started working.
Not really magically, since I've tested the code with some dummy nested headers =)
Actually I've wanted to make this change at one point of the time, but kinda forgot >_<
But thanks for pointing it out ;)
NP! There's still one issue with nested headers in the following case:
Header
- Row 0
- Row 1
- DiscHeader 0
- - Row 2
Your code as written will show DiscHeader0, but never draw any of its children. I've created a fix for it in generate_all_items_to_draw(), but for reasons I haven't fully debugged yet, if DiscHeader 0 is the first row to draw (due to scrolling) then nothing else in the playlist draws outside that DiscHeader. I should hopefully have a fix for that later today or tonight and I can share the code. This stuff can get complex! :D
Found a crash in QueueHandler. If I enqueue something from a filter, and then change filters, the PlaylistItemIndex of the first item is -1 (not found) and cur_queued_row is undefined, and we crash trying to reference it's queue_idx.
Inside queue_contents.forEach first lines should be:
if (queued_item.PlaylistIndex !== cur_playlist_idx || queued_item.PlaylistItemIndex === -1) {
return;
}
Inside queue_contents.forEach first lines should be:
if (queued_item.PlaylistIndex !== cur_playlist_idx || queued_item.PlaylistItemIndex === -1) {
return;
}
Thanks! Never would've caught that one, since I use only static playlists =)
Okay, this one's kind of a doozy. I was able to fix the draw issue with a Header whose sub_items consists of Rows, and then a BaseHeader with its own Rows. Unfortunately the code was really unmanageable, so I took a step back and rewrote generate_all_items_to_draw(), and managed to cut iterate_levels in half, and the code is a lot more intuitive IMO. No more checking isInstanceOf, no more iterating through header_rows.sub_items individually... just find the header of first_item, then start at that header, and loop through all its sub_items, and siblings until cur_y > playlist height.
function generate_all_items_to_draw(wy, wh, first_item) {
var items_to_draw = [first_item];
var cur_y = first_item.y + first_item.h;
var done = false;
var start_item_found = false;
var first_item_header = first_item;
while (first_item_header && first_item_header.parent !== _.head(that.sub_items).parent) {
first_item_header = first_item_header.parent;
}
/**
*
* @param {Array<BaseHeader>|Array<Row>} sub_items
* @param {Row|BaseHeader} start_item
* @return {boolean} true, if start_item was used
*/
function iterate_level(sub_items, start_item) {
var start_idx = 0;
if (first_item_header) {
start_idx = first_item_header.idx;
first_item_header = null;
}
for (var i = start_idx; i < sub_items.length; i++) {
var item = sub_items[i];
if (start_item_found) {
item.set_y(cur_y);
items_to_draw.push(item);
cur_y += item.h;
}
if (item === start_item) {
start_item_found = true;
}
if (cur_y >= wy + wh) {
done = true;
break;
}
if (item.is_collapsed) {
continue;
}
if (item.sub_items && item.sub_items.length) {
done = iterate_level(item.sub_items, start_item);
if (done) {
break;
}
}
}
return done;
}
iterate_level(that.sub_items, first_item);
return items_to_draw;
}
I was feeling pretty good, and set out to rewrite generate_first_item_to_draw(), but my result was 10x-20x slower on very large playlists, and had to be scrapped. This means there's a "bug" in the Rows before BaseHeader case where the sub_items of BaseHeader can never be set as first_item_to_draw. I can't think of a way around this. It ought to be a really uncommon use case (mainly bad tagging) so I'm happy to live with it, but if you can figure out a way to target those rows without iterating through every. single. item. in the list, then you're a better programmer than I am.
Okay, this one's kind of a doozy. I was able to fix the draw issue with a Header whose sub_items consists of Rows, and then a BaseHeader with its own Rows.
I'm not sure what draw issues are you talking about: I've just implemented a quick and dirty CD subheader and it works without any bugs :\
See https://github.com/TheQwertiest/CaTRoX_QWR/commit/382f2ee14043d8a57fb69e7ee237c4b2ef285f61
just find the header of first_item, then start at that header, and loop through all its sub_items, and siblings until cur_y > playlist height.
...
It ought to be a really uncommon use case
That is not really a performance-friendly solution: what if a header has a lot of items? Don't forget that header query is customizable, so it might not have any relation to artist, album name or cd number (i.e. it might have nothing to do with bad tagging).
You are correct, though, in that it might be possible to simplify iterator by collapsing Row iteration into the generic iteration.
Yours works without bugs because you ensure that if a Header has a TestHeader, then ALL of it's sub_items are TestHeaders. My code doesn't make the same assumption, mainly because I add DiscHeaders when I encounter a different %disc_subtitle% tag, and I prefer not to show a DiscHeader in the single disc case. e.g.: https://i.imgur.com/7K5C6Bm.png
I do this by building out DiscHeaders in the Header.initialize_items meaning I only need to make a single pass through every item in the playlist, where yours will make two passes. Performance wise I feel that's a bigger concern than if people are grouping things in dumb ways :)
I'm thinking now that it may not be worth the trouble though and I should follow your method of enforcing all sub_items to be the same type. Your initialization is cleaner than mine, and you can make smarter assumptions in that case.
Yours works without bugs because you ensure that if a Header has a TestHeader, then ALL of it's sub_items are TestHeaders.
Well, yeah =)
https://github.com/TheQwertiest/CaTRoX_QWR/blob/84c17d9d393be36d29838f7ca56bcca71d82c7a8/theme/Scripts/Panel_Playlist.js#L2932
I do this by building out DiscHeaders in the Header.initialize_items meaning I only need to make a single pass through every item in the playlist, where yours will make two passes. Performance wise I feel that's a bigger concern than if people are grouping things in dumb ways :)
It's just a quick mock-up (thus the 'TestHeader' class name), so it's initialization code is not optimal as well. Also see https://github.com/TheQwertiest/CaTRoX_QWR/commit/08665c72ab48008df280459a10be200f60cae69b
I prefer not to show a DiscHeader in the single disc case. e.g.: https://i.imgur.com/7K5C6Bm.png
...
I'm thinking now that it may not be worth the trouble though and I should follow your method of enforcing all sub_items to be the same type.
I don't see any reason for sub_items elements not to have the same type. If you have some tracks in the Header that do not have CD#, but all other tracks in that Header do, then, IMO, it's much cleaner UI-wise to give those untagged tracks a fake CD sub-header (like it is done in my mock-up implementation), since it will be hard to visually separate those track groups from each other otherwise (e.g. CD-numbered track group followed by unnumbered track group). Also, I think that such scenario is exactly the case of bad-tagging :P
I don't see any reason for sub_items elements not to have the same type. If you have some tracks in the Header that do not have CD#, but all other tracks in that Header do, then, IMO, it's much cleaner UI-wise to give those untagged tracks a fake CD sub-header (like it is done in my mock-up implementation), since it will be hard to visually separate those track groups from each other otherwise (e.g. CD-numbered track group followed by unnumbered track group). Also, I think that such scenario is exactly the case of bad-tagging :P
Haha, whether it was caused by bad tagging or was done intentionally, I was trying to handle it properly! Also, from a UI/UX perspective, I don't think there's any difficulty visually separating those groups in the screen shot I posted, but to each their own. :)
I think what I'm going to do is follow the TestHeader model for my DiscHeaders, and create fake DiscHeaders in the outlier case (in 2500 albums I think I have 5 or 6 that I want displayed this way), but flag them with a .do_not_draw property and then skip entries with that flag in the various iterate_levels.
In other experiments, I spent last night and this morning working on creating "hyperlinks" in the Header. I've got it working so I can click on Year and Artist to load a playlist with just albums with that Year or Artist. I'm planning on doing album and record labels as well. It's been kind of a pain in the ass because I've had to reimplement a bunch of on_mouse_ methods for Header, but it's starting to come together.
Hello,
I'm using an alternative font rendering engine on windows and was wondering why it doesn't apply to anything except for library tree and lyrics panel on your skin. It works okay on another skin that is purely jscript.
I'm using an alternative font rendering engine on windows and was wondering why it doesn't apply to anything except for library tree and lyrics panel on your skin. It works okay on another skin that is purely jscript.
Well, all of the fonts I'm using in the theme are hard-coded (Segoe UI usually), so fb2k settings (and consequently Windows settings) do not affect the theme.
The only way to use custom fonts is to change them manually in the script files (most of the fonts are defined on the top of the script).
I've changed the font to a different one, but the rendering engine hasn't. Well, I guess the problem may be elsewhere. Thanks anyway. :)
I've changed the font to a different one, but the rendering engine hasn't. Well, I guess the problem may be elsewhere. Thanks anyway. :)
JScriptPanel uses GDI to render fonts. Maybe you're using something else in windows, but unless it replaces GDI the engine somehow, it won't change how fonts render in JScript.
I'm assuming that when you change fonts in the script, they actually do update to the new font. If they aren't you might not be entering the font name correctly (this can be a pain in the ass to figure out), or maybe you don't have the fonts you think you do installed. You can use utils.CheckFont(fontName) to make sure the fonts are actually being loaded correctly.
Found a crash in QueueHandler. If I enqueue something from a filter, and then change filters, the PlaylistItemIndex of the first item is -1 (not found) and cur_queued_row is undefined, and we crash trying to reference it's queue_idx.
Inside queue_contents.forEach first lines should be:
if (queued_item.PlaylistIndex !== cur_playlist_idx || queued_item.PlaylistItemIndex === -1) {
return;
}
QueueHandler crashed for me again today: "Unable to set property 'queue_idx' of undefined or null reference". Not sure how it got past those two checks though, and I haven't been able to reproduce since.
I did however run into another issue once where I'm in one playlist, I change playlists using foo_http_control, and then enqueue a song foo_http_control, and it ends up enqueuing songs from the first playlist. I think somewhere cur_playlist_idx may not be being set properly. This is also something I can't reliably reproduce, but I know I've seen it at least once before. (might also be a problem with foo_http_control?)
QueueHandler crashed for me again today: "Unable to set property 'queue_idx' of undefined or null reference". Not sure how it got past those two checks though, and I haven't been able to reproduce since.
I did however run into another issue once where I'm in one playlist, I change playlists using foo_http_control, and then enqueue a song foo_http_control, and it ends up enqueuing songs from the first playlist. I think somewhere cur_playlist_idx may not be being set properly. This is also something I can't reliably reproduce, but I know I've seen it at least once before. (might also be a problem with foo_http_control?)
Hm... Most likely, both of these issues are caused by playlist not being changed (i.e. initialize_list method was not called). Dunno how that happens though. You may try making several playlists of different sizes - e.g. one with a single track, the other with more tracks - and switch between them while selecting the last item in the playlist. Ideally it should trigger the error much more often. If you manage to cause it more or less consistently, then we can move with investigating the logs (which can be turned on by trace_call variable).
I've changed the font to a different one, but the rendering engine hasn't. Well, I guess the problem may be elsewhere. Thanks anyway. :)
JScriptPanel uses GDI to render fonts. Maybe you're using something else in windows, but unless it replaces GDI the engine somehow, it won't change how fonts render in JScript.
I'm assuming that when you change fonts in the script, they actually do update to the new font. If they aren't you might not be entering the font name correctly (this can be a pain in the ass to figure out), or maybe you don't have the fonts you think you do installed. You can use utils.CheckFont(fontName) to make sure the fonts are actually being loaded correctly.
The font itself changed for sure. The thing is that any other program that I use doesn't have this problem. Yeah, it changes the rendering of GDI. What I noticed is that if using elplaylist and the text is displayed using $drawstring the rendering doesn't change. However, if changed to $drawtext it's okay. I don't know whether that has any meaning in that case, though.
What I noticed is that if using elplaylist and the text is displayed using $drawstring the rendering doesn't change. However, if changed to $drawtext it's okay. I don't know whether that has any meaning in that case, though.
It probably has: DrawString uses GDI+ rendering engine, while DrawText uses GDI. So, if your "engine substitution" only affects GDI, it won't affect DrawString.
My theme uses DrawString exclusively (for better ClearType hinting), while Library Tree script uses DrawText, which may explain the discrepancy you are experiencing.
That's exactly it. I've just changed drawstring to gdidrawtext and it renders properly. Unfortunately the text is misaligned now.
That's exactly it. I've just changed drawstring to gdidrawtext and it renders properly. Unfortunately the text is misaligned now.
Yea, since the text width in the theme is measured with MeasureString (GDI+). You'll have to replace it with CalcTextWidth (GDI). Additionaly, you'll have to replace all StringFormat flags with corresponding GDI flags.
Well, since I'm not that knowledgeable and the skin is out of order after changing MeasureString, I'll call it a day and use it day that probably.
Version: 4.3.0
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v4.3.0
Changelog:Added
- Playlist Panel:
- Added disc sub-headers: see example (https://i.imgur.com/QY86QbF.png).
- Art images are now cached: no more needless image reloading after every little action.
- Added foo_enhanced_playcount support: `$max(%play_count%, %lastfm_play_count%)` query is used to get track play count.
Changed
- Playlist Panel:
- Increased playlist initialization speed by 30% (thanks to marc2k3 (https://github.com/marc2k3))!
- Swapped rating and duration positions in rows.
- Corrected query for album sub-title: standard `%subtitle%` instead of non-standard `%albumsubtitle%`.
- Updated theme.fcl:
- Added new script files.
- Changed default Playlist panel properties.
- Compiled latest foo_jscript_panel with extensions (v2.1.4).
Fixed
- Playlist Panel:
- Fixed bug: art images were loaded even with headers disabled.
- Fixed bug: changing grouping preset in one player mode was not always affecting grouping preset in other mode.
- Fixed various display glitches with multiline tags.
- Art Mode:
- Fixed right-click menu handling.
Special thanks to
@MordredKLB for disc sub-headers and art image cache ideas!
New feature suggestions or suggestions about modifying the existing ones are fine here, I think.
Can I suggest new feature? ;D Maybe there is someone else besides me who wants to have a button to fast switch playback output device. It would be very handy for portable version using on multiple machines with different sound hardware. Thanks.
Can I suggest new feature? ;D Maybe there is someone else besides me who wants to have a button to fast switch playback output device. It would be very handy for portable version using on multiple machines with different sound hardware. Thanks.
Could you elaborate it a bit, like should it just cycle between all available output devices?
I get the black blocks after the last song has played. Is that how it's supposed to be?
... Is that how it's supposed to be?
Nope =)
I'll try to reproduce it and fix in the next release. Thanks for the report!
PS: For some reason or another I practically never ever reach the end of the playlists >_<
I haven't investigated this at all, but I realized yesterday that in my version of your playlist panel, if I select multiple songs and hit CTRL+Q to enqueue, it won't enqueue them all. Does that work correctly for you? There's a high probability I broke something, but I'm not at home this weekend to check.
I checked today and it's present in your code as well. You completely ignore any en/dequeue of items if more than one row is selected.
To fix it, I added a get_selected_items method to SelectionHandler that just returns selected_items, and then I updated the key_handler code for "VKEY_Q" to be:
if (modifiers.ctrl && modifiers.shift) {
queue_handler.flush();
}
else if (selection_handler.selected_items_count() >= 1) {
var rows = this.cnt.rows;
if (modifiers.ctrl) {
indexes = selection_handler.get_selected_items();
indexes.forEach(function (idx) {
queue_handler.add_row(rows[idx]);
});
}
else if (modifiers.shift) {
indexes = selection_handler.get_selected_items();
indexes.forEach(function (idx) {
queue_handler.remove_row(rows[idx]);
});
}
}
I haven't investigated this at all, but I realized yesterday that in my version of your playlist panel, if I select multiple songs and hit CTRL+Q to enqueue, it won't enqueue them all. Does that work correctly for you? There's a high probability I broke something, but I'm not at home this weekend to check.
This is not a bug, but actually intentional: queue size is rather small, so it can't always hold all the selected items. So, rather then trying to guess which of those items should be put in queue and which should be discarded, I decided to enforce a sinqle item addition rule to the queue.
Ahhh. Didn't realize there was a queue size limit. I think I'll play around with it and just prevent adding items after reaching the cap.
Looks like playcount statistic doesn't work correctly. The counter increases only when one minute of the song passes. Is it possible to change the behavior of counter to increase it immediately when song starts playing?
Looks like playcount statistic doesn't work correctly. The counter increases only when one minute of the song passes. Is it possible to change the behavior of counter to increase it immediately when song starts playing?
foo_playcount is the component that handles counting plays of songs. It increments the count when 1 minute of the song has elapsed. That time is not user configurable. You'd have to find a different component or use your own custom playcount field that you increment manually when starting a song.
increment manually
Is it a joke?
Is it a joke?
I meant "programmatically." It was late and I was thinking it could be done in jscript_panel in an on_playback_new_track callback, but jscript can't actually write tags. It might be doable in foo_customdb using your own playcount field, but outside that or finding another playcount component, you'd have to write your own.
Is it a joke?
I meant "programmatically." It was late and I was thinking it could be done in jscript_panel in an on_playback_new_track callback, but jscript can't actually write tags. It might be doable in foo_customdb using your own playcount field, but outside that or finding another playcount component, you'd have to write your own.
JScript Panel has its own Playback Stats that you could possibly add.
https://github.com/marc2k3/foo_jscript_panel/wiki/Playback-Stats
That'd work. I forgot marc did his own index-db for playcount stuff.
Drag'n'drop still doesn't work the same as in original Catrox theme???
Hello. I had a problem installing this assembly. Installation made completely according to the instructions. However, when you first start the next assembly, an error occurs.
Error: JScript Panel v2.1.4 (Top Panel)
Ошибка выполнения JavaScript:
Недопустимый вызов или аргумент процедуры
File: E:\Foobar2000\Someone_else's_assembly\Catrox\\themes\CaTRoX\Scripts\Panel_Top.js
Line: 440, Col: 5
<source text only available at compile time>
The artist art is broken in the bio tab for me, is there any fix? Also thanks for the great theme.
It will be fixed once SMP re-release is ready (sorry no ETA yet).
Gotcha thanks for the update.
Hi. First thanks for sharing this great skin for foobar2000. I finally changed the player (I used the old winamp before until now!!). I have a doubt, how can I change the order of the header that appears in the capture? I want to put the artist where the album is and vice-versa on playlists ... Thanks again and sorry for my english, im from Spain.
Other question is... when i click on the magnifying glass icon at the corner, nothing happens. Where is the youtube/chrome launching configuration for make it work?
Ok. i find the solution for LP headers. Right click on playlist, /Grouping/Manage Presets and change the location of variables from Title Query to Sub-Title Query.
Now i only need make works the magnifying glass icon, dont see the icon on preferences/configuration Layout, and his possible function...
I'm reading the documentation now. Sorry for waste your time ::) .
Other question is... when i click on the magnifying glass icon at the corner, nothing happens. Where is the youtube/chrome launching configuration for make it work?
You have to change foo_youtube language to english for the button to work: Preferences > Tools > Youtube Source > Maintenance > User Interface > Language .
Other question is... when i click on the magnifying glass icon at the corner, nothing happens. Where is the youtube/chrome launching configuration for make it work?
You have to change foo_youtube language to english for the button to work: Preferences > Tools > Youtube Source > Maintenance > User Interface > Language .
Can't make it work. Changed the language option and nothing happens. Do you know what I have to do, to make that button work as a in-playlist search engine?
i have added splitter i script setting but doesn't show any button ...
I want to give my thanks to the creator of this theme. I use it every day. Very useful the three modes!!. Thanks again!!
Can't make it work.
If you are using latest foo_youtube version than you have to fix the context menu path:
Panel_Top.js:
fb.RunMainMenuCommand('View/Youtube Source/Search on Youtube')
change to
fb.RunMainMenuCommand('View/Youtube Source/Search on Site')
Just registered to say thank you. But seems there is some bug, or maybe I installed something incorrectly? pic (https://i.imgur.com/qUVX7YZ.png)
Error: JScript Panel v2.1.4 (Top Panel)
JavaScript runtime error:
Invalid procedure call or argument
File: D:\Program Files\foobar2000\\themes\CaTRoX\Scripts\Panel_Top.js
Line: 440, Col: 5
<source text only available at compile time>
Will be nice if someone reply.
While using this skin, no sorting methods work for me, wanna have albums be sorted by date, i changed sorting method to %date% in shell integration and also in columns ui filters, still nothing. I add folders from library view.
idek
Would you be willing to add a wavebar? I've tried doing it myself but I haven't gotten far...
I'm getting 3 errors when trying to install the theme. Followed install instructions via the github. Using the modded JScript panel as well. Is this fixable or is the theme just too old?
(https://i.imgur.com/rYgNYFH.png)
Those errors are from various files not being in the place they're supposed to be.
Perhaps if you're running fb2k v1.6 or later in portable mode, you need to put the theme files inside the profile folder and not in the root of the program folder which probably would have been the original instructions
Yeah putting the theme in the program folder instead of the appdata folder did the trick, Appreciate it!
Version: 5.0.0
Link: https://github.com/TheQwertiest/CaTRoX_QWR/releases/tag/v5.0.0
Changelog:Changed
- Adapted to `foo_spider_monkey_panel`.
- Replaced WilB's `YouTube Track Manager` with it's successor `Find & Play`.
- Replaces `foo_uie_lyrics3` with `foo_openlyrics`.
- All panels are now provided as script packages and can be used separately from the theme.
Got severely troubles trying to copy info from the InfoPanel (left one-right click and got crash error) (1-3.jpg)
Also while randomising playlist (with more than 140.000+tracks [error appears only on app boot (twice)] (4_!!!!.jpg) ) got some JS errors, even after the clean setup of everything/ Program / Compoments etc.
How can it b fixed?)
Win 11 Pro / FB2K 1.61
If you've got a text editor that can search recursively through a folder of files, look inside the theme folder (*.js) for _.setClipboardData and replace it with _setClipboardData
I have no idea about the playlist issue.
If you've got a text editor that can search recursively through a folder of files, look inside the theme folder (*.js) for _.setClipboardData and replace it with _setClipboardData
Thanks a lot! fixed!)
The playlist issue is just a triggering slow script problem because it needs to init so many tracks in ONE active playlist before all items have been fully initialized...
I don't really know how to optimize it but you can make a 'workaround' by increasing the time for the slow script popup in:
( In your case on startup when you get the red error screen, close the error message and hit CTRL+P, now you're already in the Preferences )
File > Preferences > Advanced. Scroll almost to the bottom and find in the Spider Monkey Panel the entry:
Script execution time limit before triggering a `slow script` warning (in seconds) set to 30.
Click Apply/OK and close foobar in your taskbar, restart foobar again.
-TT
Btw, I would be also interested how to change the color on the fly
var title_color = g_pl_colors.title_normal;
for all items in all rows without calling a full rows init ( initialize_rows(playlist_items) ) for performance reasons and ugly repaints...
Are you joking? What are you on about? Changing colours is amazingly cheap. Not a single bit of text is changing so what are you blithering on about regarding row/playlist item init? The mind boggles. :/
Can't believe I've resorted to this but the default script inside the panel is the most basic example of dynamic colour changing you'll ever see.
(https://i.imgur.com/IQZvCmM.gif)
Are you joking? What are you on about? Changing colours is amazingly cheap. Not a single bit of text is changing so what are you blithering on about regarding row/playlist item init? The mind boggles. :/
Haha, I should be more precise, this is not regarding the original CatRox theme, but my theme =).
I have implemented an additional mouse row hover effect plus checking if background is bright/dark:
// Playlist row hover
this.title_color = g_pl_colors.title_normal;
/** @enum {number} */
var rowState = {
normal: 0,
hovered: 1,
pressed: 2
};
//private:
var that = this;
/**
* @param {rowState} item
*/
this.changeRowState = function(item) {
switch (item) {
case rowState.normal: {
that.title_color = g_pl_colors.title_normal;
break;
}
case rowState.hovered: {
that.title_color = g_pl_colors.title_hovered;
break;
}
case rowState.pressed: {
that.title_color = g_pl_colors.title_selected;
break;
}
}
window.RepaintRect(playlist.x - 1, playlist.y, playlist.w + 1, playlist.h);
}
this.trace = function (x, y) {
return x >= this.x && x < this.x + this.w && y >= this.y && y < this.y + this.h;
};
this.on_mouse_move = function (x, y, m) {
this.changeRowState(this.trace(x, y) ? rowState.hovered : rowState.normal);
};
then I have on_mouse_move() calling changeRowState
var item = this.get_item_under_mouse(x, y);
if (item instanceof Row) {
if (pref.show_tt || pref.show_truncatedText_tt) {
item.title_truncatedText_tt(x, y);
}
if (pref.playlistRowHover) {
try { // Prevent crash when playlist rows are not fully initialized
item.on_mouse_move(x, y, m);
} catch (e) {};
}
}
and on draw(gr):
draw(gr) {
if (pref.playlistRowHover) {
if (needs_rows_repaint) {
repaintPlaylistRows();
needs_rows_repaint = false;
}
} else {
this.title_color = g_pl_colors.title_normal;
}
gr.DrawString(this.title_text, title_font, this.title_color, cur_x, this.y, title_w, this.h, title_text_format);
this.title_color = g_pl_colors.title_normal;
The title_color also changes like mentioned when bg is bright/dark, it's all working on current visible window.Height but I still have ugly title_color repaints when scrolling ( at top/bottom ), because the title_color is one repaint behind ( the not yet visible ( hidden ) rows ). :(
When calling initialize_rows(playlist_items) I can change title_color in all hidden item rows, but this is not the way.
Well it's not that bad, but sometimes white or black title_color repaints will be visible on different background colors...
Here is an example video what I mean:
Watch the playlist bottom when I scroll, it repaints the old title_color ( hidden, not yet visible item rows ):
https://filepost.io/d/WsW9Adj24u
I can't understand what's going on from those code snippets but if each item/row is an object and each one has its own colour properties, I'd say that's a poor design choice and needs to be reworked. "Hidden" rows having their own colours is just wrong.
TheQwertiest didn't have that in mind from the beginning what I've additional added and wanted to achieve. For Mordred's theme it's working, because he just repaints only the one nowPlaying row which is not a problem,
but I need to repaint all existing rows plus I've added a mouse hover func which makes these problems. Well, I need to figure out a workaround...
-TT
Hi, any way to fix this error?
(https://i.imgur.com/4ezTmGj.png)
Well I think that command is related to foo_youtube and it is listed as a required component here...
https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/#required-components
Well I think that command is related to foo_youtube and it is listed as a required component here...
https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/#required-components
I have it installed
(https://i.imgur.com/1JGY4Yv.png)
If you can work out where this script file lives in your foobar profile folder based on the URL...
https://github.com/TheQwertiest/CaTRoX_QWR/blob/33e9c0e91341f5c5ac43cb464de181b14c5d1dac/packages/Top/%7BF53D252E-3F0F-4EEA-AB97-569F9C001FE5%7D/main.js#L438
You can edit the highlighted line to
var is_youtube_video_displayed = false;
If you can work out where this script file lives in your foobar profile folder based on the URL...
https://github.com/TheQwertiest/CaTRoX_QWR/blob/33e9c0e91341f5c5ac43cb464de181b14c5d1dac/packages/Top/%7BF53D252E-3F0F-4EEA-AB97-569F9C001FE5%7D/main.js#L438
You can edit the highlighted line to
var is_youtube_video_displayed = false;
Replacing this line helps, thanks.
If you can work out where this script file lives in your foobar profile folder based on the URL...
https://github.com/TheQwertiest/CaTRoX_QWR/blob/33e9c0e91341f5c5ac43cb464de181b14c5d1dac/packages/Top/%7BF53D252E-3F0F-4EEA-AB97-569F9C001FE5%7D/main.js#L438
You can edit the highlighted line to
var is_youtube_video_displayed = false;
Also I can remove foo_youtube completely now?
Any way to remove inactive icons like this search icon from youtube?
(https://i.imgur.com/EnIR1JQ.png)
Not tested but I'd trying making this entire function empty...
https://github.com/TheQwertiest/CaTRoX_QWR/blob/33e9c0e91341f5c5ac43cb464de181b14c5d1dac/packages/Top/%7BF53D252E-3F0F-4EEA-AB97-569F9C001FE5%7D/main.js#L264L316
function create_buttons(ww, wh) {}
Thanks for this amazing foobar skin! I've been using it for last two weeks now and encountered one issue with thumbs not loading up automatically, although the checkmark is there. They can be manually loaded via RMB->Download. Is there a fix to download them automatically? I opened the issue on your github https://github.com/TheQwertiest/CaTRoX_QWR/issues/22
Not tested the theme but right click the panel>Configure. Replace the contents with this...
https://raw.githubusercontent.com/TheQwertiest/smp_2003/master/thumbs.js
Not tested the theme but right click the panel>Configure. Replace the contents with this...
https://raw.githubusercontent.com/TheQwertiest/smp_2003/master/thumbs.js
Configure opens up spider monkey configuration https://i.imgur.com/jx7DBIk.png , so instead I just replaced in foobar2000\profile\foo_spider_monkey_panel\packages\{1583C4B7-53AD-403F-8F7E-CB20490AAA26}\scripts\js_marc2003\js , but unfortunately it resulted in a crash https://i.imgur.com/CJ5bNpq.png
You're never supposed to put files from the js folder in the panel.
Either open the editor and copy/paste the contents from the github link or use the samples drop down combo box.
I can show it working for me.
(https://i.imgur.com/SJh0k0c.gif)
There are 2 conditions: automatic downloads only happen a second or 2 after playback begins and there must be no pre-existing images.
I'm struggling to find this editor, when RMB->Configure it opens monkey panel configuration, where do I go from there?
I also said this...
or use the samples drop down combo box.
(https://i.imgur.com/A4jE8wJ.png)
It works now, thank you very much. Displaying is a bit weird, but it will do https://i.imgur.com/PRyzdwI.png
Well that's a tiny panel so if you can't resize it, at least right click and turn the thumbnails off.
The playlist issue is just a triggering slow script problem because it needs to init so many tracks in ONE active playlist before all items have been fully initialized...
I don't really know how to optimize it but you can make a 'workaround' by increasing the time for the slow script popup in:
( In your case on startup when you get the red error screen, close the error message and hit CTRL+P, now you're already in the Preferences )
File > Preferences > Advanced. Scroll almost to the bottom and find in the Spider Monkey Panel the entry:
Script execution time limit before triggering a `slow script` warning (in seconds) set to 30.
Click Apply/OK and close foobar in your taskbar, restart foobar again.
-TT
Yes!!! Worked!!!))) Thanks a lot mate!
Cheers
The playlist issue is just a triggering slow script problem because it needs to init so many tracks in ONE active playlist before all items have been fully initialized...
I don't really know how to optimize it but you can make a 'workaround' by increasing the time for the slow script popup in:
( In your case on startup when you get the red error screen, close the error message and hit CTRL+P, now you're already in the Preferences )
File > Preferences > Advanced. Scroll almost to the bottom and find in the Spider Monkey Panel the entry:
Script execution time limit before triggering a `slow script` warning (in seconds) set to 30.
Click Apply/OK and close foobar in your taskbar, restart foobar again.
-TT
Yes!!! Worked!!!))) Thanks a lot mate!
Cheers
Working only at 30. Not 45 or 25 etc. Slow boot but no alerts
I'm having this problem everytime i click on the "menu" button
What is happening? The other buttons works fine and this happens both playlist and art mode.
Does anyone happen to have a ready-made 4k display configuration for this mod? I don't feel like customizing over 30 fonts, the controls and menu bar and who knows what else.
Michelist
Try text editor that can search recursively through a folder of files, look inside the theme folder (*.js) for _.menu and replace it with _menu, and replace it in "\packages" folder than reload configuration using win+shift and right-click
I'm having this problem everytime i click on the "menu" button
What is happening? The other buttons works fine and this happens both playlist and art mode.
Try text editor that can search recursively through a folder of files, look inside the theme folder (*.js) for _.menu and replace it with _menu, and replace it in "\packages" folder than reload configuration using win+shift and right-click
Hi mates!
Got this problem while lyrics tab open:
when it tries to access to some lyrics source it's just shutting down without any errors..
Need help) any ideas how to fix this?
I'm not an expert in JavaScript development, but sometimes I make some customizations to the tools I generally use.
In this case I have wrote an function to calculate album an track PLR.
function calculate_PLR(gain,gaindb) {
var lufs = -1800 - gain.replace(/[^0-9+-]/g,'') ;
var tpfs = gaindb.replace(/[^0-9+-]/g,'');
var plr = tpfs - lufs
var plr_value = plr.toString().substring(plr.toString().length -2) > 49 ? plr += 100 : plr;
plr_value = plr.toString().substr(0,plr.toString().length -2)
return plr_value;
}
I have add with success this code in Header-->draw_normal_header
if (_tf('[%replaygain_album_gain%]', metadb) && _tf('[%replaygain_album_peak_db%]', metadb)) {
plr_cd = ' | ' + calculate_PLR(_tf('%replaygain_album_gain%', metadb),_tf('%replaygain_album_peak_db%', metadb)) + ' LU'
}
and in row-->draw
if (_tf('[%replaygain_track_gain%]', metadb) && _tf('[%replaygain_track_peak_db%]', metadb)) {
var plr_track = calculate_PLR(_tf('%replaygain_track_gain%', metadb),_tf('%replaygain_album_track_db%', metadb))
}
I have implemented ad entry in "Appearance" in coherence with general theme.
I planning to make a correct use of PLR CD in sub-header option because if have, for example, a 2 disc set album, and sub-header option enabled, i must insert the PLR CD value in sub-header line, and not in Header line.
Will go insert in sub-header (DiskHeader-->draw) but I haven't metaDB variable. There are a way to take this variable? At this time I haven't find it.
Furthermore I noticed that this code It does not work anymore:
disc_number = _tf('$ifgreater(%totaldiscs%,1,[ | Disc: %discnumber%/%totaldiscs%]', metadb);
what is _tf()
Thanks in advance to anyone who can help me.
hye all, i want to ask a question,
how to resize the wave and seekbar make it look bigger like on the right side
thanks for the advance
(https://cdn.discordapp.com/attachments/1097459298784792620/1100125379643064351/Screenshot_2023-04-25_022224.png)
Help I can't figure out how to do this third step: "Add Spider Monkey Panel panel."
I have it installed but I don't know where to go add it.
I got it figured out, never mind my message
I have the following error in all panels:
Error: Spider Monkey Panel v1.6.1..............................................................................
ActiveXObject_Constructor failed:
Invalid CLSID: UIHacks
File: Common.js
Line: 359, Column: 5
Stack trace:
@Common.js:359:5
@main.js:2:1
(https://i.postimg.cc/rRVmttXr/Screenshot-2023-06-17-095511.png) (https://postimg.cc/rRVmttXr)
Edit:
Fixed I forgot Untick 'Show toolbars'.
I get the following error when I try to add an entry in the info panel.
Error: Spider Monkey Panel v1.6.1 (Track Info: CaTRoX: Track information v5.0.0 by TheQwertiest)
g_hta_window is not defined
File: main.js
Line: 645, Column: 9
Stack trace:
request_new_tag@main.js:645:9
TrackInfoList/this.on_mouse_rbtn_up/<@main.js:341:17
Context.Item/this.execute_menu@Control_ContextMenu.js:250:9
Context.Menu/this.execute_menu@Control_ContextMenu.js:166:29
Context.MainMenu/this.execute@Control_ContextMenu.js:384:21
TrackInfoList/this.on_mouse_rbtn_up@main.js:458:13
on_mouse_rbtn_up@main.js:120:23
Another error:
Error: Spider Monkey Panel v1.6.1 (Album Cover: CaTRoX: Album cover v5.0.0 by TheQwertiest)
_.run is not a function
File: Common.js
Line: 503, Column: 11
Stack traces:
link@Common.js:503:11
ArtModule/this.append_menu_to/</<@Module_Art.js:531:31
Context.Item/this.execute_menu@Control_ContextMenu.js:250:9
Context.Menu/this.execute_menu@Control_ContextMenu.js:166:29
Context.Menu/this.execute_menu@Control_ContextMenu.js:166:29
Context.MainMenu/this.execute@Control_ContextMenu.js:384:21
on_mouse_rbtn_up@main.js:116:9
Double Click error
Error: Spider Monkey Panel v1.6.1 (Track Info: CaTRoX: Track information v5.0.0 by TheQwertiest)
_.input_cancellable is not a function
File: main.js
Line: 734, Column: 27
Stack trace:
Row/this.edit_metadata@main.js:734:27
TrackInfoList/this.on_mouse_lbtn_dblclk@main.js:287:14
on_mouse_lbtn_dblclk@main.js:102:16
The "pin window to top" and mode switcher (switch to playlist/art mode) buttons were not appearing for me. I had to install a pro version of fontawesome and change the script for the menu bar panel to use the new font (since it did not install as "FontAwesome") in order to have them show up.
Nice theme though. I'll slowly get replace the youtube and lastfm stuff with things I'll use but this is a nice change of pace from DarkOne.
Also, is there a way to scroll where I am in a song by scrolling over the seek bar?
Hi @TheQwertiest,and first of all thank you for all you do with some assets around foobar2000 and SMP themes.I installed today this product version CaTRoX_QWR v5.0.0 - SMP Edition and I encountered following crash error.To avoid this kind of crash error on your theme (YT tab)list[0] is undefined
File: web.js
Line: 1546, Column: 18
Stack trace:
analyse@web.js:1546:18
onStateChange@web.js:1343:11
on_mb_artist_id_search_done/mb_lfm_albums<@web.js:2076:60
For executing properly CaTRoX_QWR v5.0.0 - SMP Edition,here is what I did and it runs without crash Of "Find And Play WilB's Package" :My tests showed does it works for : foobar2000 v2.1 preview 2023-08-01 [x86]foobar2000 v2.0 [x86]------FOR COMPONENTS :- copy libcurl.dll to root installation folder- copy youtube-dl.exe to root installation folder (but can be externalized)- installation of all components mentioned here : https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/more precisely :
Component | File | Version |
Columns UI | foo_ui_columns.dll | 2.1.0-beta.3 |
Spider Monkey Panel | foo_spider_monkey_panel.dll | 1.6.1 or 1.6.1-mod |
UI hacks | foo_ui_hacks.dll | 2013-02-19 |
Panel Stack Splitter | foo_uie_panel_splitter.dll | 0.3.8.3(alpha) |
Musical Spectrum | foo_musical_spectrum.dll | 0.9.1 |
Playback Statistics | foo_playcount.dll | 3.1.5 |
Enhanced Playback Statistics | foo_enhanced_playcount.dll | 5.0.0 |
Playlist Tools | foo_utils.dll | 0.6.2 beta 6 |
OpenLyrics | foo_openlyrics.dll | 1.6 |
Scrobble | foo_scrobble.dll | 1.6.0.22456 |
Youtube source | foo_youtube.dll | 3.9 beta 2 |
In Foobar2000's preferences,Tools > Youtube Source > Maintenance, according to https://fy.3dyd.com/help/third_party_binaries/, parametering of
Binary | Source (settings) |
ffmpeg | Internal Or External : ffmpeg version 4.x, 32-bit build with shared libraries |
JavaScript | Bundled |
LAV filters | External path |
libcurl | Internal (copy of libcurl.dll to root installation folder) |
madVR | External path |
VSFilter | External path |
youtube-dl | External path (copy of youtube-dl.exe to root installation folder) |
So that :foo_youtube: JavaScript (bundled.node): 5.12
foo_youtube: madVR (external): 0.92.17
foo_youtube: LAV Filters (external): Splitter 0.77.2, Video 0.77.2
foo_youtube: VSFilter (external): 3.1.0.752
foo_youtube: libcurl (internal): libcurl/7.68.0 Schannel zlib/1.2.11 brotli/1.0.7 nghttp2/1.40.0
foo_youtube: youtube-dl (external): 2021.12.17
with ffmpgeg Internal : foo_youtube: ffmpeg (internal): lavf 58.29.100, lavc 58.54.100, lavu 56.31.100
or with ffmpeg external : foo_youtube: ffmpeg (external): lavf 58.76.100, lavc 58.134.100, lavu 56.70.100, lswr 3.9.100
-------FOR SMP PACKAGES:Update of following packages- {E85C9EF0-778B-46DD-AF20-F4BE831360DD} - Library Tree, version: 2.2.0-Beta.1 -> 2.4.0- {F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851} - Find & Play - 1.0.0-Beta.1 -> 1.3.0 ----I wrote this text to help those who will have difficulty installing and configuring this version of SMP. I hope this will be useful. Maybe you can use it to repackage a new version of release and also update the readme, and your installation page. So the product of your work is still alive since 2022.Note to users : as for an x64 version of the product, do not count on it, that would suppose that all the dll components are compiled in x64.-----------------------------------------------------------@TheQwertiest,
Perhaps you can do a new bundle of : 5.0.1 or 5.1.0 in https://github.com/TheQwertiest/CaTRoX_QWR/releaseswith- {E85C9EF0-778B-46DD-AF20-F4BE831360DD} - Library Tree, version: 2.2.0-Beta.1 -> 2.4.0- {F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851} - Find & Play - 1.0.0-Beta.1 -> 1.3.0 ?, an update in changelog, a note for installation compatibility (with what I wrote above), and update instructions here : https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/ .Thank you,
This is my way of thanking you, and trying to avoid that others often ask you these questions.
Regards.
How to disable spectrum visualization?
Thanks in advance for your help.
Edit: I already did, sorry :))
Hello,
https://imgbox.com/WQoKrNbU
Why does a thumbnail image of the disc appear in the first column, where the front cover should be? The back cover thumbnail does not display at all. In the regular version of the skin (Catrox) this problem does not occur.
Hi @TheQwertiest,
and first of all thank you for all you do with some assets around foobar2000 and SMP themes.
I installed today this product version CaTRoX_QWR v5.0.0 - SMP Edition and I encountered following crash error.
To avoid this kind of crash error on your theme (YT tab)
list[0] is undefined
File: web.js
Line: 1546, Column: 18
Stack trace:
analyse@web.js:1546:18
onStateChange@web.js:1343:11
on_mb_artist_id_search_done/mb_lfm_albums<@web.js:2076:60
For executing properly CaTRoX_QWR v5.0.0 - SMP Edition,
here is what I did and it runs without crash Of "Find And Play WilB's Package" :
My tests showed does it works for :
foobar2000 v2.1 preview 2023-08-01 [x86]
foobar2000 v2.0 [x86]
------
FOR COMPONENTS :
- copy libcurl.dll to root installation folder
- copy youtube-dl.exe to root installation folder (but can be externalized)
- installation of all components mentioned here : https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/
more precisely :
Component | File | Version |
Columns UI | foo_ui_columns.dll | 2.1.0-beta.3 |
Spider Monkey Panel | foo_spider_monkey_panel.dll | 1.6.1 or 1.6.1-mod |
UI hacks | foo_ui_hacks.dll | 2013-02-19 |
Panel Stack Splitter | foo_uie_panel_splitter.dll | 0.3.8.3(alpha) |
Musical Spectrum | foo_musical_spectrum.dll | 0.9.1 |
Playback Statistics | foo_playcount.dll | 3.1.5 |
Enhanced Playback Statistics | foo_enhanced_playcount.dll | 5.0.0 |
Playlist Tools | foo_utils.dll | 0.6.2 beta 6 |
OpenLyrics | foo_openlyrics.dll | 1.6 |
Scrobble | foo_scrobble.dll | 1.6.0.22456 |
Youtube source | foo_youtube.dll | 3.9 beta 2 |
In Foobar2000's preferences,
Tools > Youtube Source > Maintenance, according to https://fy.3dyd.com/help/third_party_binaries/, parametering of
Binary | Source (settings) |
ffmpeg | Internal Or External : ffmpeg version 4.x, 32-bit build with shared libraries |
JavaScript | Bundled |
LAV filters | External path |
libcurl | Internal (copy of libcurl.dll to root installation folder) |
madVR | External path |
VSFilter | External path |
youtube-dl | External path (copy of youtube-dl.exe to root installation folder) |
So that :
foo_youtube: JavaScript (bundled.node): 5.12
foo_youtube: madVR (external): 0.92.17
foo_youtube: LAV Filters (external): Splitter 0.77.2, Video 0.77.2
foo_youtube: VSFilter (external): 3.1.0.752
foo_youtube: libcurl (internal): libcurl/7.68.0 Schannel zlib/1.2.11 brotli/1.0.7 nghttp2/1.40.0
foo_youtube: youtube-dl (external): 2021.12.17
with ffmpgeg Internal : foo_youtube: ffmpeg (internal): lavf 58.29.100, lavc 58.54.100, lavu 56.31.100
or with ffmpeg external : foo_youtube: ffmpeg (external): lavf 58.76.100, lavc 58.134.100, lavu 56.70.100, lswr 3.9.100
-------
FOR SMP PACKAGES:
Update of following packages
- {E85C9EF0-778B-46DD-AF20-F4BE831360DD} - Library Tree, version: 2.2.0-Beta.1 -> 2.4.0
- {F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851} - Find & Play - 1.0.0-Beta.1 -> 1.3.0
----
I wrote this text to help those who will have difficulty installing and configuring this version of SMP.
I hope this will be useful. Maybe you can use it to repackage a new version of release and also update the readme, and your installation page. So the product of your work is still alive since 2022.
Note to users : as for an x64 version of the product, do not count on it, that would suppose that all the dll components are compiled in x64.
-----------------------------------------------------------
@TheQwertiest,
Perhaps you can do a new bundle of : 5.0.1 or 5.1.0 in
https://github.com/TheQwertiest/CaTRoX_QWR/releases
with
- {E85C9EF0-778B-46DD-AF20-F4BE831360DD} - Library Tree, version: 2.2.0-Beta.1 -> 2.4.0
- {F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851} - Find & Play - 1.0.0-Beta.1 -> 1.3.0 ?
, an update in changelog
, a note for installation compatibility (with what I wrote above), and update instructions here : https://theqwertiest.github.io/CaTRoX_QWR/docs/installation/ .
Thank you,
This is my way of thanking you, and trying to avoid that others often ask you these questions.
Regards.
I just registered here because of your post to thank you. I like the Catrox theme, but had problems and error messages.
I was able to fix some. Thank You! :)
I also shared two additional solutions to issues with the developer:
Panel crash 1: https://github.com/TheQwertiest/CaTRoX_QWR/issues/24
Panel crash 2: https://github.com/TheQwertiest/CaTRoX_QWR/issues/21
I hope there is an update in the future.
Please, can someone upload a zip file with all the components already installed (and updated) of this theme.
{text removed}
I like this theme so much but i can't update foobar2000 from version 1.6.3 to version 2.1 without getting errors everywhere.
MOD edited: Software license (https://www.foobar2000.org/license) does not permit redistribution of binaries other than unaltered installer.
There's no reason at all why upgrading to 2.1 should not work. Obviously you must use the 32bit version. The main components used by that theme are not available for 64bit.
You are right marc2k3, I was trying to install the x64 version.
Thank you.
Hello,
I install Catrox QWR and I have frequently this message when I use the mini player
Error: Spider Monkey Panel v1.6.1 (Mini Player: CaTRoX: Mini player v5.0.0 by TheQwertiest)
discMask.Dispose is not a function
File: Module_Art.js
Line: 165, Column: 26
Stack trace:
ArtModule/this.get_album_art_done@Module_Art.js:165:26
UltraMini/this.on_get_album_art_done@main.js:253:20
on_get_album_art_done@main.js:68:16
Thanks for your help
Hello,
I find a solution by deleting the line
Thanks for your help
Hello, I'm new to foobar. This skin has everything I needed, I loved it. but I have a very Amateur question, where can I configure the font size of taskbar and playlist? my screen resolution is 2160p, I can barely see them. Thanks
hi
@TheQwertiest wow beautiful skin!
do you think could be made one without external fonts just for a full portable version ?
or it's too hard use the installed fonts in w10 or w11?
do you think could be added a button to enable/disable replaygain?
thanks for the beautiful theme! O:)