1
0
Fork 0
mirror of https://github.com/sussy-code/smov.git synced 2024-12-20 14:37:43 +01:00

Merge main

This commit is contained in:
Cooper Ransom 2024-03-23 11:07:09 -04:00
commit aabdd0abac
7 changed files with 200 additions and 237 deletions

View file

@ -72,4 +72,4 @@ git push # Push to YOUR repository
## Contact Me ## Contact Me
**Discord:** *.baddeveloper* **Discord:** *.baddeveloper*
**Email:** *[sudo-flix@proton.me](mailto:sudo-flix@proton.me)* **Email:** *[dev@sudo-flix.lol](mailto:dev@sudo-flix.lol)*

View file

@ -14,6 +14,8 @@
</script> </script>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta itemprop="image" content="/android-chrome-192x192.png">
<meta property="og:image" content="/android-chrome-192x192.png">
<meta name="viewport" <meta name="viewport"
content="width=device-width, initial-scale=1, viewport-fit=cover, maximum-scale=1.0, user-scalable=no" /> content="width=device-width, initial-scale=1, viewport-fit=cover, maximum-scale=1.0, user-scalable=no" />
<meta name="description" content="Watch your favorite shows and movies for free with no ads ever! (っ'ヮ'c)" /> <meta name="description" content="Watch your favorite shows and movies for free with no ads ever! (っ'ヮ'c)" />

View file

@ -454,7 +454,7 @@
}, },
"screens": { "screens": {
"dmca": { "dmca": {
"text": "Welcome to sudo-flix's DMCA contact page. If you believe your copyrighted work has been improperly used on our platform (😢), please send a detailed DMCA notice to: <bold>sudo-flix@proton.me</bold> below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation.", "text": "Welcome to sudo-flix's DMCA contact page. If you believe your copyrighted work has been improperly used on our platform (😢), please send a detailed DMCA notice to: <bold>dev@sudo-flix.lol</bold> below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation.",
"title": "DMCA :(" "title": "DMCA :("
}, },
"loadingApp": "Loading application", "loadingApp": "Loading application",

View file

@ -1,5 +1,5 @@
import classNames from "classnames"; import classNames from "classnames";
import React, { useCallback, useEffect, useState } from "react"; import React, { useCallback } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Icon, Icons } from "@/components/Icon"; import { Icon, Icons } from "@/components/Icon";
@ -88,22 +88,6 @@ export function NextEpisodeButton(props: {
props.onChange?.(metaCopy); props.onChange?.(metaCopy);
}, [setDirectMeta, meta, props, setShouldStartFromBeginning]); }, [setDirectMeta, meta, props, setShouldStartFromBeginning]);
const [countdown, setCountdown] = useState(15);
useEffect(() => {
const timer = setInterval(() => {
setCountdown((prev) => (prev > 0 ? prev - 1 : 0));
}, 1000);
return () => clearInterval(timer);
}, []);
useEffect(() => {
if (countdown === 0) {
loadNextEpisode();
}
}, [countdown, loadNextEpisode]);
if (!meta?.episode || !nextEp) return null; if (!meta?.episode || !nextEp) return null;
if (metaType !== "show") return null; if (metaType !== "show") return null;
@ -130,9 +114,7 @@ export function NextEpisodeButton(props: {
className="bg-buttons-primary hover:bg-buttons-primaryHover text-buttons-primaryText flex justify-center items-center" className="bg-buttons-primary hover:bg-buttons-primaryHover text-buttons-primaryText flex justify-center items-center"
> >
<Icon className="text-xl mr-1" icon={Icons.SKIP_EPISODE} /> <Icon className="text-xl mr-1" icon={Icons.SKIP_EPISODE} />
{countdown > 0 {t("player.nextEpisode.next")}
? `Next episode in ${countdown} seconds`
: t("player.nextEpisode.next")}
</Button> </Button>
</div> </div>
</Transition> </Transition>

View file

@ -41,8 +41,13 @@ export function Volume(props: Props) {
const handleMouseEnter = useCallback(async () => { const handleMouseEnter = useCallback(async () => {
if (await canChangeVolume()) setHovering(true); if (await canChangeVolume()) setHovering(true);
document.body.classList.add("overflow-y-hidden");
}, [setHovering]); }, [setHovering]);
const handleMouseLeave = () => {
document.body.classList.remove("overflow-y-hidden");
};
let percentage = makePercentage(volume * 100); let percentage = makePercentage(volume * 100);
if (dragging) percentage = makePercentage(dragPercentage); if (dragging) percentage = makePercentage(dragPercentage);
const percentageString = makePercentageString(percentage); const percentageString = makePercentageString(percentage);
@ -61,9 +66,10 @@ export function Volume(props: Props) {
<div <div
className={props.className} className={props.className}
onMouseEnter={handleMouseEnter} onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
onWheel={handleWheel} onWheel={handleWheel}
> >
<div className="pointer-events-auto flex cursor-pointer items-center py-0"> <div className="pointer-events-auto flex cursor-pointer items-center py-0 touch-none">
<div className="px-4 text-2xl text-white" onClick={handleClick}> <div className="px-4 text-2xl text-white" onClick={handleClick}>
<Icon icon={percentage > 0 ? Icons.VOLUME : Icons.VOLUME_X} /> <Icon icon={percentage > 0 ? Icons.VOLUME : Icons.VOLUME_X} />
</div> </div>

View file

@ -145,17 +145,15 @@ function ParticlesCanvas() {
// Basic particle config // Basic particle config
const particleCount = 265; const particleCount = 265;
let imageParticleCount = particleCount;
// Holiday overrides
let imageOverride: { image: string; sizeRange?: [number, number] }[] = []; let imageOverride: { image: string; sizeRange?: [number, number] }[] = [];
const date = new Date(); const date = new Date();
const month = date.getMonth(); const month = date.getMonth();
const day = date.getDate(); const day = date.getDate();
if ( let imageParticleCount = particleCount;
(month === 11 && day >= 24 && day <= 26) ||
Math.random() < 0.051 // 5.1% switch (true) {
) { case (month === 11 && day >= 24 && day <= 26) || Math.random() < 0.051:
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/snowflake.svg", image: "/lightbar-images/snowflake.svg",
@ -167,15 +165,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount * 0.1; imageParticleCount = particleCount * 0.1;
} break;
// Halloween overrides case (month === 9 && day >= 29 && day <= 31) || Math.random() < 0.05:
const month2 = date.getMonth();
const day2 = date.getDate();
if (
(month2 === 9 && day2 >= 29 && day2 <= 31) ||
Math.random() < 0.05 // 5%
) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/ghost.png", image: "/lightbar-images/ghost.png",
@ -187,11 +179,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount * 0.0879; imageParticleCount = particleCount * 0.0879;
} break;
// Fish easter egg case Math.random() < 0.1:
const shouldShowFishie = Math.random() < 0.1; // 10%
if (shouldShowFishie) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/fishie.png", image: "/lightbar-images/fishie.png",
@ -202,14 +192,10 @@ function ParticlesCanvas() {
sizeRange: [48, 56] as [number, number], sizeRange: [48, 56] as [number, number],
}, },
]; ];
imageParticleCount = particleCount * 0.085; imageParticleCount = particleCount * 0.075;
} break;
// Weed easter egg case (month === 4 && day === 20) || Math.random() < 0.25:
const month3 = date.getMonth() + 1;
const day3 = date.getDate();
const shouldShowZa = (month3 === 4 && day3 === 20) || Math.random() < 0.25; // 25%
if (shouldShowZa) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/weed.png", image: "/lightbar-images/weed.png",
@ -217,11 +203,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 6.25; imageParticleCount = particleCount / 6.25;
} break;
// Kitty easter egg case Math.random() < 0.2:
const shouldShowCat = Math.random() < 0.2; // 20%
if (shouldShowCat) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/cat.png", image: "/lightbar-images/cat.png",
@ -229,11 +213,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 6.6; imageParticleCount = particleCount / 6.6;
} break;
// Movie & popcorn easter egg case Math.random() < 0.3:
const shouldShowParaphernalia = Math.random() < 0.3; // 30%
if (shouldShowParaphernalia) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/camera.png", image: "/lightbar-images/camera.png",
@ -245,11 +227,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 7.85; imageParticleCount = particleCount / 7.85;
} break;
// Chicken easter egg case Math.random() < 0.08:
const shouldShow4thDecor = Math.random() < 0.08; // 8%
if (shouldShow4thDecor) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/cock.png", image: "/lightbar-images/cock.png",
@ -265,11 +245,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 9; imageParticleCount = particleCount / 9;
} break;
// Money easter egg case Math.random() < 0.06:
const shouldShowMoney = Math.random() < 0.06; // 6%
if (shouldShowMoney) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/money-sack.png", image: "/lightbar-images/money-sack.png",
@ -285,11 +263,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 8.45; imageParticleCount = particleCount / 8.45;
} break;
// Pirate easter egg case Math.random() < 0.075:
const shouldShowPirate = Math.random() < 0.075; // 7.5%
if (shouldShowPirate) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/skull.png", image: "/lightbar-images/skull.png",
@ -301,11 +277,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 10; imageParticleCount = particleCount / 10;
} break;
// Dev easter egg case Math.random() < 0.03:
const shouldShowCode = Math.random() < 0.03; // 3%
if (shouldShowCode) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/ts.png", image: "/lightbar-images/ts.png",
@ -317,11 +291,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 9; imageParticleCount = particleCount / 9;
} break;
// DUI easter egg case Math.random() < 0.7:
const shouldShowFlix = Math.random() < 0.08; // 8%
if (shouldShowFlix) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/beer.png", image: "/lightbar-images/beer.png",
@ -345,11 +317,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 11; imageParticleCount = particleCount / 11;
} break;
// Gangster easter egg case Math.random() < 0.05:
const shouldShowCowboy = Math.random() < 0.05; // 5%
if (shouldShowCowboy) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/auto-gun.png", image: "/lightbar-images/auto-gun.png",
@ -361,11 +331,9 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 11.6; imageParticleCount = particleCount / 11.6;
} break;
// Star easter egg case Math.random() < 0.15:
const shouldShowStars = Math.random() < 0.15; // 15%
if (shouldShowStars) {
imageOverride = [ imageOverride = [
{ {
image: "/lightbar-images/star.png", image: "/lightbar-images/star.png",
@ -373,6 +341,11 @@ function ParticlesCanvas() {
}, },
]; ];
imageParticleCount = particleCount / 6.6; imageParticleCount = particleCount / 6.6;
break;
default:
// Default case
break;
} }
// HOIST THE SAIL (of particles)! // HOIST THE SAIL (of particles)!

View file

@ -26,7 +26,7 @@ export function DmcaPage() {
<Trans <Trans
i18nKey="screens.dmca.text" i18nKey="screens.dmca.text"
components={{ components={{
bold: <span className="font-bold" style={{ color: "#cfcfcf" }} />, bold: <span className="font-bold text-white" />,
}} }}
/> />
</Paragraph> </Paragraph>
@ -36,7 +36,7 @@ export function DmcaPage() {
href={`mailto:${conf().DMCA_EMAIL}`} href={`mailto:${conf().DMCA_EMAIL}`}
style={{ style={{
transition: "color 0.3s ease", transition: "color 0.3s ease",
color: isHovered ? "#cfcfcf" : "inherit", color: isHovered ? "#ffffff" : "inherit",
}} }}
onMouseEnter={() => setIsHovered(true)} onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)} onMouseLeave={() => setIsHovered(false)}