@home-cinema/app 0.0.2 → 0.0.6-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.js +14 -4
- package/dist/api/routes/config.js +5 -4
- package/dist/api/routes/streamFiles.js +51 -40
- package/dist/api/routes/tv_shows.js +89 -83
- package/dist/client/assets/index-BUIPTbGd.js +682 -0
- package/dist/client/assets/index-KLlodciu.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/lib/idb.js +37 -1
- package/dist/server.js +12 -1
- package/dist/serverBoot.js +44 -8
- package/home_cinema_config.json +2 -2
- package/package.json +41 -37
- package/dist/client/assets/index-CeKR2k9Q.js +0 -749
- package/dist/client/assets/index-DWHHH3Bn.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-600:oklch(64.6% .222 41.116);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-600:oklch(62.7% .194 149.214);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--drop-shadow-md:0 3px 3px #0000001f;--ease-out:cubic-bezier(0,0,.2,1);--blur-sm:8px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.absolute\!{position:absolute!important}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-0{top:calc(var(--spacing)*0)}.top-2{top:calc(var(--spacing)*2)}.top-5{top:calc(var(--spacing)*5)}.top-20{top:calc(var(--spacing)*20)}.top-\[-50px\]{top:-50px}.top-\[13px\]{top:13px}.top-\[20\%\]{top:20%}.top-\[30\%\]{top:30%}.top-\[50\%\]{top:50%}.right-\[-40px\]{right:-40px}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[-40px\]{left:-40px}.left-\[50\%\]{left:50%}.\!z-10{z-index:10!important}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-998{z-index:998}.z-999{z-index:999}.z-\[-10\]{z-index:-10}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-7{grid-column:span 7/span 7}.col-span-9{grid-column:span 9/span 9}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.\!ms-\[50\%\]{margin-inline-start:50%!important}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-4\!{margin-inline-start:calc(var(--spacing)*4)!important}.ms-5{margin-inline-start:calc(var(--spacing)*5)}.ms-\[50\%\]{margin-inline-start:50%}.ms-\[90\%\]{margin-inline-start:90%}.\!mt-3{margin-top:calc(var(--spacing)*3)!important}.\!mt-5{margin-top:calc(var(--spacing)*5)!important}.\!mt-10{margin-top:calc(var(--spacing)*10)!important}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-2\!{margin-top:calc(var(--spacing)*2)!important}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-3\!{margin-top:calc(var(--spacing)*3)!important}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-7{margin-top:calc(var(--spacing)*7)}.mt-10{margin-top:calc(var(--spacing)*10)}.mt-15{margin-top:calc(var(--spacing)*15)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-20{margin-top:calc(var(--spacing)*20)}.mt-24{margin-top:calc(var(--spacing)*24)}.mt-28{margin-top:calc(var(--spacing)*28)}.mt-\[30\%\]{margin-top:30%}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-5{margin-right:calc(var(--spacing)*5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-5{margin-bottom:calc(var(--spacing)*5)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-5{height:calc(var(--spacing)*5)}.h-5\!{height:calc(var(--spacing)*5)!important}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-\[2px\]{height:2px}.h-\[80vh\]{height:80vh}.h-\[172px\]{height:172px}.h-\[200px\]{height:200px}.h-\[300px\]{height:300px}.h-\[345px\]{height:345px}.h-\[450px\]{height:450px}.h-\[588px\]{height:588px}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[300px\]{max-height:300px}.min-h-\[100px\]{min-height:100px}.min-h-\[450px\]{min-height:450px}.\!w-\[150px\]{width:150px!important}.\!w-\[225px\]{width:225px!important}.\!w-fit{width:fit-content!important}.w-0{width:calc(var(--spacing)*0)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-30{width:calc(var(--spacing)*30)}.w-50{width:calc(var(--spacing)*50)}.w-60{width:calc(var(--spacing)*60)}.w-70{width:calc(var(--spacing)*70)}.w-80{width:calc(var(--spacing)*80)}.w-\[90\%\]{width:90%}.w-\[115px\]{width:115px}.w-\[200px\]{width:200px}.w-\[230px\]{width:230px}.w-\[300px\]{width:300px}.w-\[700px\]{width:700px}.w-fit{width:fit-content}.w-fit\!{width:fit-content!important}.w-full{width:100%}.max-w-\[200px\]\!{max-width:200px!important}.max-w-\[500px\]{max-width:500px}.min-w-\[300px\]{min-width:300px}.min-w-\[400px\]{min-width:400px}.min-w-\[500px\]{min-width:500px}.shrink-0{flex-shrink:0}.translate-\[-50\%\]{--tw-translate-x:-50%;--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-90\%\]{--tw-translate-x:-90%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-30\%\]{--tw-translate-y:-30%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-150{--tw-scale-x:150%;--tw-scale-y:150%;--tw-scale-z:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-\[30deg\]{rotate:30deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.\!justify-center{justify-content:center!important}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-7{gap:calc(var(--spacing)*7)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-20{gap:calc(var(--spacing)*20)}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xl\!{border-radius:var(--radius-xl)!important}.\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-\[1px\]{border-style:var(--tw-border-style);border-width:1px}.border-\[\#005db4\]{border-color:#005db4}.border-\[\#ffffff4f\]{border-color:#ffffff4f}.border-blue-700{border-color:var(--color-blue-700)}.border-gray-500{border-color:var(--color-gray-500)}.border-green-600{border-color:var(--color-green-600)}.border-orange-600{border-color:var(--color-orange-600)}.border-red-600{border-color:var(--color-red-600)}.border-red-700{border-color:var(--color-red-700)}.border-white{border-color:var(--color-white)}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-600{border-color:var(--color-yellow-600)}.\!bg-\[\#000000\]{background-color:#000!important}.\!bg-\[\#151515\]{background-color:#151515!important}.\!bg-transparent{background-color:#0000!important}.bg-\[\#0f0f0f\]{background-color:#0f0f0f}.bg-\[\#0f8500bb\]{background-color:#0f8500bb}.bg-\[\#000000\]{background-color:#000}.bg-\[\#000000a3\]{background-color:#000000a3}.bg-\[\#000000c0\]{background-color:#000000c0}.bg-\[\#0000005c\]{background-color:#0000005c}.bg-\[\#005db4bd\]\!{background-color:#005db4bd!important}.bg-\[\#0000007b\]{background-color:#0000007b}.bg-\[\#0000009c\]{background-color:#0000009c}.bg-\[\#00000069\]{background-color:#00000069}.bg-\[\#444\]{background-color:#444}.bg-\[\#080808\]{background-color:#080808}.bg-\[\#141414cb\]{background-color:#141414cb}.bg-\[\#151515\]{background-color:#151515}.bg-\[\#161616\]{background-color:#161616}.bg-\[\#202020\]{background-color:#202020}.bg-\[\#212121e4\]{background-color:#212121e4}.bg-\[\#430073\]{background-color:#430073}.bg-\[\#9200006c\]{background-color:#9200006c}.bg-\[\#98930054\]{background-color:#98930054}.bg-\[\#b4b4b43e\]{background-color:#b4b4b43e}.bg-\[\#ff38384f\]{background-color:#ff38384f}.bg-\[\#ffffff0d\]{background-color:#ffffff0d}.bg-black{background-color:var(--color-black)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-green-600{background-color:var(--color-green-600)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#000000\]{--tw-gradient-from:#000;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#00000086\]{--tw-gradient-to:#00000086;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[\#00000091\]{--tw-gradient-to:#00000091;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-10{padding:calc(var(--spacing)*10)}.\!ps-7{padding-inline-start:calc(var(--spacing)*7)!important}.ps-2{padding-inline-start:calc(var(--spacing)*2)}.ps-3{padding-inline-start:calc(var(--spacing)*3)}.ps-5{padding-inline-start:calc(var(--spacing)*5)}.ps-8{padding-inline-start:calc(var(--spacing)*8)}.ps-8\!{padding-inline-start:calc(var(--spacing)*8)!important}.ps-10{padding-inline-start:calc(var(--spacing)*10)}.ps-\[4px\]{padding-inline-start:4px}.\!pt-2{padding-top:calc(var(--spacing)*2)!important}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-2\!{padding-top:calc(var(--spacing)*2)!important}.pt-10{padding-top:calc(var(--spacing)*10)}.\!pr-7{padding-right:calc(var(--spacing)*7)!important}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-5{padding-right:calc(var(--spacing)*5)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-8\!{padding-right:calc(var(--spacing)*8)!important}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-\[4px\]{padding-right:4px}.\!pb-2{padding-bottom:calc(var(--spacing)*2)!important}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-2\!{padding-bottom:calc(var(--spacing)*2)!important}.text-center{text-align:center}.\!text-base{font-size:var(--text-base)!important;line-height:var(--tw-leading,var(--text-base--line-height))!important}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-base\!{font-size:var(--text-base)!important;line-height:var(--tw-leading,var(--text-base--line-height))!important}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\!{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-\[0px\]{font-size:0}.text-\[9px\]{font-size:9px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-nowrap{text-wrap:nowrap}.break-words,.wrap-break-word{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.\!text-red-500{color:var(--color-red-500)!important}.\!text-white{color:var(--color-white)!important}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-gray-500{color:var(--color-gray-500)}.text-green-600{color:var(--color-green-600)}.text-orange-600{color:var(--color-orange-600)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-\[100px\]{--tw-blur:blur(100px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.blur-\[253px\]{--tw-blur:blur(253px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-md{--tw-drop-shadow-size:drop-shadow(0 3px 3px var(--tw-drop-shadow-color,#0000001f));--tw-drop-shadow:drop-shadow(var(--drop-shadow-md));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-225{--tw-duration:.225s;transition-duration:.225s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-\[2000ms\]{--tw-duration:2s;transition-duration:2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:font-bold::placeholder{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.after\:bg-black:after{content:var(--tw-content);background-color:var(--color-black)}@media(hover:hover){.hover\:translate-y-\[-2px\]:hover{--tw-translate-y:-2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:scale-150:hover{--tw-scale-x:150%;--tw-scale-y:150%;--tw-scale-z:150%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:border-0:hover{border-style:var(--tw-border-style);border-width:0}.hover\:border-\[\#0000\]:hover{border-color:#0000}.hover\:\!bg-\[\#242424\]:hover{background-color:#242424!important}.hover\:bg-\[\#50505059\]:hover{background-color:#50505059}.hover\:bg-\[\#b4b4b43e\]:hover{background-color:#b4b4b43e}.hover\:text-\[10px\]:hover{font-size:10px}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-15:hover{opacity:.15}.hover\:opacity-100:hover{opacity:1}}@media(min-width:40rem){.sm\:top-auto{top:auto}.sm\:left-auto{left:auto}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:h-\[500px\]{height:500px}.sm\:w-\[500px\]{width:500px}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:ps-0{padding-inline-start:calc(var(--spacing)*0)}.sm\:ps-32{padding-inline-start:calc(var(--spacing)*32)}.sm\:pr-0{padding-right:calc(var(--spacing)*0)}.sm\:pr-32{padding-right:calc(var(--spacing)*32)}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:48rem){.md\:relative{position:relative}.md\:top-2{top:calc(var(--spacing)*2)}.md\:left-2{left:calc(var(--spacing)*2)}.md\:mt-5{margin-top:calc(var(--spacing)*5)}.md\:mt-20{margin-top:calc(var(--spacing)*20)}.md\:mt-\[15\%\]{margin-top:15%}.md\:mr-0{margin-right:calc(var(--spacing)*0)}.md\:mr-10{margin-right:calc(var(--spacing)*10)}.md\:mb-10{margin-bottom:calc(var(--spacing)*10)}.md\:mb-20{margin-bottom:calc(var(--spacing)*20)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:scale-100\!{--tw-scale-x:100%!important;--tw-scale-y:100%!important;--tw-scale-z:100%!important;scale:var(--tw-scale-x)var(--tw-scale-y)!important}.md\:grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-nowrap{flex-wrap:nowrap}.md\:items-start{align-items:flex-start}.md\:justify-start{justify-content:flex-start}.md\:gap-10{gap:calc(var(--spacing)*10)}.md\:gap-16{gap:calc(var(--spacing)*16)}.md\:p-5{padding:calc(var(--spacing)*5)}.md\:p-10{padding:calc(var(--spacing)*10)}.md\:ps-3{padding-inline-start:calc(var(--spacing)*3)}.md\:ps-8{padding-inline-start:calc(var(--spacing)*8)}.md\:ps-10{padding-inline-start:calc(var(--spacing)*10)}.md\:ps-16{padding-inline-start:calc(var(--spacing)*16)}.md\:ps-20{padding-inline-start:calc(var(--spacing)*20)}.md\:ps-28{padding-inline-start:calc(var(--spacing)*28)}.md\:ps-32{padding-inline-start:calc(var(--spacing)*32)}.md\:pe-28{padding-inline-end:calc(var(--spacing)*28)}.md\:pt-2{padding-top:calc(var(--spacing)*2)}.md\:pt-3{padding-top:calc(var(--spacing)*3)}.md\:pr-3{padding-right:calc(var(--spacing)*3)}.md\:pr-8{padding-right:calc(var(--spacing)*8)}.md\:pr-16{padding-right:calc(var(--spacing)*16)}.md\:pr-20{padding-right:calc(var(--spacing)*20)}.md\:pr-32{padding-right:calc(var(--spacing)*32)}.md\:pb-2{padding-bottom:calc(var(--spacing)*2)}.md\:pb-3{padding-bottom:calc(var(--spacing)*3)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:64rem){.lg\:relative{position:relative}.lg\:top-0{top:calc(var(--spacing)*0)}.lg\:top-\[75px\]{top:75px}.lg\:left-0{left:calc(var(--spacing)*0)}.lg\:left-\[300px\]{left:300px}.lg\:z-10{z-index:10}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:ms-32{margin-inline-start:calc(var(--spacing)*32)}.lg\:mt-20{margin-top:calc(var(--spacing)*20)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:h-5{height:calc(var(--spacing)*5)}.lg\:h-10\!{height:calc(var(--spacing)*10)!important}.lg\:h-12{height:calc(var(--spacing)*12)}.lg\:h-20{height:calc(var(--spacing)*20)}.lg\:h-\[345px\]{height:345px}.lg\:w-20{width:calc(var(--spacing)*20)}.lg\:w-\[230px\]{width:230px}.lg\:max-w-\[700px\]{max-width:700px}.lg\:translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:gap-16{gap:calc(var(--spacing)*16)}.lg\:overflow-auto{overflow:auto}.lg\:p-5{padding:calc(var(--spacing)*5)}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.lg\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.lg\:text-wrap{text-wrap:wrap}}@media(min-width:80rem){.xl\:relative{position:relative}.xl\:z-30{z-index:30}.xl\:col-span-1{grid-column:span 1/span 1}.xl\:block{display:block}.xl\:hidden{display:none}.xl\:w-auto{width:auto}.xl\:max-w-\[1000px\]{max-width:1000px}.xl\:justify-between{justify-content:space-between}.xl\:gap-20{gap:calc(var(--spacing)*20)}.xl\:bg-\[\#ffffffa9\]{background-color:#ffffffa9}.xl\:ps-28{padding-inline-start:calc(var(--spacing)*28)}.xl\:pr-28{padding-right:calc(var(--spacing)*28)}.xl\:text-\[16px\]{font-size:16px}.xl\:opacity-20{opacity:.2}}}:root{color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#000;font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.5}@keyframes shimmer{0%{background-position:-100% 0}to{background-position:100% 0}}.loading-background{background:linear-gradient(90deg,#5c5c5c 25%,#707070,#5d5d5d 75%) 0 0/200% 100%;animation:1.5s infinite shimmer}.tv_show{background-position:50%;background-size:100%}.tv_show:hover{background-size:110%}@keyframes pop{0%{scale:1}10%{scale:1.25}80%{scale:1.25}to{scale:1}}.pop-animation{animation:.7s ease-in-out alternate pop}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}.horz-list{display:flex;overflow-x:auto;scrollbar-width:thin;scrollbar-color:#888 #f0f0f0;scroll-behavior:smooth}.scroll-container::-webkit-scrollbar{height:8px}.scroll-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scroll-container::-webkit-scrollbar-thumb:hover{background:#555}
|
package/dist/client/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Home Cinema</title>
|
|
8
8
|
<!--app-head-->
|
|
9
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-BUIPTbGd.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-KLlodciu.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"><!--app-html--></div>
|
package/dist/lib/idb.js
CHANGED
|
@@ -3,11 +3,15 @@ var ObjectStores;
|
|
|
3
3
|
(function (ObjectStores) {
|
|
4
4
|
ObjectStores["MOVIES"] = "saved_movies";
|
|
5
5
|
ObjectStores["TVSHOWS"] = "saved_tvshows";
|
|
6
|
+
ObjectStores["TORRENTS"] = "torrents";
|
|
7
|
+
ObjectStores["DOWNLOADS"] = "downloads";
|
|
6
8
|
})(ObjectStores || (ObjectStores = {}));
|
|
7
|
-
const dbPromise = openDB("
|
|
9
|
+
const dbPromise = openDB("data", 1, {
|
|
8
10
|
upgrade(db) {
|
|
9
11
|
db.createObjectStore(ObjectStores.MOVIES, { keyPath: "id" }); // use movie.id as key
|
|
10
12
|
db.createObjectStore(ObjectStores.TVSHOWS, { keyPath: "id" }); // use tv.id as key
|
|
13
|
+
db.createObjectStore(ObjectStores.TORRENTS, { keyPath: "infoHash" }); // use tv.infoHash as key
|
|
14
|
+
db.createObjectStore(ObjectStores.DOWNLOADS, { keyPath: "infoHash" }); // use infoHash as key
|
|
11
15
|
},
|
|
12
16
|
});
|
|
13
17
|
export async function addMovie(movie) {
|
|
@@ -42,3 +46,35 @@ export async function removeTVShow(id) {
|
|
|
42
46
|
const db = await dbPromise;
|
|
43
47
|
await db.delete(ObjectStores.TVSHOWS, id);
|
|
44
48
|
}
|
|
49
|
+
export async function addTorrents(t) {
|
|
50
|
+
const db = await dbPromise;
|
|
51
|
+
db.put(ObjectStores.TORRENTS, t);
|
|
52
|
+
}
|
|
53
|
+
export async function getTorrents() {
|
|
54
|
+
const db = await dbPromise;
|
|
55
|
+
return await db.getAll(ObjectStores.TORRENTS);
|
|
56
|
+
}
|
|
57
|
+
export async function getTorrentByInfoHash(infoHash) {
|
|
58
|
+
const db = await dbPromise;
|
|
59
|
+
return await db.get(ObjectStores.TORRENTS, infoHash);
|
|
60
|
+
}
|
|
61
|
+
export async function removeTorrent(infoHash) {
|
|
62
|
+
const db = await dbPromise;
|
|
63
|
+
await db.delete(ObjectStores.TORRENTS, infoHash);
|
|
64
|
+
}
|
|
65
|
+
export async function addDownload(d) {
|
|
66
|
+
const db = await dbPromise;
|
|
67
|
+
db.put(ObjectStores.DOWNLOADS, d);
|
|
68
|
+
}
|
|
69
|
+
export async function getDownloads() {
|
|
70
|
+
const db = await dbPromise;
|
|
71
|
+
return await db.getAll(ObjectStores.DOWNLOADS);
|
|
72
|
+
}
|
|
73
|
+
export async function getDownloadByInfoHash(infoHash) {
|
|
74
|
+
const db = await dbPromise;
|
|
75
|
+
return await db.get(ObjectStores.DOWNLOADS, infoHash);
|
|
76
|
+
}
|
|
77
|
+
export async function removeDownload(infoHash) {
|
|
78
|
+
const db = await dbPromise;
|
|
79
|
+
await db.delete(ObjectStores.DOWNLOADS, infoHash);
|
|
80
|
+
}
|
package/dist/server.js
CHANGED
|
@@ -5,4 +5,15 @@ let PORT = 5173;
|
|
|
5
5
|
if (process.env.NODE_ENV === "production") {
|
|
6
6
|
PORT = 4173;
|
|
7
7
|
}
|
|
8
|
-
bootServer(PORT
|
|
8
|
+
bootServer(PORT, {
|
|
9
|
+
version: {
|
|
10
|
+
name: "Alpha 6",
|
|
11
|
+
semVer: "0.0.6",
|
|
12
|
+
},
|
|
13
|
+
openVLC: true,
|
|
14
|
+
desktopMode: true,
|
|
15
|
+
"torrent-streamer-api": {
|
|
16
|
+
external: true,
|
|
17
|
+
origin: "http://localhost:8081",
|
|
18
|
+
},
|
|
19
|
+
});
|
package/dist/serverBoot.js
CHANGED
|
@@ -3,13 +3,22 @@ import fs from "node:fs/promises";
|
|
|
3
3
|
import express from "express";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import
|
|
6
|
+
import { declareRoutes } from "./api/index.js";
|
|
7
|
+
import { exec } from "node:child_process";
|
|
7
8
|
env.config();
|
|
8
9
|
const isProduction = process.env.NODE_ENV === "production";
|
|
9
10
|
const base = process.env.BASE || "/";
|
|
10
11
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const
|
|
12
|
-
|
|
12
|
+
const defaultServerConf = {
|
|
13
|
+
version: { name: "development", semVer: "0.0.0" },
|
|
14
|
+
openVLC: false,
|
|
15
|
+
desktopMode: false,
|
|
16
|
+
"torrent-streamer-api": {
|
|
17
|
+
external: false,
|
|
18
|
+
origin: "",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export async function bootServer(port, config) {
|
|
13
22
|
const templateHtml = isProduction
|
|
14
23
|
? await fs.readFile(path.join(__dirname, "../dist/client/index.html"), "utf-8")
|
|
15
24
|
: "";
|
|
@@ -32,16 +41,43 @@ export async function bootServer(port) {
|
|
|
32
41
|
app.use(compression());
|
|
33
42
|
app.use(base, sirv(path.join(__dirname, "../dist/client"), { extensions: [] }));
|
|
34
43
|
}
|
|
35
|
-
|
|
44
|
+
const c = {
|
|
45
|
+
...defaultServerConf,
|
|
46
|
+
...config,
|
|
47
|
+
};
|
|
48
|
+
const router = declareRoutes(c);
|
|
49
|
+
app.use(router);
|
|
50
|
+
if (!c["torrent-streamer-api"].external) {
|
|
36
51
|
const streamerRouter = (await import("torrent-streamer-api")).default;
|
|
37
52
|
app.use(streamerRouter({
|
|
38
53
|
torrentFilesTimeout: 1000 * 30,
|
|
54
|
+
ipStreamLimit: c.desktopMode ? Infinity : undefined,
|
|
39
55
|
}));
|
|
40
56
|
}
|
|
41
|
-
|
|
42
|
-
app.
|
|
43
|
-
|
|
44
|
-
|
|
57
|
+
if (c.openVLC) {
|
|
58
|
+
app.get("/api/play-vlc", async (req, res) => {
|
|
59
|
+
try {
|
|
60
|
+
let streams;
|
|
61
|
+
if (typeof req.query.streams === "string") {
|
|
62
|
+
streams = [req.query.streams];
|
|
63
|
+
}
|
|
64
|
+
else if (req.query.streams instanceof Array) {
|
|
65
|
+
streams = req.query.streams;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
res.status(400).json({
|
|
69
|
+
error: "Stream urls are required",
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
exec(`vlc ${streams.join(" ")}`);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.log(err);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
app.use(async (req, res) => {
|
|
45
81
|
try {
|
|
46
82
|
const url = req.originalUrl.replace(base, "");
|
|
47
83
|
let template;
|
package/home_cinema_config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@home-cinema/app",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6-beta.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/serverBoot.js",
|
|
6
6
|
"files": [
|
|
@@ -17,47 +17,51 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@emotion/react": "^11.14.0",
|
|
20
|
-
"@emotion/styled": "^11.14.
|
|
21
|
-
"@fortawesome/fontawesome-svg-core": "^
|
|
20
|
+
"@emotion/styled": "^11.14.1",
|
|
21
|
+
"@fortawesome/fontawesome-svg-core": "^7.1.0",
|
|
22
22
|
"@fortawesome/free-regular-svg-icons": "^7.1.0",
|
|
23
|
-
"@fortawesome/free-solid-svg-icons": "^
|
|
24
|
-
"@fortawesome/react-fontawesome": "^
|
|
25
|
-
"@mui/icons-material": "^7.
|
|
23
|
+
"@fortawesome/free-solid-svg-icons": "^7.1.0",
|
|
24
|
+
"@fortawesome/react-fontawesome": "^3.1.1",
|
|
25
|
+
"@mui/icons-material": "^7.3.6",
|
|
26
26
|
"@mui/joy": "^5.0.0-beta.52",
|
|
27
|
-
"@mui/material": "^7.
|
|
28
|
-
"@
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
27
|
+
"@mui/material": "^7.3.6",
|
|
28
|
+
"@tailwindcss/vite": "^4.1.18",
|
|
29
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
30
|
+
"axios": "^1.13.2",
|
|
31
|
+
"compression": "^1.8.1",
|
|
32
|
+
"dotenv": "^17.2.3",
|
|
33
|
+
"express": "^5.2.1",
|
|
34
|
+
"fuse.js": "^7.1.0",
|
|
33
35
|
"idb": "^8.0.3",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"react
|
|
37
|
-
"react-
|
|
38
|
-
"react-
|
|
39
|
-
"
|
|
40
|
-
"
|
|
36
|
+
"path-browserify": "^1.0.1",
|
|
37
|
+
"pretty-bytes": "^7.1.0",
|
|
38
|
+
"react": "^19.2.3",
|
|
39
|
+
"react-dom": "^19.2.3",
|
|
40
|
+
"react-player": "^3.4.0",
|
|
41
|
+
"react-router": "^7.11.0",
|
|
42
|
+
"sirv": "^3.0.2",
|
|
43
|
+
"torrent-streamer-api": "^3.0.0-beta.1"
|
|
41
44
|
},
|
|
42
45
|
"devDependencies": {
|
|
43
|
-
"@eslint/js": "^9.
|
|
44
|
-
"@types/compression": "^1.
|
|
45
|
-
"@types/express": "^5.0.
|
|
46
|
-
"@types/node": "^
|
|
47
|
-
"@types/
|
|
48
|
-
"@types/react
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"eslint
|
|
53
|
-
"eslint-plugin-react-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
46
|
+
"@eslint/js": "^9.39.2",
|
|
47
|
+
"@types/compression": "^1.8.1",
|
|
48
|
+
"@types/express": "^5.0.6",
|
|
49
|
+
"@types/node": "^25.0.3",
|
|
50
|
+
"@types/path-browserify": "^1.0.3",
|
|
51
|
+
"@types/react": "^19.2.7",
|
|
52
|
+
"@types/react-dom": "^19.2.3",
|
|
53
|
+
"@vitejs/plugin-react-swc": "^4.2.2",
|
|
54
|
+
"autoprefixer": "^10.4.23",
|
|
55
|
+
"eslint": "^9.39.2",
|
|
56
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
57
|
+
"eslint-plugin-react-refresh": "^0.4.26",
|
|
58
|
+
"globals": "^16.5.0",
|
|
59
|
+
"nodemon": "^3.1.11",
|
|
60
|
+
"postcss": "^8.5.6",
|
|
61
|
+
"tailwindcss": "^4.1.18",
|
|
58
62
|
"ts-node": "^10.9.2",
|
|
59
|
-
"typescript": "~5.
|
|
60
|
-
"typescript-eslint": "^8.
|
|
61
|
-
"vite": "^
|
|
63
|
+
"typescript": "~5.9.3",
|
|
64
|
+
"typescript-eslint": "^8.50.1",
|
|
65
|
+
"vite": "^7.3.0"
|
|
62
66
|
}
|
|
63
67
|
}
|