├── .gitattributes
├── .gitignore
├── CHANGELOG.md
├── README.md
├── VERSION
├── fonts
├── Guifx v2 Transports.ttf
└── fontawesome.ttf
├── layout
└── theme.fcl
├── packages
├── AlbumCover
│ └── {CE76D0A2-E1CA-4CCD-ACEF-D4818E146DE1}
│ │ ├── main.js
│ │ └── package.json
├── ArtistBio
│ └── {D4B0E6A2-3432-4647-9870-AF87D78B7251}
│ │ ├── main.js
│ │ └── package.json
├── ArtistPhotos
│ └── {C52BF208-9BEF-43DC-A0ED-FA9710E7BA55}
│ │ ├── main.js
│ │ └── package.json
├── Common
│ └── {1583C4B7-53AD-403F-8F7E-CB20490AAA26}
│ │ ├── assets
│ │ └── html
│ │ │ ├── MsgBox.html
│ │ │ ├── PopupWithCheckBox.html
│ │ │ ├── styles10.css
│ │ │ └── styles7.css
│ │ ├── main.js
│ │ ├── package.json
│ │ └── scripts
│ │ ├── Common.js
│ │ ├── Control_ContextMenu.js
│ │ ├── Control_List.js
│ │ ├── Control_PssSwitch.js
│ │ ├── Control_Scrollbar.js
│ │ ├── Module_Art.js
│ │ ├── Utility_LinkedList.js
│ │ └── js_marc2003
│ │ ├── images
│ │ ├── buttons
│ │ │ ├── help.png
│ │ │ ├── next.png
│ │ │ ├── pause.png
│ │ │ ├── play.png
│ │ │ ├── preferences.png
│ │ │ ├── previous.png
│ │ │ ├── search.png
│ │ │ └── stop.png
│ │ ├── cd
│ │ │ ├── case.png
│ │ │ ├── gloss.png
│ │ │ ├── semi.png
│ │ │ └── shadow.png
│ │ ├── mb
│ │ │ ├── allmusic.png
│ │ │ ├── bbc.png
│ │ │ ├── decoda.png
│ │ │ ├── discogs.png
│ │ │ ├── external.png
│ │ │ ├── facebook.png
│ │ │ ├── flickr.png
│ │ │ ├── google_plus.png
│ │ │ ├── home.png
│ │ │ ├── imdb.png
│ │ │ ├── instagram.png
│ │ │ ├── lastfm.png
│ │ │ ├── lyrics_wikia.png
│ │ │ ├── musicbrainz.png
│ │ │ ├── myspace.png
│ │ │ ├── rateyourmusic.png
│ │ │ ├── secondhandsongs.png
│ │ │ ├── soundcloud.png
│ │ │ ├── tumblr.png
│ │ │ ├── twitter.png
│ │ │ ├── viaf.png
│ │ │ ├── vimeo.png
│ │ │ ├── wikidata.png
│ │ │ ├── wikipedia.png
│ │ │ └── youtube.png
│ │ ├── misc
│ │ │ ├── blank600.png
│ │ │ ├── default_artist.png
│ │ │ ├── foobar2000.png
│ │ │ ├── listenbrainz_active.png
│ │ │ ├── listenbrainz_inactive.png
│ │ │ ├── menu black.png
│ │ │ └── menu white.png
│ │ └── mono
│ │ │ ├── appbar.cd.png
│ │ │ ├── appbar.close.png
│ │ │ ├── appbar.console.png
│ │ │ ├── appbar.control.fastforward.png
│ │ │ ├── appbar.control.pause.png
│ │ │ ├── appbar.control.play.png
│ │ │ ├── appbar.control.rewind.png
│ │ │ ├── appbar.control.stop.png
│ │ │ ├── appbar.information.circle.png
│ │ │ ├── appbar.magnify.png
│ │ │ ├── appbar.minus.png
│ │ │ ├── appbar.music.png
│ │ │ ├── appbar.people.png
│ │ │ ├── appbar.settings.png
│ │ │ ├── appbar.social.lastfm.png
│ │ │ └── appbar.warning.circle.png
│ │ ├── js
│ │ ├── albumart.js
│ │ ├── helpers.js
│ │ ├── lastfm.js
│ │ ├── list.js
│ │ ├── lodash.min.js
│ │ ├── panel.js
│ │ ├── rating.js
│ │ ├── seekbar.js
│ │ ├── text.js
│ │ ├── thumbs.js
│ │ └── volume.js
│ │ └── vbs
│ │ ├── download.vbs
│ │ └── test_box.vbs
├── Controls
│ └── {043ABB6E-74F8-4DF0-92D0-744347C709F0}
│ │ ├── main.js
│ │ └── package.json
├── FindPlay
│ └── {F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}
│ │ ├── LICENSE.txt
│ │ ├── assets
│ │ ├── html
│ │ │ ├── config.html
│ │ │ ├── confirm.html
│ │ │ ├── input.html
│ │ │ ├── query.html
│ │ │ ├── styles10.css
│ │ │ └── styles7.css
│ │ └── images
│ │ │ ├── Auto DJ dark.png
│ │ │ ├── Auto DJ.png
│ │ │ ├── Cache dark.png
│ │ │ ├── Cache light.png
│ │ │ ├── Cache neutral [dark].png
│ │ │ ├── Cache neutral [light].png
│ │ │ ├── Lastfm button dark.png
│ │ │ ├── Lastfm button neutral.png
│ │ │ ├── Lastfm button small.png
│ │ │ ├── Lastfm button.png
│ │ │ ├── Lastfm logo.png
│ │ │ ├── Lastfm text button small.png
│ │ │ ├── Library folder.png
│ │ │ ├── Library neutral.png
│ │ │ ├── Library.png
│ │ │ ├── Musicbrainz button dark.png
│ │ │ ├── Musicbrainz button neutral.png
│ │ │ ├── Musicbrainz button.png
│ │ │ ├── Musicbrainz logo.png
│ │ │ ├── New Picture.bmp
│ │ │ ├── New Picture.png
│ │ │ ├── Not available dark.png
│ │ │ ├── Not available light.png
│ │ │ ├── Not available.png
│ │ │ ├── Official charts button neutral.png
│ │ │ ├── Official charts button.png
│ │ │ ├── Source green small.png
│ │ │ ├── Source green.png
│ │ │ ├── Source neutral small.png
│ │ │ ├── Source neutral.png
│ │ │ ├── Source red small.png
│ │ │ ├── Source red.png
│ │ │ └── Youtube logo.png
│ │ ├── main.js
│ │ ├── package.json
│ │ └── scripts
│ │ ├── albums.js
│ │ ├── autodj.js
│ │ ├── blacklistvideo.js
│ │ ├── buttons.js
│ │ ├── callbacks.js
│ │ ├── helpers.js
│ │ ├── images.js
│ │ ├── initialise.js
│ │ ├── interface.js
│ │ ├── library.js
│ │ ├── medialibrary.js
│ │ ├── menu.js
│ │ ├── mtags.js
│ │ ├── names.js
│ │ ├── panel.js
│ │ ├── playlists.js
│ │ ├── popupbox.js
│ │ ├── properties.js
│ │ ├── scrollbar.js
│ │ ├── search.js
│ │ ├── text.js
│ │ ├── timers.js
│ │ ├── utils.js
│ │ └── web.js
├── LastFM
│ └── {45FBD9DF-93B7-4642-924C-9CC020A082F4}
│ │ ├── main.js
│ │ └── package.json
├── Library
│ └── {E85C9EF0-778B-46DD-AF20-F4BE831360DD}
│ │ ├── LICENSE.txt
│ │ ├── assets
│ │ ├── html
│ │ │ ├── config.html
│ │ │ ├── confirm.html
│ │ │ ├── input.html
│ │ │ ├── inputApply.html
│ │ │ ├── messageBox.html
│ │ │ ├── styles10.css
│ │ │ └── styles7.css
│ │ └── images
│ │ │ ├── noArtist
│ │ │ ├── Blue.png
│ │ │ ├── Dark.png
│ │ │ ├── Grey 1.png
│ │ │ ├── Grey 2.png
│ │ │ ├── Grey 3.png
│ │ │ └── small
│ │ │ │ ├── Blue.png
│ │ │ │ ├── Dark.png
│ │ │ │ ├── Grey 1.png
│ │ │ │ ├── Grey 2.png
│ │ │ │ └── Grey 3.png
│ │ │ ├── noCover
│ │ │ ├── CD 1.png
│ │ │ ├── CD 2.png
│ │ │ ├── CD 3.png
│ │ │ ├── Dark 1.png
│ │ │ ├── Dark 2.png
│ │ │ ├── Dark 3.png
│ │ │ ├── Grey 1.jpg
│ │ │ ├── Grey 2.png
│ │ │ ├── Grey 3.png
│ │ │ ├── Light.png
│ │ │ ├── Multi-coloured 1.png
│ │ │ ├── Multi-coloured 2.png
│ │ │ └── small
│ │ │ │ ├── CD 1.png
│ │ │ │ ├── CD 2.png
│ │ │ │ ├── CD 3.png
│ │ │ │ ├── Dark 1.png
│ │ │ │ ├── Dark 2.png
│ │ │ │ ├── Dark 3.png
│ │ │ │ ├── Grey 1.jpg
│ │ │ │ ├── Grey 2.png
│ │ │ │ ├── Grey 3.png
│ │ │ │ ├── Light.png
│ │ │ │ ├── Multi-coloured 1.png
│ │ │ │ └── Multi-coloured 2.png
│ │ │ └── root
│ │ │ ├── Black 1.png
│ │ │ ├── Blue 1.png
│ │ │ ├── Blue 2.png
│ │ │ ├── Crystal.png
│ │ │ ├── Glow.png
│ │ │ ├── Green 1.png
│ │ │ ├── Green 2.png
│ │ │ ├── Grey 1.png
│ │ │ ├── Grey 2.png
│ │ │ ├── Grey 3.png
│ │ │ ├── Grey 4.png
│ │ │ ├── Multi-coloured 1.png
│ │ │ ├── Multi-coloured 2.png
│ │ │ ├── Multi-coloured 3.png
│ │ │ ├── Purple 1.png
│ │ │ ├── Purple 2.png
│ │ │ ├── Red 1.png
│ │ │ ├── Red 2.png
│ │ │ ├── Red 3.png
│ │ │ └── small
│ │ │ ├── Black 1.png
│ │ │ ├── Blue 1.png
│ │ │ ├── Blue 2.png
│ │ │ ├── Crystal.png
│ │ │ ├── Glow.png
│ │ │ ├── Green 1.png
│ │ │ ├── Green 2.png
│ │ │ ├── Grey 1.png
│ │ │ ├── Grey 2.png
│ │ │ ├── Grey 3.png
│ │ │ ├── Grey 4.png
│ │ │ ├── Multi-coloured 1.png
│ │ │ ├── Multi-coloured 2.png
│ │ │ ├── Multi-coloured 3.png
│ │ │ ├── Purple 1.png
│ │ │ ├── Purple 2.png
│ │ │ ├── Red 1.png
│ │ │ ├── Red 2.png
│ │ │ └── Red 3.png
│ │ ├── main.js
│ │ ├── package.json
│ │ └── scripts
│ │ ├── buttons.js
│ │ ├── callbacks.js
│ │ ├── helpers.js
│ │ ├── images.js
│ │ ├── initialise.js
│ │ ├── interface.js
│ │ ├── library.js
│ │ ├── menu.js
│ │ ├── panel.js
│ │ ├── populate.js
│ │ ├── popupbox.js
│ │ ├── properties.js
│ │ ├── scrollbar.js
│ │ ├── search.js
│ │ ├── timers.js
│ │ └── utils.js
├── Menu
│ └── {FAA21F07-9B8F-416A-B106-E552221388B7}
│ │ ├── main.js
│ │ └── package.json
├── Mini
│ └── {8E2B7403-5CEF-4F9E-B255-64690DEB1C58}
│ │ ├── main.js
│ │ └── package.json
├── Playlist
│ └── {28AC1EBE-9010-459E-8886-8FFDC8705716}
│ │ ├── assets
│ │ └── html
│ │ │ ├── GroupPresetsMngr.html
│ │ │ ├── styles10.css
│ │ │ └── styles7.css
│ │ ├── main.js
│ │ └── package.json
├── Seekbar
│ └── {858943EC-DEAC-4C52-BD3E-07EAF372BBF7}
│ │ ├── main.js
│ │ └── package.json
├── Top
│ └── {F53D252E-3F0F-4EEA-AB97-569F9C001FE5}
│ │ ├── assets
│ │ └── fooLogo.png
│ │ ├── main.js
│ │ └── package.json
└── TrackInfo
│ └── {410038E9-7281-4559-B843-20F4A7165435}
│ ├── main.js
│ └── package.json
└── scripts
├── call_wrapper.py
├── pack.py
├── publish_release_draft.py
└── update_changelog.py
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/visualstudio
2 |
3 | ### VisualStudio ###
4 | ## Ignore Visual Studio temporary files, build results, and
5 | ## files generated by popular Visual Studio add-ons.
6 |
7 | # User-specific files
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | /_*
18 | *.fb2k-component
19 | [Dd]ebug/
20 | [Dd]ebugPublic/
21 | [Dd]ebug FB2K/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | [Rr]elease FB2K/
25 | x64/
26 | x86/
27 | bld/
28 | [Bb]in/
29 | [Oo]bj/
30 | [Ll]og/
31 |
32 | # Visual Studio 2015 cache/options directory
33 | .vs/
34 | # Uncomment if you have tasks that create the project's static files in wwwroot
35 | #wwwroot/
36 |
37 | # MSTest test Results
38 | [Tt]est[Rr]esult*/
39 | [Bb]uild[Ll]og.*
40 |
41 | # NUNIT
42 | *.VisualState.xml
43 | TestResult.xml
44 |
45 | # Build Results of an ATL Project
46 | [Dd]ebugPS/
47 | [Rr]eleasePS/
48 | dlldata.c
49 |
50 | # DNX
51 | project.lock.json
52 | project.fragment.lock.json
53 | artifacts/
54 |
55 | *_i.c
56 | *_p.c
57 | *_i.h
58 | *.ilk
59 | *.meta
60 | *.obj
61 | *.pch
62 | *.pdb
63 | *.pgc
64 | *.pgd
65 | *.rsp
66 | *.sbr
67 | *.tlb
68 | *.tli
69 | *.tlh
70 | *.tmp
71 | *.tmp_proj
72 | *.log
73 | *.vspscc
74 | *.vssscc
75 | .builds
76 | *.pidb
77 | *.svclog
78 | *.scc
79 |
80 | # Chutzpah Test files
81 | _Chutzpah*
82 |
83 | # Visual C++ cache files
84 | ipch/
85 | *.aps
86 | *.ncb
87 | *.opendb
88 | *.opensdf
89 | *.sdf
90 | *.cachefile
91 | *.VC.db
92 | *.VC.VC.opendb
93 |
94 | # Visual Studio profiler
95 | *.psess
96 | *.vsp
97 | *.vspx
98 | *.sap
99 |
100 | # TFS 2012 Local Workspace
101 | $tf/
102 |
103 | # Guidance Automation Toolkit
104 | *.gpState
105 |
106 | # ReSharper is a .NET coding add-in
107 | _ReSharper*/
108 | *.[Rr]e[Ss]harper
109 | *.DotSettings.user
110 |
111 | # JustCode is a .NET coding add-in
112 | .JustCode
113 |
114 | # TeamCity is a build add-in
115 | _TeamCity*
116 |
117 | # DotCover is a Code Coverage Tool
118 | *.dotCover
119 |
120 | # Visual Studio code coverage results
121 | *.coverage
122 | *.coveragexml
123 |
124 | # NCrunch
125 | _NCrunch_*
126 | .*crunch*.local.xml
127 | nCrunchTemp_*
128 |
129 | # MightyMoose
130 | *.mm.*
131 | AutoTest.Net/
132 |
133 | # Web workbench (sass)
134 | .sass-cache/
135 |
136 | # Installshield output folder
137 | [Ee]xpress/
138 |
139 | # DocProject is a documentation generator add-in
140 | DocProject/buildhelp/
141 | DocProject/Help/*.HxT
142 | DocProject/Help/*.HxC
143 | DocProject/Help/*.hhc
144 | DocProject/Help/*.hhk
145 | DocProject/Help/*.hhp
146 | DocProject/Help/Html2
147 | DocProject/Help/html
148 |
149 | # Click-Once directory
150 | publish/
151 |
152 | # Publish Web Output
153 | *.[Pp]ublish.xml
154 | *.azurePubxml
155 | # TODO: Comment the next line if you want to checkin your web deploy settings
156 | # but database connection strings (with potential passwords) will be unencrypted
157 | *.pubxml
158 | *.publishproj
159 |
160 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
161 | # checkin your Azure Web App publish settings, but sensitive information contained
162 | # in these scripts will be unencrypted
163 | PublishScripts/
164 |
165 | # NuGet Packages
166 | *.nupkg
167 | # The packages folder can be ignored because of Package Restore
168 | **/packages/*
169 | # except build/, which is used as an MSBuild target.
170 | !**/packages/build/
171 | !/packages/*
172 | # Uncomment if necessary however generally it will be regenerated when needed
173 | #!**/packages/repositories.config
174 | # NuGet v3's project.json files produces more ignoreable files
175 | *.nuget.props
176 | *.nuget.targets
177 |
178 | # Microsoft Azure Build Output
179 | csx/
180 | *.build.csdef
181 |
182 | # Microsoft Azure Emulator
183 | ecf/
184 | rcf/
185 |
186 | # Windows Store app package directories and files
187 | AppPackages/
188 | BundleArtifacts/
189 | Package.StoreAssociation.xml
190 | _pkginfo.txt
191 |
192 | # Visual Studio cache files
193 | # files ending in .cache can be ignored
194 | *.[Cc]ache
195 | # but keep track of directories ending in .cache
196 | !*.[Cc]ache/
197 |
198 | # Others
199 | ClientBin/
200 | ~$*
201 | *~
202 | *.dbmdl
203 | *.dbproj.schemaview
204 | *.jfm
205 | *.pfx
206 | *.publishsettings
207 | node_modules/
208 | orleans.codegen.cs
209 |
210 | # Since there are multiple workflows, uncomment next line to ignore bower_components
211 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
212 | #bower_components/
213 |
214 | # RIA/Silverlight projects
215 | Generated_Code/
216 |
217 | # Backup & report files from converting an old project file
218 | # to a newer Visual Studio version. Backup files are not needed,
219 | # because we have git ;-)
220 | _UpgradeReport_Files/
221 | Backup*/
222 | UpgradeLog*.XML
223 | UpgradeLog*.htm
224 |
225 | # SQL Server files
226 | *.mdf
227 | *.ldf
228 |
229 | # Business Intelligence projects
230 | *.rdl.data
231 | *.bim.layout
232 | *.bim_*.settings
233 |
234 | # Microsoft Fakes
235 | FakesAssemblies/
236 |
237 | # GhostDoc plugin setting file
238 | *.GhostDoc.xml
239 |
240 | # Node.js Tools for Visual Studio
241 | .ntvs_analysis.dat
242 |
243 | # Visual Studio 6 build log
244 | *.plg
245 |
246 | # Visual Studio 6 workspace options file
247 | *.opt
248 |
249 | # Visual Studio LightSwitch build output
250 | **/*.HTMLClient/GeneratedArtifacts
251 | **/*.DesktopClient/GeneratedArtifacts
252 | **/*.DesktopClient/ModelManifest.xml
253 | **/*.Server/GeneratedArtifacts
254 | **/*.Server/ModelManifest.xml
255 | _Pvt_Extensions
256 |
257 | # Paket dependency manager
258 | .paket/paket.exe
259 | paket-files/
260 |
261 | # FAKE - F# Make
262 | .fake/
263 |
264 | # JetBrains Rider
265 | .idea/
266 | *.sln.iml
267 |
268 | # CodeRush
269 | .cr/
270 |
271 | # Python Tools for Visual Studio (PTVS)
272 | __pycache__/
273 | *.pyc
274 |
275 | ### VisualStudio Patch ###
276 | build/
277 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CaTRoX (QWR Edition)
2 | [![version][version_badge]][changelog]
3 |
4 | Theme for [foobar2000](https://www.foobar2000.org) based on the design and color scheme of eXtremeHunter1972's infamous CaTRoX theme!
5 |
6 | Visit [theme homepage](https://theqwertiest.github.io/CaTRoX_QWR/) for more info.
7 |
8 | [changelog]: https://github.com/theqwertiest/CaTRoX_QWR/blob/master/CHANGELOG.md
9 | [version_badge]: https://img.shields.io/github/release/theqwertiest/CaTRoX_QWR.svg
10 |
--------------------------------------------------------------------------------
/fonts/Guifx v2 Transports.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/fonts/Guifx v2 Transports.ttf
--------------------------------------------------------------------------------
/fonts/fontawesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/fonts/fontawesome.ttf
--------------------------------------------------------------------------------
/layout/theme.fcl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/layout/theme.fcl
--------------------------------------------------------------------------------
/packages/AlbumCover/{CE76D0A2-E1CA-4CCD-ACEF-D4818E146DE1}/main.js:
--------------------------------------------------------------------------------
1 | const common_package_id = '{1583C4B7-53AD-403F-8F7E-CB20490AAA26}';
2 | include(`${utils.GetPackageInfo(common_package_id).Directories.Scripts}/Common.js`);
3 | qwr_utils.common_include([
4 | 'Control_ContextMenu.js',
5 | 'Module_Art.js',
6 | ]);
7 |
8 | g_properties.add_properties(
9 | {
10 | panel_pad: ['user.panel.pad', 5]
11 | }
12 | );
13 |
14 | var mouse_move_suppress = new qwr_utils.MouseMoveSuppress();
15 | var key_down_suppress = new qwr_utils.KeyModifiersSuppress();
16 | var artModule = new ArtModule({border:true, thumbs:true, auto_cycle:true});
17 |
18 | var ww;
19 | var wh;
20 |
21 | function on_paint(gr) {
22 | gr.FillSolidRect(0, 0, ww, wh, g_theme.colors.panel_back);
23 | artModule.paint(gr);
24 | }
25 |
26 | function on_size() {
27 | ww = window.Width;
28 | wh = window.Height;
29 |
30 | if (ww <= 0 || wh <= 0 ) {
31 | return;
32 | }
33 |
34 | artModule.on_size(g_properties.panel_pad, g_properties.panel_pad, ww - 2 * g_properties.panel_pad, wh - 2 * g_properties.panel_pad);
35 | artModule.get_album_art();
36 | }
37 |
38 | function on_get_album_art_done(metadb, art_id, image, image_path) {
39 | artModule.get_album_art_done(metadb, art_id, image, image_path);
40 | }
41 |
42 | function on_playlist_switch() {
43 | artModule.playlist_switch();
44 | }
45 |
46 | function on_playback_stop(reason) {
47 | artModule.playback_stop(reason);
48 | }
49 |
50 | function on_playback_new_track(metadb) {
51 | artModule.playback_new_track();
52 | }
53 |
54 | function on_item_focus_change(playlist_arg, from, to) {
55 | artModule.item_focus_change();
56 | }
57 |
58 | function on_mouse_move(x, y, m) {
59 | if (mouse_move_suppress.is_supressed(x,y,m)) {
60 | return;
61 | }
62 |
63 | artModule.mouse_move(x, y, m);
64 | }
65 |
66 | function on_mouse_lbtn_down(x, y, m) {
67 | artModule.mouse_lbtn_down(x, y, m);
68 | }
69 |
70 | function on_mouse_lbtn_dblclk() {
71 | artModule.mouse_lbtn_dblclk();
72 | }
73 |
74 | function on_mouse_lbtn_up(x, y, m) {
75 | artModule.mouse_lbtn_up(x, y, m);
76 | }
77 |
78 | function on_mouse_wheel(delta) {
79 | artModule.mouse_wheel(delta);
80 | }
81 |
82 | function on_mouse_leave() {
83 | artModule.mouse_leave();
84 | }
85 |
86 | function on_key_down(vkey) {
87 | if (key_down_suppress.is_supressed(vkey)) {
88 | return;
89 | }
90 |
91 | switch (vkey) {
92 | case VK_UP: {
93 | artModule.mouse_wheel(-1);
94 | break;
95 | }
96 | case VK_DOWN: {
97 | artModule.mouse_wheel(1);
98 | break;
99 | }
100 | case VK_F5: {
101 | artModule.reload_art();
102 | break;
103 | }
104 | }
105 | }
106 |
107 | function on_mouse_rbtn_up(x, y) {
108 | var cmm = new Context.MainMenu();
109 |
110 | artModule.append_menu_to(cmm);
111 |
112 | if (utils.IsKeyPressed(VK_SHIFT)) {
113 | qwr_utils.append_default_context_menu_to(cmm);
114 | }
115 |
116 | cmm.execute(x,y);
117 | cmm.dispose();
118 |
119 | return true;
120 | }
121 |
--------------------------------------------------------------------------------
/packages/AlbumCover/{CE76D0A2-E1CA-4CCD-ACEF-D4818E146DE1}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{CE76D0A2-E1CA-4CCD-ACEF-D4818E146DE1}",
6 | "name": "CaTRoX: Album cover",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/ArtistBio/{D4B0E6A2-3432-4647-9870-AF87D78B7251}/main.js:
--------------------------------------------------------------------------------
1 | const common_package_id = '{1583C4B7-53AD-403F-8F7E-CB20490AAA26}';
2 | include(`${utils.GetPackageInfo(common_package_id).Directories.Scripts}/Common.js`);
3 | qwr_utils.common_include([
4 | 'js_marc2003/js/panel.js',
5 | 'js_marc2003/js/lastfm.js',
6 | 'js_marc2003/js/text.js',
7 | ]);
8 |
9 |
10 | var panel = new _panel("Last.fm Bio", ["metadb", "remap"]);
11 | var lastfm = new _lastfm();
12 | var text = new _text("lastfm_bio", 10, 24, 0, 0);
13 |
14 | panel.item_focus_change();
15 |
16 | function on_size() {
17 | panel.size();
18 | text.w = panel.w - 20;
19 | text.h = panel.h - 24;
20 | text.size();
21 | }
22 |
23 | function on_paint(gr) {
24 | panel.paint(gr);
25 | gr.FillSolidRect(0, 0, panel.w, 24, panel.colours.header);
26 | if (text.header_text().length)
27 | {
28 | gr.GdiDrawText(text.header_text(), panel.fonts.title, _RGB(180, 182, 184), 10, 0, panel.w - 20, 24, LEFT);
29 | }
30 | else
31 | {
32 | gr.GdiDrawText("Last.fm Bio", panel.fonts.title, _RGB(180, 182, 184), 10, 0, panel.w - 20, 24, LEFT);
33 | }
34 | text.paint(gr);
35 | }
36 |
37 | function on_metadb_changed() {
38 | text.metadb_changed();
39 | }
40 |
41 | function on_mouse_wheel(s) {
42 | text.wheel(s);
43 | }
44 |
45 | function on_mouse_move(x, y) {
46 | text.move(x, y);
47 | }
48 |
49 | function on_mouse_lbtn_up(x, y) {
50 | text.lbtn_up(x, y);
51 | }
52 |
53 | function on_mouse_rbtn_up(x, y) {
54 | return panel.rbtn_up(x, y, text);
55 | }
56 |
57 | function on_key_down(k) {
58 | text.key_down(k);
59 | }
60 |
61 | function on_colours_changed() {
62 | panel.colours_changed();
63 | window.Repaint();
64 | }
65 |
66 | function on_font_changed() {
67 | panel.font_changed();
68 | window.Repaint();
69 | }
70 |
71 | function on_item_focus_change() {
72 | panel.item_focus_change();
73 | }
74 |
75 | function on_playback_dynamic_info_track() {
76 | panel.item_focus_change();
77 | }
78 |
79 | function on_playback_new_track() {
80 | panel.item_focus_change();
81 | }
82 |
83 | function on_playback_stop(reason) {
84 | if (reason != 2) {
85 | panel.item_focus_change();
86 | }
87 | }
88 |
89 | function on_playlist_switch() {
90 | panel.item_focus_change();
91 | }
--------------------------------------------------------------------------------
/packages/ArtistBio/{D4B0E6A2-3432-4647-9870-AF87D78B7251}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "marc2003",
3 | "description": "Based on https://github.com/TheQwertiest/smp_2003",
4 | "enableDragDrop": false,
5 | "id": "{D4B0E6A2-3432-4647-9870-AF87D78B7251}",
6 | "name": "CaTRoX: Artist biography",
7 | "shouldGrabFocus": true,
8 | "version": "1.4.0"
9 | }
--------------------------------------------------------------------------------
/packages/ArtistPhotos/{C52BF208-9BEF-43DC-A0ED-FA9710E7BA55}/main.js:
--------------------------------------------------------------------------------
1 | const common_package_id = '{1583C4B7-53AD-403F-8F7E-CB20490AAA26}';
2 | include(`${utils.GetPackageInfo(common_package_id).Directories.Scripts}/Common.js`);
3 | qwr_utils.common_include([
4 | 'js_marc2003/js/panel.js',
5 | 'js_marc2003/js/thumbs.js'
6 | ]);
7 |
8 | let panel = new _panel(true);
9 | let thumbs = new _thumbs();
10 |
11 | panel.item_focus_change();
12 |
13 | function on_colours_changed() {
14 | panel.colours_changed();
15 | window.Repaint();
16 | }
17 |
18 | function on_font_changed() {
19 | panel.font_changed();
20 | window.Repaint();
21 | }
22 |
23 | function on_item_focus_change() {
24 | panel.item_focus_change();
25 | }
26 |
27 | function on_key_down(k) {
28 | thumbs.key_down(k);
29 | }
30 |
31 | function on_metadb_changed() {
32 | thumbs.metadb_changed();
33 | }
34 |
35 | function on_mouse_lbtn_dblclk(x, y) {
36 | thumbs.lbtn_dblclk(x, y);
37 | }
38 |
39 | function on_mouse_lbtn_up(x, y) {
40 | thumbs.lbtn_up(x, y);
41 | }
42 |
43 | function on_mouse_move(x, y) {
44 | thumbs.move(x, y);
45 | }
46 |
47 | function on_mouse_rbtn_up(x, y) {
48 | return panel.rbtn_up(x, y, thumbs);
49 | }
50 |
51 | function on_mouse_wheel(s) {
52 | thumbs.wheel(s);
53 | }
54 |
55 | function on_paint(gr) {
56 | panel.paint(gr);
57 | thumbs.paint(gr);
58 | }
59 |
60 | function on_playback_dynamic_info_track() {
61 | panel.item_focus_change();
62 | }
63 |
64 | function on_playback_new_track() {
65 | panel.item_focus_change();
66 | }
67 |
68 | function on_playback_time() {
69 | thumbs.playback_time();
70 | }
71 |
72 | function on_playback_stop(reason) {
73 | if (reason != 2) {
74 | panel.item_focus_change();
75 | }
76 | }
77 |
78 | function on_playlist_switch() {
79 | panel.item_focus_change();
80 | }
81 |
82 | function on_size() {
83 | panel.size();
84 | thumbs.size();
85 | }
86 |
--------------------------------------------------------------------------------
/packages/ArtistPhotos/{C52BF208-9BEF-43DC-A0ED-FA9710E7BA55}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "marc2003",
3 | "description": "Based on https://github.com/TheQwertiest/smp_2003",
4 | "enableDragDrop": false,
5 | "id": "{C52BF208-9BEF-43DC-A0ED-FA9710E7BA55}",
6 | "name": "CaTRoX: Artist photos",
7 | "shouldGrabFocus": true,
8 | "version": "1.4.0"
9 | }
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/assets/html/MsgBox.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
14 | Placeholder title
15 |
16 |
17 |
18 | Cancel
19 | OK
20 |
21 |
125 |
126 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/assets/html/PopupWithCheckBox.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
17 | Placeholder title
18 |
19 |
20 | Placeholder main text
21 |
22 |
23 | Placeholder checkbox text
24 |
25 | OK
26 |
88 |
89 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/assets/html/styles10.css:
--------------------------------------------------------------------------------
1 | body { color: WindowText; background-color: Menu; }
2 | input { font:caption; border: 1px solid #7A7A7A; width: 100%; }
3 | input:focus { outline: none !important; border:1px solid #0078D7; }
4 | input:hover:focus { outline: none !important; border:1px solid #0078D7; }
5 | input:hover { outline: none !important; border:1px solid #000000; }
6 | label { font:caption; }
7 | button { font:caption; background: #E1E1E1; color:ButtonText; border: 1px solid #ADADAD; margin: 5px; padding: 3px; width: 70px; }
8 | button:focus { outline: none !important; border:2px solid #0078D7; padding: 2px; }
9 | button:hover { background: #e5f1fb; outline: none !important; border:1px solid #0078D7; padding: 3px; }div { overflow: hidden; }
10 | button:focus:hover { background: #e5f1fb; outline: none !important; border:2px solid #0078D7; padding: 2px; }';span { display:block; overflow: hidden; padding-right:10px; }
11 | button[disabled] { background: #CCCCCC; color:#EBEBE4; }
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover { border: 1px solid #ADADAD; padding: 3px; }
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/assets/html/styles7.css:
--------------------------------------------------------------------------------
1 | body { color: WindowText; background-color: Menu; }
2 | input { font:caption; border: 1px solid #7A7A7A; width: 100%; }
3 | input:focus { outline: none !important; border:1px solid #0078D7; }
4 | input:hover:focus { outline: none !important; border:1px solid #0078D7; }
5 | input:hover { outline: none !important; border:1px solid #000000; }
6 | label { font:caption; }
7 | button { font:caption; background: #E1E1E1; color:ButtonText; border: 1px solid #ADADAD; margin: 5px; padding: 3px; width: 70px; }
8 | button:focus { border: 1px solid #0078D7; padding: 3px; }
9 | button:hover { background: #e5f1fb; border: 1px solid #0078D7; padding: 3px; }
10 | button:focus:hover { background: #e5f1fb; border:1px solid #0078D7; padding: 3px; }
11 | button[disabled] { background: #CCCCCC; color:#EBEBE4; }
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover { border: 1px solid #ADADAD; padding: 3px; }
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/main.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | include('Common.js');
4 |
5 | function on_paint(gr) {
6 | gr.DrawString(
7 | 'This is an utility package. Does nothing by itself',
8 | gdi.Font('Segoe UI', 12),
9 | 0xFF000000, 0, 0, 0, 0);
10 | }
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "Scripts used in other packages of CaTRoX theme.\nDoes nothing by itself.\nScripts in `js_marc2003` directory were originally made by marc2003",
4 | "enableDragDrop": false,
5 | "id": "{1583C4B7-53AD-403F-8F7E-CB20490AAA26}",
6 | "name": "CaTRoX: Utilities",
7 | "shouldGrabFocus": false,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/Control_PssSwitch.js:
--------------------------------------------------------------------------------
1 | include('Common.js');
2 |
3 | var pss_switch = new function() {
4 |
5 | /**
6 | * @constructor
7 | */
8 | function StateObject(name_arg, states_list_arg, default_state_arg) {
9 |
10 | // public:
11 |
12 | Object.defineProperty(this, "state", {
13 |
14 | /**
15 | * @return {string}
16 | */
17 | get : function () {
18 | return cur_state;
19 | },
20 |
21 | /**
22 | * @param {string} val
23 | */
24 | set : function (val) {
25 | cur_state = val;
26 | write_state(val);
27 | }
28 | });
29 |
30 | this.refresh = function() {
31 | write_state(cur_state);
32 | };
33 |
34 | // private:
35 | function initialize() {
36 | cur_state = read_state(name);
37 | }
38 |
39 | function read_state() {
40 | var pathToState = settings_path + '\\' + name.toUpperCase() + '_';
41 |
42 | var state = null;
43 | _.forEach(states_list, function (item, i) {
44 | if (fso.FileExists(pathToState + i)) {
45 | state = item;
46 | return false;
47 | }
48 | });
49 | if (state !== null) {
50 | return state;
51 | }
52 |
53 | var default_idx = states_list.indexOf(default_state);
54 | fso.CreateTextFile(pathToState + default_idx, true).Close();
55 | return default_state;
56 | }
57 |
58 | function write_state(new_state) {
59 | var pathToState = settings_path + '\\' + name.toUpperCase() + '_';
60 |
61 | var index_new = states_list.indexOf(new_state);
62 |
63 | if (index_new === -1) {
64 | throw Error('Argument Error:\nUnknown state ' + new_state);
65 | }
66 |
67 | states_list.forEach(function(item,i) {
68 | _deleteFile(pathToState + i);
69 | });
70 | if (!fso.FileExists(pathToState + index_new)) {
71 | fso.CreateTextFile(pathToState + index_new, true).Close();
72 | }
73 |
74 | window.NotifyOthers(name + '_state', new_state);
75 | refresh_pss();
76 | }
77 |
78 | // private:
79 | var name = name_arg;
80 | var default_state = default_state_arg;
81 | var states_list = states_list_arg;
82 |
83 | var cur_state;
84 |
85 | initialize();
86 | }
87 |
88 | function refresh_pss() {
89 | if (fb.IsPlaying || fb.IsPaused) {
90 | fb.RunMainMenuCommand('Playback/Play or Pause');
91 | fb.RunMainMenuCommand('Playback/Play or Pause');
92 | }
93 | else {
94 | fb.RunMainMenuCommand('Playback/Play');
95 | fb.RunMainMenuCommand('Playback/Stop');
96 | }
97 | }
98 |
99 | // private:
100 | var settings_path = `${fb.ProfilePath}/theme_settings/${g_theme.folder_name}`;
101 | _createFolder(settings_path, true);
102 |
103 | /** @type {StateObject} */
104 | this.minimode = new StateObject('minimode', ['Full', 'Mini', 'UltraMini'], 'Full');
105 |
106 | /** @type {StateObject} */
107 | this.spectrum = new StateObject('spectrum', ['Hide', 'Show'], 'Show');
108 | };
109 |
110 | // Example of use in a PSS :
111 | // The first line set a panel stack global variable according to the panel current state, the second line switch the visibility of a panel named library, it show the panel when the current state is 3
112 | // $set_ps_global(MAIN_PANEL_SWITCH,$right($findfile(themes/eole/Settings/MAINPANEL_*),1))
113 | // $showpanel_c(library,$ifequal(%MAIN_PANEL_SWITCH%,3,1,0))
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/Utility_LinkedList.js:
--------------------------------------------------------------------------------
1 | include('Common.js');
2 |
3 | /**
4 | * @constructor
5 | * @template T
6 | */
7 | function LinkedList() {
8 | /**
9 | * @param{T} value
10 | * @param{?Node} prev
11 | * @param{?Node} next
12 | * @constructor
13 | * @struct
14 | * @template T
15 | */
16 | function Node(value, prev, next) {
17 | this.value = value;
18 | this.prev = prev;
19 | this.next = next;
20 | }
21 |
22 | this.clear = function () {
23 | back = null;
24 | front = null;
25 | size = 0;
26 | };
27 |
28 | /**
29 | * @param{T} value
30 | */
31 | this.push_back = function (value) {
32 | add_node(new Node(value, back, null));
33 | };
34 |
35 | /**
36 | * @param{T} value
37 | */
38 | this.push_front = function (value) {
39 | add_node(new Node(value, null, front));
40 | };
41 |
42 | this.pop_front = function () {
43 | remove_node(front);
44 | };
45 |
46 | this.pop_back = function () {
47 | remove_node(back);
48 | };
49 |
50 | /**
51 | * @param {LinkedList.Iterator} iterator
52 | */
53 | this.remove = function (iterator) {
54 | if (!_isInstanceOf(iterator, LinkedList.Iterator)) {
55 | throw TypeError('iterator', typeof iterator, 'Iterator');
56 | }
57 |
58 | if (iterator.parent !== this) {
59 | throw LogicError('Using iterator from a different list');
60 | }
61 |
62 | if (iterator.compare(this.end())) {
63 | throw LogicError('Removing invalid iterator');
64 | }
65 |
66 | remove_node(iterator.cur_node);
67 |
68 | iterator.cur_node = this.end_node;
69 | };
70 |
71 | /**
72 | * @return {T}
73 | */
74 | this.front = function () {
75 | return front.value;
76 | };
77 |
78 | /**
79 | * @return {T}
80 | */
81 | this.back = function () {
82 | return back.value;
83 | };
84 |
85 | /**
86 | * @return {number}
87 | */
88 | this.length = function () {
89 | return size;
90 | };
91 |
92 | /**
93 | * This method creates Iterator object
94 | * @return {LinkedList.Iterator}
95 | */
96 | this.begin = function () {
97 | return new LinkedList.Iterator(this, front ? front : this.end_node);
98 | };
99 |
100 | /**
101 | * This method creates Iterator object
102 | * @return {LinkedList.Iterator}
103 | */
104 | this.end = function () {
105 | return new LinkedList.Iterator(this, this.end_node);
106 | };
107 |
108 | /**
109 | * @param {Node} node
110 | */
111 | function add_node(node) {
112 | if (node.prev) {
113 | node.prev.next = node;
114 | }
115 | else {
116 | front = node;
117 | }
118 |
119 | if (node.next) {
120 | node.next.prev = node;
121 | }
122 | else {
123 | back = node;
124 | }
125 |
126 | ++size;
127 | }
128 |
129 | /**
130 | * @param {?Node} node
131 | */
132 | function remove_node(node) {
133 | if (!node) {
134 | return;
135 | }
136 |
137 | if (node.prev) {
138 | node.prev.next = node.next;
139 | }
140 | else {
141 | front = node.next;
142 | }
143 |
144 | if (node.next) {
145 | node.next.prev = node.prev;
146 | }
147 | else {
148 | back = node.prev;
149 | }
150 |
151 | --size;
152 | }
153 |
154 | /** @type {?Node} */
155 | var back = null;
156 | /** @type {?Node} */
157 | var front = null;
158 | /** @type {number} */
159 | var size = 0;
160 |
161 | /**
162 | *
163 | * @const
164 | * @type {Node}
165 |
166 | */
167 | this.end_node = new Node(null, null, null);
168 | }
169 |
170 | /**
171 | * @param {LinkedList} parent
172 | * @param {Node} node
173 | * @constructor
174 | * @template T
175 | */
176 | LinkedList.Iterator = function (parent, node) {
177 | this.increment = function () {
178 | if (this.cur_node === parent.end_node) {
179 | throw LogicError('Iterator is out of bounds');
180 | }
181 |
182 | this.cur_node = this.cur_node.next;
183 | if (!this.cur_node) {
184 | this.cur_node = parent.end_node;
185 | }
186 | };
187 |
188 | this.decrement = function () {
189 | if (this.cur_node === front) {
190 | throw LogicError('Iterator is out of bounds');
191 | }
192 |
193 | if (this.cur_node === parent.end_node) {
194 | this.cur_node = back;
195 | }
196 | else {
197 | this.cur_node = this.cur_node.prev;
198 | }
199 | };
200 |
201 | /**
202 | * @return {T}
203 | */
204 | this.value = function () {
205 | if (this.cur_node === parent.end_node) {
206 | throw LogicError('Accessing end node');
207 | }
208 |
209 | return this.cur_node.value;
210 | };
211 |
212 | /**
213 | * @param {LinkedList.Iterator} iterator
214 | * @return {boolean}
215 | */
216 | this.compare = function (iterator) {
217 | if (iterator.parent !== this.parent) {
218 | throw LogicError('Comparing iterators from different lists');
219 | }
220 | return iterator.cur_node === this.cur_node;
221 | };
222 |
223 | /**
224 | * @const
225 | * @type {LinkedList}
226 | */
227 | this.parent = parent;
228 | /** @type {Node} */
229 | this.cur_node = node;
230 | };
231 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/help.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/next.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/pause.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/play.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/preferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/preferences.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/previous.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/previous.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/search.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/buttons/stop.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/case.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/case.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/gloss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/gloss.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/semi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/semi.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/cd/shadow.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/allmusic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/allmusic.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/bbc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/bbc.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/decoda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/decoda.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/discogs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/discogs.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/external.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/external.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/facebook.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/flickr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/flickr.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/google_plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/google_plus.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/home.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/imdb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/imdb.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/instagram.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/lastfm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/lastfm.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/lyrics_wikia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/lyrics_wikia.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/musicbrainz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/musicbrainz.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/myspace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/myspace.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/rateyourmusic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/rateyourmusic.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/secondhandsongs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/secondhandsongs.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/soundcloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/soundcloud.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/tumblr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/tumblr.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/twitter.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/viaf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/viaf.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/vimeo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/vimeo.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/wikidata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/wikidata.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/wikipedia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/wikipedia.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mb/youtube.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/blank600.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/blank600.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/default_artist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/default_artist.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/foobar2000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/foobar2000.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/listenbrainz_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/listenbrainz_active.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/listenbrainz_inactive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/listenbrainz_inactive.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/menu black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/menu black.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/menu white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/misc/menu white.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.cd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.cd.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.close.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.console.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.console.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.fastforward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.fastforward.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.pause.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.play.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.rewind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.rewind.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.control.stop.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.information.circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.information.circle.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.magnify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.magnify.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.minus.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.music.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.people.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.people.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.settings.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.social.lastfm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.social.lastfm.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.warning.circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/images/mono/appbar.warning.circle.png
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/js/albumart.js:
--------------------------------------------------------------------------------
1 | include('helpers.js');
2 |
3 | 'use strict';
4 |
5 | function _albumart (x, y, w, h) {
6 | this.paint = (gr) => {
7 | if (this.properties.cd.enabled) {
8 | if (this.properties.shadow.enabled) {
9 | _drawImage(gr, this.images.shadow, this.x, this.y, this.w, this.h);
10 | }
11 | _drawImage(gr, this.images.case, this.x, this.y, this.w, this.h);
12 | if (this.img) {
13 | const ratio = Math.min(this.w / this.images.case.Width, this.h / this.images.case.Height);
14 | const nw = 488 * ratio;
15 | const nh = 476 * ratio;
16 | const nx = this.x + Math.floor((this.w - (452 * ratio)) / 2);
17 | const ny = this.y + Math.floor((this.h - nh) / 2);
18 | _drawImage(gr, this.img, nx, ny, nw, nh, this.properties.aspect.value);
19 | }
20 | _drawImage(gr, this.images.semi, this.x, this.y, this.w, this.h);
21 | if (this.properties.gloss.enabled) {
22 | _drawImage(gr, this.images.gloss, this.x, this.y, this.w, this.h);
23 | }
24 | } else if (this.img) {
25 | _drawImage(gr, this.img, this.x, this.y, this.w, this.h, this.properties.aspect.value);
26 | }
27 | }
28 |
29 | this.metadb_changed = () => {
30 | this.img = null;
31 | this.tooltip = this.path = '';
32 | if (panel.metadb) {
33 | get_album_art(this);
34 | } else {
35 | window.Repaint();
36 | }
37 | }
38 |
39 | this.trace = (x, y) => {
40 | return x > this.x && x < this.x + this.w && y > this.y && y < this.y + this.h;
41 | }
42 |
43 | this.wheel = (s) => {
44 | if (this.trace(this.mx, this.my)) {
45 | let id = this.properties.id.value - s;
46 | if (id < 0) {
47 | id = 4;
48 | }
49 | if (id > 4) {
50 | id = 0;
51 | }
52 | this.properties.id.value = id;
53 | _tt('');
54 | panel.item_focus_change();
55 | return true;
56 | } else {
57 | return false;
58 | }
59 | }
60 |
61 | this.move = (x, y) => {
62 | this.mx = x;
63 | this.my = y;
64 | if (this.trace(x, y)) {
65 | if (this.img) {
66 | _tt(this.tooltip);
67 | }
68 | this.hover = true;
69 | return true;
70 | } else {
71 | if (this.hover) {
72 | _tt('');
73 | }
74 | this.hover = false;
75 | return false;
76 | }
77 | }
78 |
79 | this.lbtn_dblclk = (x, y) => {
80 | if (this.trace(x, y)) {
81 | if (panel.metadb && panel.metadb.Path == this.path) {
82 | _explorer(this.path);
83 | } else if (utils.IsFile(this.path)) {
84 | _run(this.path);
85 | }
86 | return true;
87 | } else {
88 | return false;
89 | }
90 | }
91 |
92 | this.rbtn_up = (x, y) => {
93 | panel.m.AppendMenuItem(MF_STRING, 1000, 'Refresh');
94 | panel.m.AppendMenuSeparator();
95 | panel.m.AppendMenuItem(MF_STRING, 1001, 'CD Jewel Case');
96 | panel.m.CheckMenuItem(1001, this.properties.cd.enabled);
97 | panel.m.AppendMenuItem(this.properties.cd.enabled ? MF_STRING : MF_GRAYED, 1002, 'Gloss effect');
98 | panel.m.CheckMenuItem(1002, this.properties.gloss.enabled);
99 | panel.m.AppendMenuItem(this.properties.cd.enabled ? MF_STRING : MF_GRAYED, 1003, 'Shadow effect');
100 | panel.m.CheckMenuItem(1003, this.properties.shadow.enabled);
101 | panel.m.AppendMenuSeparator();
102 | _.forEach(this.ids, (item, i) => {
103 | panel.m.AppendMenuItem(MF_STRING, i + 1010, item);
104 | });
105 | panel.m.CheckMenuRadioItem(1010, 1014, this.properties.id.value + 1010);
106 | panel.m.AppendMenuSeparator();
107 | _.forEach(this.aspects, (item, i) => {
108 | panel.m.AppendMenuItem(MF_STRING, i + 1020, item);
109 | });
110 | panel.m.CheckMenuRadioItem(1020, 1023, this.properties.aspect.value + 1020);
111 | panel.m.AppendMenuSeparator();
112 | panel.m.AppendMenuItem(utils.IsFile(this.path) ? MF_STRING : MF_GRAYED, 1030, 'Open containing folder');
113 | panel.m.AppendMenuSeparator();
114 | panel.m.AppendMenuItem(panel.metadb ? MF_STRING : MF_GRAYED, 1040, 'Google image search');
115 | panel.m.AppendMenuSeparator();
116 | }
117 |
118 | this.rbtn_up_done = (idx) => {
119 | switch (idx) {
120 | case 1000:
121 | panel.item_focus_change();
122 | break;
123 | case 1001:
124 | this.properties.cd.toggle();
125 | window.Repaint();
126 | break;
127 | case 1002:
128 | this.properties.gloss.toggle();
129 | window.RepaintRect(this.x, this.y, this.w, this.h);
130 | break;
131 | case 1003:
132 | this.properties.shadow.toggle();
133 | window.RepaintRect(this.x, this.y, this.w, this.h);
134 | break;
135 | case 1010:
136 | case 1011:
137 | case 1012:
138 | case 1013:
139 | case 1014:
140 | this.properties.id.value = idx - 1010;
141 | panel.item_focus_change();
142 | break;
143 | case 1020:
144 | case 1021:
145 | case 1022:
146 | case 1023:
147 | this.properties.aspect.value = idx - 1020;
148 | window.RepaintRect(this.x, this.y, this.w, this.h);
149 | break;
150 | case 1030:
151 | _explorer(this.path);
152 | break;
153 | case 1040:
154 | _run('https://www.google.com/search?tbm=isch&q=' + encodeURIComponent(panel.tf('%album artist%[ %album%]')));
155 | break;
156 | }
157 | }
158 |
159 | this.key_down = (k) => {
160 | switch (k) {
161 | case VK_LEFT:
162 | case VK_UP:
163 | this.wheel(1);
164 | return true;
165 | case VK_RIGHT:
166 | case VK_DOWN:
167 | this.wheel(-1);
168 | return true;
169 | default:
170 | return false;
171 | }
172 | }
173 |
174 | let get_album_art = async (obj) => {
175 | if (!panel.metadb) return;
176 | let result = await utils.GetAlbumArtAsyncV2(window.ID, panel.metadb, obj.properties.id.value);
177 | if (panel.metadb && result.image) {
178 | obj.img = result.image;
179 | obj.path = result.path;
180 | obj.tooltip = 'Original dimensions: ' + obj.img.Width + 'x' + obj.img.Height + 'px';
181 | if (utils.IsFile(obj.path)) {
182 | obj.tooltip += '\nPath: ' + obj.path;
183 | if (panel.metadb.Path != obj.path) {
184 | obj.tooltip += '\nSize: ' + utils.FormatFileSize(utils.FileTest(obj.path, 's'));
185 | }
186 | }
187 | }
188 | window.Repaint();
189 | }
190 |
191 | this.x = x;
192 | this.y = y;
193 | this.w = w;
194 | this.h = h;
195 | this.mx = 0;
196 | this.my = 0;
197 | this.tooltip = '';
198 | this.img = null;
199 | this.path = null;
200 | this.hover = false;
201 | this.aspects = ['Crop (focus on centre)', 'Crop (focus on top)', 'Stretch', 'Centre'];
202 | this.ids = ['Front', 'Back', 'Disc', 'Icon', 'Artist'];
203 | this.images = {
204 | shadow : _img('cd\\shadow.png'),
205 | case : _img('cd\\case.png'),
206 | semi : _img('cd\\semi.png'),
207 | gloss : _img('cd\\gloss.png')
208 | };
209 | this.properties = {
210 | aspect : new _p('2K3.ARTREADER.ASPECT', image.crop),
211 | gloss : new _p('2K3.ARTREADER.GLOSS', false),
212 | cd : new _p('2K3.ARTREADER.CD', false),
213 | id : new _p('2K3.ARTREADER.ID', 0),
214 | shadow : new _p('2K3.ARTREADER.SHADOW', false)
215 | };
216 | }
217 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/js/panel.js:
--------------------------------------------------------------------------------
1 | include('helpers.js');
2 |
3 | 'use strict';
4 |
5 | function _panel(custom_background = false) {
6 | this.item_focus_change = () => {
7 | if (this.metadb_func) {
8 | if (this.selection.value == 0) {
9 | this.metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
10 | } else {
11 | this.metadb = fb.GetFocusItem();
12 | }
13 | if (this.metadb) {
14 | on_metadb_changed();
15 | }
16 | else {
17 | window.Repaint();
18 | }
19 | if (!this.metadb) {
20 | _tt('');
21 | }
22 | }
23 | }
24 |
25 | this.colours_changed = () => {
26 | if (window.InstanceType) {
27 | this.colours.background = window.GetColourDUI(1);
28 | this.colours.text = window.GetColourDUI(0);
29 | this.colours.highlight = window.GetColourDUI(2);
30 | } else {
31 | this.colours.background = window.GetColourCUI(3);
32 | this.colours.text = window.GetColourCUI(0);
33 | this.colours.highlight = _blendColours(this.colours.text, this.colours.background, 0.4);
34 | }
35 | this.colours.header = this.colours.highlight & 0x45FFFFFF;
36 | }
37 |
38 | this.font_changed = () => {
39 | let name;
40 | let font = window.InstanceType ? window.GetFontDUI(0) : window.GetFontCUI(0);
41 | if (font) {
42 | name = font.Name;
43 | } else {
44 | name = 'Segoe UI';
45 | console.log(N, 'Unable to use default font. Using', name, 'instead.');
46 | }
47 | this.fonts.title = _gdiFont(name, 12, 1);
48 | this.fonts.normal = _gdiFont(name, this.fonts.size.value);
49 | this.fonts.fixed = _gdiFont('Lucida Console', this.fonts.size.value);
50 | this.row_height = this.fonts.normal.Height;
51 | _.invokeMap(this.list_objects, 'size');
52 | _.invokeMap(this.list_objects, 'update');
53 | _.invokeMap(this.text_objects, 'size');
54 | }
55 |
56 | this.size = () => {
57 | this.w = window.Width;
58 | this.h = window.Height;
59 | }
60 |
61 | this.paint = (gr) => {
62 | let col;
63 | switch (true) {
64 | case window.IsTransparent:
65 | return;
66 | case !this.custom_background:
67 | case this.colours.mode.value == 0:
68 | col = this.colours.background;
69 | break;
70 | case this.colours.mode.value == 1:
71 | col = utils.GetSysColour(15);
72 | break;
73 | case this.colours.mode.value == 2:
74 | col = this.colours.custom_background.value;
75 | break;
76 | }
77 | gr.FillSolidRect(0, 0, this.w, this.h, col);
78 | }
79 |
80 | this.rbtn_up = (x, y, object) => {
81 | this.m = window.CreatePopupMenu();
82 | this.s1 = window.CreatePopupMenu();
83 | this.s2 = window.CreatePopupMenu();
84 | this.s3 = window.CreatePopupMenu();
85 | this.s10 = window.CreatePopupMenu();
86 | this.s11 = window.CreatePopupMenu();
87 | this.s12 = window.CreatePopupMenu();
88 | this.s13 = window.CreatePopupMenu();
89 | // panel 1-999
90 | // object 1000+
91 | if (object) {
92 | object.rbtn_up(x, y);
93 | }
94 | if (this.list_objects.length || this.text_objects.length) {
95 | _.forEach(this.fonts.sizes, (item) => {
96 | this.s1.AppendMenuItem(MF_STRING, item, item);
97 | });
98 | this.s1.CheckMenuRadioItem(_.first(this.fonts.sizes), _.last(this.fonts.sizes), this.fonts.size.value);
99 | this.s1.AppendTo(this.m, MF_STRING, 'Font size');
100 | this.m.AppendMenuSeparator();
101 | }
102 | if (this.custom_background) {
103 | this.s2.AppendMenuItem(MF_STRING, 100, window.InstanceType ? 'Use default UI setting' : 'Use columns UI setting');
104 | this.s2.AppendMenuItem(MF_STRING, 101, 'Splitter');
105 | this.s2.AppendMenuItem(MF_STRING, 102, 'Custom');
106 | this.s2.CheckMenuRadioItem(100, 102, this.colours.mode.value + 100);
107 | this.s2.AppendMenuSeparator();
108 | this.s2.AppendMenuItem(this.colours.mode.value == 2 ? MF_STRING : MF_GRAYED, 103, 'Set custom colour...');
109 | this.s2.AppendTo(this.m, window.IsTransparent ? MF_GRAYED : MF_STRING, 'Background');
110 | this.m.AppendMenuSeparator();
111 | }
112 | if (this.metadb_func) {
113 | this.s3.AppendMenuItem(MF_STRING, 110, 'Prefer now playing');
114 | this.s3.AppendMenuItem(MF_STRING, 111, 'Follow selected track (playlist)');
115 | this.s3.CheckMenuRadioItem(110, 111, this.selection.value + 110);
116 | this.s3.AppendTo(this.m, MF_STRING, 'Selection mode');
117 | this.m.AppendMenuSeparator();
118 | }
119 | this.m.AppendMenuItem(MF_STRING, 120, 'Configure...');
120 | const idx = this.m.TrackPopupMenu(x, y);
121 | switch (true) {
122 | case idx == 0:
123 | break;
124 | case idx <= 20:
125 | this.fonts.size.value = idx;
126 | this.font_changed();
127 | window.Repaint();
128 | break;
129 | case idx == 100:
130 | case idx == 101:
131 | case idx == 102:
132 | this.colours.mode.value = idx - 100;
133 | window.Repaint();
134 | break;
135 | case idx == 103:
136 | this.colours.custom_background.value = utils.ColourPicker(window.ID, this.colours.custom_background.value);
137 | window.Repaint();
138 | break;
139 | case idx == 110:
140 | case idx == 111:
141 | this.selection.value = idx - 110;
142 | this.item_focus_change();
143 | break;
144 | case idx == 120:
145 | window.ShowConfigure();
146 | break;
147 | case idx > 999:
148 | if (object) {
149 | object.rbtn_up_done(idx);
150 | }
151 | break;
152 | }
153 | return true;
154 | }
155 |
156 | this.tf = (t) => {
157 | if (!this.metadb) {
158 | return '';
159 | }
160 | if (!this.tfo[t]) {
161 | this.tfo[t] = fb.TitleFormat(t);
162 | }
163 | const path = this.tfo['$if2(%__@%,%path%)'].EvalWithMetadb(this.metadb);
164 | if (fb.IsPlaying && (path.startsWith('http') || path.startsWith('mms'))) {
165 | return this.tfo[t].Eval();
166 | } else {
167 | return this.tfo[t].EvalWithMetadb(this.metadb);
168 | }
169 | }
170 |
171 | window.DlgCode = DLGC_WANTALLKEYS;
172 | this.fonts = {};
173 | this.colours = {};
174 | this.w = 0;
175 | this.h = 0;
176 | this.metadb = fb.GetFocusItem();
177 | this.metadb_func = typeof on_metadb_changed == 'function';
178 | this.fonts.sizes = [10, 12, 14, 16];
179 | this.fonts.size = new _p('2K3.PANEL.FONTS.SIZE', 12);
180 | if (this.metadb_func) {
181 | this.selection = new _p('2K3.PANEL.SELECTION', 0);
182 | }
183 | if (custom_background) {
184 | this.custom_background = true;
185 | this.colours.mode = new _p('2K3.PANEL.COLOURS.MODE', 0);
186 | this.colours.custom_background = new _p('2K3.PANEL.COLOURS.CUSTOM.BACKGROUND', _RGB(0, 0, 0));
187 | } else {
188 | this.custom_background = false;
189 | }
190 | this.list_objects = [];
191 | this.text_objects = [];
192 | this.tfo = {
193 | '$if2(%__@%,%path%)' : fb.TitleFormat('$if2(%__@%,%path%)')
194 | };
195 | this.font_changed();
196 | this.colours_changed();
197 | }
198 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/js/rating.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | function _rating(x, y, size, colour) {
4 | this.paint = (gr) => {
5 | if (panel.metadb) {
6 | gr.SetTextRenderingHint(4);
7 | for (let i = 0; i < this.get_max(); i++) {
8 | gr.DrawString(i + 1 > (this.hover ? this.hrating : this.rating) ? chars.rating_off : chars.rating_on, this.font, this.colour, this.x + (i * this.h), this.y, this.h, this.h, SF_CENTRE);
9 | }
10 | }
11 | }
12 |
13 | this.metadb_changed = () => {
14 | if (panel.metadb) {
15 | this.hover = false;
16 | this.rating = this.get_rating();
17 | this.hrating = this.rating;
18 | this.tiptext = this.properties.mode.value == 0 ? 'Choose a mode first.' : panel.tf('Rate "%title%" by "%artist%".');
19 | }
20 | window.Repaint();
21 | }
22 |
23 | this.trace = (x, y) => {
24 | return x > this.x && x < this.x + this.w && y > this.y && y < this.y + this.h;
25 | }
26 |
27 | this.move = (x, y) => {
28 | if (this.trace(x, y)) {
29 | if (panel.metadb) {
30 | _tt(this.tiptext);
31 | this.hover = true;
32 | this.hrating = Math.ceil((x - this.x) / this.h);
33 | window.RepaintRect(this.x, this.y, this.w, this.h);
34 | }
35 | return true;
36 | } else {
37 | this.leave();
38 | return false;
39 | }
40 | }
41 |
42 | this.leave = () => {
43 | if (this.hover) {
44 | _tt('');
45 | this.hover = false;
46 | window.RepaintRect(this.x, this.y, this.w, this.h);
47 | }
48 | }
49 |
50 | this.lbtn_up = (x, y) => {
51 | if (this.trace(x, y)) {
52 | if (panel.metadb) {
53 | this.set_rating();
54 | }
55 | return true;
56 | } else {
57 | return false;
58 | }
59 | }
60 |
61 | this.rbtn_up = (x, y) => {
62 | _.forEach(this.modes, (item, i) => {
63 | panel.s10.AppendMenuItem(i == 1 && !this.foo_playcount ? MF_GRAYED : MF_STRING, i + 1000, item);
64 | });
65 | panel.s10.CheckMenuRadioItem(1000, 1003, this.properties.mode.value + 1000);
66 | panel.s10.AppendTo(panel.m, MF_STRING, 'Mode');
67 | panel.m.AppendMenuItem(this.properties.mode.value == 2 ? MF_STRING : MF_GRAYED, 1004, 'Tag name');
68 | panel.m.AppendMenuItem(this.properties.mode.value > 1 ? MF_STRING : MF_GRAYED, 1005, 'Max value...');
69 | panel.m.AppendMenuSeparator();
70 | }
71 |
72 | this.rbtn_up_done = (idx) => {
73 | let tmp;
74 | switch (true) {
75 | case idx <= 1003:
76 | this.properties.mode.value = idx - 1000;
77 | break;
78 | case idx == 1004:
79 | tmp = utils.InputBox(window.ID, 'Enter a custom tag name. Do not use %%. Defaults to "rating" if left blank.', window.Name, this.properties.tag.value);
80 | this.properties.tag.value = tmp || this.properties.tag.default_;
81 | break;
82 | case idx == 1005:
83 | tmp = utils.InputBox(window.ID, 'Enter a maximum value. Defaults to "5" if left blank.', window.Name, this.properties.max.value);
84 | this.properties.max.value = tmp || this.properties.max.default_;
85 | break;
86 | }
87 | this.w = this.h * this.get_max();
88 | panel.item_focus_change();
89 | }
90 |
91 | this.get_rating = () => {
92 | switch (this.properties.mode.value) {
93 | case 1: // foo_playcount
94 | return panel.tf('$if2(%rating%,0)');
95 | case 2: // file tag
96 | let f = panel.metadb.GetFileInfo();
97 | const idx = f.MetaFind(this.properties.tag.value);
98 | const ret = idx > -1 ? f.MetaValue(idx, 0) : 0;
99 | return ret;
100 | case 3: // Spider Monkey Panel DB
101 | return panel.tf('$if2(%smp_rating%,0)');
102 | default:
103 | return 0;
104 | }
105 | }
106 |
107 | this.set_rating = () => {
108 | switch (this.properties.mode.value) {
109 | case 1: // foo_playcount
110 | fb.RunContextCommandWithMetadb('Playback Statistics/Rating/' + (this.hrating == this.rating ? '' : this.hrating), panel.metadb, 8);
111 | break;
112 | case 2: // file tag
113 | const tmp = this.hrating == this.rating ? '' : this.hrating;
114 | let obj = {};
115 | obj[this.properties.tag.value] = tmp;
116 | let handles = new FbMetadbHandleList(panel.metadb);
117 | handles.UpdateFileInfoFromJSON(JSON.stringify(obj));
118 | break;
119 | case 3: // Spider Monkey Panel DB
120 | panel.metadb.SetRating(this.hrating == this.rating ? 0 : this.hrating);
121 | panel.metadb.RefreshStats();
122 | break;
123 | }
124 | }
125 |
126 | this.get_max = () => {
127 | return this.properties.mode.value < 2 ? 5 : this.properties.max.value;
128 | }
129 |
130 | this.properties = {
131 | mode : new _p('2K3.RATING.MODE', 0), // 0 not set 1 foo_playcount 2 file tag 3 Spider Monkey Panel DB
132 | max : new _p('2K3.RATING.MAX', 5), // only use for file tag/Spider Monkey Panel DB
133 | tag: new _p('2K3.RATING.TAG', 'rating')
134 | };
135 | this.x = x;
136 | this.y = y;
137 | this.h = _scale(size);
138 | this.w = this.h * this.get_max();
139 | this.colour = colour;
140 | this.hover = false;
141 | this.rating = 0;
142 | this.hrating = 0;
143 | this.font = gdi.Font('FontAwesome', this.h - 2);
144 | this.modes = ['Not Set', 'foo_playcount', 'File Tag', 'Spider Monkey Panel DB'];
145 | this.foo_playcount = _cc('foo_playcount');
146 | window.SetTimeout(() => {
147 | if (this.properties.mode.value == 1 && !this.foo_playcount) { // if mode is set to 1 (foo_playcount) but component is missing, reset to 0.
148 | this.properties.mode.value = 0;
149 | }
150 | if (this.properties.mode.value == 0) {
151 | fb.ShowPopupMessage('This script has now been updated and supports 3 different modes.\n\nAs before, you can use foo_playcount which is limited to 5 stars.\n\nThe 2nd option is writing to your file tags. You can choose the tag name and a max value via the right click menu.\n\nLastly, a new "Playback Stats" database has been built into Spider Monkey Panel. It is bound to just "%artist% - %title%". This uses %smp_rating% which can be accessed via title formatting in all other components/search dialogs. This also supports a custom max value.\n\nAll options are available on the right click menu. If you do not see the new options when right clicking, make sure you have the latest "rating.txt" imported from the "samples\\complete" folder.', window.Name);
152 | }
153 | }, 500);
154 | }
155 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/js/seekbar.js:
--------------------------------------------------------------------------------
1 | include('helpers.js');
2 |
3 | 'use strict';
4 |
5 | function _seekbar(x, y, w, h) {
6 | this.playback_seek = () => {
7 | this.repaint();
8 | }
9 |
10 | this.repaint = () => {
11 | const expXY = 2,
12 | expWH = expXY * 2;
13 |
14 | window.RepaintRect(this.x - expXY, this.y - expXY, this.w + expWH, this.h + expWH);
15 | }
16 |
17 | this.playback_stop = () => {
18 | this.playback_seek();
19 | }
20 |
21 | this.playback_start = () => {
22 | this.playback_seek();
23 | }
24 |
25 | this.playback_pause = (isPlaying) => {
26 | this.playback_seek();
27 | }
28 |
29 | this.trace = (x, y) => {
30 | let m = this.drag ? 200 : 0;
31 | return x > this.x - m && x < this.x + this.w + m && y > this.y - m && y < this.y + this.h + m;
32 | }
33 |
34 | this.move = (x, y) => {
35 | if (this.trace(x, y) || this.drag) {
36 | if (fb.IsPlaying && fb.PlaybackLength > 0) {
37 | x -= this.x;
38 | this.drag_seek = x < 0 ? 0 : x > this.w ? 1 : x / this.w;
39 |
40 | if (this.drag) {
41 | if (this.show_tt) {
42 | this.tt.showImmediate(utils.FormatDuration(fb.PlaybackLength * this.drag_seek));
43 | }
44 | this.playback_seek();
45 | }
46 | }
47 | if (!this.hover) {
48 | this.hover = true;
49 | if (this.show_tt) {
50 | this.tt.showDelayed("Seek");
51 | }
52 | alpha_timer.start();
53 | }
54 |
55 | return true;
56 | }
57 | else {
58 | if (this.hover) {
59 | this.tt.clear();
60 |
61 | this.hover = false;
62 | alpha_timer.start();
63 | }
64 | this.drag = false;
65 |
66 | return false;
67 | }
68 | }
69 |
70 | this.lbtn_down = (x, y) => {
71 | if (this.trace(x, y)) {
72 | if (fb.IsPlaying && fb.PlaybackLength > 0)
73 | this.drag = true;
74 | return true;
75 | }
76 | else {
77 | return false;
78 | }
79 | }
80 |
81 | this.lbtn_up = (x, y) => {
82 | if (this.trace(x, y) || this.drag) {
83 | if (this.drag) {
84 | this.drag = false;
85 | fb.PlaybackTime = fb.PlaybackLength * this.drag_seek;
86 | }
87 | return true;
88 | }
89 | else {
90 | return false;
91 | }
92 | };
93 |
94 | this.leave = () => {
95 | if (this.drag) {
96 | return;
97 | }
98 | if (this.hover) {
99 | this.tt.clear();
100 |
101 | this.hover = false;
102 | alpha_timer.start();
103 | }
104 | this.drag = false;
105 | };
106 |
107 | this.pos = function () {
108 | return _.ceil(this.w * (this.drag ? this.drag_seek : fb.PlaybackTime / fb.PlaybackLength));
109 | };
110 |
111 | this.x = x;
112 | this.y = y;
113 | this.w = w;
114 | this.h = h;
115 | this.hover = false;
116 | this.hover_alpha = 0;
117 | this.drag = false;
118 | this.drag_seek = 0;
119 | this.show_tt = false;
120 | this.tt = new _tt_handler;
121 |
122 | var that = this;
123 |
124 | var alpha_timer = new _alpha_timer([that], (item) => {
125 | return item.hover;
126 | });
127 | };
128 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/js/volume.js:
--------------------------------------------------------------------------------
1 | include('helpers.js');
2 |
3 | 'use strict';
4 |
5 | /**
6 | *@constructor
7 | */
8 | function _volume(x, y, w, h) {
9 | this.repaint = () => {
10 | const expXY = 2,
11 | expWH = expXY * 2;
12 | window.RepaintRect(this.x - expXY, this.y - expXY, this.w + expWH, this.h + expWH);
13 | };
14 | this.volume_change = () => {
15 | this.repaint();
16 | }
17 |
18 | this.trace = (x, y) => {
19 | const m = this.drag ? 200 : 0;
20 | return x > this.x - m && x < this.x + this.w + m && y > this.y - m && y < this.y + this.h + m;
21 | }
22 |
23 | this.wheel = (s) => {
24 | if (!this.trace(this.mx, this.my)) {
25 | return false;
26 | }
27 |
28 | if (s > 0) {
29 | fb.VolumeUp();
30 | }
31 | else {
32 | fb.VolumeDown();
33 | }
34 |
35 | if (this.show_tt) {
36 | var text = fb.Volume.toFixed(2) + " dB (" + _toVolume(fb.Volume) + "%)";
37 | this.tt.showImmediate(text);
38 | }
39 |
40 | return true;
41 | }
42 |
43 | this.move = (x, y) => {
44 | this.mx = x;
45 | this.my = y;
46 | if (this.trace(x, y) || this.drag) {
47 | x -= this.x;
48 | const pos = x < 0 ? 0 : x > this.w ? 1 : x / this.w;
49 | this.drag_vol = _toDb(pos);
50 | if (this.drag) {
51 | fb.Volume = this.drag_vol;
52 | if (this.show_tt) {
53 | const text = fb.Volume.toFixed(2) + " dB (" + _toVolume(fb.Volume) + "%)";
54 | this.tt.showImmediate(text);
55 | }
56 |
57 | }
58 |
59 | if (!this.hover) {
60 | this.hover = true;
61 | if (this.show_tt) {
62 | this.tt.showDelayed("Volume");
63 | }
64 | alpha_timer.start();
65 | }
66 |
67 | return true;
68 | }
69 | else {
70 | if (this.hover) {
71 | this.tt.clear();
72 |
73 | this.hover = false;
74 | alpha_timer.start();
75 | }
76 | this.drag = false;
77 |
78 | return false;
79 | }
80 | }
81 |
82 | this.lbtn_down = (x, y) => {
83 | if (this.trace(x, y)) {
84 | this.drag = true;
85 | return true;
86 | }
87 | else {
88 | return false;
89 | }
90 | }
91 |
92 | this.lbtn_up = (x, y) => {
93 | if (this.trace(x, y)) {
94 | if (this.drag) {
95 | this.drag = false;
96 | fb.Volume = this.drag_vol;
97 | }
98 | return true;
99 | }
100 | else {
101 | return false;
102 | }
103 | }
104 |
105 | this.leave = () => {
106 | if (this.drag) {
107 | return;
108 | }
109 |
110 | if (this.hover) {
111 | this.hover = false;
112 | alpha_timer.start();
113 | }
114 | this.tt.clear();
115 | this.drag = false;
116 | }
117 |
118 | this.pos = (type) => {
119 | return _.ceil((type === "h" ? this.h : this.w) * (Math.pow(10, fb.Volume / 50) - 0.01) / 0.99);
120 | }
121 |
122 | this.x = x;
123 | this.y = y;
124 | this.w = w;
125 | this.h = h;
126 | this.mx = 0;
127 | this.my = 0;
128 | this.hover = false;
129 | this.hover_alpha = 0;
130 | this.drag = false;
131 | this.drag_vol = 0;
132 | this.show_tt = false;
133 | this.tt = new _tt_handler;
134 |
135 | var that = this;
136 |
137 | var alpha_timer = new _alpha_timer([that], (item) => {
138 | return item.hover;
139 | });
140 | };
141 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/vbs/download.vbs:
--------------------------------------------------------------------------------
1 | If (WScript.Arguments.Count <> 2) Then
2 | WScript.Quit
3 | End If
4 |
5 | url = WScript.Arguments(0)
6 | file = WScript.Arguments(1)
7 |
8 | Set fso = CreateObject("Scripting.FileSystemObject")
9 | If fso.FileExists(file) Then
10 | Set fso = Nothing
11 | WScript.Quit
12 | End If
13 |
14 | Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
15 | xmlhttp.open "GET", url, false
16 | xmlhttp.send()
17 |
18 | If xmlhttp.Status = 200 Then
19 | Set stream = CreateObject("ADODB.Stream")
20 | stream.Open
21 | stream.Type = 1
22 | stream.Write xmlhttp.ResponseBody
23 | stream.Position = 0
24 | stream.SaveToFile file
25 | stream.Close
26 | Set stream = Nothing
27 | End If
28 |
29 | Set fso = Nothing
30 | Set xmlhttp = Nothing
31 |
--------------------------------------------------------------------------------
/packages/Common/{1583C4B7-53AD-403F-8F7E-CB20490AAA26}/scripts/js_marc2003/vbs/test_box.vbs:
--------------------------------------------------------------------------------
1 | rem based on http://forum.script-coding.com/viewtopic.php?pid=75356#p75356
2 |
3 | rem Option Explicit:
4 |
5 |
6 | Dim completed
7 | rem Dim returnValue
8 | rem returnValue = MsgBoxMultiple("123&11&1367&1","123","321&1&7684&1&1&1&1&1&153")
9 | rem
10 | rem MsgBox returnValue(0),vbInformation,"Yay"
11 |
12 | Function MsgBoxMultiple(prompt,title,defval)
13 | Dim content, wnd, status
14 |
15 | Dim prompt_list: prompt_list = Split(prompt, "&")
16 | Dim defval_list: defval_list = Split(defval, "&")
17 |
18 | Dim val_count : val_count = UBound(prompt_list) + 1
19 |
20 | Dim block_wrap_beg : block_wrap_beg = ""
21 | Dim prompt_wrap_beg: prompt_wrap_beg = ""
22 | Dim prompt_wrap_end: prompt_wrap_end = " "
23 | Dim defval_wrap_beg1: defval_wrap_beg1 = " "
26 | Dim block_wrap_end : block_wrap_end = "
"
27 |
28 | Dim input_text
29 | Dim i
30 | For i = 0 To val_count - 1
31 | input_text = input_text + block_wrap_beg & prompt_wrap_beg & prompt_list(i) & prompt_wrap_end & defval_wrap_beg1 & i & defval_wrap_beg2 & defval_list(i) & defval_wrap_end & block_wrap_end
32 | Next
33 |
34 | content = "" &_
35 | "" &_
36 | " " &_
37 | "" &_
45 | "" &_
46 | "" &_
47 | "" &_
48 | input_text &_
49 | "Cancel " & _
50 | "OK " & _
51 | "
" &_
52 | "" &_
53 | ""
54 |
55 | Set wnd = createWindow(content,"border=dialog " &_
56 | "minimizeButton=no " &_
57 | "maximizeButton=no " &_
58 | "scroll=no " &_
59 | "showIntaskbar=yes " &_
60 | "contextMenu=no " &_
61 | "selection=no " &_
62 | "innerBorder=no")
63 |
64 | Dim window_h : window_h = 29*(UBound(prompt_list) + 1) + 83
65 | With wnd
66 | .status = 0
67 | .document.title = title
68 | .moveTo 100, 100
69 | .resizeTo 370, window_h
70 | End With
71 |
72 | wnd.hta_ok.focus
73 |
74 | Set wnd.hta_cancel.onclick = getref("hta_cancel")
75 | Set wnd.hta_ok.onclick = getref("hta_ok")
76 | Set wnd.document.body.onunload = getref("hta_onunload")
77 |
78 | Dim retVal()
79 | ReDim retVal(val_count)
80 |
81 | do until completed > 0
82 | wscript.sleep 10
83 | loop
84 | select case completed
85 | case 1
86 | MsgBoxMultiple = ""
87 | case 2
88 | MsgBoxMultiple = ""
89 | wnd.close
90 | case 3
91 | Dim cmd
92 | For i = 0 To val_count - 1
93 | cmd = "Option Explicit: retVal(i) = wnd.input_val_" & i & ".Value"
94 | Execute cmd
95 | Next
96 |
97 | MsgBoxMultiple = retVal
98 | wnd.close
99 | end select
100 | End Function
101 |
102 | Function createWindow(content,features)
103 | Dim wid, we, sw, id, i, doc
104 | Randomize:wid = Clng(Rnd*100000)
105 | Set we = CreateObject("WScript.Shell").Exec("mshta about:""" & _
106 | "" & _
107 | " " & _
108 | "" & _
109 | " " & _
110 | " """)
111 | With CreateObject("Shell.Application")
112 | For i=1 to 1000
113 | For Each sw in .Windows
114 | On Error Resume Next
115 | id = Clng(sw.id)
116 | On Error Goto 0
117 | if id = wid Then
118 | Set doc = sw.container
119 | doc.write CStr(content)
120 | Set createWindow = doc.parentWindow
121 | Exit Function
122 | End if
123 | Next
124 | Next
125 | End With
126 | we.Terminate
127 | Err.Raise vbObjectError,"createWindow","Can't connect with created window !"
128 | End Function
129 |
130 | Sub hta_onunload
131 | completed = 1
132 | end Sub
133 |
134 | Sub hta_cancel
135 | completed = 2
136 | end Sub
137 |
138 | Sub hta_ok
139 | completed = 3
140 | end Sub
141 |
142 | Sub ArrayAdd(ByRef arr, ByVal val)
143 | Dim ub
144 | If IsArray(arr) Then
145 | On Error Resume Next
146 | ub = UBound(arr)
147 | If Err.Number <> 0 Then ub = -1
148 | ReDim Preserve arr(ub + 1)
149 | arr(UBound(arr)) = val
150 | End If
151 | End Sub
152 |
--------------------------------------------------------------------------------
/packages/Controls/{043ABB6E-74F8-4DF0-92D0-744347C709F0}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{043ABB6E-74F8-4DF0-92D0-744347C709F0}",
6 | "name": "CaTRoX: Playback controls",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/LICENSE.txt:
--------------------------------------------------------------------------------
1 | License
2 |
3 | Copyright (c) 2021 WilB
4 |
5 | The above copyright notice shall be included in all
6 | copies or substantial portions of the Software.
7 |
8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
9 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
11 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
12 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
13 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
14 | SOFTWARE.
15 |
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/html/confirm.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
19 |
20 |
21 |
22 |
23 | Yes
24 | No
25 |
26 |
77 |
78 |
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/html/input.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
22 |
23 |
24 |
25 |
26 | OK
27 | Cancel
28 |
29 |
87 |
88 |
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/html/query.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
22 |
23 |
24 |
25 |
26 | OK
27 | Cancel
28 |
29 |
115 |
116 |
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/html/styles10.css:
--------------------------------------------------------------------------------
1 | body {color:WindowText; background-color:Menu; font:caption;}
2 | input {font:caption; border:1px solid #7A7A7A; width:100%;}
3 | input:focus {outline:none !important; border:1px solid #0078D7;}
4 | input:hover:focus {outline:none !important; border:1px solid #0078D7;}
5 | input:hover {outline:none !important; border:1px solid #000000;}
6 | label {font:caption;}
7 | button {font:caption; background:#E1E1E1; color:ButtonText; border:1px solid #ADADAD; margin:5px; padding:3px; width:auto; min-width:70px; display:inline-block;}
8 | button:focus {outline:none !important; border:2px solid #0078D7; padding:2px;}
9 | button:hover {background:#e5f1fb; outline:none !important; border:1px solid #0078D7; padding:3px;}div {overflow:hidden;}
10 | button:focus:hover {background:#e5f1fb; outline:none !important; border:2px solid #0078D7; padding:2px;} span {display:block; overflow:hidden; padding-right:10px;}
11 | button[disabled] {background:#CCCCCC; color:#EBEBE4;}
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover {border:1px solid #ADADAD; padding:3px;}
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/html/styles7.css:
--------------------------------------------------------------------------------
1 | body {color:WindowText; background-color:Menu; font:caption;}
2 | input {font:caption; border:1px solid #7A7A7A; width:100%;}
3 | input:focus {outline:none !important; border:1px solid #0078D7;}
4 | input:hover:focus {outline:none !important; border:1px solid #0078D7;}
5 | input:hover {outline:none !important; border:1px solid #000000;}
6 | label {font:caption;}
7 | button {font:caption; background:#E1E1E1; color:ButtonText; border:1px solid #ADADAD; margin:5px; padding:3px; width:auto; min-width:70px; display:inline-block;}
8 | button:focus {border:1px solid #0078D7; padding:3px;}
9 | button:hover {background:#e5f1fb; border:1px solid #0078D7; padding:3px;}
10 | button:focus:hover {background:#e5f1fb; border:1px solid #0078D7; padding:3px;}
11 | button[disabled] {background:#CCCCCC; color:#EBEBE4;}
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover {border:1px solid #ADADAD; padding:3px;}
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Auto DJ dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Auto DJ dark.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Auto DJ.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Auto DJ.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache dark.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache light.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache neutral [dark].png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache neutral [dark].png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache neutral [light].png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Cache neutral [light].png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button dark.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button neutral.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button small.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm button.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm logo.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm text button small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Lastfm text button small.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library folder.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library neutral.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Library.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button dark.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button neutral.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz button.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Musicbrainz logo.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/New Picture.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/New Picture.bmp
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/New Picture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/New Picture.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available dark.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available light.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Not available.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Official charts button neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Official charts button neutral.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Official charts button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Official charts button.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source green small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source green small.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source green.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source neutral small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source neutral small.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source neutral.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source neutral.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source red small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source red small.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Source red.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Youtube logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/assets/images/Youtube logo.png
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/main.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | if (typeof my_utils === 'undefined') include('utils.js');
4 |
5 | const loadAsync = window.GetProperty('Load Find & Play Asynchronously', true);
6 |
7 | async function readFiles(files) {
8 | for (const file of files) {
9 | if (window.ID) { // fix pss issue
10 | await include(my_utils.getScriptPath + file);
11 | }
12 | }
13 | }
14 |
15 | const files = [
16 | 'helpers.js',
17 | 'properties.js',
18 | 'interface.js',
19 | 'names.js',
20 | 'panel.js',
21 | 'medialibrary.js',
22 | 'text.js',
23 | 'playlists.js',
24 | 'library.js',
25 | 'blacklistvideo.js',
26 | 'web.js',
27 | 'mtags.js',
28 | 'scrollbar.js',
29 | 'autodj.js',
30 | 'albums.js',
31 | 'search.js',
32 | 'buttons.js',
33 | 'images.js',
34 | 'timers.js',
35 | 'menu.js',
36 | 'popupbox.js',
37 | 'initialise.js',
38 | 'callbacks.js'
39 | ];
40 |
41 | if (loadAsync) {
42 | readFiles(files).then(() => {
43 | if (!window.ID) return; // fix pss issue
44 | on_size();
45 | window.Repaint();
46 | });
47 | } else {
48 | files.forEach(v => include(my_utils.getScriptPath + v));
49 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "WilB",
3 | "description": "Feature rich plug-in that finds and plays music.\n Works great with youtube and your own media library.\r\n\r\nPOWERED by last.fm music discovery, MusicBrainz, Official Charts, YouTube & your own media library.\r\n\r\nDisplay & play:\r\n\r\n• full album and track discographies\r\n\r\n• top tracks, similar artists, similar songs, decades\r\n\r\n• top 100 charts (current and historic back to 1952)\r\n\r\n• can use queries or track matching with last.fm tag database (so files don't need to be tagged in any special way to identify tracks of specific genres, mood or artist locale)\n\r\n\r\nAuto DJ:\n\r\n\r\n• auto DJ option with automated weighting algorithmn that can use last.fm or own data to help select better tracks\r\n\r\nOther features:\r\n\r\n• operates on a minimum number of playlists, so there's no awkward playlist management\r\n\r\n• nowplaying pane that provides feedback or displays configurable info on current track\r\n\r\n\nTo load & play music:\r\n\r\n• click items in album & tracks pane or use context menu.\r\n\r\n• click the + in album & tracks pane for multiple items.\r\n\r\n• choose 'Auto DJ...' or 'Find tracks in library...' on context menu. Loads a new selection in a chosen style.",
4 | "enableDragDrop": false,
5 | "id": "{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}",
6 | "name": "Find & Play",
7 | "shouldGrabFocus": true,
8 | "version": "1.0.0-Beta.1"
9 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/blacklistvideo.js:
--------------------------------------------------------------------------------
1 | class BlacklistVideo {
2 | constructor() {
3 | this.artist = '';
4 | this.black_list = [];
5 | this.fn = `${panel.yttm}blacklist_video.json`;
6 | this.remove = true;
7 | this.undo = [];
8 | }
9 |
10 | // Methods
11 |
12 | list(clean_artist) {
13 | if (this.artist == clean_artist) return;
14 | this.artist = clean_artist;
15 | if (!$.file(this.fn)) return this.black_list = [];
16 | const list = $.jsonParse(this.fn, false, 'file');
17 | if (!list.blacklist[clean_artist]) return this.black_list = [];
18 | this.black_list = list.blacklist[clean_artist].map(v => v.id);
19 | }
20 |
21 | blackListed(clean_artist, id) {
22 | this.list(clean_artist);
23 | if (!this.black_list.length || !this.black_list.includes(id)) return false;
24 | return true;
25 | }
26 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/initialise.js:
--------------------------------------------------------------------------------
1 | let ui = new UserInterface;
2 | let name = new Names;
3 | let tf = new Titleformat;
4 | let vk = new Vkeys;
5 | let panel = new Panel;
6 | let ml = new MediaLibrary;
7 | let txt = new Text;
8 | let pl = new Playlists;
9 | let blk = new BlacklistVideo;
10 | let mtags = new MTags;
11 | let yt_dj = new AutoDjTracks;
12 | let alb_scrollbar = new Scrollbar;
13 | let art_scrollbar = new Scrollbar;
14 | let fav = new Favourites;
15 | fav.init();
16 |
17 | let index = new NewAutoDJ;
18 | let dj = new AutoDJ;
19 | let alb = new Albums;
20 | let filter = new Search;
21 | let search = new Search;
22 | let but = new Buttons;
23 | let popUpBox = new PopUpBox;
24 | let img = new Images;
25 | let art = new ImageCache(true);
26 | let cov = new ImageCache(false);
27 | let seeker = new Seeker;
28 | let dl_art = new Dl_art_images;
29 | let timer = new Timers;
30 | let men = new MenuItems;
31 | let lib = new Library;
32 |
33 | alb_scrollbar.type = 'alb';
34 | art_scrollbar.type = 'art';
35 | filter.type = 'filter';
36 | search.type = 'search';
37 |
38 | if (!ui.style.textOnly) {
39 | if (!ppt.showAlb) panel.setVideo();
40 | } else if ($.eval('%video_popup_status%') == 'visible') fb.RunMainMenuCommand('View/Visualizations/Video');
41 |
42 | function createImgDlFile() {
43 | const n = `${panel.yttm}foo_lastfm_img.vbs`;
44 | if (!$.file(n) || fso.GetFile(n).Size == '696') {
45 | const dl_im = 'If (WScript.Arguments.Count <> 2) Then\r\nWScript.Quit\r\nEnd If\r\n\r\nurl = WScript.Arguments(0)\r\nfile = WScript.Arguments(1)\r\n\r\nSet objFSO = Createobject("Scripting.FileSystemObject")\r\nIf objFSO.Fileexists(file) Then\r\nSet objFSO = Nothing\r\nWScript.Quit\r\nEnd If\r\n\r\nSet objXMLHTTP = CreateObject("MSXML2.XMLHTTP")\r\nobjXMLHTTP.open "GET", url, false\r\nobjXMLHTTP.send()\r\n\r\nIf objXMLHTTP.Status = 200 Then\r\nSet objADOStream = CreateObject("ADODB.Stream")\r\nobjADOStream.Open\r\nobjADOStream.Type = 1\r\nobjADOStream.Write objXMLHTTP.ResponseBody\r\nobjADOStream.Position = 0\r\nobjADOStream.SaveToFile file\r\nobjADOStream.Close\r\nSet objADOStream = Nothing\r\nEnd If\r\n\r\nSet objFSO = Nothing\r\nSet objXMLHTTP = Nothing';
46 | $.save(n, dl_im, false);
47 | }
48 | }
49 |
50 | createImgDlFile();
51 |
52 | if (ppt.btn_mode) {
53 | panel.image.show == false;
54 | panel.video.show = false;
55 | }
56 |
57 | if (ppt.mtagsInstalled) {
58 | lib.getArtistTracks(name.artist());
59 | }
60 |
61 | lib.getAlbumMetadb();
62 | ml.execute();
63 |
64 | if (!ppt.get('Software Notice Checked', false)) fb.ShowPopupMessage('License\r\n\r\nCopyright (c) 2021 WilB\r\n\r\nThe above copyright notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.', 'Find & Play');
65 | ppt.set('Software Notice Checked', true);
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/medialibrary.js:
--------------------------------------------------------------------------------
1 | class MediaLibrary {
2 | constructor() {
3 | const mtagsSync = $.split(ppt.mtagsSync, 0);
4 | ppt.mtagsInstalled = utils.CheckComponent('foo_tags', true);
5 | this.fooYouTubeInstalled = utils.CheckComponent('foo_youtube', true);
6 |
7 | this.playcount = ppt.tfPlaycount.trim();
8 | this.rating = panel.id.local ? '%_autorating%' : ppt.tfRating.trim();
9 | this.upd_yt_mtags = ppt.mtagsInstalled && this.fooYouTubeInstalled ? $.value(mtagsSync[1], 1, 1) : 0;
10 | this.upd_lib_mtags = ppt.mtagsInstalled ? $.value(mtagsSync[3], 1, 1) : 0;
11 |
12 | this.sort();
13 | this.mtags_mng();
14 | }
15 |
16 | // Methods
17 |
18 | getRelativePath(source, target) {
19 | source = source.replace(/\\/g, '/');
20 | target = target.replace(/\\/g, '/');
21 | const sep = '/';
22 | const targetArr = target.split(sep);
23 | const sourceArr = source.split(sep);
24 | const filename = targetArr.pop();
25 | const targetPath = targetArr.join(sep);
26 | let relativePath = '';
27 | sourceArr.pop();
28 | while (!targetPath.includes(sourceArr.join(sep))) {
29 | sourceArr.pop();
30 | relativePath += '..' + sep;
31 | }
32 | const relPathArr = targetArr.slice(sourceArr.length);
33 | relPathArr.length && (relativePath += relPathArr.join(sep) + sep);
34 | return relativePath + filename;
35 | }
36 |
37 | mtags_mng() {
38 | let cur_path = '';
39 | let mtags_date = 0;
40 | let mtags_pth = '';
41 | let mtags_yt = false;
42 | this.on_playback_time = () => {
43 | if (!mtags_yt) return;
44 | const handle = fb.GetNowPlaying();
45 | if (!handle || !$.file(handle.Path)) return;
46 | const mod = $.lastModified(handle.Path);
47 | if (mtags_pth != handle.Path || mod == mtags_date) return;
48 | mtags_pth = handle.Path;
49 | mtags_date = mod;
50 | lib.update.artists = true;
51 | lib.update.library = true;
52 | }
53 | this.execute = () => {
54 | const handle = fb.GetNowPlaying();
55 | if (!handle || cur_path == handle.Path || handle.Path.slice(-7) != '!!.tags') return;
56 | cur_path = handle.Path;
57 | mtags_yt = false;
58 | if (fb.IsMetadbInMediaLibrary(handle)) {
59 | mtags_yt = handle.Path.slice(-7) == '!!.tags';
60 | mtags_pth = handle.Path;
61 | mtags_date = $.lastModified(handle.Path);
62 | }
63 | }
64 | }
65 |
66 | referencedFile(h) {
67 | let n = tf.referencedFile.EvalWithMetadb(h);
68 | if (n.includes('file://') && n.slice(-5) != '.tags') {
69 | n = n.replace('file://', '');
70 | } else n = '';
71 | return n;
72 | }
73 |
74 | sort(i, set) {
75 | if (set) ppt.sortType = i;
76 | const sort_ar = [this.playcount, this.rating, '$rand()', '%bitrate%', '%bitrate%', '%length%', '%length%', '%date%', '%date%'];
77 | this.track_pref = ['Most Played', 'Highest Rated', 'Random', 'Highest Bitrate', 'Lowest Bitrate', 'Longest', 'Shortest', 'Latest', 'Earliest'];
78 | const sort_dir = [0, 0, 1, 0, 1, 0, 1, 0, 1];
79 | this.sort_rand = ppt.sortType == 2;
80 | this.dir = sort_dir[ppt.sortType];
81 | this.item_sort = FbTitleFormat(sort_ar[ppt.sortType]);
82 | }
83 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/names.js:
--------------------------------------------------------------------------------
1 | class Names {
2 | constructor() {
3 | this.cur_artist = '';
4 | this.lfmUID = '_[a-f0-9]{32}\\.jpg$';
5 |
6 | const fields = ['queryArtistField', 'queryAlbumField', 'queryGenreField', 'queryTitleField'];
7 | const key = ['artist', 'album', 'genre', 'title'];
8 |
9 | this.field = {}
10 |
11 | for (let i = 0; i < key.length; i++) { // use for loop so handles empty
12 | const n = ppt[fields[i]];
13 | this.field[key[i]] = n && n.trim() || key[i];
14 | }
15 | }
16 |
17 | // Methods
18 |
19 | art() {
20 | return alb.artist ? alb.artist : this.artist();
21 | }
22 |
23 | artist(focus) {
24 | return $.eval('$trim(' + ppt.tfArtist + ')', focus);
25 | }
26 |
27 | artist_title() {
28 | return this.artist() && this.title() ? this.artist() + ' | ' + this.title() : 'N/A';
29 | }
30 |
31 | genre() {
32 | const g = $.eval('$trim(' + ppt.tfGenre + ')');
33 | return g ? g : 'N/A';
34 | }
35 |
36 | isLfmImg(fn, artist) {
37 | if (artist) {
38 | if (artist != this.cur_artist) {
39 | artist = $.regexEscape($.clean(artist));
40 | this.cur_artist = artist;
41 | }
42 | return RegExp(`^${artist + this.lfmUID}`, 'i').test(fn)
43 | } else return RegExp(this.lfmUID, 'i').test(fn)
44 | }
45 |
46 | title(focus) {
47 | return $.eval('$trim(' + ppt.tfTitle + ')', focus);
48 | }
49 | }
50 |
51 | class Titleformat {
52 | constructor() {
53 | this.artist = FbTitleFormat('%' + name.field.artist + '%');
54 | this.artist0 = FbTitleFormat('[$meta(' + name.field.artist + ',0)]');
55 | this.comment = FbTitleFormat('[%comment%]');
56 | this.length = FbTitleFormat('[%length_seconds_fp%]');
57 | this.fy_url = FbTitleFormat('[%fy_url%]');
58 | this.referencedFile = FbTitleFormat('$info(@REFERENCED_FILE)');
59 | this.album0 = FbTitleFormat('[$meta(' + name.field.album + ',0)]');
60 | this.albumSortOrder = FbTitleFormat(ppt.albumSortOrder);
61 | this.videoPopup = FbTitleFormat('[%video_popup_status%]');
62 | this.randomize = FbTitleFormat('$rand()');
63 | this.trackGain = FbTitleFormat('[%replaygain_track_gain%]');
64 | this.trackPeak = FbTitleFormat('[%replaygain_track_peak%]');
65 | this.title = FbTitleFormat('%' + name.field.title + '%');
66 | this.title0 = FbTitleFormat('[$meta(' + name.field.title + ',0)]');
67 | this.title_0 = FbTitleFormat('[$meta(title,0)]');
68 | this.searchTitle = FbTitleFormat('[$if2(%SEARCH_TITLE%,%YOUTUBE_TRACK_MANAGER_SEARCH_TITLE%)]');
69 | }
70 | }
71 |
72 | class Vkeys {
73 | constructor() {
74 | this.selAll = 1;
75 | this.copy = 3;
76 | this.back = 8;
77 | this.enter = 13;
78 | this.shift = 16;
79 | this.paste = 22;
80 | this.cut = 24;
81 | this.redo = 25;
82 | this.undo = 26;
83 | this.pgUp = 33;
84 | this.pgDn = 34;
85 | this.end = 35;
86 | this.home = 36;
87 | this.left = 37;
88 | this.right = 39;
89 | this.del = 46;
90 | }
91 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/playlists.js:
--------------------------------------------------------------------------------
1 | class Playlists {
2 | constructor() {
3 | this.dj_tracks = [];
4 | this.enabled = [];
5 | this.menu = [];
6 | this.soft_playlist = ppt.playlistTop + ppt.playlistTracks;
7 |
8 | this.playlists_changed();
9 | }
10 |
11 | // Methods
12 |
13 | cache() {
14 | return plman.FindOrCreatePlaylist(ppt.playlistCache, false);
15 | }
16 |
17 | clear(playlistIndex) {
18 | plman.UndoBackup(playlistIndex);
19 | plman.ClearPlaylist(playlistIndex);
20 | }
21 |
22 | dj() {
23 | return plman.FindOrCreatePlaylist(ppt.playlistDj, false);
24 | }
25 |
26 | getDJ() {
27 | return plman.FindPlaylist(ppt.playlistDj);
28 | }
29 |
30 | love() {
31 | const loved = this.loved();
32 | const np = plman.GetPlayingItemLocation();
33 | let pid, pn;
34 | if (fb.IsPlaying && np.IsValid) {
35 | pid = np.PlaylistItemIndex;
36 | pn = plman.PlayingPlaylist;
37 | } else {
38 | pid = plman.GetPlaylistFocusItemIndex(plman.ActivePlaylist);
39 | pn = plman.ActivePlaylist;
40 | }
41 | plman.ClearPlaylistSelection(pn);
42 | plman.SetPlaylistSelectionSingle(pn, pid, true);
43 | if (loved != pn) {
44 | plman.UndoBackup(loved);
45 | plman.InsertPlaylistItems(loved, plman.PlaylistItemCount(loved), plman.GetPlaylistSelectedItems(pn), false);
46 | } else {
47 | plman.RemovePlaylistSelection(loved, false);
48 | }
49 | }
50 |
51 | loved() {
52 | return plman.FindOrCreatePlaylist(ppt.playlistLoved, false);
53 | }
54 |
55 | playlists_changed() {
56 | this.setShortCutPl();
57 | this.menu = [];
58 | for (let i = 0; i < plman.PlaylistCount; i++) this.menu.push({
59 | name: plman.GetPlaylistName(i).replace(/&/g, '&&'),
60 | ix: i
61 | });
62 | }
63 |
64 | saveAutoDjTracks(playlistIndex, np) {
65 | if (playlistIndex != this.dj || !np || !index.cur_dj_source) return;
66 | const dj_text = index.cur_dj_type == 2 ? ' And Similar Artists' : '';
67 | const save_pl_index = plman.FindOrCreatePlaylist(ppt.playlistDj + ppt.playlistTracks + ' [' + index.cur_dj_source + dj_text + ']', false);
68 | const items = new FbMetadbHandleList();
69 | const save_pl_count = plman.PlaylistItemCount(save_pl_index);
70 | const sav_list = plman.GetPlaylistItems(save_pl_index);
71 |
72 | for (let i = 0; i < np.Count; i++)
73 | if (!this.dj_tracks.includes(np[i].Path)) {
74 | let found = false;
75 | for (let j = 0; j < sav_list.Count; j++)
76 | if (np[i].Path == sav_list[j].Path) found = true;
77 | if (!found) items.Add(np[i]);
78 | this.dj_tracks.push(np[i].Path);
79 | }
80 | plman.UndoBackup(save_pl_index);
81 | plman.InsertPlaylistItems(save_pl_index, save_pl_count, items);
82 | if (this.dj_tracks.length > dj.limit * 2) this.dj_tracks.splice(0, 1);
83 | }
84 |
85 | selection() {
86 | return plman.FindOrCreatePlaylist(ppt.playlistSelection, false);
87 | }
88 |
89 | setShortCutPl() {
90 | const names = ['selection', 'dj', 'loved'];
91 | this.enabled = [];
92 | ['playlistSelection', 'playlistDj', 'playlistLoved'].forEach(v => {
93 | const ix = plman.FindPlaylist(ppt[v]);
94 | if (ix != -1) this.enabled.push({
95 | name: ppt[v],
96 | ix: ix
97 | });
98 | });
99 | }
100 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/popupbox.js:
--------------------------------------------------------------------------------
1 | class PopUpBox {
2 | constructor() {
3 | this.getHtmlCode();
4 | }
5 |
6 | // Methods
7 |
8 | getHtmlCode() {
9 | let cssPath = `${my_utils.packagePath}/assets/html/`;
10 | if (this.getWindowsVersion() === '6.1') {
11 | cssPath += 'styles7.css';
12 | } else {
13 | cssPath += 'styles10.css';
14 | }
15 | this.configHtmlCode = my_utils.getAsset('\\html\\config.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
16 | this.confirmHtmlCode = my_utils.getAsset('\\html\\confirm.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
17 | this.inputHtmlCode = my_utils.getAsset('\\html\\input.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
18 | this.queryHtmlCode = my_utils.getAsset('\\html\\query.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
19 | }
20 |
21 | getWindowsVersion() {
22 | let version = '';
23 |
24 | try {
25 | version = (WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentMajorVersionNumber')).toString();
26 | version += '.';
27 | version += (WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentMinorVersionNumber')).toString();
28 | return version;
29 | } catch (e) {}
30 |
31 | try {
32 | version = WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion');
33 | return version;
34 | } catch (e) {}
35 | return '6.1';
36 | }
37 |
38 | config(ppt, dialogWindow, ok_callback) {
39 | utils.ShowHtmlDialog(window.ID, this.configHtmlCode, {
40 | data: [ppt, dialogWindow, window.IsTransparent, ok_callback, this.bias_callback, this.tf_callback],
41 | resizable: true
42 | });
43 | }
44 |
45 | confirm(msg_title, msg_content, btn_yes_label, btn_no_label, height_adjust, confirm_callback) {
46 | utils.ShowHtmlDialog(window.ID, this.confirmHtmlCode, {
47 | data: [msg_title, msg_content, btn_yes_label, btn_no_label, height_adjust, confirm_callback]
48 | });
49 | }
50 |
51 | input(title, msg, ok_callback, input, def) {
52 | utils.ShowHtmlDialog(window.ID, this.inputHtmlCode, {
53 | data: [title, msg, 'Cancel', ok_callback, input, def]
54 | });
55 | }
56 |
57 | query(title, msg, ok_callback, input, def) {
58 | utils.ShowHtmlDialog(window.ID, this.queryHtmlCode, {
59 | data: [title, msg, 'Cancel', ok_callback, this.check_query_callback, input, def]
60 | });
61 | }
62 |
63 | bias_callback() {
64 | return index.curDefBias();
65 | }
66 |
67 | check_query_callback(str) {
68 | let valid_query = true;
69 | try {
70 | fb.GetQueryItems(new FbMetadbHandleList(), str);
71 | } catch (e) {
72 | valid_query = false;
73 | }
74 | return valid_query;
75 | }
76 |
77 | tf_callback(tf, type) {
78 | return panel.preview(tf, type);
79 | }
80 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/text.js:
--------------------------------------------------------------------------------
1 | class Text {
2 | constructor() {
3 | const DT_RIGHT = 0x00000002;
4 | const DT_CENTER = 0x00000001;
5 | const DT_VCENTER = 0x00000004;
6 | const DT_WORDBREAK = 0x00000010;
7 | const DT_SINGLELINE = 0x00000020;
8 | const DT_CALCRECT = 0x00000400;
9 | const DT_NOCLIP = 0x00000100;
10 | const DT_NOPREFIX = 0x00000800;
11 | const DT_WORD_ELLIPSIS = 0x00040000;
12 |
13 | this.cc = DT_CENTER | DT_VCENTER | DT_CALCRECT | DT_NOPREFIX | DT_WORD_ELLIPSIS;
14 | this.l = DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX | DT_WORD_ELLIPSIS;
15 | this.lm = DT_NOPREFIX | DT_WORD_ELLIPSIS;
16 | this.ls = DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX;
17 | this.ncc = DT_CENTER | DT_VCENTER | DT_NOCLIP | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX | DT_WORD_ELLIPSIS;
18 | this.r = DT_RIGHT | DT_VCENTER | DT_SINGLELINE | DT_NOCLIP | DT_NOPREFIX | DT_WORD_ELLIPSIS;
19 |
20 | this.rp = true;
21 | this.visible = 'N/A';
22 |
23 | this.defDecades = [{
24 | tag1: '50s',
25 | tag2: '1950s',
26 | query: '%Date% AFTER 1949 AND %Date% BEFORE 1960'
27 | },
28 | {
29 | tag1: '60s',
30 | tag2: '1960s',
31 | query: '%Date% AFTER 1959 AND %Date% BEFORE 1970'
32 | },
33 | {
34 | tag1: '70s',
35 | tag2: '1970s',
36 | query: '%Date% AFTER 1969 AND %Date% BEFORE 1980'
37 | },
38 | {
39 | tag1: '80s',
40 | tag2: '1980s',
41 | query: '%Date% AFTER 1979 AND %Date% BEFORE 1990'
42 | },
43 | {
44 | tag1: '90s',
45 | tag2: '1990s',
46 | query: '%Date% AFTER 1989 AND %Date% BEFORE 2000'
47 | },
48 | {
49 | tag1: '00s',
50 | tag2: '2000s',
51 | query: '%Date% AFTER 1999 AND %Date% BEFORE 2010'
52 | }, {
53 | tag1: '10s',
54 | tag2: '2010s',
55 | query: '%Date% AFTER 2009 AND %Date% BEFORE 2020'
56 | },
57 | {
58 | tag1: '20s',
59 | tag2: '2020s',
60 | query: '%Date% AFTER 2019 AND %Date% BEFORE 2030'
61 | }];
62 |
63 | this.decadesMenu = $.jsonParse(ppt.decadesMenu, this.defDecades);
64 | this.genreMenu = $.split(ppt.genreMenu, 1).filter(v => v.trim());
65 | this.genreMenu.push('Use tag or query search for more genres')
66 | }
67 |
68 | // Methods
69 |
70 | clickable(x, y) {
71 | return !ppt.showAlb && !panel.halt() && (!but.btns['dj'] || !but.btns['dj'].trace(x, y));
72 | }
73 |
74 | paint() {
75 | if (this.rp) window.Repaint();
76 | }
77 |
78 | repaint() {
79 | if (ppt.showAlb || panel.halt()) return;
80 | if (ui.style.textOnly) this.paint();
81 | else if (this.rp) window.RepaintRect(10, Math.min(panel.h * panel.image.size, panel.h - img.ny), panel.w - 20, Math.max(img.ny, panel.h * (1 - panel.image.size)));
82 | }
83 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/timers.js:
--------------------------------------------------------------------------------
1 | class Timers {
2 | constructor() {
3 | ['artist', 'dl', 'img', 'sim1', 'sim2', 'transition', 'tt', 'vid', 'yt'].forEach(v => this[v] = {
4 | id: null
5 | });
6 |
7 | this.counter = 0;
8 | this.times = [1000, 1000, 1000, 1000, 2000, 4000, 5000, 6000, 7000];
9 | }
10 |
11 | // Methods
12 |
13 | clear(timer) {
14 | if (timer) clearTimeout(timer.id);
15 | timer.id = null;
16 | }
17 |
18 | decelerating() {
19 | let counter = 0;
20 | this.clear(this.dl);
21 | const func = () => {
22 | this.res();
23 | counter++;
24 | if (counter < this.times.length) timer_dl();
25 | else this.clear(this.dl);
26 | };
27 | const timer_dl = () => {
28 | this.dl.id = setTimeout(func, this.times[counter])
29 | };
30 | timer_dl();
31 | }
32 |
33 | image() {
34 | this.clear(this.img);
35 | this.img.id = setInterval(() => {
36 | if (!panel.image.show || !ppt.artistView || ppt.showAlb || panel.block() || panel.video.mode && panel.isVideo() || seeker.dn || this.zoom()) return;
37 | if (img.art.images.length < 2) return;
38 | img.change(1);
39 | }, ppt.cycleTime * 1000);
40 | }
41 |
42 | dj() {
43 | if (!this.dj_chk || (!ppt.autoRad && !ppt.playTracks) || (plman.PlayingPlaylist != pl.getDJ())) return;
44 | const np = plman.GetPlayingItemLocation();
45 | if (!np.IsValid) return;
46 | const pid = np.PlaylistItemIndex;
47 | const pn = pl.getDJ();
48 | if (plman.PlaylistItemCount(pn) > pid + 1) return this.dj_chk = false;
49 | dj.on_playback_new_track();
50 | }
51 |
52 | res() {
53 | if (ui.style.textOnly && !ui.style.isBlur) return;
54 | img.update();
55 | }
56 |
57 | tooltip() {
58 | this.clear(this.tt);
59 | this.tt.id = setTimeout(() => {
60 | alb.deactivateTooltip();
61 | this.tt.id = null;
62 | }, 5000);
63 | }
64 |
65 | video() {
66 | this.vid.id = setInterval(() => this.videoState, 50);
67 | }
68 |
69 | videoState() {
70 | if (ppt.btn_mode || !panel.video.mode || txt.visible == panel.block()) return;
71 | txt.visible = panel.block();
72 | if (panel.block())
73 | if ($.eval('%video_popup_status%') == 'visible') {
74 | img.get = true;
75 | fb.RunMainMenuCommand('View/Visualizations/Video');
76 | this.clear(this.vid);
77 | }
78 | }
79 |
80 | zoom() {
81 | return utils.IsKeyPressed(0x10) || utils.IsKeyPressed(0x11);
82 | }
83 | }
--------------------------------------------------------------------------------
/packages/FindPlay/{F5E9D9EB-42AD-4A47-B8EE-C9877A8E7851}/scripts/utils.js:
--------------------------------------------------------------------------------
1 | let my_utils = {}
2 |
3 | my_utils.scriptInfo = window.ScriptInfo;
4 | my_utils.packagePath = utils.GetPackagePath(my_utils.scriptInfo.PackageId);
5 |
6 | my_utils.getAsset = assetFile => utils.ReadTextFile(`${my_utils.packagePath}/assets/${assetFile}`);
7 | my_utils.getImageAsset = assetFile => gdi.Image(`${my_utils.packagePath}/assets/images/${assetFile}`);
8 | my_utils.getImagesPath = `${my_utils.packagePath}/assets/images/`;
9 | my_utils.getScriptPath = `${my_utils.packagePath}/scripts/`;
--------------------------------------------------------------------------------
/packages/LastFM/{45FBD9DF-93B7-4642-924C-9CC020A082F4}/main.js:
--------------------------------------------------------------------------------
1 | const common_package_id = '{1583C4B7-53AD-403F-8F7E-CB20490AAA26}';
2 | include(`${utils.GetPackageInfo(common_package_id).Directories.Scripts}/Common.js`);
3 | qwr_utils.common_include([
4 | 'js_marc2003/js/panel.js',
5 | 'js_marc2003/js/lastfm.js',
6 | 'js_marc2003/js/list.js',
7 | ]);
8 |
9 |
10 | 'use strict';
11 |
12 | var panel = new _panel("Last.fm Artist Info/User Charts/Recent Tracks", ["metadb", "remap"]);
13 | var lastfm = new _lastfm();
14 | var list = new _list("lastfm_info", 8, 24, 0, 0);
15 |
16 | panel.item_focus_change();
17 |
18 | function on_notify_data(name, data) {
19 | lastfm.notify_data(name, data);
20 | }
21 |
22 | function on_size() {
23 | panel.size();
24 | list.w = panel.w - 16;
25 | list.h = panel.h - 24;
26 | list.size();
27 | }
28 |
29 | function on_paint(gr) {
30 | panel.paint(gr);
31 | gr.FillSolidRect(0, 0, panel.w, 24, panel.colours.header);
32 | gr.GdiDrawText(list.header_text(), panel.fonts.title, _RGB(180, 182, 184), 10, 0, panel.w - 20, 24, LEFT);
33 | list.paint(gr);
34 | }
35 |
36 | function on_metadb_changed() {
37 | list.metadb_changed();
38 | }
39 |
40 | function on_mouse_wheel(s) {
41 | list.wheel(s);
42 | }
43 |
44 | function on_mouse_move(x, y) {
45 | list.move(x, y);
46 | }
47 |
48 | function on_mouse_lbtn_up(x, y) {
49 | list.lbtn_up(x, y);
50 | }
51 |
52 | function on_key_down(k) {
53 | list.key_down(k);
54 | }
55 |
56 | function on_mouse_rbtn_up(x, y) {
57 | return panel.rbtn_up(x, y, list);
58 | }
59 |
--------------------------------------------------------------------------------
/packages/LastFM/{45FBD9DF-93B7-4642-924C-9CC020A082F4}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "marc2003",
3 | "description": "Based on https://github.com/TheQwertiest/smp_2003",
4 | "enableDragDrop": false,
5 | "id": "{45FBD9DF-93B7-4642-924C-9CC020A082F4}",
6 | "name": "CaTRoX: Last.fm Artist Info/User Charts/Recent Tracks",
7 | "shouldGrabFocus": true,
8 | "version": "1.4.0"
9 | }
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/LICENSE.txt:
--------------------------------------------------------------------------------
1 | License
2 |
3 | Copyright (c) 2021 WilB
4 |
5 | The above copyright notice shall be included in all
6 | copies or substantial portions of the Software.
7 |
8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
9 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
11 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
12 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
13 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
14 | SOFTWARE.
15 |
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/confirm.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
19 |
20 |
21 |
22 |
23 |
24 | Yes
25 | No
26 |
27 |
75 |
76 |
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/input.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
22 |
23 |
24 |
25 |
26 | OK
27 | Cancel
28 |
29 |
82 |
83 |
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/inputApply.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
21 |
22 |
23 |
24 |
25 |
26 | OK
27 | Apply
28 | Cancel
29 |
30 |
86 |
87 |
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/messageBox.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
18 | Panel and Playlist Sources
19 |
20 |
21 | Panel
22 | Receives a selection sent from another library tree panel
23 | Example
24 | Panel 1:
25 | Use tree view OR list view + artist photos (Quick Setup can be used)
26 | Set source to library and behaviour\single-click to select, so items aren't sent to playlist
27 |
28 | Panel 2:
29 | Use album art view (Quick Setup: Album covers can be used)
30 | Set source to panel
31 |
32 | Note that panels set to panel source don't send out selections
33 |
34 | Playlist
35 | If the active playlist is used, items are highlighted in the playlist rather than being sent. Other playlists behave the same as the library.
36 |
37 | OK
38 |
39 |
98 |
99 |
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/styles10.css:
--------------------------------------------------------------------------------
1 | body {color:WindowText; background-color:Menu; font:caption;}
2 | input {font:caption; border:1px solid #7A7A7A; width:100%;}
3 | input:focus {outline:none !important; border:1px solid #0078D7;}
4 | input:hover:focus {outline:none !important; border:1px solid #0078D7;}
5 | input:hover {outline:none !important; border:1px solid #000000;}
6 | label {font:caption;}
7 | button {font:caption; background:#E1E1E1; color:ButtonText; border:1px solid #ADADAD; margin:5px; padding:3px; width:auto; min-width:70px; display:inline-block;}
8 | button:focus {outline:none !important; border:2px solid #0078D7; padding:2px;}
9 | button:hover {background:#e5f1fb; outline:none !important; border:1px solid #0078D7; padding:3px;}div {overflow:hidden;}
10 | button:focus:hover {background:#e5f1fb; outline:none !important; border:2px solid #0078D7; padding:2px;} span {display:block; overflow:hidden; padding-right:10px;}
11 | button[disabled] {background:#CCCCCC; color:#EBEBE4;}
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover {border:1px solid #ADADAD; padding:3px;}
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/html/styles7.css:
--------------------------------------------------------------------------------
1 | body {color:WindowText; background-color:Menu; font:caption;}
2 | input {font:caption; border:1px solid #7A7A7A; width:100%;}
3 | input:focus {outline:none !important; border:1px solid #0078D7;}
4 | input:hover:focus {outline:none !important; border:1px solid #0078D7;}
5 | input:hover {outline:none !important; border:1px solid #000000;}
6 | label {font:caption;}
7 | button {font:caption; background:#E1E1E1; color:ButtonText; border:1px solid #ADADAD; margin:5px; padding:3px; width:auto; min-width:70px; display:inline-block;}
8 | button:focus {border:1px solid #0078D7; padding:3px;}
9 | button:hover {background:#e5f1fb; border:1px solid #0078D7; padding:3px;}
10 | button:focus:hover {background:#e5f1fb; border:1px solid #0078D7; padding:3px;}
11 | button[disabled] {background:#CCCCCC; color:#EBEBE4;}
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover {border:1px solid #ADADAD; padding:3px;}
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Blue.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Dark.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Blue.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Dark.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noArtist/small/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/CD 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Dark 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 1.jpg
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Light.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Multi-coloured 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Multi-coloured 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Multi-coloured 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/Multi-coloured 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/CD 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Dark 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 1.jpg
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Light.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Multi-coloured 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Multi-coloured 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Multi-coloured 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/noCover/small/Multi-coloured 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Black 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Black 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Blue 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Blue 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Blue 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Blue 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Crystal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Crystal.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Glow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Glow.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Green 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Green 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Green 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Green 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Grey 4.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Multi-coloured 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Purple 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Purple 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Purple 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Purple 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/Red 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Black 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Black 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Blue 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Blue 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Blue 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Blue 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Crystal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Crystal.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Glow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Glow.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Green 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Green 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Green 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Green 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Grey 4.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Multi-coloured 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Purple 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Purple 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Purple 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Purple 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 1.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 2.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/assets/images/root/small/Red 3.png
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/main.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | if (typeof my_utils === 'undefined') include('utils.js');
4 |
5 | const loadAsync = window.GetProperty('Load Library Tree Asynchronously', true);
6 |
7 | async function readFiles(files) {
8 | for (const file of files) {
9 | if (window.ID) { // fix pss issue
10 | await include(my_utils.getScriptPath + file);
11 | }
12 | }
13 | }
14 |
15 | const files = [
16 | 'helpers.js',
17 | 'properties.js',
18 | 'interface.js',
19 | 'panel.js',
20 | 'scrollbar.js',
21 | 'library.js',
22 | 'populate.js',
23 | 'search.js',
24 | 'buttons.js',
25 | 'popupbox.js',
26 | 'timers.js',
27 | 'menu.js',
28 | 'initialise.js',
29 | 'images.js',
30 | 'callbacks.js'
31 | ];
32 |
33 | if (loadAsync) {
34 | readFiles(files).then(() => {
35 | if (!window.ID) return; // fix pss issue
36 | on_size();
37 | window.Repaint();
38 | });
39 | } else {
40 | files.forEach(v => include(my_utils.getScriptPath + v));
41 | }
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "Wilb",
3 | "description": "Feature rich library viewer\r\n\r\n• Tree viewer + full album art support\r\n• Library and playlist sources\r\n• Single panel and two panel modes\r\n• Album art flow mode\r\n\r\nCredits\r\n\r\n• Original Jscript library search (2013): thanhdat1710\r\n• Original JS smooth browser design (2015): Br3tt (aka falstaff)",
4 | "enableDragDrop": false,
5 | "id": "{E85C9EF0-778B-46DD-AF20-F4BE831360DD}",
6 | "name": "Library Tree",
7 | "shouldGrabFocus": true,
8 | "version": "2.2.0-Beta.1"
9 | }
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/scripts/initialise.js:
--------------------------------------------------------------------------------
1 | const ui = new UserInterface;
2 | const panel = new Panel;
3 | const sbar = new Scrollbar;
4 | const vk = new Vkeys;
5 | const lib = new Library;
6 | const pop = new Populate;
7 | const search = new Search;
8 | const find = new Find;
9 | const but = new Buttons;
10 | const popUpBox = new PopUpBox;
11 | const men = new MenuItems;
12 | const timer = new Timers;
13 | timer.lib();
14 |
15 | if (!ppt.get('Software Notice Checked', false)) fb.ShowPopupMessage('License\r\n\r\nCopyright (c) 2021 WilB\r\n\r\nThe above copyright notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.', 'Library Tree');
16 | ppt.set('Software Notice Checked', true);
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/scripts/popupbox.js:
--------------------------------------------------------------------------------
1 | class PopUpBox {
2 | constructor() {
3 | this.getHtmlCode();
4 | }
5 |
6 | // Methods
7 |
8 | config(cfg, ppt, cfgWindow, ok_callback) {
9 | utils.ShowHtmlDialog(window.ID, this.configHtmlCode, {
10 | data: [cfg, ppt, cfgWindow, ok_callback],
11 | resizable: true
12 | });
13 | }
14 |
15 | confirm(msg_title, msg_content, btn_yes_label, btn_no_label, height_adjust, confirm_callback) {
16 | utils.ShowHtmlDialog(window.ID, this.confirmHtmlCode, {
17 | data: [msg_title, msg_content, btn_yes_label, btn_no_label, height_adjust, confirm_callback]
18 | });
19 | }
20 |
21 | getHtmlCode() {
22 | let cssPath = `${my_utils.packagePath}/assets/html/`;
23 | if (this.getWindowsVersion() === '6.1') {
24 | cssPath += 'styles7.css';
25 | } else {
26 | cssPath += 'styles10.css';
27 | }
28 | this.configHtmlCode = my_utils.getAsset('\\html\\config.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
29 | this.inputHtmlCode = my_utils.getAsset('\\html\\input.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
30 | this.inputApplyHtmlCode = my_utils.getAsset('\\html\\inputApply.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
31 | this.messageHtmlCode = my_utils.getAsset('\\html\\messageBox.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
32 | this.confirmHtmlCode = my_utils.getAsset('\\html\\confirm.html').replace(/href="styles10.css"/i, `href="${cssPath}"`);
33 | }
34 |
35 | getWindowsVersion() {
36 | let version = '';
37 | try {
38 | version = (WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentMajorVersionNumber')).toString();
39 | version += '.';
40 | version += (WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentMinorVersionNumber')).toString();
41 | return version;
42 | } catch (e) {}
43 | try {
44 | version = WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\CurrentVersion');
45 | return version;
46 | } catch (e) {}
47 | return '6.1';
48 | }
49 |
50 | input(title, msg, ok_callback, input, def) {
51 | utils.ShowHtmlDialog(window.ID, this.inputHtmlCode, {
52 | data: [title, msg, 'Cancel', ok_callback, input, def]
53 | });
54 | }
55 |
56 | inputApply(title, msg, ok_callback, input, def) {
57 | utils.ShowHtmlDialog(window.ID, this.inputApplyHtmlCode, {
58 | data: [title, msg, 'Cancel', ok_callback, input, def]
59 | });
60 | }
61 |
62 | message() {
63 | utils.ShowHtmlDialog(window.ID, this.messageHtmlCode, {
64 | data: [this.window_ok_callback, $.scale],
65 | });
66 | }
67 |
68 | window_ok_callback(status, clicked) {
69 | if (clicked) ppt.panelSourceMsg = false;
70 | }
71 | }
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/scripts/timers.js:
--------------------------------------------------------------------------------
1 | class Timers {
2 | constructor() {
3 | ['cursor', 'jsearch1', 'jsearch2', 'tt'].forEach(v => this[v] = {
4 | id: null
5 | });
6 | }
7 |
8 | // Methods
9 |
10 | clear(timer) {
11 | if (timer) clearTimeout(timer.id);
12 | timer.id = null;
13 | }
14 |
15 | lib() {
16 | setTimeout(() => {
17 | if ((ui.w < 1 || !window.IsVisible) && ppt.rememberTree) lib.init = true;
18 | lib.getLibrary(true);
19 | lib.rootNodes(ppt.rememberTree, ppt.process);
20 | }, 5);
21 | }
22 |
23 | searchCursor(clear) {
24 | if (clear) this.clear(this.cursor);
25 | if (!panel.search.cursor) panel.search.cursor = true;
26 | this.cursor.id = setInterval(() => {
27 | panel.search.cursor = !panel.search.cursor;
28 | panel.searchPaint();
29 | }, 530);
30 | }
31 |
32 | tooltip() {
33 | this.clear(this.tt);
34 | this.tt.id = setTimeout(() => {
35 | pop.deactivateTooltip();
36 | this.tt.id = null;
37 | }, 5000);
38 | }
39 | }
--------------------------------------------------------------------------------
/packages/Library/{E85C9EF0-778B-46DD-AF20-F4BE831360DD}/scripts/utils.js:
--------------------------------------------------------------------------------
1 | let my_utils = {}
2 |
3 | my_utils.scriptInfo = window.ScriptInfo;
4 | my_utils.packagePath = utils.GetPackagePath(my_utils.scriptInfo.PackageId);
5 |
6 | my_utils.getAsset = assetFile => utils.ReadTextFile(`${my_utils.packagePath}/assets/${assetFile}`);
7 | my_utils.getImageAssets = assetFolder => utils.Glob(`${my_utils.packagePath}/assets/images/${assetFolder}/*`);
8 | my_utils.getScriptPath = `${my_utils.packagePath}/scripts/`;
--------------------------------------------------------------------------------
/packages/Menu/{FAA21F07-9B8F-416A-B106-E552221388B7}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{FAA21F07-9B8F-416A-B106-E552221388B7}",
6 | "name": "CaTRoX: Menu bar",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/Mini/{8E2B7403-5CEF-4F9E-B255-64690DEB1C58}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{8E2B7403-5CEF-4F9E-B255-64690DEB1C58}",
6 | "name": "CaTRoX: Mini player",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/Playlist/{28AC1EBE-9010-459E-8886-8FFDC8705716}/assets/html/styles10.css:
--------------------------------------------------------------------------------
1 | body { color: WindowText; background-color: Menu; }
2 | input { font:caption; border: 1px solid #7A7A7A; width: 100%; }
3 | input:focus { outline: none !important; border:1px solid #0078D7; }
4 | input:hover:focus { outline: none !important; border:1px solid #0078D7; }
5 | input:hover { outline: none !important; border:1px solid #000000; }
6 | label { font:caption; }
7 | button { font:caption; background: #E1E1E1; color:ButtonText; border: 1px solid #ADADAD; margin: 5px; padding: 3px; width: 70px; }
8 | button:focus { outline: none !important; border:2px solid #0078D7; padding: 2px; }
9 | button:hover { background: #e5f1fb; outline: none !important; border:1px solid #0078D7; padding: 3px; }div { overflow: hidden; }
10 | button:focus:hover { background: #e5f1fb; outline: none !important; border:2px solid #0078D7; padding: 2px; }';span { display:block; overflow: hidden; padding-right:10px; }
11 | button[disabled] { background: #CCCCCC; color:#EBEBE4; }
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover { border: 1px solid #ADADAD; padding: 3px; }
--------------------------------------------------------------------------------
/packages/Playlist/{28AC1EBE-9010-459E-8886-8FFDC8705716}/assets/html/styles7.css:
--------------------------------------------------------------------------------
1 | body { color: WindowText; background-color: Menu; }
2 | input { font:caption; border: 1px solid #7A7A7A; width: 100%; }
3 | input:focus { outline: none !important; border:1px solid #0078D7; }
4 | input:hover:focus { outline: none !important; border:1px solid #0078D7; }
5 | input:hover { outline: none !important; border:1px solid #000000; }
6 | label { font:caption; }
7 | button { font:caption; background: #E1E1E1; color:ButtonText; border: 1px solid #ADADAD; margin: 5px; padding: 3px; width: 70px; }
8 | button:focus { border: 1px solid #0078D7; padding: 3px; }
9 | button:hover { background: #e5f1fb; border: 1px solid #0078D7; padding: 3px; }
10 | button:focus:hover { background: #e5f1fb; border:1px solid #0078D7; padding: 3px; }
11 | button[disabled] { background: #CCCCCC; color:#EBEBE4; }
12 | /* --Suppress button:hover manually, since not() is not working =( */
13 | button[disabled]:hover { border: 1px solid #ADADAD; padding: 3px; }
--------------------------------------------------------------------------------
/packages/Playlist/{28AC1EBE-9010-459E-8886-8FFDC8705716}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "Design by eXtremeHunter",
4 | "enableDragDrop": true,
5 | "id": "{28AC1EBE-9010-459E-8886-8FFDC8705716}",
6 | "name": "CaTRoX: Playlist",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/Seekbar/{858943EC-DEAC-4C52-BD3E-07EAF372BBF7}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{858943EC-DEAC-4C52-BD3E-07EAF372BBF7}",
6 | "name": "CaTRoX: Seekbar and volume bar",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/Top/{F53D252E-3F0F-4EEA-AB97-569F9C001FE5}/assets/fooLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheQwertiest/CaTRoX_QWR/a74727f1355fc7cc4e11f6d78596c687a3e4b8ba/packages/Top/{F53D252E-3F0F-4EEA-AB97-569F9C001FE5}/assets/fooLogo.png
--------------------------------------------------------------------------------
/packages/Top/{F53D252E-3F0F-4EEA-AB97-569F9C001FE5}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{F53D252E-3F0F-4EEA-AB97-569F9C001FE5}",
6 | "name": "CaTRoX: Top bar",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/packages/TrackInfo/{410038E9-7281-4559-B843-20F4A7165435}/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "TheQwertiest",
3 | "description": "",
4 | "enableDragDrop": false,
5 | "id": "{410038E9-7281-4559-B843-20F4A7165435}",
6 | "name": "CaTRoX: Track information",
7 | "shouldGrabFocus": true,
8 | "version": "5.0.0"
9 | }
--------------------------------------------------------------------------------
/scripts/call_wrapper.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import traceback
4 | import sys
5 |
6 | class SkippedError(Exception):
7 | def __init__(self):
8 | self.message = "Skipped error"
9 |
10 | def final_call_decorator(start_msg: str,
11 | success_msg: str,
12 | failure_msg: str):
13 | def f_decorator(f):
14 | def wrapper(*args, **kwds):
15 | print(start_msg)
16 | try:
17 | f(*args, **kwds)
18 | print(success_msg)
19 | sys.exit(0)
20 | except SkippedError:
21 | print(failure_msg, file=sys.stderr)
22 | sys.exit(1)
23 | except Exception:
24 | traceback.print_exc(file=sys.stderr)
25 | print(failure_msg, file=sys.stderr)
26 | sys.exit(1)
27 |
28 | return wrapper
29 |
30 | return f_decorator
31 |
--------------------------------------------------------------------------------
/scripts/pack.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import argparse
4 | import shutil
5 | import zipfile
6 | from pathlib import Path
7 | from zipfile import ZipFile
8 |
9 | import call_wrapper
10 |
11 | def path_basename_tuple(path):
12 | return (path, path.name)
13 |
14 | def zipdir(zip_file, path, arc_path=None):
15 | assert(path.exists() and path.is_dir())
16 |
17 | for file in path.rglob('*'):
18 | if (file.name.startswith('.')):
19 | # skip `hidden` files
20 | continue
21 | if (arc_path):
22 | file_arc_path = f'{arc_path}/{file.relative_to(path)}'
23 | else:
24 | file_arc_path = file.relative_to(path)
25 | zip_file.write(file, file_arc_path)
26 |
27 | def pack():
28 | cur_dir = Path(__file__).parent.absolute()
29 | root_dir = cur_dir.parent
30 |
31 | output_dir = root_dir/'_result'
32 | output_dir.mkdir(parents=True, exist_ok=True)
33 |
34 | output_zip = output_dir/'catrox_qwr_edition.zip'
35 | output_zip.unlink(missing_ok=True)
36 |
37 | output_packages_dir = output_dir/'packages'
38 | if output_packages_dir.exists():
39 | shutil.rmtree(output_packages_dir)
40 | output_packages_dir.mkdir(parents=True)
41 |
42 | for d in (root_dir/'packages').glob('*'):
43 | for f in d.glob('*'):
44 | package_zip = output_packages_dir/f'{f.name}.zip'
45 | with ZipFile(package_zip, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as z:
46 | zipdir(z, f)
47 | print(f'Generated package: {package_zip}')
48 |
49 | # there should be only one package per dir anyway
50 | break
51 |
52 | with ZipFile(output_zip, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as z:
53 | zipdir(z, output_packages_dir, 'packages')
54 | zipdir(z, root_dir/'fonts', 'fonts')
55 | z.write(root_dir/'layout'/'theme.fcl', 'layout/theme.fcl')
56 |
57 | print(f'Generated file: {output_zip}')
58 |
59 | if __name__ == '__main__':
60 | parser = argparse.ArgumentParser(description='Pack')
61 |
62 | call_wrapper.final_call_decorator(
63 | 'Packing',
64 | 'Packing: success',
65 | 'Packing: failure!'
66 | )(
67 | pack
68 | )(
69 | )
70 |
--------------------------------------------------------------------------------
/scripts/publish_release_draft.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import argparse
4 | import json
5 | import os
6 | import semver
7 | import subprocess
8 | import shutil
9 | import tempfile
10 | import time
11 | from pathlib import Path
12 | from typing import Union
13 |
14 | import call_wrapper
15 | import update_changelog
16 |
17 | PathLike = Union[str, Path]
18 |
19 | def get_cwd_repo_root():
20 | repo_dir = Path(os.getcwd()).absolute()
21 | cmd_get_root = [
22 | 'git',
23 | '-C',
24 | str(repo_dir),
25 | 'rev-parse',
26 | '--show-toplevel'
27 | ]
28 |
29 | root = subprocess.check_output(cmd_get_root, text=True, env=os.environ, cwd=repo_dir).strip()
30 | return Path(root)
31 |
32 | def git_add_new_changelog(repo_dir: PathLike,
33 | release_version):
34 | changelog = update_changelog.update(root_dir=repo_dir, new_version=release_version, silent=True)
35 | cmd_git_add = [
36 | 'git',
37 | 'add',
38 | 'CHANGELOG.md'
39 | ]
40 | print('> ' + ' '.join(cmd_git_add))
41 | subprocess.check_call(cmd_git_add, env=os.environ, cwd=repo_dir)
42 |
43 | return changelog
44 |
45 | def git_commit_and_push_new_files(repo_dir: PathLike,
46 | release_version):
47 | cmd_git_commit = [
48 | 'git',
49 | 'commit',
50 | '-m', f'v{release_version}'
51 | ]
52 | print('> ' + ' '.join(cmd_git_commit))
53 | subprocess.check_call(cmd_git_commit, env=os.environ, cwd=repo_dir)
54 |
55 | cmd_git_push = [
56 | 'git',
57 | 'push'
58 | ]
59 | print('> ' + ' '.join(cmd_git_push))
60 | subprocess.check_call(cmd_git_push, env=os.environ, cwd=repo_dir)
61 |
62 | def git_publish_release(repo_dir: PathLike,
63 | release_version,
64 | changelog,
65 | release_assets):
66 | changelog = '# Changelog\n\n' + changelog
67 |
68 | temp_dir = ''
69 | try:
70 | temp_dir = tempfile.mkdtemp()
71 | temp_file = Path(temp_dir)/'changelog.md'
72 | with open(temp_file, 'w') as output:
73 | output.write(changelog)
74 | cmd_create_release = [
75 | 'gh',
76 | 'release',
77 | 'create',
78 | f'v{str(release_version)}',
79 | '--draft',
80 | '--notes-file', str(temp_file.absolute()),
81 | ] + release_assets
82 |
83 | print('> ' + ' '.join(cmd_create_release))
84 | subprocess.check_call(cmd_create_release, env=os.environ, cwd=repo_dir)
85 | finally:
86 | if temp_dir:
87 | shutil.rmtree(temp_dir)
88 |
89 | def publish(repo_dir: PathLike,
90 | release_version,
91 | release_assets):
92 | if not repo_dir:
93 | repo_dir = get_cwd_repo_root()
94 | if not release_version:
95 | raise ValueError('`release_version` is empty')
96 | parsed_ver = semver.VersionInfo.parse(release_version)
97 |
98 | changelog = git_add_new_changelog(repo_dir, release_version)
99 | git_commit_and_push_new_files(repo_dir, release_version)
100 | git_publish_release(repo_dir, release_version, changelog, release_assets)
101 |
102 | if __name__ == '__main__':
103 | parser = argparse.ArgumentParser(description='Publish GitHub release')
104 | parser.add_argument('--repo_dir', default=get_cwd_repo_root())
105 | parser.add_argument('--release_assets', default=[], nargs='+')
106 | parser.add_argument('release_version', type=str, help='release version')
107 |
108 | args = parser.parse_args()
109 |
110 | call_wrapper.final_call_decorator(
111 | "Publishing",
112 | "Published successfully!",
113 | "Publishing failed!"
114 | )(
115 | publish
116 | )(
117 | repo_dir=args.repo_dir,
118 | release_version=args.release_version,
119 | release_assets=args.release_assets
120 | )
121 |
122 |
--------------------------------------------------------------------------------
/scripts/update_changelog.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import argparse
4 | import re
5 | import os
6 | import subprocess
7 | from datetime import datetime
8 | from pathlib import Path
9 | from typing import Union
10 |
11 | import call_wrapper
12 |
13 | PathLike = Union[str, Path]
14 |
15 | def get_current_repo(root_dir: PathLike):
16 | cmd_git_get_remote = [
17 | 'git',
18 | 'config' ,
19 | '--get',
20 | 'remote.origin.url'
21 | ]
22 | print('> ' + ' '.join(cmd_git_get_remote))
23 | url = subprocess.check_output(cmd_git_get_remote, text=True, env=os.environ, cwd=root_dir)
24 | return url.replace('.git', '').strip()
25 |
26 | def update(root_dir: PathLike,
27 | new_version: str,
28 | silent: bool = False):
29 |
30 | cur_dir = Path(__file__).parent.absolute()
31 | if not root_dir:
32 | root_dir = cur_dir.parent
33 |
34 | date = datetime.today().strftime('%Y-%m-%d')
35 | changelog_path = root_dir/'CHANGELOG.md'
36 | repo = get_current_repo(root_dir)
37 |
38 | with Path(changelog_path).open('r') as f:
39 | changelog = f.read()
40 |
41 | # Find current changelog
42 | it = re.search(
43 | r'^## \[Unreleased\]\[\]$'
44 | r'((?s:.*?))'
45 | r'^## \[.*?\]\[\] - .*?$',
46 | changelog,
47 | re.MULTILINE
48 | )
49 | current_changelog = it.group(1).strip()
50 |
51 | # Update table of contents
52 | it = re.search(r'^\- \[Unreleased\]\(#unreleased\)$', changelog, re.MULTILINE)
53 | changelog = (
54 | changelog[:it.end()] +
55 | '\n'
56 | f'- [{new_version}](#{new_version.replace(".","")}---{date})' +
57 | changelog[it.end():]
58 | )
59 |
60 | # Replace `unreleased` header with a new one
61 | it = re.search(r'^## \[Unreleased\]\[\]$', changelog, re.MULTILINE)
62 | changelog = (
63 | changelog[:it.end()] +
64 | '\n'
65 | '\n'
66 | f'## [{new_version}][] - {date}' +
67 | changelog[it.end():]
68 | )
69 |
70 | # Add a link to the new diff
71 | it = re.search(r'^\[unreleased\]: ' + repo.replace('.', '\.') + r'/compare/v(.*)\.\.\.HEAD$', changelog, re.MULTILINE)
72 | old_version = it.group(1)
73 | unreleased_link = it.group(0).replace(old_version,new_version)
74 |
75 | changelog = (
76 | changelog[:it.start()] +
77 | unreleased_link +
78 | '\n' +
79 | f'[{new_version}]: {repo}/compare/v{old_version}...v{new_version}' +
80 | changelog[it.end():]
81 | )
82 |
83 | with Path(changelog_path).open('w') as f:
84 | f.write(changelog)
85 |
86 | if not silent:
87 | print(f"Updated changelog: {changelog_path}")
88 | return current_changelog
89 |
90 | if __name__ == '__main__':
91 | parser = argparse.ArgumentParser(description='Update changelog with new version')
92 | parser.add_argument('--root_dir', default=Path(os.getcwd()).absolute())
93 | parser.add_argument('release_version', type=str, help='release version')
94 |
95 | args = parser.parse_args()
96 |
97 | call_wrapper.final_call_decorator(
98 | "Updating changelog",
99 | "Updating changelog: success!",
100 | "Updating changelog: failed!"
101 | )(
102 | update
103 | )(
104 | args.root_dir,
105 | args.release_version
106 | )
107 |
108 |
--------------------------------------------------------------------------------