Complete refactoring for rktplayer, in order to make it play on DLNA renderers and also use UpNP media server resources.
@@ -6,4 +6,4 @@
|
||||
d="M13.0502 2.74989C13.0502 2.44613 12.804 2.19989 12.5002 2.19989C12.1965 2.19989 11.9502 2.44613 11.9502 2.74989V7.2825C11.9046 7.18802 11.8295 7.10851 11.7334 7.05776L2.73338 2.30776C2.5784 2.22596 2.3919 2.23127 2.24182 2.32176C2.09175 2.41225 2 2.57471 2 2.74995V12.25C2 12.4252 2.09175 12.5877 2.24182 12.6781C2.3919 12.7686 2.5784 12.7739 2.73338 12.6921L11.7334 7.94214C11.8295 7.89139 11.9046 7.81188 11.9502 7.7174V12.2499C11.9502 12.5536 12.1965 12.7999 12.5002 12.7999C12.804 12.7999 13.0502 12.5536 13.0502 12.2499V2.74989ZM3 11.4207V3.5792L10.4288 7.49995L3 11.4207Z"
|
||||
fill="#000000"
|
||||
/>
|
||||
</svg>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 893 B After Width: | Height: | Size: 894 B |
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 5C10 3.34315 8.65686 2 7 2H5C3.34315 2 2 3.34315 2 5V19C2 20.6569 3.34315 22 5 22H7C8.65686 22 10 20.6569 10 19V5ZM8 5C8 4.44772 7.55229 4 7 4H5C4.44772 4 4 4.44772 4 5V19C4 19.5523 4.44772 20 5 20H7C7.55229 20 8 19.5523 8 19V5Z" fill="#0F0F0F"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 5C22 3.34315 20.6569 2 19 2H17C15.3431 2 14 3.34315 14 5V19C14 20.6569 15.3431 22 17 22H19C20.6569 22 22 20.6569 22 19V5ZM20 5C20 4.44772 19.5523 4 19 4H17C16.4477 4 16 4.44772 16 5V19C16 19.5523 16.4477 20 17 20H19C19.5523 20 20 19.5523 20 19V5Z" fill="#0F0F0F"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10 5C10 3.34315 8.65686 2 7 2H5C3.34315 2 2 3.34315 2 5V19C2 20.6569 3.34315 22 5 22H7C8.65686 22 10 20.6569 10 19V5ZM8 5C8 4.44772 7.55229 4 7 4H5C4.44772 4 4 4.44772 4 5V19C4 19.5523 4.44772 20 5 20H7C7.55229 20 8 19.5523 8 19V5Z" fill="#0F0F0F"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 5C22 3.34315 20.6569 2 19 2H17C15.3431 2 14 3.34315 14 5V19C14 20.6569 15.3431 22 17 22H19C20.6569 22 22 20.6569 22 19V5ZM20 5C20 4.44772 19.5523 4 19 4H17C16.4477 4 16 4.44772 16 5V19C16 19.5523 16.4477 20 17 20H19C19.5523 20 20 19.5523 20 19V5Z" fill="#0F0F0F"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 849 B After Width: | Height: | Size: 846 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -6,4 +6,4 @@
|
||||
d="M1.94976 2.74989C1.94976 2.44613 2.196 2.19989 2.49976 2.19989C2.80351 2.19989 3.04976 2.44613 3.04976 2.74989V7.2825C3.0954 7.18802 3.17046 7.10851 3.26662 7.05776L12.2666 2.30776C12.4216 2.22596 12.6081 2.23127 12.7582 2.32176C12.9083 2.41225 13 2.57471 13 2.74995V12.25C13 12.4252 12.9083 12.5877 12.7582 12.6781C12.6081 12.7686 12.4216 12.7739 12.2666 12.6921L3.26662 7.94214C3.17046 7.89139 3.0954 7.81188 3.04976 7.7174V12.2499C3.04976 12.5536 2.80351 12.7999 2.49976 12.7999C2.196 12.7999 1.94976 12.5536 1.94976 12.2499V2.74989ZM4.57122 7.49995L12 11.4207V3.5792L4.57122 7.49995Z"
|
||||
fill="#000000"
|
||||
/>
|
||||
</svg>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 903 B After Width: | Height: | Size: 904 B |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46967 2.46967C8.76256 2.17678 9.23744 2.17678 9.53033 2.46967L11.5303 4.46967C11.7448 4.68417 11.809 5.00676 11.6929 5.28701C11.5768 5.56727 11.3033 5.75 11 5.75H9C5.54822 5.75 2.75 8.54822 2.75 12C2.75 15.4517 5.54846 18.25 9.00028 18.25H9.5C9.91421 18.25 10.25 18.5858 10.25 19C10.25 19.4142 9.91421 19.75 9.5 19.75H9.00028C4.72011 19.75 1.25 16.2802 1.25 12C1.25 7.71979 4.71979 4.25 9 4.25H9.18934L8.46967 3.53033C8.17678 3.23744 8.17678 2.76256 8.46967 2.46967ZM13.75 5C13.75 4.58579 14.0858 4.25 14.5 4.25H15C19.2802 4.25 22.75 7.71979 22.75 12C22.75 16.2802 19.2802 19.75 15 19.75H14.8107L15.5303 20.4697C15.8232 20.7626 15.8232 21.2374 15.5303 21.5303C15.2374 21.8232 14.7626 21.8232 14.4697 21.5303L12.4697 19.5303C12.2552 19.3158 12.191 18.9932 12.3071 18.713C12.4232 18.4327 12.6967 18.25 13 18.25H15C18.4518 18.25 21.25 15.4518 21.25 12C21.25 8.54822 18.4518 5.75 15 5.75H14.5C14.0858 5.75 13.75 5.41421 13.75 5ZM12.287 9.30709C12.5673 9.42318 12.75 9.69665 12.75 10V14C12.75 14.4142 12.4142 14.75 12 14.75C11.5858 14.75 11.25 14.4142 11.25 14V11.8107L11.0303 12.0303C10.7374 12.3232 10.2626 12.3232 9.96967 12.0303C9.67678 11.7374 9.67678 11.2626 9.96967 10.9697L11.4697 9.46967C11.6842 9.25517 12.0068 9.191 12.287 9.30709Z" fill="#1C274C"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46967 2.46967C8.76256 2.17678 9.23744 2.17678 9.53033 2.46967L11.5303 4.46967C11.7448 4.68417 11.809 5.00676 11.6929 5.28701C11.5768 5.56727 11.3033 5.75 11 5.75H9C5.54822 5.75 2.75 8.54822 2.75 12C2.75 15.4517 5.54846 18.25 9.00028 18.25H9.5C9.91421 18.25 10.25 18.5858 10.25 19C10.25 19.4142 9.91421 19.75 9.5 19.75H9.00028C4.72011 19.75 1.25 16.2802 1.25 12C1.25 7.71979 4.71979 4.25 9 4.25H9.18934L8.46967 3.53033C8.17678 3.23744 8.17678 2.76256 8.46967 2.46967ZM13.75 5C13.75 4.58579 14.0858 4.25 14.5 4.25H15C19.2802 4.25 22.75 7.71979 22.75 12C22.75 16.2802 19.2802 19.75 15 19.75H14.8107L15.5303 20.4697C15.8232 20.7626 15.8232 21.2374 15.5303 21.5303C15.2374 21.8232 14.7626 21.8232 14.4697 21.5303L12.4697 19.5303C12.2552 19.3158 12.191 18.9932 12.3071 18.713C12.4232 18.4327 12.6967 18.25 13 18.25H15C18.4518 18.25 21.25 15.4518 21.25 12C21.25 8.54822 18.4518 5.75 15 5.75H14.5C14.0858 5.75 13.75 5.41421 13.75 5ZM12.287 9.30709C12.5673 9.42318 12.75 9.69665 12.75 10V14C12.75 14.4142 12.4142 14.75 12 14.75C11.5858 14.75 11.25 14.4142 11.25 14V11.8107L11.0303 12.0303C10.7374 12.3232 10.2626 12.3232 9.96967 12.0303C9.67678 11.7374 9.67678 11.2626 9.96967 10.9697L11.4697 9.46967C11.6842 9.25517 12.0068 9.191 12.287 9.30709Z" fill="#1C274C"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46967 2.46967C8.76256 2.17678 9.23744 2.17678 9.53033 2.46967L11.5303 4.46967C11.7448 4.68417 11.809 5.00676 11.6929 5.28701C11.5768 5.56727 11.3033 5.75 11 5.75H9C5.54822 5.75 2.75 8.54822 2.75 12C2.75 15.4517 5.54846 18.25 9.00028 18.25H9.5C9.91421 18.25 10.25 18.5858 10.25 19C10.25 19.4142 9.91421 19.75 9.5 19.75H9.00028C4.72011 19.75 1.25 16.2802 1.25 12C1.25 7.71979 4.71979 4.25 9 4.25H9.18934L8.46967 3.53033C8.17678 3.23744 8.17678 2.76256 8.46967 2.46967ZM13.75 5C13.75 4.58579 14.0858 4.25 14.5 4.25H15C19.2802 4.25 22.75 7.71979 22.75 12C22.75 16.2802 19.2802 19.75 15 19.75H14.8107L15.5303 20.4697C15.8232 20.7626 15.8232 21.2374 15.5303 21.5303C15.2374 21.8232 14.7626 21.8232 14.4697 21.5303L12.4697 19.5303C12.2552 19.3158 12.191 18.9932 12.3071 18.713C12.4232 18.4327 12.6967 18.25 13 18.25H15C18.4518 18.25 21.25 15.4518 21.25 12C21.25 8.54822 18.4518 5.75 15 5.75H14.5C14.0858 5.75 13.75 5.41421 13.75 5Z" fill="#1C274C"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.46967 2.46967C8.76256 2.17678 9.23744 2.17678 9.53033 2.46967L11.5303 4.46967C11.7448 4.68417 11.809 5.00676 11.6929 5.28701C11.5768 5.56727 11.3033 5.75 11 5.75H9C5.54822 5.75 2.75 8.54822 2.75 12C2.75 15.4517 5.54846 18.25 9.00028 18.25H9.5C9.91421 18.25 10.25 18.5858 10.25 19C10.25 19.4142 9.91421 19.75 9.5 19.75H9.00028C4.72011 19.75 1.25 16.2802 1.25 12C1.25 7.71979 4.71979 4.25 9 4.25H9.18934L8.46967 3.53033C8.17678 3.23744 8.17678 2.76256 8.46967 2.46967ZM13.75 5C13.75 4.58579 14.0858 4.25 14.5 4.25H15C19.2802 4.25 22.75 7.71979 22.75 12C22.75 16.2802 19.2802 19.75 15 19.75H14.8107L15.5303 20.4697C15.8232 20.7626 15.8232 21.2374 15.5303 21.5303C15.2374 21.8232 14.7626 21.8232 14.4697 21.5303L12.4697 19.5303C12.2552 19.3158 12.191 18.9932 12.3071 18.713C12.4232 18.4327 12.6967 18.25 13 18.25H15C18.4518 18.25 21.25 15.4518 21.25 12C21.25 8.54822 18.4518 5.75 15 5.75H14.5C14.0858 5.75 13.75 5.41421 13.75 5Z" fill="#1C274C"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.0004 9.00009C16.6281 9.83575 17 10.8745 17 12.0001C17 13.1257 16.6281 14.1644 16.0004 15.0001M18 5.29177C19.8412 6.93973 21 9.33459 21 12.0001C21 14.6656 19.8412 17.0604 18 18.7084M4.6 9.00009H5.5012C6.05213 9.00009 6.32759 9.00009 6.58285 8.93141C6.80903 8.87056 7.02275 8.77046 7.21429 8.63566C7.43047 8.48353 7.60681 8.27191 7.95951 7.84868L10.5854 4.69758C11.0211 4.17476 11.2389 3.91335 11.4292 3.88614C11.594 3.86258 11.7597 3.92258 11.8712 4.04617C12 4.18889 12 4.52917 12 5.20973V18.7904C12 19.471 12 19.8113 11.8712 19.954C11.7597 20.0776 11.594 20.1376 11.4292 20.114C11.239 20.0868 11.0211 19.8254 10.5854 19.3026L7.95951 16.1515C7.60681 15.7283 7.43047 15.5166 7.21429 15.3645C7.02275 15.2297 6.80903 15.1296 6.58285 15.0688C6.32759 15.0001 6.05213 15.0001 5.5012 15.0001H4.6C4.03995 15.0001 3.75992 15.0001 3.54601 14.8911C3.35785 14.7952 3.20487 14.6422 3.10899 14.4541C3 14.2402 3 13.9601 3 13.4001V10.6001C3 10.04 3 9.76001 3.10899 9.54609C3.20487 9.35793 3.35785 9.20495 3.54601 9.10908C3.75992 9.00009 4.03995 9.00009 4.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.0004 9.00009C16.6281 9.83575 17 10.8745 17 12.0001C17 13.1257 16.6281 14.1644 16.0004 15.0001M18 5.29177C19.8412 6.93973 21 9.33459 21 12.0001C21 14.6656 19.8412 17.0604 18 18.7084M4.6 9.00009H5.5012C6.05213 9.00009 6.32759 9.00009 6.58285 8.93141C6.80903 8.87056 7.02275 8.77046 7.21429 8.63566C7.43047 8.48353 7.60681 8.27191 7.95951 7.84868L10.5854 4.69758C11.0211 4.17476 11.2389 3.91335 11.4292 3.88614C11.594 3.86258 11.7597 3.92258 11.8712 4.04617C12 4.18889 12 4.52917 12 5.20973V18.7904C12 19.471 12 19.8113 11.8712 19.954C11.7597 20.0776 11.594 20.1376 11.4292 20.114C11.239 20.0868 11.0211 19.8254 10.5854 19.3026L7.95951 16.1515C7.60681 15.7283 7.43047 15.5166 7.21429 15.3645C7.02275 15.2297 6.80903 15.1296 6.58285 15.0688C6.32759 15.0001 6.05213 15.0001 5.5012 15.0001H4.6C4.03995 15.0001 3.75992 15.0001 3.54601 14.8911C3.35785 14.7952 3.20487 14.6422 3.10899 14.4541C3 14.2402 3 13.9601 3 13.4001V10.6001C3 10.04 3 9.76001 3.10899 9.54609C3.20487 9.35793 3.35785 9.20495 3.54601 9.10908C3.75992 9.00009 4.03995 9.00009 4.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18 9.00009C18.6277 9.83575 18.9996 10.8745 18.9996 12.0001C18.9996 13.1257 18.6277 14.1644 18 15.0001M6.6 9.00009H7.5012C8.05213 9.00009 8.32759 9.00009 8.58285 8.93141C8.80903 8.87056 9.02275 8.77046 9.21429 8.63566C9.43047 8.48353 9.60681 8.27191 9.95951 7.84868L12.5854 4.69758C13.0211 4.17476 13.2389 3.91335 13.4292 3.88614C13.594 3.86258 13.7597 3.92258 13.8712 4.04617C14 4.18889 14 4.52917 14 5.20973V18.7904C14 19.471 14 19.8113 13.8712 19.954C13.7597 20.0776 13.594 20.1376 13.4292 20.114C13.239 20.0868 13.0211 19.8254 12.5854 19.3026L9.95951 16.1515C9.60681 15.7283 9.43047 15.5166 9.21429 15.3645C9.02275 15.2297 8.80903 15.1296 8.58285 15.0688C8.32759 15.0001 8.05213 15.0001 7.5012 15.0001H6.6C6.03995 15.0001 5.75992 15.0001 5.54601 14.8911C5.35785 14.7952 5.20487 14.6422 5.10899 14.4541C5 14.2402 5 13.9601 5 13.4001V10.6001C5 10.04 5 9.76001 5.10899 9.54609C5.20487 9.35793 5.35785 9.20495 5.54601 9.10908C5.75992 9.00009 6.03995 9.00009 6.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18 9.00009C18.6277 9.83575 18.9996 10.8745 18.9996 12.0001C18.9996 13.1257 18.6277 14.1644 18 15.0001M6.6 9.00009H7.5012C8.05213 9.00009 8.32759 9.00009 8.58285 8.93141C8.80903 8.87056 9.02275 8.77046 9.21429 8.63566C9.43047 8.48353 9.60681 8.27191 9.95951 7.84868L12.5854 4.69758C13.0211 4.17476 13.2389 3.91335 13.4292 3.88614C13.594 3.86258 13.7597 3.92258 13.8712 4.04617C14 4.18889 14 4.52917 14 5.20973V18.7904C14 19.471 14 19.8113 13.8712 19.954C13.7597 20.0776 13.594 20.1376 13.4292 20.114C13.239 20.0868 13.0211 19.8254 12.5854 19.3026L9.95951 16.1515C9.60681 15.7283 9.43047 15.5166 9.21429 15.3645C9.02275 15.2297 8.80903 15.1296 8.58285 15.0688C8.32759 15.0001 8.05213 15.0001 7.5012 15.0001H6.6C6.03995 15.0001 5.75992 15.0001 5.54601 14.8911C5.35785 14.7952 5.20487 14.6422 5.10899 14.4541C5 14.2402 5 13.9601 5 13.4001V10.6001C5 10.04 5 9.76001 5.10899 9.54609C5.20487 9.35793 5.35785 9.20495 5.54601 9.10908C5.75992 9.00009 6.03995 9.00009 6.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16 9.50009L21 14.5001M21 9.50009L16 14.5001M4.6 9.00009H5.5012C6.05213 9.00009 6.32759 9.00009 6.58285 8.93141C6.80903 8.87056 7.02275 8.77046 7.21429 8.63566C7.43047 8.48353 7.60681 8.27191 7.95951 7.84868L10.5854 4.69758C11.0211 4.17476 11.2389 3.91335 11.4292 3.88614C11.594 3.86258 11.7597 3.92258 11.8712 4.04617C12 4.18889 12 4.52917 12 5.20973V18.7904C12 19.471 12 19.8113 11.8712 19.954C11.7597 20.0776 11.594 20.1376 11.4292 20.114C11.239 20.0868 11.0211 19.8254 10.5854 19.3026L7.95951 16.1515C7.60681 15.7283 7.43047 15.5166 7.21429 15.3645C7.02275 15.2297 6.80903 15.1296 6.58285 15.0688C6.32759 15.0001 6.05213 15.0001 5.5012 15.0001H4.6C4.03995 15.0001 3.75992 15.0001 3.54601 14.8911C3.35785 14.7952 3.20487 14.6422 3.10899 14.4541C3 14.2402 3 13.9601 3 13.4001V10.6001C3 10.04 3 9.76001 3.10899 9.54609C3.20487 9.35793 3.35785 9.20495 3.54601 9.10908C3.75992 9.00009 4.03995 9.00009 4.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16 9.50009L21 14.5001M21 9.50009L16 14.5001M4.6 9.00009H5.5012C6.05213 9.00009 6.32759 9.00009 6.58285 8.93141C6.80903 8.87056 7.02275 8.77046 7.21429 8.63566C7.43047 8.48353 7.60681 8.27191 7.95951 7.84868L10.5854 4.69758C11.0211 4.17476 11.2389 3.91335 11.4292 3.88614C11.594 3.86258 11.7597 3.92258 11.8712 4.04617C12 4.18889 12 4.52917 12 5.20973V18.7904C12 19.471 12 19.8113 11.8712 19.954C11.7597 20.0776 11.594 20.1376 11.4292 20.114C11.239 20.0868 11.0211 19.8254 10.5854 19.3026L7.95951 16.1515C7.60681 15.7283 7.43047 15.5166 7.21429 15.3645C7.02275 15.2297 6.80903 15.1296 6.58285 15.0688C6.32759 15.0001 6.05213 15.0001 5.5012 15.0001H4.6C4.03995 15.0001 3.75992 15.0001 3.54601 14.8911C3.35785 14.7952 3.20487 14.6422 3.10899 14.4541C3 14.2402 3 13.9601 3 13.4001V10.6001C3 10.04 3 9.76001 3.10899 9.54609C3.20487 9.35793 3.35785 9.20495 3.54601 9.10908C3.75992 9.00009 4.03995 9.00009 4.6 9.00009Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
@@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
<meta charset="UTF-8" />
|
||||
<title>RktPlayer - A music player - library entry</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="pane">
|
||||
<div class="keyval">
|
||||
<label for="selected-library-kind" id="lbl-kind">Kind:</label>
|
||||
<select id="selected-library-kind"></select>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="keyval">
|
||||
<label for="name" id="lbl-name">Name:</label>
|
||||
<input type="text" id="name" />
|
||||
</div>
|
||||
<div id="filesystem-fields">
|
||||
<div class="keyval">
|
||||
<label for="local-path" id="lbl-local-path">Local path:</label>
|
||||
<div class="file-box">
|
||||
<input id="local-path" type="text" />
|
||||
<button id="browse">Browse</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="media-server-fields" style="display: none">
|
||||
<div class="keyval">
|
||||
<label for="selected-media-server" id="lbl-media-server">Media server:</label>
|
||||
<div class="file-box">
|
||||
<select id="selected-media-server"></select>
|
||||
<button id="refresh-media-servers">Refresh</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keyval">
|
||||
<label for="selected-media-server-container" id="lbl-media-server-root">Start point:</label>
|
||||
<div class="file-box">
|
||||
<span id="media-server-root"></span>
|
||||
<button id="media-server-root-up">Up</button>
|
||||
<select id="selected-media-server-container"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keyval">
|
||||
<label for="media-server-item-limit" id="lbl-media-server-item-limit">Maximum items:</label>
|
||||
<input id="media-server-item-limit" type="number" min="1" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="button-box">
|
||||
<button id="ok">OK</button>
|
||||
<button id="cancel">Cancel</button>
|
||||
<button id="dev">devtools</button>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -22,7 +22,7 @@
|
||||
<img id="volume-img" src="buttons/volume-high.svg" />
|
||||
<div id="volume-meter" class="volume-meter">
|
||||
<div class="status"><span class="info" id="volume-perc"></span></div>
|
||||
<input type="range" min="0" max="13" value="10" class="v-slider" id="volume-range" step="0.1" />
|
||||
<input type="range" min="0" max="100" value="50" class="v-slider" id="volume-range" step="1" />
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
@@ -53,6 +53,7 @@
|
||||
<span class="info" id="rate"></span>
|
||||
<span class="info" id="channels"></span>
|
||||
<span class="info" id="format"></span>
|
||||
<span class="info" id="source"></span>
|
||||
<span class="info" id="paused"></span>
|
||||
<span class="info" id="message"></span>
|
||||
<div class="right">
|
||||
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -16,7 +16,7 @@
|
||||
<hr />
|
||||
<table class="libraries">
|
||||
<thead id="lib-head">
|
||||
<tr><th id="lbl-name"></th><th id="lbl-local-path"></th><th id="lbl-host"></th><th id="lbl-prefixes"></th></tr>
|
||||
<tr><th id="lbl-name"></th><th id="lbl-kind"></th><th id="lbl-local-path"></th><th id="lbl-host"></th></tr>
|
||||
</thead>
|
||||
<tbody id="lib-body">
|
||||
</tbody>
|
||||
@@ -26,6 +26,22 @@
|
||||
<button id="edit">Edit Library</button>
|
||||
<button id="remove">Remove Library</button>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="button-box">
|
||||
<button id="clear-cache">Clear downloaded tracks</button>
|
||||
</div>
|
||||
<hr />
|
||||
<label id="lbl-renderers">Audio Players</label>
|
||||
<table class="renderers">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="lbl-renderer-name">Name</th>
|
||||
<th id="lbl-volume-curve">Logarithmic volume</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="renderer-body">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="button-box">
|
||||
<button id="ok">OK</button>
|
||||
@@ -273,12 +273,14 @@ table.tracks td.title, table.tracks td.album {
|
||||
}
|
||||
|
||||
table.tracks tr, table.tracks td,
|
||||
table.libraries tr, table.libraries td {
|
||||
table.libraries tr, table.libraries td,
|
||||
table.renderers tr, table.renderers td {
|
||||
cursor: default;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
table.tracks tr:hover, table.libraries tbody tr:hover {
|
||||
table.tracks tr:hover, table.libraries tbody tr:hover,
|
||||
table.renderers tbody tr:hover {
|
||||
background: #e0e0e0;
|
||||
color: black;
|
||||
transition: all 0.5s ease-in;
|
||||
@@ -296,6 +298,18 @@ table.libraries tbody tr.current {
|
||||
color: #f3961e;
|
||||
}
|
||||
|
||||
table.tracks tr.unavailable {
|
||||
color: #777777;
|
||||
}
|
||||
|
||||
table.tracks tr.unavailable:hover {
|
||||
color: #777777;
|
||||
}
|
||||
|
||||
table.tracks tr.failed {
|
||||
color: #a06060;
|
||||
}
|
||||
|
||||
.album-art .content img {
|
||||
width: auto;
|
||||
height: calc(100% - 20px);
|
||||
@@ -388,6 +402,11 @@ input.v-slider {
|
||||
animation: blink 3s infinite both;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: #d60000;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0%,
|
||||
50%,
|
||||
@@ -1,41 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
<meta charset="UTF-8" />
|
||||
<title>RktPlayer - A music player - library entry</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="pane">
|
||||
<div class="keyval">
|
||||
<label for="kind" id="lbl-kind">Action:</label>
|
||||
<span id="kind">Action</span>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="keyval">
|
||||
<label for="name" id="lbl-name">Name:</label>
|
||||
<input type="text" id="name" />
|
||||
</div>
|
||||
<div class="keyval">
|
||||
<label for="local-path" id="lbl-local-path">Local path:</label>
|
||||
<div class="file-box">
|
||||
<input id="local-path" type="text" />
|
||||
<button id="browse">Browse</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keyval">
|
||||
<label for="host" id="lbl-host">Host:</label>
|
||||
<input type="text" id="host" />
|
||||
</div>
|
||||
<div class="keyval">
|
||||
<label for="prefixes" id="lbl-prefixes">Prefixes:</label>
|
||||
<textarea type="text" id="prefixes"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="button-box">
|
||||
<button id="ok">OK</button>
|
||||
<button id="cancel">Cancel</button>
|
||||
<button id="dev">devtools</button>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,800 @@
|
||||
#lang racket
|
||||
|
||||
(require racket-webview
|
||||
racket/runtime-path
|
||||
racket/gui
|
||||
racket-sprintf
|
||||
open-app
|
||||
xml
|
||||
(prefix-in upnp: racket-upnp)
|
||||
"../misc/utils.rkt"
|
||||
"translate.rkt"
|
||||
"../play/playlist.rkt"
|
||||
"../play/base/player.rkt"
|
||||
"../library/libraries-config.rkt"
|
||||
"../library/library-factory.rkt"
|
||||
"../play/base/renderer.rkt"
|
||||
)
|
||||
|
||||
(provide
|
||||
(all-from-out racket-webview)
|
||||
settings%
|
||||
)
|
||||
|
||||
(define-runtime-path rkt-gui-dir "html")
|
||||
|
||||
(define library-dlg%
|
||||
(class wv-dialog%
|
||||
(init-field [kind 'filesystem] [result-cb (λ args #f)]
|
||||
[id (new-id)] [name ""] [local-path ""]
|
||||
[host ""] [item-limit 100]
|
||||
[kind-editable? #t])
|
||||
(inherit-field settings icon parent)
|
||||
|
||||
(super-new
|
||||
[html-path "library-dialog.html"]
|
||||
[title (tr 'settings-library)]
|
||||
[icon (build-path rkt-gui-dir "rktplayer.png")]
|
||||
[quit-on-close #f]
|
||||
)
|
||||
|
||||
(define initialized #f)
|
||||
(define btn-ok #f)
|
||||
(define btn-cancel #f)
|
||||
(define lbl-name #f)
|
||||
(define lbl-kind #f)
|
||||
(define lbl-local-path #f)
|
||||
(define btn-browse #f)
|
||||
(define lbl-media-server #f)
|
||||
(define lbl-media-server-root #f)
|
||||
(define lbl-media-server-item-limit #f)
|
||||
(define btn-refresh-media-servers #f)
|
||||
(define btn-media-server-root-up #f)
|
||||
(define div-filesystem-fields #f)
|
||||
(define div-media-server-fields #f)
|
||||
(define txt-media-server-root #f)
|
||||
(define sel-library-kind #f)
|
||||
(define sel-media-server #f)
|
||||
(define sel-media-server-container #f)
|
||||
(define inp-local-path #f)
|
||||
(define inp-name #f)
|
||||
(define inp-media-server-item-limit #f)
|
||||
(define media-servers '())
|
||||
(define media-server-containers '())
|
||||
(define media-server-root-id
|
||||
(if (and (eq? kind 'media-server)
|
||||
(not (string=? local-path "")))
|
||||
local-path
|
||||
"0"))
|
||||
(define media-server-root-path '())
|
||||
(define media-server-root-parents '())
|
||||
(define media-server-root-request 0)
|
||||
|
||||
(define/public (set-labels)
|
||||
(send btn-ok set-innerHTML! (tr 'ok))
|
||||
(send btn-cancel set-innerHTML! (tr 'cancel))
|
||||
(send lbl-name set-innerHTML! (tr 'name))
|
||||
(send lbl-kind set-innerHTML! (tr 'library-kind))
|
||||
(send lbl-local-path set-innerHTML! (tr 'local-path))
|
||||
(send lbl-media-server set-innerHTML! (tr 'media-servers))
|
||||
(send lbl-media-server-root
|
||||
set-innerHTML!
|
||||
(tr 'media-server-root))
|
||||
(send lbl-media-server-item-limit
|
||||
set-innerHTML!
|
||||
(tr 'media-server-item-limit))
|
||||
(send btn-browse set-innerHTML! (tr 'browse))
|
||||
(send btn-refresh-media-servers set-innerHTML! (tr 'refresh))
|
||||
(send btn-media-server-root-up set-innerHTML! (tr 'up))
|
||||
)
|
||||
|
||||
(define/private (media-server-label server)
|
||||
(format "~a (~a)"
|
||||
(upnp:media-server-name server)
|
||||
(upnp:media-server-address server)))
|
||||
|
||||
(define/private (update-media-servers!)
|
||||
(let* ((items
|
||||
(if (null? media-servers)
|
||||
(list
|
||||
(list -1
|
||||
(tr 'no-media-servers)))
|
||||
(for/list ((server
|
||||
(in-list media-servers))
|
||||
(idx (in-naturals)))
|
||||
(list idx
|
||||
(media-server-label server)))))
|
||||
(selected-idx
|
||||
(or
|
||||
(for/first ((server (in-list media-servers))
|
||||
(idx (in-naturals))
|
||||
#:when
|
||||
(member host
|
||||
(filter
|
||||
values
|
||||
(list
|
||||
(upnp:upnp-device-udn server)
|
||||
(upnp:media-server-name server)
|
||||
(upnp:media-server-address server)))))
|
||||
idx)
|
||||
(if (null? media-servers)
|
||||
-1
|
||||
0))))
|
||||
(send sel-media-server
|
||||
set-options!
|
||||
items
|
||||
selected-idx)))
|
||||
|
||||
(define/public (refresh-media-servers)
|
||||
(set! media-servers '())
|
||||
(update-media-servers!)
|
||||
(send btn-refresh-media-servers
|
||||
set-innerHTML!
|
||||
(tr 'searching))
|
||||
(void
|
||||
(thread
|
||||
(lambda ()
|
||||
(with-handlers
|
||||
((exn:fail?
|
||||
(lambda (exception)
|
||||
(warn-rktplayer
|
||||
"Could not query UPnP media servers: ~a"
|
||||
(exn-message exception))
|
||||
(set! media-servers '())
|
||||
(update-media-servers!)
|
||||
(set! media-server-containers '())
|
||||
(update-media-server-root!)
|
||||
(send btn-refresh-media-servers
|
||||
set-innerHTML!
|
||||
(tr 'refresh)))))
|
||||
(set! media-servers
|
||||
(upnp:query-media-servers))
|
||||
(update-media-servers!)
|
||||
(load-media-server-root!)
|
||||
(send btn-refresh-media-servers
|
||||
set-innerHTML!
|
||||
(tr 'refresh)))))))
|
||||
|
||||
(define/private (selected-media-server)
|
||||
(let* ((idx
|
||||
(string->number
|
||||
(get sel-media-server))))
|
||||
(and idx
|
||||
(>= idx 0)
|
||||
(< idx (length media-servers))
|
||||
(list-ref media-servers idx))))
|
||||
|
||||
(define/private (current-library-kind)
|
||||
(string->symbol
|
||||
(get sel-library-kind)))
|
||||
|
||||
(define/private (update-library-kind!)
|
||||
(case (current-library-kind)
|
||||
((filesystem)
|
||||
(send div-filesystem-fields display 'block)
|
||||
(send div-media-server-fields display 'none))
|
||||
((media-server)
|
||||
(send div-filesystem-fields display 'none)
|
||||
(send div-media-server-fields display 'block))))
|
||||
|
||||
(define/private (media-server-root-label)
|
||||
(if (null? media-server-root-path)
|
||||
(if (string=? media-server-root-id "0")
|
||||
"/"
|
||||
(format "~a" media-server-root-id))
|
||||
(string-append
|
||||
"/"
|
||||
(string-join
|
||||
media-server-root-path
|
||||
" / "))))
|
||||
|
||||
(define/private (update-media-server-root!
|
||||
[status #f])
|
||||
(let ((items
|
||||
(cond
|
||||
(status
|
||||
(list
|
||||
(list -1 status)))
|
||||
((null? media-server-containers)
|
||||
(list
|
||||
(list -1
|
||||
(tr 'no-media-server-containers))))
|
||||
(else
|
||||
(cons
|
||||
(list -1
|
||||
(tr 'select-media-server-container))
|
||||
(for/list
|
||||
((container
|
||||
(in-list media-server-containers))
|
||||
(idx (in-naturals)))
|
||||
(list
|
||||
idx
|
||||
(upnp:media-entry-title
|
||||
container))))))))
|
||||
(send txt-media-server-root
|
||||
set-innerHTML!
|
||||
(media-server-root-label))
|
||||
(send sel-media-server-container
|
||||
set-options!
|
||||
items
|
||||
-1)))
|
||||
|
||||
(define/private (load-media-server-root!)
|
||||
(set! media-server-root-request
|
||||
(add1 media-server-root-request))
|
||||
(let ((request media-server-root-request)
|
||||
(server (selected-media-server))
|
||||
(container-id media-server-root-id))
|
||||
(set! media-server-containers '())
|
||||
(update-media-server-root!
|
||||
(tr 'searching))
|
||||
(if server
|
||||
(void
|
||||
(thread
|
||||
(lambda ()
|
||||
(with-handlers
|
||||
((exn:fail?
|
||||
(lambda (exception)
|
||||
(warn-rktplayer
|
||||
"Could not browse UPnP media-server container ~a: ~a"
|
||||
container-id
|
||||
(exn-message exception))
|
||||
(when (= request
|
||||
media-server-root-request)
|
||||
(set! media-server-containers '())
|
||||
(update-media-server-root!)))))
|
||||
(let ((containers
|
||||
(filter
|
||||
(lambda (entry)
|
||||
(and
|
||||
(upnp:media-container? entry)
|
||||
(string?
|
||||
(upnp:media-entry-id entry))))
|
||||
(upnp:media-server-browse
|
||||
server
|
||||
container-id
|
||||
#:count
|
||||
(current-media-server-item-limit)))))
|
||||
(when (= request
|
||||
media-server-root-request)
|
||||
(set! media-server-containers
|
||||
containers)
|
||||
(update-media-server-root!)))))))
|
||||
(update-media-server-root!))))
|
||||
|
||||
(define/private (reset-media-server-root!)
|
||||
(set! media-server-root-id "0")
|
||||
(set! media-server-root-path '())
|
||||
(set! media-server-root-parents '())
|
||||
(load-media-server-root!))
|
||||
|
||||
(define/private (open-media-server-container!)
|
||||
(let ((idx
|
||||
(string->number
|
||||
(get sel-media-server-container))))
|
||||
(when (and idx
|
||||
(>= idx 0)
|
||||
(< idx
|
||||
(length media-server-containers)))
|
||||
(let ((container
|
||||
(list-ref media-server-containers
|
||||
idx)))
|
||||
(set! media-server-root-parents
|
||||
(cons
|
||||
(list media-server-root-id
|
||||
media-server-root-path)
|
||||
media-server-root-parents))
|
||||
(set! media-server-root-id
|
||||
(upnp:media-entry-id
|
||||
container))
|
||||
(set! media-server-root-path
|
||||
(append
|
||||
media-server-root-path
|
||||
(list
|
||||
(upnp:media-entry-title
|
||||
container))))
|
||||
(load-media-server-root!)))))
|
||||
|
||||
(define/private (media-server-root-up!)
|
||||
(cond
|
||||
((not
|
||||
(null? media-server-root-parents))
|
||||
(let ((parent
|
||||
(car media-server-root-parents)))
|
||||
(set! media-server-root-id
|
||||
(car parent))
|
||||
(set! media-server-root-path
|
||||
(cadr parent))
|
||||
(set! media-server-root-parents
|
||||
(cdr media-server-root-parents))
|
||||
(load-media-server-root!)))
|
||||
((not
|
||||
(string=? media-server-root-id "0"))
|
||||
(reset-media-server-root!))))
|
||||
|
||||
(define (get el)
|
||||
(let ((str (send el get)))
|
||||
(string-trim str)))
|
||||
|
||||
(define/private (current-media-server-item-limit)
|
||||
(let ((value
|
||||
(send inp-media-server-item-limit get)))
|
||||
(if (exact-positive-integer? value)
|
||||
value
|
||||
100)))
|
||||
|
||||
(define/public (select-library)
|
||||
(let* ((music-library (get inp-local-path))
|
||||
(dir (send this choose-dir
|
||||
(tr 'choose-lib-folder)
|
||||
music-library
|
||||
)))
|
||||
(displayln "Directory kiezen")
|
||||
(if (eq? dir 'showing)
|
||||
'done
|
||||
(unless (eq? dir #f)
|
||||
(send inp-local-path set! dir))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(define/override (page-loaded oke)
|
||||
(unless initialized
|
||||
(when oke
|
||||
(set! initialized #t)
|
||||
(set! btn-ok (send this element 'ok))
|
||||
(set! btn-cancel (send this element 'cancel))
|
||||
(set! lbl-name (send this element 'lbl-name))
|
||||
(set! lbl-kind (send this element 'lbl-kind))
|
||||
(set! lbl-local-path (send this element 'lbl-local-path))
|
||||
(set! lbl-media-server (send this element 'lbl-media-server))
|
||||
(set! lbl-media-server-root
|
||||
(send this element
|
||||
'lbl-media-server-root))
|
||||
(set! lbl-media-server-item-limit
|
||||
(send this element
|
||||
'lbl-media-server-item-limit))
|
||||
(set! div-filesystem-fields
|
||||
(send this element
|
||||
'filesystem-fields))
|
||||
(set! div-media-server-fields
|
||||
(send this element
|
||||
'media-server-fields))
|
||||
(set! txt-media-server-root
|
||||
(send this element
|
||||
'media-server-root))
|
||||
(set! sel-library-kind
|
||||
(send this element
|
||||
'selected-library-kind))
|
||||
(set! sel-media-server
|
||||
(send this element
|
||||
'selected-media-server))
|
||||
(set! sel-media-server-container
|
||||
(send this element
|
||||
'selected-media-server-container))
|
||||
(set! inp-name (send this element 'name))
|
||||
(set! inp-local-path (send this element 'local-path))
|
||||
(set! inp-media-server-item-limit
|
||||
(send this element
|
||||
'media-server-item-limit))
|
||||
(set! btn-browse (send this element 'browse))
|
||||
(set! btn-refresh-media-servers
|
||||
(send this element
|
||||
'refresh-media-servers))
|
||||
(set! btn-media-server-root-up
|
||||
(send this element
|
||||
'media-server-root-up))
|
||||
|
||||
(send inp-name set! name)
|
||||
(send inp-local-path set! local-path)
|
||||
(send inp-media-server-item-limit
|
||||
set!
|
||||
(format "~a" item-limit))
|
||||
(send sel-library-kind
|
||||
set-options!
|
||||
(list
|
||||
(list 'filesystem
|
||||
(tr 'filesystem))
|
||||
(list 'media-server
|
||||
(tr 'media-server)))
|
||||
kind)
|
||||
(unless kind-editable?
|
||||
(send sel-library-kind
|
||||
set-attr!
|
||||
'((disabled "disabled"))))
|
||||
|
||||
(send this set-labels)
|
||||
(update-library-kind!)
|
||||
(update-media-server-root!)
|
||||
|
||||
(send sel-library-kind
|
||||
on-change!
|
||||
(lambda (value)
|
||||
(update-library-kind!)))
|
||||
(send sel-media-server
|
||||
on-change!
|
||||
(lambda (value)
|
||||
(reset-media-server-root!)))
|
||||
(send sel-media-server-container
|
||||
on-change!
|
||||
(lambda (value)
|
||||
(open-media-server-container!)))
|
||||
(send this refresh-media-servers)
|
||||
|
||||
(send this bind! 'browse 'click (λ (el evt data)
|
||||
(send this select-library)))
|
||||
(send this bind!
|
||||
'refresh-media-servers
|
||||
'click
|
||||
(lambda (element event data)
|
||||
(send this refresh-media-servers)))
|
||||
(send this bind!
|
||||
'media-server-root-up
|
||||
'click
|
||||
(lambda (element event data)
|
||||
(media-server-root-up!)))
|
||||
|
||||
(send this bind! 'ok 'click (λ (el evt data)
|
||||
(let ((name (get inp-name))
|
||||
(library-kind
|
||||
(string->symbol
|
||||
(get sel-library-kind)))
|
||||
(local-path (get inp-local-path)))
|
||||
(case library-kind
|
||||
((filesystem)
|
||||
(result-cb
|
||||
id
|
||||
name
|
||||
library-kind
|
||||
local-path
|
||||
host
|
||||
(current-media-server-item-limit))
|
||||
(send this close))
|
||||
((media-server)
|
||||
(let ((server
|
||||
(selected-media-server)))
|
||||
(when server
|
||||
(result-cb
|
||||
id
|
||||
(if (string=? name "")
|
||||
(upnp:media-server-name
|
||||
server)
|
||||
name)
|
||||
library-kind
|
||||
media-server-root-id
|
||||
(or
|
||||
(upnp:upnp-device-udn
|
||||
server)
|
||||
(upnp:media-server-name
|
||||
server))
|
||||
(current-media-server-item-limit))
|
||||
(send this close))))))))
|
||||
(send this bind! 'cancel 'click (λ (el evt data) (send this close)))
|
||||
(send this bind! 'dev 'click (λ args (send this devtools)))
|
||||
)
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
(define settings%
|
||||
(class wv-dialog%
|
||||
(init-field
|
||||
[log-file #f]
|
||||
[renderers '()]
|
||||
[libraries-changed-callback (lambda () (void))]
|
||||
[cache-cleared-callback (lambda () (void))])
|
||||
(inherit-field settings icon parent)
|
||||
|
||||
(super-new
|
||||
[html-path "settings.html"]
|
||||
[title (tr 'settings-title)]
|
||||
[icon (build-path rkt-gui-dir "rktplayer.png")]
|
||||
[quit-on-close #f]
|
||||
)
|
||||
|
||||
(define initialized #f)
|
||||
(define btn-ok #f)
|
||||
(define btn-cancel #f)
|
||||
(define btn-add #f)
|
||||
(define btn-edit #f)
|
||||
(define btn-remove #f)
|
||||
(define btn-clear-cache #f)
|
||||
(define lbl-language #f)
|
||||
(define lbl-name #f)
|
||||
(define lbl-kind #f)
|
||||
(define lbl-local-path #f)
|
||||
(define lbl-host #f)
|
||||
(define lbl-lib #f)
|
||||
(define lbl-renderers #f)
|
||||
(define lbl-renderer-name #f)
|
||||
(define lbl-volume-curve #f)
|
||||
(define renderer-body #f)
|
||||
(define div-language #f)
|
||||
(define sel-language #f)
|
||||
|
||||
(define libs
|
||||
(send (get-library-factory)
|
||||
get-libraries-config))
|
||||
|
||||
(define cfg (send settings clone 'settings))
|
||||
|
||||
(define/public (set-labels)
|
||||
(send btn-ok set-innerHTML! (tr 'ok))
|
||||
(send btn-cancel set-innerHTML! (tr 'cancel))
|
||||
(send btn-add set-innerHTML! (tr 'library-add))
|
||||
(send btn-edit set-innerHTML! (tr 'library-edit))
|
||||
(send btn-remove set-innerHTML! (tr 'library-remove))
|
||||
(send btn-clear-cache
|
||||
set-innerHTML!
|
||||
(tr 'clear-cache))
|
||||
(send lbl-language set-innerHTML! (tr 'language))
|
||||
(send lbl-name set-innerHTML! (tr 'name))
|
||||
(send lbl-kind set-innerHTML! (tr 'library-kind))
|
||||
(send lbl-local-path set-innerHTML! (tr 'local-path))
|
||||
(send lbl-host set-innerHTML! (tr 'host))
|
||||
(send lbl-lib set-innerHTML! (tr 'lbl-libary-path))
|
||||
(send lbl-renderers set-innerHTML! (tr 'renderers))
|
||||
(send lbl-renderer-name set-innerHTML! (tr 'name))
|
||||
(send lbl-volume-curve
|
||||
set-innerHTML!
|
||||
(tr 'logarithmic-volume))
|
||||
)
|
||||
|
||||
(define/public (update-renderers)
|
||||
(let ((rows
|
||||
(for/list ((renderer (in-list renderers))
|
||||
(idx (in-naturals)))
|
||||
(list
|
||||
'tr
|
||||
(list (list 'id
|
||||
(format "renderer-~a" idx)))
|
||||
(list 'td
|
||||
'((class "name"))
|
||||
(send renderer get-name))
|
||||
(list
|
||||
'td
|
||||
'((class "volume-curve"))
|
||||
(list
|
||||
'input
|
||||
(append
|
||||
(list
|
||||
'(type "checkbox")
|
||||
'(class "renderer-volume-curve")
|
||||
(list 'id
|
||||
(format "renderer-volume-curve-~a"
|
||||
idx)))
|
||||
(if (eq? (send renderer
|
||||
get-volume-curve)
|
||||
'logarithmic)
|
||||
'((checked "checked"))
|
||||
'()))))))))
|
||||
(send renderer-body
|
||||
set-innerHTML!
|
||||
(apply string-append
|
||||
(map xexpr->string rows)))
|
||||
(send this
|
||||
bind!
|
||||
"table.renderers input.renderer-volume-curve"
|
||||
'change
|
||||
(lambda (el evt data)
|
||||
(let ((idx
|
||||
(string->number
|
||||
(substring
|
||||
(format "~a" (send el id))
|
||||
(string-length
|
||||
"renderer-volume-curve-")))))
|
||||
(send (list-ref renderers idx)
|
||||
set-volume-curve!
|
||||
(if (send el get)
|
||||
'logarithmic
|
||||
'linear)))))))
|
||||
|
||||
(define/public (update-libraries)
|
||||
(let ((count (send libs count)))
|
||||
(letrec ((f (λ (i)
|
||||
(if (= i count)
|
||||
'()
|
||||
(cons
|
||||
(let* ((id (send libs library-id i))
|
||||
(entry (begin
|
||||
(dbg-rktplayer "index = ~a, id = ~a, symbol? id = ~a" i id (symbol? id))
|
||||
(send libs get-library id)))
|
||||
(name (send entry get-name))
|
||||
(kind (send entry get-kind))
|
||||
(local-path (send entry get-root))
|
||||
(host (send entry get-host))
|
||||
(tr-attr (if (send entry is-current?)
|
||||
'((class "current"))
|
||||
'((class "none"))))
|
||||
)
|
||||
(list 'tr (append (list (list 'id (format "~a" id)))
|
||||
tr-attr)
|
||||
(list 'td (list '(class "name")) name)
|
||||
(list 'td (list '(class "kind"))
|
||||
(tr kind))
|
||||
(list 'td '((class "path"))
|
||||
(format "~a" local-path))
|
||||
(list 'td '((class "host"))
|
||||
(or host ""))))
|
||||
(f (+ i 1)))))))
|
||||
(let* ((tbl (f 0))
|
||||
(el (send this element 'lib-body))
|
||||
(html (if (= count 0)
|
||||
""
|
||||
(apply string-append (map xexpr->string tbl)))))
|
||||
(displayln html)
|
||||
(send el set-innerHTML! html)
|
||||
(send this bind! "table.libraries tr" 'click
|
||||
(lambda (el evt data)
|
||||
(let* ((new-id (string->symbol (send el attr 'id)))
|
||||
(new-lib (send libs get-library new-id))
|
||||
(cur-lib (send libs current-library))
|
||||
)
|
||||
(displayln new-id)
|
||||
(displayln new-lib)
|
||||
(displayln cur-lib)
|
||||
(unless (eq? cur-lib #f)
|
||||
(let ((cur-el (send this element (send cur-lib get-id))))
|
||||
(send cur-el remove-class! 'current)
|
||||
(send cur-lib set-current! #f)))
|
||||
(unless (eq? new-id #f)
|
||||
(let ((new-el (send this element new-id)))
|
||||
(displayln new-el)
|
||||
(displayln (send new-el attr 'id))
|
||||
(send new-el set-attr! '(test "NEE!"))
|
||||
(send new-el add-class! "current")
|
||||
(send new-lib set-current! #t)))
|
||||
(libraries-changed-callback)
|
||||
)))
|
||||
))))
|
||||
|
||||
(define/public (add-library)
|
||||
(let* ((cb (λ (id name kind root host item-limit)
|
||||
(send libs add-library
|
||||
(library-item
|
||||
id
|
||||
name
|
||||
kind
|
||||
1
|
||||
root
|
||||
(if (string=? host "")
|
||||
#f
|
||||
host)
|
||||
item-limit
|
||||
#f))
|
||||
(send this update-libraries)
|
||||
(libraries-changed-callback)))
|
||||
(dlg (new library-dlg% [parent this]
|
||||
[settings (send settings clone 'library-dlg)]
|
||||
[kind 'filesystem] [result-cb cb])))
|
||||
(send dlg show)))
|
||||
|
||||
(define/public (edit-library)
|
||||
(let ((entry
|
||||
(send libs current-library)))
|
||||
(when entry
|
||||
(let* ((id (send entry get-id))
|
||||
(kind (send entry get-kind))
|
||||
(kind-version
|
||||
(send entry get-kind-version))
|
||||
(current
|
||||
(send entry is-current?))
|
||||
(cb
|
||||
(lambda (id name kind root host item-limit)
|
||||
(send libs
|
||||
update-item!
|
||||
(library-item
|
||||
id
|
||||
name
|
||||
kind
|
||||
kind-version
|
||||
root
|
||||
(if (string=? host "")
|
||||
#f
|
||||
host)
|
||||
item-limit
|
||||
current))
|
||||
(send this update-libraries)
|
||||
(libraries-changed-callback)))
|
||||
(dlg
|
||||
(new library-dlg%
|
||||
[parent this]
|
||||
[settings
|
||||
(send settings
|
||||
clone
|
||||
'library-dlg)]
|
||||
[id id]
|
||||
[name
|
||||
(send entry get-name)]
|
||||
[kind kind]
|
||||
[kind-editable? #f]
|
||||
[local-path
|
||||
(format
|
||||
"~a"
|
||||
(send entry get-root))]
|
||||
[host
|
||||
(or
|
||||
(send entry get-host)
|
||||
"")]
|
||||
[item-limit
|
||||
(send entry get-item-limit)]
|
||||
[result-cb cb])))
|
||||
(send dlg show)))))
|
||||
|
||||
(define/public (remove-library)
|
||||
(let ((entry
|
||||
(send libs current-library)))
|
||||
(when entry
|
||||
(send libs
|
||||
remove-library
|
||||
(send entry get-id))
|
||||
(let ((new-current
|
||||
(send libs current-library)))
|
||||
(when new-current
|
||||
(send new-current
|
||||
set-current!
|
||||
#t)))
|
||||
(libraries-changed-callback)
|
||||
(send this update-libraries))))
|
||||
|
||||
(define/override (page-loaded oke)
|
||||
(unless initialized
|
||||
(when oke
|
||||
(set! initialized #t)
|
||||
(set! btn-ok (send this element 'ok))
|
||||
(set! btn-cancel (send this element 'cancel))
|
||||
(set! btn-add (send this element 'add))
|
||||
(set! btn-edit (send this element 'edit))
|
||||
(set! btn-remove (send this element 'remove))
|
||||
(set! btn-clear-cache
|
||||
(send this element 'clear-cache))
|
||||
(set! lbl-language (send this element 'lbl-language))
|
||||
(set! lbl-lib (send this element 'lbl-libary-path))
|
||||
(set! lbl-renderers
|
||||
(send this element 'lbl-renderers))
|
||||
(set! lbl-renderer-name
|
||||
(send this element 'lbl-renderer-name))
|
||||
(set! lbl-volume-curve
|
||||
(send this element 'lbl-volume-curve))
|
||||
(set! renderer-body
|
||||
(send this element 'renderer-body))
|
||||
(set! lbl-name (send this element 'lbl-name))
|
||||
(set! lbl-kind (send this element 'lbl-kind))
|
||||
(set! lbl-local-path (send this element 'lbl-local-path))
|
||||
(set! lbl-host (send this element 'lbl-host))
|
||||
(set! div-language (send this element 'language))
|
||||
|
||||
(send this set-labels)
|
||||
|
||||
(send div-language set-innerHTML! (make-select-list 'sel-lang (languages) (current-lang)))
|
||||
|
||||
(send this bind! 'sel-lang 'change (λ (el evt data)
|
||||
(let ((lang (string->symbol
|
||||
(format "~a" (hash-ref data 'value (current-lang))))))
|
||||
(set-lang! lang)
|
||||
(send cfg set! 'language lang)
|
||||
(send this set-labels))))
|
||||
|
||||
(send this bind! 'ok 'click (λ (el evt data) (send this close)))
|
||||
(send this bind! 'cancel 'click (λ (el evt data) (send this close)))
|
||||
(send this bind! 'dev 'click (λ args (send this devtools)))
|
||||
(send this bind! 'add 'click (λ (el evt data) (send this add-library)))
|
||||
(send this bind! 'edit 'click (λ (el evt data) (send this edit-library)))
|
||||
(send this bind! 'remove 'click (λ (el evt data) (send this remove-library)))
|
||||
(send this bind!
|
||||
'clear-cache
|
||||
'click
|
||||
(lambda (el evt data)
|
||||
(cache-cleared-callback)))
|
||||
|
||||
(send this update-libraries)
|
||||
(send this update-renderers)
|
||||
)
|
||||
)
|
||||
(info-rktplayer "page loaded")
|
||||
)
|
||||
|
||||
(begin
|
||||
#t)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,292 @@
|
||||
#lang racket
|
||||
|
||||
(provide tr
|
||||
__
|
||||
languages
|
||||
set-lang!
|
||||
current-lang
|
||||
)
|
||||
|
||||
(define tr_map (make-hash))
|
||||
|
||||
(define (add-tr id language translated-sentence)
|
||||
(let ((lang-hash (hash-ref tr_map language (make-hash))))
|
||||
(hash-set! lang-hash id translated-sentence)
|
||||
(hash-set! tr_map language lang-hash)))
|
||||
|
||||
(define-syntax add2
|
||||
(syntax-rules ()
|
||||
((_ id (l ts))
|
||||
(add-tr id l ts))))-
|
||||
|
||||
(define-syntax add
|
||||
(syntax-rules ()
|
||||
((_ id l1)
|
||||
(add2 id l1))
|
||||
((_ id l1 l2 ...)
|
||||
(begin
|
||||
(add2 id l1)
|
||||
(add id l2 ...)
|
||||
))))
|
||||
|
||||
(define-syntax add**
|
||||
(syntax-rules ()
|
||||
((_ (id l1 ...))
|
||||
(add id l1 ...)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(define-syntax add*
|
||||
(syntax-rules ()
|
||||
((_ t1)
|
||||
(add** t1))
|
||||
((_ t1 t2 ...)
|
||||
(begin
|
||||
(add** t1)
|
||||
(add* t2 ...)
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
(define language 'en)
|
||||
|
||||
(define (languages)
|
||||
'((en "English") (nl "Nederlands")))
|
||||
|
||||
(define (set-lang! l)
|
||||
(set! language l))
|
||||
|
||||
(define (current-lang)
|
||||
language
|
||||
)
|
||||
|
||||
|
||||
(define (tr* id lang)
|
||||
(let ((lang-hash (hash-ref tr_map lang (make-hash))))
|
||||
(hash-ref lang-hash id #f)))
|
||||
|
||||
(define (tr id)
|
||||
(let ((s (tr* id language)))
|
||||
(if (eq? s #f)
|
||||
(let ((en-s (tr* id 'en)))
|
||||
(if (eq? en-s #f)
|
||||
(format "~a:~a" language id)
|
||||
(format "~a:~a" language en-s)))
|
||||
s)))
|
||||
|
||||
(define (__ s)
|
||||
(tr s))
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Translations
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(add*
|
||||
('select-library-dir
|
||||
('en "Select Music Library Folder")
|
||||
('nl "Selecteer map met Muziek Bibliotheek"))
|
||||
('choose-lib-folder
|
||||
('en "Choose the folder containing your music library")
|
||||
('nl "Kies de map met de Muziek Bibliotheek"))
|
||||
('quit
|
||||
('en "Quit")
|
||||
('nl "Beëindigen"))
|
||||
('channels
|
||||
('en "channels")
|
||||
('nl "kanalen"))
|
||||
('language
|
||||
('en "Language")
|
||||
('nl "Taal"))
|
||||
('name
|
||||
('en "Name")
|
||||
('nl "Naam"))
|
||||
('local-path
|
||||
('en "Local Path")
|
||||
('nl "Lokale Path"))
|
||||
('host
|
||||
('en "Host")
|
||||
('nl "Host"))
|
||||
('prefixes
|
||||
('en "Prefixes")
|
||||
('nl "Prefixen"))
|
||||
('ok
|
||||
('en "OK")
|
||||
('nl "OK"))
|
||||
('library-add
|
||||
('en "Add")
|
||||
('nl "Toevoegen"))
|
||||
('library-edit
|
||||
('en "Edit")
|
||||
('nl "Bewerken"))
|
||||
('library-remove
|
||||
('en "Remove")
|
||||
('nl "Verwijderen"))
|
||||
('cancel
|
||||
('en "Cancel")
|
||||
('nl "Annuleren"))
|
||||
('settings
|
||||
('en "Settings")
|
||||
('nl "Instellingen"))
|
||||
('add-playlist
|
||||
('en "Add Playlist")
|
||||
('nl "Voeg afspeellijst toe"))
|
||||
('volume
|
||||
('en "Volume")
|
||||
('nl "Volume"))
|
||||
('file
|
||||
('en "File")
|
||||
('nl "Bestand"))
|
||||
('playing
|
||||
('en "playing")
|
||||
('nl "speelt"))
|
||||
('stopped
|
||||
('en "stopped")
|
||||
('nl "gestopt"))
|
||||
('paused
|
||||
('en "paused")
|
||||
('nl "gepauzeerd"))
|
||||
('starting
|
||||
('en "starting")
|
||||
('nl "starten"))
|
||||
('unknown-state
|
||||
('en "Unknown state")
|
||||
('nl "Onbekende status"))
|
||||
('rename-playlist
|
||||
('en "Rename playlist")
|
||||
('nl "Hernoem afspeellijst"))
|
||||
('remove-playlist
|
||||
('en "Remove playlist")
|
||||
('nl "Verwijder afspeellijst"))
|
||||
('play-this
|
||||
('en "Play this")
|
||||
('nl "Speel dit"))
|
||||
('add-this
|
||||
('en "Add this")
|
||||
('nl "Voeg toe"))
|
||||
('open-booklet
|
||||
('en "Open booklet")
|
||||
('nl "Open boekje"))
|
||||
('open-containing-folder
|
||||
('en "Open containing folder")
|
||||
('nl "Open map met bestand"))
|
||||
('show-window
|
||||
('en "Show window")
|
||||
('nl "Toon venster"))
|
||||
('hide-window
|
||||
('en "Hide window")
|
||||
('nl "Verberg venster"))
|
||||
('pause-play
|
||||
('en "Pause / Play")
|
||||
('nl "Pauze / Afspelen"))
|
||||
('racket-music-player
|
||||
('en "Racket Music Player")
|
||||
('nl "Racket Muziek Speler"))
|
||||
('bits
|
||||
('en "bits")
|
||||
('nl "bits"))
|
||||
('source
|
||||
('en "Source")
|
||||
('nl "Bron"))
|
||||
('downloading-track
|
||||
('en "downloading track ~a: ~a%")
|
||||
('nl "downloaden track ~a : ~a%"))
|
||||
('download-trackcomplete
|
||||
('en "track ~a downloaded")
|
||||
('nl "track ~a gedownload"))
|
||||
('download-track-failed
|
||||
('en "track ~a - download failed")
|
||||
('nl "track ~a - download mislukt"))
|
||||
('playback-failed
|
||||
('en "Could not play: ~a")
|
||||
('nl "Afspelen mislukt: ~a"))
|
||||
('renderer-unreachable
|
||||
('en "Player not reachable: ~a")
|
||||
('nl "Speler niet bereikbaar: ~a"))
|
||||
('renderer-command-failed
|
||||
('en "Player command failed: ~a")
|
||||
('nl "Opdracht aan speler mislukt: ~a"))
|
||||
('clear-cache
|
||||
('en "Clear downloaded tracks")
|
||||
('nl "Verwijder gedownloade tracks"))
|
||||
('renderers
|
||||
('en "Audio Players")
|
||||
('nl "Muziekspelers"))
|
||||
('logarithmic-volume
|
||||
('en "Logarithmic volume")
|
||||
('nl "Logaritmisch volume"))
|
||||
('play
|
||||
('en "Play")
|
||||
('nl "Afspelen"))
|
||||
('lbl-libary-path
|
||||
('en "Library path:")
|
||||
('nl "Muziek Bibliotheek pad:"))
|
||||
('settings-title
|
||||
('en "Racket Music Player - Settings")
|
||||
('nl "Racket Muziek Speler - Instellingen"))
|
||||
('settings-library
|
||||
('en "Racket Music Player - Library Entry")
|
||||
('nl "Racket Muziek Speler - Muziek Bibliotheek Entry"))
|
||||
('browse
|
||||
('en "Browse")
|
||||
('nl "Bladeren"))
|
||||
('dlna-renderers-count
|
||||
('en "Found ~a DLNA Players")
|
||||
('nl "~a DLNA Spelers gevonden"))
|
||||
('dlna-query-busy
|
||||
('en "Busy querying DLNA Media Renderers")
|
||||
('nl "Bezig DLNA Media Rendeerers op te vragen"))
|
||||
('play-local
|
||||
('en "Play music on current hardware")
|
||||
('nl "Muziek afspelen op huidige hardware"))
|
||||
('check-dlna
|
||||
('en "Search DLNA Players on network")
|
||||
('nl "Zoek DLNA Spelers op het netwerk"))
|
||||
('players
|
||||
('en "Audio Players")
|
||||
('nl "Muziek Spelers"))
|
||||
('libraries
|
||||
('en "Music Libraries")
|
||||
('nl "Muziekbibliotheken"))
|
||||
('library-kind
|
||||
('en "Library type")
|
||||
('nl "Bibliotheektype"))
|
||||
('filesystem
|
||||
('en "Filesystem")
|
||||
('nl "Bestandssysteem"))
|
||||
('media-server
|
||||
('en "UPnP media server")
|
||||
('nl "UPnP-mediaserver"))
|
||||
('media-servers
|
||||
('en "Media server")
|
||||
('nl "Mediaserver"))
|
||||
('media-server-root
|
||||
('en "Start point")
|
||||
('nl "Startpunt"))
|
||||
('media-server-item-limit
|
||||
('en "Maximum items per folder")
|
||||
('nl "Maximum aantal items per map"))
|
||||
('select-media-server-container
|
||||
('en "Select a folder")
|
||||
('nl "Selecteer een map"))
|
||||
('no-media-server-containers
|
||||
('en "No folders")
|
||||
('nl "Geen mappen"))
|
||||
('up
|
||||
('en "Up")
|
||||
('nl "Omhoog"))
|
||||
('refresh
|
||||
('en "Refresh")
|
||||
('nl "Vernieuwen"))
|
||||
('searching
|
||||
('en "Searching...")
|
||||
('nl "Zoeken..."))
|
||||
('no-media-servers
|
||||
('en "No media servers found")
|
||||
('nl "Geen mediaservers gevonden"))
|
||||
('library-browse-failed
|
||||
('en "Could not open music library: ~a")
|
||||
('nl "Muziekbibliotheek kon niet worden geopend: ~a"))
|
||||
)
|
||||
@@ -0,0 +1,79 @@
|
||||
#lang racket
|
||||
|
||||
(require racket-webview
|
||||
racket/runtime-path
|
||||
"translate.rkt"
|
||||
"../misc/utils.rkt"
|
||||
)
|
||||
|
||||
(provide rktplayer-tray%)
|
||||
|
||||
(define-runtime-path rkt-gui-dir "html")
|
||||
|
||||
(define rktplayer-tray%
|
||||
(class wv-tray%
|
||||
(init-field [rktplayer-gui (error "Must be called with the GUI Window of RktPlayer")]
|
||||
)
|
||||
|
||||
(define (adjust-menu)
|
||||
(dbg-rktplayer "adjust menu called, window state = ~a" (send rktplayer-gui window-state))
|
||||
(let ((mnu (wv-menu 'tray-menu
|
||||
(wv-menu-item 'm-hide-show
|
||||
(if (eq? (send rktplayer-gui window-state) 'hidden)
|
||||
(tr 'show-window)
|
||||
(tr 'hide-window)))
|
||||
(wv-menu-item 'm-pause-play (tr 'pause-play))
|
||||
(wv-menu-item 'm-quit (tr 'quit))
|
||||
)
|
||||
)
|
||||
)
|
||||
(send this set-menu! mnu)
|
||||
(send this connect-menu! 'm-hide-show (λ () (show-hide)))
|
||||
(send this connect-menu! 'm-quit (λ () (quit)))
|
||||
(send this connect-menu! 'm-pause-play (λ () (pause-play)))
|
||||
))
|
||||
|
||||
(define (quit)
|
||||
(send rktplayer-gui quit))
|
||||
|
||||
(define (pause-play)
|
||||
(send rktplayer-gui play-or-pause))
|
||||
|
||||
(define (show-hide)
|
||||
(send rktplayer-gui show-hide)
|
||||
(adjust-menu)
|
||||
)
|
||||
|
||||
(define/override (activated reason)
|
||||
(show-hide)
|
||||
#t)
|
||||
|
||||
(super-new [icon (build-path rkt-gui-dir "rktplayer.png")]
|
||||
[tooltip (tr 'racket-music-player)])
|
||||
|
||||
(define last-state #f)
|
||||
|
||||
(begin
|
||||
(send rktplayer-gui set-window-state-change-callback!
|
||||
(λ ()
|
||||
(let ((st (send rktplayer-gui window-state)))
|
||||
(if (eq? st 'minimized)
|
||||
(begin
|
||||
(if (eq? last-state 'minimized)
|
||||
(begin
|
||||
(dbg-rktplayer "state = ~a, presenting window" st)
|
||||
(send rktplayer-gui present)
|
||||
(set! last-state 'presented))
|
||||
(begin
|
||||
(dbg-rktplayer "state = ~a, hiding window" st)
|
||||
(send rktplayer-gui hide)
|
||||
(set! last-state 'minimized))))
|
||||
(adjust-menu))
|
||||
)
|
||||
)
|
||||
)
|
||||
(adjust-menu)
|
||||
)
|
||||
|
||||
)
|
||||
)
|
||||