├── .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 | 19 | 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 | 24 |
25 | 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 = "" 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 | "" & _ 50 | "" & _ 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 | """") 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 | 24 | 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 | 27 | 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 | 27 | 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 | 25 | 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 | 27 | 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 | 27 | 28 | 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 |
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 | --------------------------------------------------------------------------------