From e1dee8af4fc65e9212d50a98294a0516bccf28ef Mon Sep 17 00:00:00 2001 From: lamacchinadesiderante Date: Sat, 11 May 2024 13:13:41 +0200 Subject: [PATCH 01/19] reduce docker image size --- .dockerignore | 5 +++++ Dockerfile | 22 ++++++++++------------ package.json | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6a9c051 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules +.git +.gitignore +.next +package-lock.json \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cda677f..560fed2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,21 @@ -# Usa la versione alpine più recente di Node.js compatibile con Next.js 14 come base -FROM node:alpine +# PHASE 1: copy and build + +FROM node:alpine AS build -# Imposta la directory di lavoro nel container WORKDIR /app -# Copia i file esistenti nella root del progetto nel container COPY . . -# Rimuovi la cartella node_modules (se presente) -RUN rm -rf node_modules +RUN rm -rf node_modules && npm install && npm run build -# Installa le dipendenze -RUN npm install +# PHASE 2: prepare for exec -# Esegui la build del progetto -RUN npm run build +FROM node:alpine AS exec + +WORKDIR /app + +COPY --from=build /app/. . -# Esponi la porta 3000 EXPOSE 3000 -# Avvia il server in modalità di produzione CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/package.json b/package.json index 71e001e..d812fff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "proxyraye-next", - "version": "0.1.0", + "version": "0.2.0", "private": true, "scripts": { "dev": "next dev", From 4d083a14b02143b647fda47551989f1e36e9fdcf Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 13:33:40 +0200 Subject: [PATCH 02/19] change repo link (and related icon) to codeberg --- src/components/Layout/Header/Menu/Repo/index.tsx | 8 ++++---- src/constants/repo.ts | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/Layout/Header/Menu/Repo/index.tsx b/src/components/Layout/Header/Menu/Repo/index.tsx index 64ee07a..c049730 100644 --- a/src/components/Layout/Header/Menu/Repo/index.tsx +++ b/src/components/Layout/Header/Menu/Repo/index.tsx @@ -2,17 +2,17 @@ import React from 'react'; -import { SiGitea } from "react-icons/si"; +import { SiCodeberg } from "react-icons/si"; import Icon from '../Icon'; -import { REPO_GITEA_URL } from '@/constants/repo'; +import { REPO_CODEBERG_URL } from '@/constants/repo'; const Menu: React.FC = () => { return ( - {window.location.href = REPO_GITEA_URL;}}> - {} + {window.location.href = REPO_CODEBERG_URL;}}> + {} ); }; diff --git a/src/constants/repo.ts b/src/constants/repo.ts index 60e3321..1634600 100644 --- a/src/constants/repo.ts +++ b/src/constants/repo.ts @@ -1 +1,2 @@ -export const REPO_GITEA_URL = 'https://git.lamacchinadesiderante.org/lamacchinadesiderante/proxyraye-nextjs' \ No newline at end of file +export const REPO_GITEA_URL = 'https://git.lamacchinadesiderante.org/lamacchinadesiderante/proxyraye-nextjs' +export const REPO_CODEBERG_URL = 'https://codeberg.org/lamacchinadesiderante/proxyraye' \ No newline at end of file From aa86a71dc6ed912d09e13cea68194b73e2b61c73 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 13:59:01 +0200 Subject: [PATCH 03/19] add redux middleware and metadata --- src/app/[locale]/layout.tsx | 13 +++++---- src/components/Layout/Content/index.tsx | 38 +++++++++++++++++++++++++ src/components/Layout/index.tsx | 34 +++++----------------- src/store/withRedux.tsx | 18 ++++++++++++ 4 files changed, 70 insertions(+), 33 deletions(-) create mode 100644 src/components/Layout/Content/index.tsx create mode 100644 src/store/withRedux.tsx diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx index 0fd507b..304cf5b 100644 --- a/src/app/[locale]/layout.tsx +++ b/src/app/[locale]/layout.tsx @@ -1,8 +1,11 @@ -'use client' - import "@/styles/globals.scss" -import ReduxProvider from "@/store/redux-provider"; +import type { Metadata } from 'next' + +export const metadata: Metadata = { + title: 'ProxyRaye', + description: 'Watch porn videos without tracking or annoying ads!', +} export default function RootLayout({ children, @@ -14,9 +17,7 @@ export default function RootLayout({ return ( <> - - {children} - + {children} ); } diff --git a/src/components/Layout/Content/index.tsx b/src/components/Layout/Content/index.tsx new file mode 100644 index 0000000..035514e --- /dev/null +++ b/src/components/Layout/Content/index.tsx @@ -0,0 +1,38 @@ +'use client' + +import React from 'react'; + +import Head from 'next/head'; + +import { AppProgressBar as ProgressBar } from 'next-nprogress-bar'; + +import { useAppSelector } from '@/store/store'; +import { LAYOUT_COLORS_PINK, LAYOUT_COLORS_YELLOW } from '@/constants/colors'; +import { Themes } from '@/meta/settings'; + +const Content: React.FC = (props) => { + + const { children } = props; + + const theme = useAppSelector((state) => state.settings.theme); + + return ( + + + + + + +
{children}
+ + + + ); +}; + +export default Content; \ No newline at end of file diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 8ce895a..5084429 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -1,38 +1,18 @@ -'use client' - import React from 'react'; -import Head from 'next/head'; - -import { AppProgressBar as ProgressBar } from 'next-nprogress-bar'; - -import { useAppSelector } from '@/store/store'; -import { LAYOUT_COLORS_PINK, LAYOUT_COLORS_YELLOW } from '@/constants/colors'; -import { Themes } from '@/meta/settings'; +import WithRedux from '@/store/withRedux'; +import Content from './Content'; const Layout: React.FC = (props) => { const { children } = props; - const theme = useAppSelector((state) => state.settings.theme); - return ( - - - - - Proxy Raye: watch porn videos without tracking or annoying ads! - - -
{children}
- - - + + + {children} + + ); }; diff --git a/src/store/withRedux.tsx b/src/store/withRedux.tsx new file mode 100644 index 0000000..d65bc68 --- /dev/null +++ b/src/store/withRedux.tsx @@ -0,0 +1,18 @@ +'use client' + +import ReduxProvider from "@/store/redux-provider"; + +export default function WithRedux({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + + return ( + <> + + {children} + + + ); +} From fe072f5ddda35f5c4be91245539247af66784a1b Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 14:15:41 +0200 Subject: [PATCH 04/19] fix redux-persist server-side error msg --- package-lock.json | 4 ++-- src/store/store.ts | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4e527c8..81a0845 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "proxyraye-next", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "proxyraye-next", - "version": "0.1.0", + "version": "0.2.0", "dependencies": { "@picocss/pico": "^2.0.6", "@reduxjs/toolkit": "^2.2.3", diff --git a/src/store/store.ts b/src/store/store.ts index 1d6befc..fd9804c 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -4,7 +4,24 @@ import { useDispatch, TypedUseSelectorHook, useSelector } from "react-redux"; import { settingsReducer } from "@/store/settingsSlice"; import { persistReducer } from "redux-persist"; -import storage from "redux-persist/lib/storage"; + +import createWebStorage from "redux-persist/lib/storage/createWebStorage"; + +const createNoopStorage = () => { + return { + getItem(_key: any) { + return Promise.resolve(null); + }, + setItem(_key: any, value: any) { + return Promise.resolve(value); + }, + removeItem(_key: any) { + return Promise.resolve(); + }, + }; +}; + +const storage = typeof window !== "undefined" ? createWebStorage("local") : createNoopStorage(); const settingsPersistConfig = { key: "settings", From 209285d3fa89f4c5c61ed667af5e22bdb5d7d55a Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 14:55:52 +0200 Subject: [PATCH 05/19] add settings icon and modal --- locale/en.json | 3 +- locale/it.json | 3 +- .../Menu/Settings/Modal/Modal.module.scss | 20 +++++++++++ .../Header/Menu/Settings/Modal/index.tsx | 36 +++++++++++++++++++ .../Layout/Header/Menu/Settings/index.tsx | 31 ++++++++++++++++ src/components/Layout/Header/Menu/index.tsx | 6 ++++ 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/index.tsx create mode 100644 src/components/Layout/Header/Menu/Settings/index.tsx diff --git a/locale/en.json b/locale/en.json index 96989e4..a8569b0 100644 --- a/locale/en.json +++ b/locale/en.json @@ -22,7 +22,8 @@ "Settings": { "lang_title": "Please select language", "lang_it": "Italian", - "lang_en": "English" + "lang_en": "English", + "settings_title": "Settings" }, "Results": { "query": "Search results for: {{ query }}", diff --git a/locale/it.json b/locale/it.json index 129662a..51c1475 100644 --- a/locale/it.json +++ b/locale/it.json @@ -22,7 +22,8 @@ "Settings": { "lang_title": "Seleziona la lingua", "lang_it": "Italiano", - "lang_en": "Inglese" + "lang_en": "Inglese", + "settings_title": "Impostazioni" }, "Results": { "query": "Risultati della ricerca per: {{ query }}", diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss new file mode 100644 index 0000000..a9d00d1 --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss @@ -0,0 +1,20 @@ +@import 'spacing'; + +.container { + + .header { + display: flex; + justify-content: space-between; + align-items: center; + + .close { + cursor: pointer; + } + } + + .content { + display: flex; + flex-direction: row; + } +} + diff --git a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx new file mode 100644 index 0000000..0cb610b --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx @@ -0,0 +1,36 @@ +'use client' + +import React from 'react'; + +import { IoCloseCircleOutline } from "react-icons/io5"; + +import style from './Modal.module.scss' + +interface Props { + handleClose(): void + labels: { + title: string + } +} + +const LangSwitcher: React.FC = (props) => { + + const { labels, handleClose } = props + + return ( + +
+
+
{labels.title}
+
{ handleClose() }}>
+
+

+ SETTINGS +

+
+
+ + ); +}; + +export default LangSwitcher; \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/index.tsx b/src/components/Layout/Header/Menu/Settings/index.tsx new file mode 100644 index 0000000..407df7b --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/index.tsx @@ -0,0 +1,31 @@ +'use client' + +import React, { useState } from 'react'; + +import { IoSettingsOutline } from 'react-icons/io5'; + +import Icon from '../Icon'; +import Modal from './Modal'; + +interface Props { + labels: any +} + +const Settings: React.FC = (props) => { + + const { labels } = props + + const [showModal, setShowModal] = useState(false) + + return ( + <> + setShowModal(true)}> + {} + + + {showModal && setShowModal(false)} labels={labels} />} + + ); +}; + +export default Settings; \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/index.tsx b/src/components/Layout/Header/Menu/index.tsx index 51cf79a..ea4fe7d 100644 --- a/src/components/Layout/Header/Menu/index.tsx +++ b/src/components/Layout/Header/Menu/index.tsx @@ -8,6 +8,7 @@ import Theme from './Theme'; import Repo from './Repo'; import Language from './Language'; import { LangOption } from '@/meta/settings'; +import Settings from './Settings'; const Menu: React.FC = () => { @@ -23,11 +24,16 @@ const Menu: React.FC = () => { langs: options } + const settingsLabels = { + title: t('settings_title'), + } + return (
+
); }; From 295fc4dadb0971df7c007a3855ed8b2104352d98 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 16:43:48 +0200 Subject: [PATCH 06/19] add platform settings and cookie set mechanism --- locale/en.json | 3 +- locale/it.json | 3 +- package-lock.json | 63 ++++++++++++++++--- package.json | 1 + .../Menu/Settings/Modal/Modal.module.scss | 2 + .../Modal/Platform/Platform.module.scss | 11 ++++ .../Menu/Settings/Modal/Platform/index.tsx | 42 +++++++++++++ .../Header/Menu/Settings/Modal/index.tsx | 8 ++- src/components/Layout/Header/Menu/index.tsx | 3 + src/meta/settings.ts | 5 ++ src/utils/cookies/read.ts | 11 ++++ src/utils/cookies/write.ts | 14 +++++ 12 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/Platform/Platform.module.scss create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx create mode 100644 src/utils/cookies/read.ts create mode 100644 src/utils/cookies/write.ts diff --git a/locale/en.json b/locale/en.json index a8569b0..eeb2d4c 100644 --- a/locale/en.json +++ b/locale/en.json @@ -23,7 +23,8 @@ "lang_title": "Please select language", "lang_it": "Italian", "lang_en": "English", - "settings_title": "Settings" + "settings_title": "Settings", + "platform_title": "Platform:" }, "Results": { "query": "Search results for: {{ query }}", diff --git a/locale/it.json b/locale/it.json index 51c1475..c983a49 100644 --- a/locale/it.json +++ b/locale/it.json @@ -23,7 +23,8 @@ "lang_title": "Seleziona la lingua", "lang_it": "Italiano", "lang_en": "Inglese", - "settings_title": "Impostazioni" + "settings_title": "Impostazioni", + "platform_title": "Piattaforma:" }, "Results": { "query": "Risultati della ricerca per: {{ query }}", diff --git a/package-lock.json b/package-lock.json index 81a0845..9d6ffc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "next-intl": "^3.11.3", "next-nprogress-bar": "^2.3.11", "react": "^18", + "react-cookie": "^7.1.4", "react-dom": "^18", "react-icons": "^5.1.0", "react-image": "^4.1.0", @@ -519,6 +520,20 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -537,14 +552,12 @@ "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { "version": "18.2.79", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", - "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1339,6 +1352,14 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1382,8 +1403,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -2711,6 +2731,14 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -4087,6 +4115,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-cookie": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.1.4.tgz", + "integrity": "sha512-wDxxa/HYaSXSMlyWJvJ5uZTzIVtQTPf1gMksFgwAz/2/W3lCtY8r4OChCXMPE7wax0PAdMY97UkNJedGv7KnDw==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.5", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^7.0.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -4120,8 +4161,7 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-redux": { "version": "9.1.1", @@ -4964,6 +5004,15 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "node_modules/universal-cookie": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.1.4.tgz", + "integrity": "sha512-Q+DVJsdykStWRMtXr2Pdj3EF98qZHUH/fXv/gwFz/unyToy1Ek1w5GsWt53Pf38tT8Gbcy5QNsj61Xe9TggP4g==", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index d812fff..014efba 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "next-intl": "^3.11.3", "next-nprogress-bar": "^2.3.11", "react": "^18", + "react-cookie": "^7.1.4", "react-dom": "^18", "react-icons": "^5.1.0", "react-image": "^4.1.0", diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss index a9d00d1..2ac901e 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss +++ b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss @@ -2,6 +2,8 @@ .container { + overflow: visible !important; + .header { display: flex; justify-content: space-between; diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Platform/Platform.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Platform/Platform.module.scss new file mode 100644 index 0000000..cc534dd --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/Platform/Platform.module.scss @@ -0,0 +1,11 @@ +@import 'fontsize'; +@import 'spacing'; + + +.container { + + .title { + margin-bottom: $spacing_16; + } + +} \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx new file mode 100644 index 0000000..37d4738 --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx @@ -0,0 +1,42 @@ +'use client' + +import { Platforms } from '@/meta/settings'; + +import css from './Platform.module.scss' + +import React from 'react'; + +import { setCookie } from '@/utils/cookies/write'; +import { useCookies } from 'react-cookie'; + +interface Props { + labels: { + title: string, + } +} + +const Platform: React.FC = (props) => { + + const { labels } = props + + const [cookies] = useCookies(['platform']); + + const handleChange = async (event: React.ChangeEvent) => { + const value = event.target.value; + + await setCookie('platform', value) + } + + return ( +
+
{labels.title}
+ +
+ ); +}; + +export default Platform; \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx index 0cb610b..a19d22c 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx @@ -5,11 +5,13 @@ import React from 'react'; import { IoCloseCircleOutline } from "react-icons/io5"; import style from './Modal.module.scss' +import Platform from './Platform'; interface Props { handleClose(): void labels: { title: string + platform: any } } @@ -24,9 +26,9 @@ const LangSwitcher: React.FC = (props) => {
{labels.title}
{ handleClose() }}>
-

- SETTINGS -

+
+ +
diff --git a/src/components/Layout/Header/Menu/index.tsx b/src/components/Layout/Header/Menu/index.tsx index ea4fe7d..4a13cc0 100644 --- a/src/components/Layout/Header/Menu/index.tsx +++ b/src/components/Layout/Header/Menu/index.tsx @@ -26,6 +26,9 @@ const Menu: React.FC = () => { const settingsLabels = { title: t('settings_title'), + platform: { + title: t('platform_title') + } } return ( diff --git a/src/meta/settings.ts b/src/meta/settings.ts index 375d1c1..920af31 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -1,3 +1,8 @@ +export enum Platforms { + xvideos= 'xvideos', + xnxx= 'xnxx' +} + export enum Themes { light= 'light', dark= 'dark' diff --git a/src/utils/cookies/read.ts b/src/utils/cookies/read.ts new file mode 100644 index 0000000..e034268 --- /dev/null +++ b/src/utils/cookies/read.ts @@ -0,0 +1,11 @@ +'use server' + +import { cookies } from 'next/headers' + +export async function getCookie(name: string) { + return cookies().get(name); +} + +export async function hasCookie(name: string):Promise { + return cookies().has(name) +} diff --git a/src/utils/cookies/write.ts b/src/utils/cookies/write.ts new file mode 100644 index 0000000..8f8a5a7 --- /dev/null +++ b/src/utils/cookies/write.ts @@ -0,0 +1,14 @@ +'use server' + +import { cookies } from 'next/headers' + +export async function deleteCookie(name: string) { + cookies().delete(name) +} + +export async function setCookie(name: string, value: string) { + cookies().set(name, value, { + sameSite: 'lax', + secure: false + }) +} \ No newline at end of file From 581e5704d413b4f6b8e2b95914fc2476f9d1ca31 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 17:33:04 +0200 Subject: [PATCH 07/19] Set persistent theme on cookies --- src/components/Layout/Content/Body/index.tsx | 31 +++++++++++++++++++ src/components/Layout/Content/index.tsx | 28 ++++++----------- .../Layout/Header/Menu/Theme/index.tsx | 22 ++++++++----- src/components/Layout/index.tsx | 9 +++++- src/meta/settings.ts | 4 ++- 5 files changed, 65 insertions(+), 29 deletions(-) create mode 100644 src/components/Layout/Content/Body/index.tsx diff --git a/src/components/Layout/Content/Body/index.tsx b/src/components/Layout/Content/Body/index.tsx new file mode 100644 index 0000000..ab25981 --- /dev/null +++ b/src/components/Layout/Content/Body/index.tsx @@ -0,0 +1,31 @@ +'use client' + +import React from 'react'; + +import { AppProgressBar as ProgressBar } from 'next-nprogress-bar'; + +import { LAYOUT_COLORS_PINK, LAYOUT_COLORS_YELLOW } from '@/constants/colors'; +import { Themes } from '@/meta/settings'; + +interface Props { + theme?: Themes +} + +const Body: React.FC = (props) => { + + const { theme, children } = props; + + return ( + +
{children}
+ + + ); +}; + +export default Body; \ No newline at end of file diff --git a/src/components/Layout/Content/index.tsx b/src/components/Layout/Content/index.tsx index 035514e..bf06d57 100644 --- a/src/components/Layout/Content/index.tsx +++ b/src/components/Layout/Content/index.tsx @@ -1,36 +1,26 @@ -'use client' - import React from 'react'; import Head from 'next/head'; -import { AppProgressBar as ProgressBar } from 'next-nprogress-bar'; - -import { useAppSelector } from '@/store/store'; -import { LAYOUT_COLORS_PINK, LAYOUT_COLORS_YELLOW } from '@/constants/colors'; import { Themes } from '@/meta/settings'; -const Content: React.FC = (props) => { +import Body from './Body'; - const { children } = props; +interface Props { + theme?: Themes +} - const theme = useAppSelector((state) => state.settings.theme); +const Content: React.FC = (props) => { + + const { theme, children } = props; return ( - + - -
{children}
- - + {children} ); }; diff --git a/src/components/Layout/Header/Menu/Theme/index.tsx b/src/components/Layout/Header/Menu/Theme/index.tsx index f3ffabd..142273a 100644 --- a/src/components/Layout/Header/Menu/Theme/index.tsx +++ b/src/components/Layout/Header/Menu/Theme/index.tsx @@ -3,23 +3,29 @@ import React from 'react'; import { TbMoon, TbSun } from 'react-icons/tb'; -import { useAppDispatch, useAppSelector } from '@/store/store'; -import { Themes } from '@/meta/settings'; -import { setCurrentTheme } from '@/store/settingsSlice'; +import { DEFAULT_THEME, Themes } from '@/meta/settings'; import Icon from '../Icon'; +import { setCookie } from '@/utils/cookies/write'; +import { useCookies } from 'react-cookie'; -const Menu: React.FC = () => { +const Theme: React.FC = () => { - const theme = useAppSelector((state) => state.settings.theme); - const dispatch = useAppDispatch(); + const [cookies] = useCookies(['theme']); + + const theme = cookies.theme ?? DEFAULT_THEME + + const handleClick = async () => { + const newTheme = theme == Themes.dark ? Themes.light : Themes.dark + await setCookie('theme', newTheme) + } return ( - dispatch(setCurrentTheme(theme == Themes.dark ? Themes.light : Themes.dark))}> + {theme == Themes.dark && } {theme == Themes.light && } ); }; -export default Menu; \ No newline at end of file +export default Theme; \ No newline at end of file diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 5084429..26baba8 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -1,15 +1,22 @@ import React from 'react'; +import { cookies } from 'next/headers' + import WithRedux from '@/store/withRedux'; import Content from './Content'; +import { DEFAULT_THEME, Themes } from '@/meta/settings'; const Layout: React.FC = (props) => { const { children } = props; + const cookieStore = cookies() + + const theme = cookieStore.get('theme') + return ( - + {children} diff --git a/src/meta/settings.ts b/src/meta/settings.ts index 920af31..6b0697a 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -5,9 +5,11 @@ export enum Platforms { export enum Themes { light= 'light', - dark= 'dark' + dark= 'dark', } +export const DEFAULT_THEME = Themes.light + export interface LangOption { label: string; code: string; From ae64434b42312d90182977ac65d699aa6ae2f677 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 17:45:01 +0200 Subject: [PATCH 08/19] fix title link issue --- src/components/Layout/Header/Title/index.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Layout/Header/Title/index.tsx b/src/components/Layout/Header/Title/index.tsx index a3bdb25..ade98c8 100644 --- a/src/components/Layout/Header/Title/index.tsx +++ b/src/components/Layout/Header/Title/index.tsx @@ -2,15 +2,17 @@ import React from 'react'; import style from './Title.module.scss' -import {useTranslations} from 'next-intl'; +import { useLocale, useTranslations } from 'next-intl'; + import Link from 'next/link'; const Title: React.FC = () => { const t = useTranslations('Header'); + const locale = useLocale() return ( -

{t('title')}

+

{t('title')}

); }; From 3e6d70006349ed5591199ba18c652e6e7b243d11 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 18:58:33 +0200 Subject: [PATCH 09/19] add gender categories --- locale/en.json | 3 +- locale/it.json | 3 +- .../Modal/Category/Category.module.scss | 11 +++++ .../Menu/Settings/Modal/Category/index.tsx | 42 +++++++++++++++++++ .../Menu/Settings/Modal/Modal.module.scss | 2 +- .../Header/Menu/Settings/Modal/index.tsx | 3 ++ src/components/Layout/Header/Menu/index.tsx | 3 ++ src/meta/settings.ts | 6 +++ 8 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss create mode 100644 src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx diff --git a/locale/en.json b/locale/en.json index eeb2d4c..6eb29e9 100644 --- a/locale/en.json +++ b/locale/en.json @@ -24,7 +24,8 @@ "lang_it": "Italian", "lang_en": "English", "settings_title": "Settings", - "platform_title": "Platform:" + "platform_title": "Platform:", + "category_title": "Category:" }, "Results": { "query": "Search results for: {{ query }}", diff --git a/locale/it.json b/locale/it.json index c983a49..e472a3a 100644 --- a/locale/it.json +++ b/locale/it.json @@ -24,7 +24,8 @@ "lang_it": "Italiano", "lang_en": "Inglese", "settings_title": "Impostazioni", - "platform_title": "Piattaforma:" + "platform_title": "Piattaforma:", + "category_title": "Categoria:" }, "Results": { "query": "Risultati della ricerca per: {{ query }}", diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss new file mode 100644 index 0000000..cc534dd --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss @@ -0,0 +1,11 @@ +@import 'fontsize'; +@import 'spacing'; + + +.container { + + .title { + margin-bottom: $spacing_16; + } + +} \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx new file mode 100644 index 0000000..bece1e6 --- /dev/null +++ b/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx @@ -0,0 +1,42 @@ +'use client' + +import { XVideosCategories } from '@/meta/settings'; + +import css from './Category.module.scss' + +import React from 'react'; + +import { setCookie } from '@/utils/cookies/write'; +import { useCookies } from 'react-cookie'; + +interface Props { + labels: { + title: string, + } +} + +const Category: React.FC = (props) => { + + const { labels } = props + + const [cookies] = useCookies(['category']); + + const handleChange = async (event: React.ChangeEvent) => { + const value = event.target.value; + + await setCookie('category', value) + } + + return ( +
+
{labels.title}
+ +
+ ); +}; + +export default Category; \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss index 2ac901e..0df5801 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss +++ b/src/components/Layout/Header/Menu/Settings/Modal/Modal.module.scss @@ -16,7 +16,7 @@ .content { display: flex; - flex-direction: row; + flex-direction: column; } } diff --git a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx index a19d22c..69dd433 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx @@ -6,12 +6,14 @@ import { IoCloseCircleOutline } from "react-icons/io5"; import style from './Modal.module.scss' import Platform from './Platform'; +import Category from './Category'; interface Props { handleClose(): void labels: { title: string platform: any + category: any } } @@ -28,6 +30,7 @@ const LangSwitcher: React.FC = (props) => {
+
diff --git a/src/components/Layout/Header/Menu/index.tsx b/src/components/Layout/Header/Menu/index.tsx index 4a13cc0..be46e22 100644 --- a/src/components/Layout/Header/Menu/index.tsx +++ b/src/components/Layout/Header/Menu/index.tsx @@ -28,6 +28,9 @@ const Menu: React.FC = () => { title: t('settings_title'), platform: { title: t('platform_title') + }, + category: { + title: t('category_title') } } diff --git a/src/meta/settings.ts b/src/meta/settings.ts index 6b0697a..ffb8ad6 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -3,6 +3,12 @@ export enum Platforms { xnxx= 'xnxx' } +export enum XVideosCategories { + etero= 'etero', + gay= 'gay', + trans= 'trans' +} + export enum Themes { light= 'light', dark= 'dark', From 4e789ddce11068e8444edbe1b75d75c880e94c5d Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 19:46:51 +0200 Subject: [PATCH 10/19] now category filter is working properly --- .../Menu/Settings/Modal/Category/index.tsx | 6 +-- .../Menu/Settings/Modal/Platform/index.tsx | 6 +-- .../Layout/Header/Menu/Theme/index.tsx | 6 +-- src/constants/urls.ts | 4 +- src/meta/settings.ts | 12 ++++++ src/utils/scrape/xvideos/gallery.ts | 4 +- src/utils/scrape/xvideos/url.ts | 40 +++++++++++++++++++ 7 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 src/utils/scrape/xvideos/url.ts diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx index bece1e6..4e2552d 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx @@ -1,6 +1,6 @@ 'use client' -import { XVideosCategories } from '@/meta/settings'; +import { Cookies, XVideosCategories } from '@/meta/settings'; import css from './Category.module.scss' @@ -19,12 +19,12 @@ const Category: React.FC = (props) => { const { labels } = props - const [cookies] = useCookies(['category']); + const [cookies] = useCookies([Cookies.category]); const handleChange = async (event: React.ChangeEvent) => { const value = event.target.value; - await setCookie('category', value) + await setCookie(Cookies.category, value) } return ( diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx index 37d4738..4a19f4f 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx @@ -1,6 +1,6 @@ 'use client' -import { Platforms } from '@/meta/settings'; +import { Cookies, Platforms } from '@/meta/settings'; import css from './Platform.module.scss' @@ -19,12 +19,12 @@ const Platform: React.FC = (props) => { const { labels } = props - const [cookies] = useCookies(['platform']); + const [cookies] = useCookies([Cookies.platform]); const handleChange = async (event: React.ChangeEvent) => { const value = event.target.value; - await setCookie('platform', value) + await setCookie(Cookies.platform, value) } return ( diff --git a/src/components/Layout/Header/Menu/Theme/index.tsx b/src/components/Layout/Header/Menu/Theme/index.tsx index 142273a..94bcbca 100644 --- a/src/components/Layout/Header/Menu/Theme/index.tsx +++ b/src/components/Layout/Header/Menu/Theme/index.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { TbMoon, TbSun } from 'react-icons/tb'; -import { DEFAULT_THEME, Themes } from '@/meta/settings'; +import { Cookies, DEFAULT_THEME, Themes } from '@/meta/settings'; import Icon from '../Icon'; import { setCookie } from '@/utils/cookies/write'; @@ -11,13 +11,13 @@ import { useCookies } from 'react-cookie'; const Theme: React.FC = () => { - const [cookies] = useCookies(['theme']); + const [cookies] = useCookies([Cookies.theme]); const theme = cookies.theme ?? DEFAULT_THEME const handleClick = async () => { const newTheme = theme == Themes.dark ? Themes.light : Themes.dark - await setCookie('theme', newTheme) + await setCookie(Cookies.theme, newTheme) } return ( diff --git a/src/constants/urls.ts b/src/constants/urls.ts index 87953cd..358e6b4 100644 --- a/src/constants/urls.ts +++ b/src/constants/urls.ts @@ -1 +1,3 @@ -export const XVIDEOS_BASE_URL: string = "https://www.xvideos.com" \ No newline at end of file +export const XVIDEOS_BASE_URL: string = "https://www.xvideos.com" +export const XVIDEOS_BASE_URL_GAY: string = "https://www.xvideos.com/gay" +export const XVIDEOS_BASE_URL_TRANS: string = "https://www.xvideos.com/shemale" \ No newline at end of file diff --git a/src/meta/settings.ts b/src/meta/settings.ts index ffb8ad6..1326ecd 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -1,8 +1,20 @@ +export enum Cookies { + theme= 'theme', + category= 'category', + platform= 'platform' +} + export enum Platforms { xvideos= 'xvideos', xnxx= 'xnxx' } +export enum XVideosCatQueryMap { + etero= 'straight', + gay= 'gay', + trans= 'shemale' +} + export enum XVideosCategories { etero= 'etero', gay= 'gay', diff --git a/src/utils/scrape/xvideos/gallery.ts b/src/utils/scrape/xvideos/gallery.ts index 51d617b..6efbe55 100644 --- a/src/utils/scrape/xvideos/gallery.ts +++ b/src/utils/scrape/xvideos/gallery.ts @@ -1,9 +1,9 @@ -import { XVIDEOS_BASE_URL } from '@/constants/urls'; import { GalleryData } from '@/meta/data'; import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; import { getHeaders } from '../headers'; +import { getXVideosQueryUrl } from './url'; interface FetchParams { baseUrl?: string @@ -16,7 +16,7 @@ export const fetchGalleryData = async (params?: FetchParams): Promise { + + const category = await getCookie(Cookies.category) + + if (!category && !query) { + return XVIDEOS_BASE_URL + } + + if (!category && query) { + return `${XVIDEOS_BASE_URL}/?k=${query}` + } + + if (category && !Object.values(XVideosCategories).includes(category.value as XVideosCategories)) { + return XVIDEOS_BASE_URL + } + + if (category && !query) { + switch (category.value) { + case XVideosCategories.etero: + return XVIDEOS_BASE_URL + case XVideosCategories.gay: + return XVIDEOS_BASE_URL_GAY + case XVideosCategories.trans: + return XVIDEOS_BASE_URL_TRANS + default: + return XVIDEOS_BASE_URL; + } + } + + if (category && query) { + return `${XVIDEOS_BASE_URL}/?k=${query}&typef=${XVideosCatQueryMap[category.value as XVideosCategories]}` + } + + return XVIDEOS_BASE_URL + +} \ No newline at end of file From fab737abfd0d94677aaa5affeb29687618bbc87a Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sat, 11 May 2024 20:06:04 +0200 Subject: [PATCH 11/19] rename category to orientation --- locale/en.json | 2 +- locale/it.json | 2 +- src/app/[locale]/search/[query]/page.tsx | 2 +- .../Orientation.module.scss} | 0 .../Modal/{Category => Orientation}/index.tsx | 16 ++++++++-------- .../Layout/Header/Menu/Settings/Modal/index.tsx | 6 +++--- src/components/Layout/Header/Menu/index.tsx | 4 ++-- src/meta/settings.ts | 4 ++-- src/utils/scrape/xvideos/url.ts | 14 +++++++------- 9 files changed, 25 insertions(+), 25 deletions(-) rename src/components/Layout/Header/Menu/Settings/Modal/{Category/Category.module.scss => Orientation/Orientation.module.scss} (100%) rename src/components/Layout/Header/Menu/Settings/Modal/{Category => Orientation}/index.tsx (55%) diff --git a/locale/en.json b/locale/en.json index 6eb29e9..f4c7cf9 100644 --- a/locale/en.json +++ b/locale/en.json @@ -25,7 +25,7 @@ "lang_en": "English", "settings_title": "Settings", "platform_title": "Platform:", - "category_title": "Category:" + "orientation_title": "Orientation:" }, "Results": { "query": "Search results for: {{ query }}", diff --git a/locale/it.json b/locale/it.json index e472a3a..110d264 100644 --- a/locale/it.json +++ b/locale/it.json @@ -25,7 +25,7 @@ "lang_en": "Inglese", "settings_title": "Impostazioni", "platform_title": "Piattaforma:", - "category_title": "Categoria:" + "orientation_title": "Orientamento:" }, "Results": { "query": "Risultati della ricerca per: {{ query }}", diff --git a/src/app/[locale]/search/[query]/page.tsx b/src/app/[locale]/search/[query]/page.tsx index 520d0bc..b2ee52e 100644 --- a/src/app/[locale]/search/[query]/page.tsx +++ b/src/app/[locale]/search/[query]/page.tsx @@ -9,6 +9,6 @@ export default async function SearchPage({ params }: { params: { query: string } const data = await fetchGalleryData({ query: params.query }) return - + } \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss b/src/components/Layout/Header/Menu/Settings/Modal/Orientation/Orientation.module.scss similarity index 100% rename from src/components/Layout/Header/Menu/Settings/Modal/Category/Category.module.scss rename to src/components/Layout/Header/Menu/Settings/Modal/Orientation/Orientation.module.scss diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx similarity index 55% rename from src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx rename to src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx index 4e2552d..97b0d7b 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Category/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx @@ -1,8 +1,8 @@ 'use client' -import { Cookies, XVideosCategories } from '@/meta/settings'; +import { Cookies, XVideosOrientations } from '@/meta/settings'; -import css from './Category.module.scss' +import css from './Orientation.module.scss' import React from 'react'; @@ -15,23 +15,23 @@ interface Props { } } -const Category: React.FC = (props) => { +const Orientation: React.FC = (props) => { const { labels } = props - const [cookies] = useCookies([Cookies.category]); + const [cookies] = useCookies([Cookies.orientation]); const handleChange = async (event: React.ChangeEvent) => { const value = event.target.value; - await setCookie(Cookies.category, value) + await setCookie(Cookies.orientation, value) } return (
{labels.title}
- + {Object.keys(XVideosOrientations).map((elem, key) => { return })} @@ -39,4 +39,4 @@ const Category: React.FC = (props) => { ); }; -export default Category; \ No newline at end of file +export default Orientation; \ No newline at end of file diff --git a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx index 69dd433..dc86a61 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx @@ -6,14 +6,14 @@ import { IoCloseCircleOutline } from "react-icons/io5"; import style from './Modal.module.scss' import Platform from './Platform'; -import Category from './Category'; +import Orientation from './Orientation'; interface Props { handleClose(): void labels: { title: string platform: any - category: any + orientation: any } } @@ -30,7 +30,7 @@ const LangSwitcher: React.FC = (props) => {
- +
diff --git a/src/components/Layout/Header/Menu/index.tsx b/src/components/Layout/Header/Menu/index.tsx index be46e22..563bb6c 100644 --- a/src/components/Layout/Header/Menu/index.tsx +++ b/src/components/Layout/Header/Menu/index.tsx @@ -29,8 +29,8 @@ const Menu: React.FC = () => { platform: { title: t('platform_title') }, - category: { - title: t('category_title') + orientation: { + title: t('orientation_title') } } diff --git a/src/meta/settings.ts b/src/meta/settings.ts index 1326ecd..72e408b 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -1,6 +1,6 @@ export enum Cookies { theme= 'theme', - category= 'category', + orientation= 'orientation', platform= 'platform' } @@ -15,7 +15,7 @@ export enum XVideosCatQueryMap { trans= 'shemale' } -export enum XVideosCategories { +export enum XVideosOrientations { etero= 'etero', gay= 'gay', trans= 'trans' diff --git a/src/utils/scrape/xvideos/url.ts b/src/utils/scrape/xvideos/url.ts index 3f7872d..88222d9 100644 --- a/src/utils/scrape/xvideos/url.ts +++ b/src/utils/scrape/xvideos/url.ts @@ -1,10 +1,10 @@ import { XVIDEOS_BASE_URL, XVIDEOS_BASE_URL_GAY, XVIDEOS_BASE_URL_TRANS } from '@/constants/urls'; -import { Cookies, XVideosCatQueryMap, XVideosCategories } from '@/meta/settings'; +import { Cookies, XVideosCatQueryMap, XVideosOrientations } from '@/meta/settings'; import { getCookie } from '@/utils/cookies/read'; export const getXVideosQueryUrl = async (query?: string) => { - const category = await getCookie(Cookies.category) + const category = await getCookie(Cookies.orientation) if (!category && !query) { return XVIDEOS_BASE_URL @@ -14,17 +14,17 @@ export const getXVideosQueryUrl = async (query?: string) => { return `${XVIDEOS_BASE_URL}/?k=${query}` } - if (category && !Object.values(XVideosCategories).includes(category.value as XVideosCategories)) { + if (category && !Object.values(XVideosOrientations).includes(category.value as XVideosOrientations)) { return XVIDEOS_BASE_URL } if (category && !query) { switch (category.value) { - case XVideosCategories.etero: + case XVideosOrientations.etero: return XVIDEOS_BASE_URL - case XVideosCategories.gay: + case XVideosOrientations.gay: return XVIDEOS_BASE_URL_GAY - case XVideosCategories.trans: + case XVideosOrientations.trans: return XVIDEOS_BASE_URL_TRANS default: return XVIDEOS_BASE_URL; @@ -32,7 +32,7 @@ export const getXVideosQueryUrl = async (query?: string) => { } if (category && query) { - return `${XVIDEOS_BASE_URL}/?k=${query}&typef=${XVideosCatQueryMap[category.value as XVideosCategories]}` + return `${XVIDEOS_BASE_URL}/?k=${query}&typef=${XVideosCatQueryMap[category.value as XVideosOrientations]}` } return XVIDEOS_BASE_URL From a58cc663d69e8631e936ebeef1c77284bebca0a1 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sun, 12 May 2024 14:28:59 +0200 Subject: [PATCH 12/19] add platform in video route --- .../[locale]/video/{ => [platform]}/[id]/page.tsx | 13 ++++++++++--- .../Results/Wrapper/Gallery/Thumbnail/index.tsx | 7 +++++-- .../Layout/Results/Wrapper/Gallery/index.tsx | 1 + src/meta/data.ts | 3 +++ src/utils/scrape/xvideos/gallery.ts | 4 +++- 5 files changed, 22 insertions(+), 6 deletions(-) rename src/app/[locale]/video/{ => [platform]}/[id]/page.tsx (63%) diff --git a/src/app/[locale]/video/[id]/page.tsx b/src/app/[locale]/video/[platform]/[id]/page.tsx similarity index 63% rename from src/app/[locale]/video/[id]/page.tsx rename to src/app/[locale]/video/[platform]/[id]/page.tsx index 26d9593..30076b0 100644 --- a/src/app/[locale]/video/[id]/page.tsx +++ b/src/app/[locale]/video/[platform]/[id]/page.tsx @@ -9,12 +9,19 @@ import { decodeVideoUrlPath } from '@/utils/string'; import { fetchVideoData } from '@/utils/scrape/xvideos/video'; import { useLocale } from 'next-intl'; +import { Platforms } from '@/meta/settings'; -export default async function VideoPage({ params }: { params: { id: string } }) { +export default async function VideoPage({ params }: { params: { platform: Platforms, id: string } }) { + + const { platform, id } = params const locale = useLocale() - const decodedId = decodeVideoUrlPath(params.id) + if (!platform || !Object.keys(Platforms).includes(platform)) { + redirect(`/${locale}/404`) + } + + const decodedId = decodeVideoUrlPath(id) const [data, related] = await fetchVideoData(decodedId) @@ -23,6 +30,6 @@ export default async function VideoPage({ params }: { params: { id: string } }) } return - } \ No newline at end of file diff --git a/src/components/Layout/Results/Wrapper/Gallery/Thumbnail/index.tsx b/src/components/Layout/Results/Wrapper/Gallery/Thumbnail/index.tsx index 0dfa939..acc71c0 100644 --- a/src/components/Layout/Results/Wrapper/Gallery/Thumbnail/index.tsx +++ b/src/components/Layout/Results/Wrapper/Gallery/Thumbnail/index.tsx @@ -9,25 +9,28 @@ import classNames from 'classnames'; import Link from 'next/link' import style from './Thumbnail.module.scss' + import { encodeVideoUrlPath } from '@/utils/string'; +import { Platforms } from '@/meta/settings'; interface Props { locale: string videoUrl: string imgUrl: string + platform: Platforms text: string show: boolean } const Thumbnail: React.FC = (props) => { - const { locale, videoUrl, imgUrl, text, show } = props + const { locale, platform, videoUrl, imgUrl, text, show } = props const encodedUri = encodeVideoUrlPath(videoUrl) return (
- +
} />
{text}
diff --git a/src/components/Layout/Results/Wrapper/Gallery/index.tsx b/src/components/Layout/Results/Wrapper/Gallery/index.tsx index 7953758..63d8b77 100644 --- a/src/components/Layout/Results/Wrapper/Gallery/index.tsx +++ b/src/components/Layout/Results/Wrapper/Gallery/index.tsx @@ -27,6 +27,7 @@ const Gallery: React.FC = (props) => { key={key} imgUrl={elem.imgUrl} videoUrl={elem.videoUrl} + platform={elem.platform} text={elem.text} locale={locale} /> })} diff --git a/src/meta/data.ts b/src/meta/data.ts index f8bc93e..1c74f3c 100644 --- a/src/meta/data.ts +++ b/src/meta/data.ts @@ -1,7 +1,10 @@ +import { Platforms } from "./settings" + export interface GalleryData { videoUrl: string imgUrl: string text: string + platform: Platforms } export interface VideoData { diff --git a/src/utils/scrape/xvideos/gallery.ts b/src/utils/scrape/xvideos/gallery.ts index 6efbe55..f008791 100644 --- a/src/utils/scrape/xvideos/gallery.ts +++ b/src/utils/scrape/xvideos/gallery.ts @@ -4,6 +4,7 @@ import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; import { getHeaders } from '../headers'; import { getXVideosQueryUrl } from './url'; +import { Platforms } from '@/meta/settings'; interface FetchParams { baseUrl?: string @@ -37,7 +38,8 @@ export const fetchGalleryData = async (params?: FetchParams): Promise Date: Sun, 12 May 2024 15:39:58 +0200 Subject: [PATCH 13/19] add VideoAgent class --- src/app/[locale]/page.tsx | 9 +++-- src/app/[locale]/search/[query]/page.tsx | 7 ++-- .../[locale]/video/[platform]/[id]/page.tsx | 7 ++-- src/meta/data.ts | 5 +++ src/meta/settings.ts | 1 + src/utils/agent.ts | 33 +++++++++++++++++++ src/utils/cookies/read.ts | 10 ++++-- src/utils/cookies/write.ts | 5 +-- src/utils/scrape/xvideos/gallery.ts | 9 ++--- src/utils/scrape/xvideos/video.ts | 11 ++----- 10 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 src/utils/agent.ts diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx index 53adf1e..21cfbfc 100644 --- a/src/app/[locale]/page.tsx +++ b/src/app/[locale]/page.tsx @@ -1,13 +1,16 @@ import Layout from "@/components/Layout"; import Home from "@/components/Pages/Home"; +import { VideoAgent } from "@/utils/agent"; -import { fetchGalleryData } from '@/utils/scrape/xvideos/gallery'; +import { getPlatformCookie } from "@/utils/cookies/read"; export default async function HomePage() { - - const data = await fetchGalleryData() + const platform = await getPlatformCookie() + + const data = await new VideoAgent(platform).getGallery() + return ( diff --git a/src/app/[locale]/search/[query]/page.tsx b/src/app/[locale]/search/[query]/page.tsx index b2ee52e..b0dd7da 100644 --- a/src/app/[locale]/search/[query]/page.tsx +++ b/src/app/[locale]/search/[query]/page.tsx @@ -2,11 +2,14 @@ import Layout from "@/components/Layout"; import Search from "@/components/Pages/Search"; -import { fetchGalleryData } from "@/utils/scrape/xvideos/gallery"; +import { VideoAgent } from "@/utils/agent"; +import { getPlatformCookie } from "@/utils/cookies/read"; export default async function SearchPage({ params }: { params: { query: string } }) { - const data = await fetchGalleryData({ query: params.query }) + const platform = await getPlatformCookie() + + const data = await new VideoAgent(platform).getGallery({ query: params.query }) return diff --git a/src/app/[locale]/video/[platform]/[id]/page.tsx b/src/app/[locale]/video/[platform]/[id]/page.tsx index 30076b0..38c0abe 100644 --- a/src/app/[locale]/video/[platform]/[id]/page.tsx +++ b/src/app/[locale]/video/[platform]/[id]/page.tsx @@ -6,10 +6,9 @@ import Video from "@/components/Pages/Video"; import { decodeVideoUrlPath } from '@/utils/string'; -import { fetchVideoData } from '@/utils/scrape/xvideos/video'; - import { useLocale } from 'next-intl'; import { Platforms } from '@/meta/settings'; +import { VideoAgent } from '@/utils/agent'; export default async function VideoPage({ params }: { params: { platform: Platforms, id: string } }) { @@ -23,7 +22,9 @@ export default async function VideoPage({ params }: { params: { platform: Platfo const decodedId = decodeVideoUrlPath(id) - const [data, related] = await fetchVideoData(decodedId) + const [data, related] = await new VideoAgent(platform).getVideo(decodedId) + + //const [data, related] = await fetchVideoData(decodedId) if (!data.lowResUrl) { redirect(`/${locale}/404`) diff --git a/src/meta/data.ts b/src/meta/data.ts index 1c74f3c..054d714 100644 --- a/src/meta/data.ts +++ b/src/meta/data.ts @@ -1,5 +1,10 @@ import { Platforms } from "./settings" +export interface FetchParams { + baseUrl?: string + query?: string +} + export interface GalleryData { videoUrl: string imgUrl: string diff --git a/src/meta/settings.ts b/src/meta/settings.ts index 72e408b..1b8811b 100644 --- a/src/meta/settings.ts +++ b/src/meta/settings.ts @@ -27,6 +27,7 @@ export enum Themes { } export const DEFAULT_THEME = Themes.light +export const DEFAULT_PLATFORM = Platforms.xvideos export interface LangOption { label: string; diff --git a/src/utils/agent.ts b/src/utils/agent.ts new file mode 100644 index 0000000..7ef2535 --- /dev/null +++ b/src/utils/agent.ts @@ -0,0 +1,33 @@ +import { FetchParams, GalleryData, VideoData } from "@/meta/data"; + +import { Platforms } from "@/meta/settings"; + +import { fetchXVideosGalleryData } from "./scrape/xvideos/gallery"; +import { fetchXvideosVideoData } from "./scrape/xvideos/video"; + +export class VideoAgent { + platform: Platforms; + + constructor(platform: Platforms) { + this.platform = platform + } + + public getGallery = async (params?: FetchParams): Promise => { + switch (this.platform) { + case Platforms.xvideos: + return await fetchXVideosGalleryData(params) + default: + return [] + } + } + + public getVideo = async (id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { + switch (this.platform) { + case Platforms.xvideos: + return await fetchXvideosVideoData(id, params) + default: + return [{ lowResUrl: '' }, []] + } + } + +} \ No newline at end of file diff --git a/src/utils/cookies/read.ts b/src/utils/cookies/read.ts index e034268..0d69ef3 100644 --- a/src/utils/cookies/read.ts +++ b/src/utils/cookies/read.ts @@ -1,11 +1,17 @@ 'use server' +import { Cookies as AppCookies, DEFAULT_PLATFORM, Platforms } from '@/meta/settings'; import { cookies } from 'next/headers' -export async function getCookie(name: string) { +export async function getCookie(name: AppCookies) { return cookies().get(name); } -export async function hasCookie(name: string):Promise { +export async function hasCookie(name: AppCookies):Promise { return cookies().has(name) } + +export async function getPlatformCookie(): Promise { + const platformCookie = await getCookie(AppCookies.platform) + return platformCookie && platformCookie.value ? platformCookie.value as Platforms : DEFAULT_PLATFORM +} \ No newline at end of file diff --git a/src/utils/cookies/write.ts b/src/utils/cookies/write.ts index 8f8a5a7..b93d1b2 100644 --- a/src/utils/cookies/write.ts +++ b/src/utils/cookies/write.ts @@ -1,12 +1,13 @@ 'use server' +import { Cookies as AppCookies } from '@/meta/settings'; import { cookies } from 'next/headers' -export async function deleteCookie(name: string) { +export async function deleteCookie(name: AppCookies) { cookies().delete(name) } -export async function setCookie(name: string, value: string) { +export async function setCookie(name: AppCookies, value: string) { cookies().set(name, value, { sameSite: 'lax', secure: false diff --git a/src/utils/scrape/xvideos/gallery.ts b/src/utils/scrape/xvideos/gallery.ts index f008791..8bd0822 100644 --- a/src/utils/scrape/xvideos/gallery.ts +++ b/src/utils/scrape/xvideos/gallery.ts @@ -1,4 +1,4 @@ -import { GalleryData } from '@/meta/data'; +import { FetchParams, GalleryData } from '@/meta/data'; import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; @@ -6,12 +6,7 @@ import { getHeaders } from '../headers'; import { getXVideosQueryUrl } from './url'; import { Platforms } from '@/meta/settings'; -interface FetchParams { - baseUrl?: string - query?: string -} - -export const fetchGalleryData = async (params?: FetchParams): Promise => { +export const fetchXVideosGalleryData = async (params?: FetchParams): Promise => { let data: GalleryData[] = []; diff --git a/src/utils/scrape/xvideos/video.ts b/src/utils/scrape/xvideos/video.ts index 5c4d04b..5e8cedd 100644 --- a/src/utils/scrape/xvideos/video.ts +++ b/src/utils/scrape/xvideos/video.ts @@ -1,5 +1,5 @@ import { XVIDEOS_BASE_URL } from '@/constants/urls'; -import { GalleryData, VideoData } from '@/meta/data'; +import { FetchParams, GalleryData, VideoData } from '@/meta/data'; import axios, { AxiosError } from 'axios'; @@ -7,12 +7,7 @@ import * as cheerio from "cheerio"; import { findRelatedVideos, findVideoUrlInsideTagStringByFunctionNameAndExtension } from '../../string'; import { getHeaders } from '../headers'; -interface FetchParams { - baseUrl?: string - query?: string -} - -export const fetchVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { +export const fetchXvideosVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { let data: VideoData = { lowResUrl: '' @@ -24,7 +19,7 @@ export const fetchVideoData = async (videoId: string, params?: FetchParams): Pro const queryUrl = `${(params && params.baseUrl) ?? XVIDEOS_BASE_URL}${videoId}` - await axios.get(queryUrl, reqHeaders) + await axios.get(queryUrl, reqHeaders) .then(response => { From 963984744226649c96ac022646d973e20490fced Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sun, 12 May 2024 16:12:26 +0200 Subject: [PATCH 14/19] add full support for XNXX --- src/constants/urls.ts | 10 ++++++- src/utils/agent.ts | 7 +++++ src/utils/scrape/xnxx/gallery.ts | 50 ++++++++++++++++++++++++++++++++ src/utils/scrape/xnxx/url.ts | 40 +++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/utils/scrape/xnxx/gallery.ts create mode 100644 src/utils/scrape/xnxx/url.ts diff --git a/src/constants/urls.ts b/src/constants/urls.ts index 358e6b4..fd3f981 100644 --- a/src/constants/urls.ts +++ b/src/constants/urls.ts @@ -1,3 +1,11 @@ export const XVIDEOS_BASE_URL: string = "https://www.xvideos.com" export const XVIDEOS_BASE_URL_GAY: string = "https://www.xvideos.com/gay" -export const XVIDEOS_BASE_URL_TRANS: string = "https://www.xvideos.com/shemale" \ No newline at end of file +export const XVIDEOS_BASE_URL_TRANS: string = "https://www.xvideos.com/shemale" + +export const XNXX_BASE_URL: string = 'https://www.xnxx.com' + +export const XNXX_BASE_URL_ETERO: string = 'https://www.xnxx.com/best' +export const XNXX_BASE_URL_GAY: string = 'https://www.xnxx.com/best-of-gay' +export const XNXX_BASE_URL_TRANS: string = 'https://www.xnxx.com/best-of-shemale' + +export const XNXX_BASE_SEARCH: string = 'https://www.xnxx.com/search' \ No newline at end of file diff --git a/src/utils/agent.ts b/src/utils/agent.ts index 7ef2535..eb42c27 100644 --- a/src/utils/agent.ts +++ b/src/utils/agent.ts @@ -5,6 +5,9 @@ import { Platforms } from "@/meta/settings"; import { fetchXVideosGalleryData } from "./scrape/xvideos/gallery"; import { fetchXvideosVideoData } from "./scrape/xvideos/video"; +import { fetchXNXXGalleryData } from "./scrape/xnxx/gallery"; +import { XNXX_BASE_URL } from "@/constants/urls"; + export class VideoAgent { platform: Platforms; @@ -16,6 +19,8 @@ export class VideoAgent { switch (this.platform) { case Platforms.xvideos: return await fetchXVideosGalleryData(params) + case Platforms.xnxx: + return await fetchXNXXGalleryData(params) default: return [] } @@ -25,6 +30,8 @@ export class VideoAgent { switch (this.platform) { case Platforms.xvideos: return await fetchXvideosVideoData(id, params) + case Platforms.xnxx: + return await fetchXvideosVideoData(id, { ...params, baseUrl: XNXX_BASE_URL }) default: return [{ lowResUrl: '' }, []] } diff --git a/src/utils/scrape/xnxx/gallery.ts b/src/utils/scrape/xnxx/gallery.ts new file mode 100644 index 0000000..89d2697 --- /dev/null +++ b/src/utils/scrape/xnxx/gallery.ts @@ -0,0 +1,50 @@ +import { FetchParams, GalleryData } from '@/meta/data'; +import axios, { AxiosError } from 'axios'; + +import * as cheerio from "cheerio"; + +import { getHeaders } from '../headers'; +import { getXNXXQueryUrl } from './url'; + +import { Platforms } from '@/meta/settings'; +import { XNXX_BASE_URL } from '@/constants/urls'; + +export const fetchXNXXGalleryData = async (params?: FetchParams): Promise => { + + let data: GalleryData[] = []; + + const reqHeaders = getHeaders(XNXX_BASE_URL) + + const queryUrl = await getXNXXQueryUrl(params?.query) + + await axios.get(queryUrl, reqHeaders) + + .then(response => { + + const html = response.data; + + const $ = cheerio.load(html); + + const thumbs = $(".thumb-block"); + + thumbs.map((key, thumb) => { + + const videoUrl = $(thumb).find(".thumb a").attr("href") + const imgUrl = $(thumb).find(".thumb img").attr("data-src") + const text = $(thumb).find(".thumb-under a").attr("title") + + videoUrl && imgUrl && text && data.push({ + videoUrl, + imgUrl, + text, + platform: Platforms.xnxx + }) + }) + + }).catch((error: AxiosError) => { + // handle errors + }); + + + return data +} \ No newline at end of file diff --git a/src/utils/scrape/xnxx/url.ts b/src/utils/scrape/xnxx/url.ts new file mode 100644 index 0000000..cd2e397 --- /dev/null +++ b/src/utils/scrape/xnxx/url.ts @@ -0,0 +1,40 @@ +import { XNXX_BASE_SEARCH, XNXX_BASE_URL_ETERO, XNXX_BASE_URL_GAY, XNXX_BASE_URL_TRANS } from '@/constants/urls'; +import { Cookies, XVideosCatQueryMap, XVideosOrientations } from '@/meta/settings'; +import { getCookie } from '@/utils/cookies/read'; + +export const getXNXXQueryUrl = async (query?: string) => { + + const category = await getCookie(Cookies.orientation) + + if (!category && !query) { + return XNXX_BASE_URL_ETERO + } + + if (!category && query) { + return `${XNXX_BASE_SEARCH}/${query}` + } + + if (category && !Object.values(XVideosOrientations).includes(category.value as XVideosOrientations)) { + return XNXX_BASE_URL_ETERO + } + + if (category && !query) { + switch (category.value) { + case XVideosOrientations.etero: + return XNXX_BASE_URL_ETERO + case XVideosOrientations.gay: + return XNXX_BASE_URL_GAY + case XVideosOrientations.trans: + return XNXX_BASE_URL_TRANS + default: + return XNXX_BASE_URL_ETERO; + } + } + + if (category && query) { + return `${XNXX_BASE_SEARCH}/${XVideosCatQueryMap[category.value as XVideosOrientations]}/${query}` + } + + return XNXX_BASE_URL_ETERO + +} \ No newline at end of file From 56528d1fbc15afaedb4c7c99c3b4b831e4a95ff5 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sun, 12 May 2024 16:17:47 +0200 Subject: [PATCH 15/19] close settings modal on change --- .../Layout/Header/Menu/Settings/Modal/Orientation/index.tsx | 5 ++++- .../Layout/Header/Menu/Settings/Modal/Platform/index.tsx | 5 ++++- src/components/Layout/Header/Menu/Settings/Modal/index.tsx | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx index 97b0d7b..20d03db 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/Orientation/index.tsx @@ -10,6 +10,7 @@ import { setCookie } from '@/utils/cookies/write'; import { useCookies } from 'react-cookie'; interface Props { + handleClose(): void labels: { title: string, } @@ -17,7 +18,7 @@ interface Props { const Orientation: React.FC = (props) => { - const { labels } = props + const { labels, handleClose } = props const [cookies] = useCookies([Cookies.orientation]); @@ -25,6 +26,8 @@ const Orientation: React.FC = (props) => { const value = event.target.value; await setCookie(Cookies.orientation, value) + + handleClose() } return ( diff --git a/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx index 4a19f4f..dae4b7e 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/Platform/index.tsx @@ -10,6 +10,7 @@ import { setCookie } from '@/utils/cookies/write'; import { useCookies } from 'react-cookie'; interface Props { + handleClose(): void labels: { title: string, } @@ -17,7 +18,7 @@ interface Props { const Platform: React.FC = (props) => { - const { labels } = props + const { labels, handleClose } = props const [cookies] = useCookies([Cookies.platform]); @@ -25,6 +26,8 @@ const Platform: React.FC = (props) => { const value = event.target.value; await setCookie(Cookies.platform, value) + + handleClose() } return ( diff --git a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx index dc86a61..0a2c17a 100644 --- a/src/components/Layout/Header/Menu/Settings/Modal/index.tsx +++ b/src/components/Layout/Header/Menu/Settings/Modal/index.tsx @@ -29,8 +29,8 @@ const LangSwitcher: React.FC = (props) => {
{ handleClose() }}>
- - + +
From df1a5f244b4f5dc760b4ce56c5fd415ae7c67137 Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sun, 12 May 2024 16:20:54 +0200 Subject: [PATCH 16/19] change header description label --- locale/en.json | 2 +- locale/it.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/en.json b/locale/en.json index f4c7cf9..21888ac 100644 --- a/locale/en.json +++ b/locale/en.json @@ -1,7 +1,7 @@ { "Header": { "title": "Proxy Raye", - "description": "A proxy for XVideos", + "description": "A proxy for porn websites", "disclaimer_0": "Genital sexuality is only one of the many possible conceptions of sexuality", "disclaimer_1": "Platform capitalism makes money on desire flow. Proxies avoid this to happen.", "disclaimer_2": "Platform capitalism is narcissism-driven", diff --git a/locale/it.json b/locale/it.json index 110d264..4283216 100644 --- a/locale/it.json +++ b/locale/it.json @@ -1,7 +1,7 @@ { "Header": { "title": "Proxy Raye", - "description": "Un proxy per XVideos", + "description": "Un proxy per i siti porno", "disclaimer_0": "Quella genitale è solo una delle possibili concezioni della sessualità.", "disclaimer_1": "Le piattaforme monetizzano i flussi di desiderio. I proxy impediscono che questo accada.", "disclaimer_2": "Le piattaforme si alimentano del narcisisismo degli utenti.", From 024b5eb20647717286c86f1b768796ca5827530f Mon Sep 17 00:00:00 2001 From: La macchina desiderante Date: Sun, 12 May 2024 19:25:04 +0200 Subject: [PATCH 17/19] refactor VideoAgent (OC-principle compliant) --- src/meta/data.ts | 5 ++ src/utils/agent.ts | 29 +++------- src/utils/scrape/{ => common}/headers.ts | 2 +- src/utils/scrape/common/wgcz.ts | 44 +++++++++++++++ src/utils/scrape/xnxx/agent.ts | 15 +++++ src/utils/scrape/xnxx/gallery.ts | 2 +- src/utils/scrape/xnxx/video.ts | 71 ++++++++++++++++++++++++ src/utils/scrape/xvideos/agent.ts | 15 +++++ src/utils/scrape/xvideos/gallery.ts | 2 +- src/utils/scrape/xvideos/video.ts | 15 +++-- src/utils/string.ts | 43 -------------- 11 files changed, 170 insertions(+), 73 deletions(-) rename src/utils/scrape/{ => common}/headers.ts (97%) create mode 100644 src/utils/scrape/common/wgcz.ts create mode 100644 src/utils/scrape/xnxx/agent.ts create mode 100644 src/utils/scrape/xnxx/video.ts create mode 100644 src/utils/scrape/xvideos/agent.ts diff --git a/src/meta/data.ts b/src/meta/data.ts index 054d714..80ca26e 100644 --- a/src/meta/data.ts +++ b/src/meta/data.ts @@ -16,4 +16,9 @@ export interface VideoData { lowResUrl: string, hiResUrl?: string, hlsUrl?: string +} + +export interface VideoAgent { + getGallery(params?: FetchParams): Promise + getVideo(id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> } \ No newline at end of file diff --git a/src/utils/agent.ts b/src/utils/agent.ts index eb42c27..32f766a 100644 --- a/src/utils/agent.ts +++ b/src/utils/agent.ts @@ -2,11 +2,13 @@ import { FetchParams, GalleryData, VideoData } from "@/meta/data"; import { Platforms } from "@/meta/settings"; -import { fetchXVideosGalleryData } from "./scrape/xvideos/gallery"; -import { fetchXvideosVideoData } from "./scrape/xvideos/video"; +import { XVideosAgent } from "./scrape/xvideos/agent"; +import { XNXXAgent } from "./scrape/xnxx/agent"; -import { fetchXNXXGalleryData } from "./scrape/xnxx/gallery"; -import { XNXX_BASE_URL } from "@/constants/urls"; +const AgentMapper = { + [Platforms.xvideos]: XVideosAgent, + [Platforms.xnxx]: XNXXAgent +} export class VideoAgent { platform: Platforms; @@ -16,25 +18,10 @@ export class VideoAgent { } public getGallery = async (params?: FetchParams): Promise => { - switch (this.platform) { - case Platforms.xvideos: - return await fetchXVideosGalleryData(params) - case Platforms.xnxx: - return await fetchXNXXGalleryData(params) - default: - return [] - } + return await new AgentMapper[this.platform]().getGallery(params) } public getVideo = async (id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { - switch (this.platform) { - case Platforms.xvideos: - return await fetchXvideosVideoData(id, params) - case Platforms.xnxx: - return await fetchXvideosVideoData(id, { ...params, baseUrl: XNXX_BASE_URL }) - default: - return [{ lowResUrl: '' }, []] - } + return await new AgentMapper[this.platform]().getVideo(id, params) } - } \ No newline at end of file diff --git a/src/utils/scrape/headers.ts b/src/utils/scrape/common/headers.ts similarity index 97% rename from src/utils/scrape/headers.ts rename to src/utils/scrape/common/headers.ts index c66bc7a..87287be 100644 --- a/src/utils/scrape/headers.ts +++ b/src/utils/scrape/common/headers.ts @@ -1,5 +1,5 @@ import { XVIDEOS_BASE_URL } from "@/constants/urls"; -import { removeHttpS } from "../string"; +import { removeHttpS } from "@/utils/string"; const getRandomUserAgent = (): string => { diff --git a/src/utils/scrape/common/wgcz.ts b/src/utils/scrape/common/wgcz.ts new file mode 100644 index 0000000..79f572b --- /dev/null +++ b/src/utils/scrape/common/wgcz.ts @@ -0,0 +1,44 @@ +import { GalleryData } from "@/meta/data"; +import { Platforms } from "@/meta/settings"; + +export const findVideoUrlInsideTagStringByFunctionNameAndExtension = ( + tagBlock: string, functionName: string, extension: string): string | null => { + const start = tagBlock.indexOf(`html5player.${functionName}('`) + `html5player.${functionName}('`.length; + const end = tagBlock.toString().indexOf("'", start); + + const substr = tagBlock.substring(start, end); + + if (substr.includes(extension)) { + return substr + } + + return null +} + +export const findRelatedVideos = (tagBlock: string, platform: Platforms): GalleryData[] | null => { + if (!(tagBlock.includes('video_related=['))) { + return null + } + + // Trova l'inizio e la fine dell'array di oggetti nell'input + const start = tagBlock.indexOf('[{'); + const end = tagBlock.lastIndexOf('}]') + 2; + + // Estrai la sottostringa contenente l'array di oggetti + const jsonString = tagBlock.substring(start, end); + + // Parsea la stringa JSON in un array di oggetti + const videoRelatedArray = JSON.parse(jsonString); + + // Mappa ogni oggetto nell'array per rinominare le chiavi + //@ts-ignore + const parsedArray = videoRelatedArray.map(obj => ({ + //@ts-ignore + videoUrl: obj.u, + imgUrl: obj.i, + text: obj.tf, + platform + })); + + return parsedArray; +} diff --git a/src/utils/scrape/xnxx/agent.ts b/src/utils/scrape/xnxx/agent.ts new file mode 100644 index 0000000..9006390 --- /dev/null +++ b/src/utils/scrape/xnxx/agent.ts @@ -0,0 +1,15 @@ +import { FetchParams, GalleryData, VideoAgent, VideoData } from "@/meta/data"; +import { fetchXNXXGalleryData, } from "./gallery"; +import { fetchXNXXVideoData } from "./video"; + +export class XNXXAgent implements VideoAgent { + + public getGallery = async (params?: FetchParams): Promise => { + return await fetchXNXXGalleryData(params) + } + + public getVideo = async (id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { + return await fetchXNXXVideoData(id, params) + } + +} \ No newline at end of file diff --git a/src/utils/scrape/xnxx/gallery.ts b/src/utils/scrape/xnxx/gallery.ts index 89d2697..3f7fec1 100644 --- a/src/utils/scrape/xnxx/gallery.ts +++ b/src/utils/scrape/xnxx/gallery.ts @@ -3,7 +3,7 @@ import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; -import { getHeaders } from '../headers'; +import { getHeaders } from '@/utils/scrape/common/headers'; import { getXNXXQueryUrl } from './url'; import { Platforms } from '@/meta/settings'; diff --git a/src/utils/scrape/xnxx/video.ts b/src/utils/scrape/xnxx/video.ts new file mode 100644 index 0000000..1cf066e --- /dev/null +++ b/src/utils/scrape/xnxx/video.ts @@ -0,0 +1,71 @@ +import { XNXX_BASE_URL } from '@/constants/urls'; +import { FetchParams, GalleryData, VideoData } from '@/meta/data'; + +import axios, { AxiosError } from 'axios'; + +import * as cheerio from "cheerio"; + +import { Platforms } from '@/meta/settings'; +import { findRelatedVideos, findVideoUrlInsideTagStringByFunctionNameAndExtension } from '@/utils/scrape/common/wgcz'; +import { getHeaders } from '@/utils/scrape/common/headers'; + +export const fetchXNXXVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { + + let data: VideoData = { + lowResUrl: '' + } + + let related: GalleryData[] = []; + + const host = XNXX_BASE_URL + + const reqHeaders = getHeaders(host) + + const queryUrl = `${host}${videoId}` + + await axios.get(queryUrl, reqHeaders) + + .then(response => { + + const html = response.data; + + const $ = cheerio.load(html); + + const scriptTags = $("script"); + + // populate video data object + scriptTags.map((idx, elem) => { + + const lowResUrl = findVideoUrlInsideTagStringByFunctionNameAndExtension($(elem).toString(), 'setVideoUrlLow', '.mp4') + const hiResUrl = findVideoUrlInsideTagStringByFunctionNameAndExtension($(elem).toString(), 'setVideoUrlHigh', '.mp4') + const hlsUrl = findVideoUrlInsideTagStringByFunctionNameAndExtension($(elem).toString(), 'setVideoHLS', '.m3u8') + + if (lowResUrl) { + data.lowResUrl = lowResUrl; + } + + if (hiResUrl) { + data.hiResUrl = hiResUrl + } + + if (hlsUrl) { + data.hlsUrl = hlsUrl + } + + }) + + // populate related gallery + scriptTags.map((idx, elem) => { + const relatedVideos = findRelatedVideos($(elem).toString(), Platforms.xnxx) + + if (relatedVideos) { + related = relatedVideos + } + }) + + }).catch((error: AxiosError) => { + // handle errors + }); + + return [data, related]; +} \ No newline at end of file diff --git a/src/utils/scrape/xvideos/agent.ts b/src/utils/scrape/xvideos/agent.ts new file mode 100644 index 0000000..c144486 --- /dev/null +++ b/src/utils/scrape/xvideos/agent.ts @@ -0,0 +1,15 @@ +import { FetchParams, GalleryData, VideoAgent, VideoData } from "@/meta/data"; +import { fetchXVideosGalleryData } from "./gallery"; +import { fetchXvideosVideoData } from "./video"; + +export class XVideosAgent implements VideoAgent { + + public getGallery = async (params?: FetchParams): Promise => { + return await fetchXVideosGalleryData(params) + } + + public getVideo = async (id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { + return await fetchXvideosVideoData(id, params) + } + +} \ No newline at end of file diff --git a/src/utils/scrape/xvideos/gallery.ts b/src/utils/scrape/xvideos/gallery.ts index 8bd0822..2a941e0 100644 --- a/src/utils/scrape/xvideos/gallery.ts +++ b/src/utils/scrape/xvideos/gallery.ts @@ -2,7 +2,7 @@ import { FetchParams, GalleryData } from '@/meta/data'; import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; -import { getHeaders } from '../headers'; +import { getHeaders } from '@/utils/scrape/common/headers'; import { getXVideosQueryUrl } from './url'; import { Platforms } from '@/meta/settings'; diff --git a/src/utils/scrape/xvideos/video.ts b/src/utils/scrape/xvideos/video.ts index 5e8cedd..c323be1 100644 --- a/src/utils/scrape/xvideos/video.ts +++ b/src/utils/scrape/xvideos/video.ts @@ -4,8 +4,10 @@ import { FetchParams, GalleryData, VideoData } from '@/meta/data'; import axios, { AxiosError } from 'axios'; import * as cheerio from "cheerio"; -import { findRelatedVideos, findVideoUrlInsideTagStringByFunctionNameAndExtension } from '../../string'; -import { getHeaders } from '../headers'; +import { getHeaders } from '@/utils/scrape/common/headers'; +import { Platforms } from '@/meta/settings'; + +import { findRelatedVideos, findVideoUrlInsideTagStringByFunctionNameAndExtension } from '@/utils/scrape/common/wgcz'; export const fetchXvideosVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => { @@ -15,9 +17,11 @@ export const fetchXvideosVideoData = async (videoId: string, params?: FetchParam let related: GalleryData[] = []; - const reqHeaders = getHeaders() + const host = XVIDEOS_BASE_URL - const queryUrl = `${(params && params.baseUrl) ?? XVIDEOS_BASE_URL}${videoId}` + const reqHeaders = getHeaders(host) + + const queryUrl = `${host}${videoId}` await axios.get(queryUrl, reqHeaders) @@ -25,7 +29,6 @@ export const fetchXvideosVideoData = async (videoId: string, params?: FetchParam const html = response.data; - const $ = cheerio.load(html); const scriptTags = $("script"); @@ -53,7 +56,7 @@ export const fetchXvideosVideoData = async (videoId: string, params?: FetchParam // populate related gallery scriptTags.map((idx, elem) => { - const relatedVideos = findRelatedVideos($(elem).toString()) + const relatedVideos = findRelatedVideos($(elem).toString(), Platforms.xvideos) if (relatedVideos) { related = relatedVideos diff --git a/src/utils/string.ts b/src/utils/string.ts index a1c0225..3c71166 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,46 +1,3 @@ -import { GalleryData } from "@/meta/data"; - -export const findVideoUrlInsideTagStringByFunctionNameAndExtension = ( - tagBlock: string, functionName: string, extension: string): string | null => { - const start = tagBlock.indexOf(`html5player.${functionName}('`) + `html5player.${functionName}('`.length; - const end = tagBlock.toString().indexOf("'", start); - - const substr = tagBlock.substring(start, end); - - if (substr.includes(extension)) { - return substr - } - - return null -} - -export const findRelatedVideos = (tagBlock: string): GalleryData[] | null => { - if (!(tagBlock.includes('video_related=['))) { - return null - } - - // Trova l'inizio e la fine dell'array di oggetti nell'input - const start = tagBlock.indexOf('[{'); - const end = tagBlock.lastIndexOf('}]') + 2; - - // Estrai la sottostringa contenente l'array di oggetti - const jsonString = tagBlock.substring(start, end); - - // Parsea la stringa JSON in un array di oggetti - const videoRelatedArray = JSON.parse(jsonString); - - // Mappa ogni oggetto nell'array per rinominare le chiavi - //@ts-ignore - const parsedArray = videoRelatedArray.map(obj => ({ - //@ts-ignore - videoUrl: obj.u, - imgUrl: obj.i, - text: obj.tf - })); - - return parsedArray; -} - export const removeHttpS = (url: string): string => { if (url.startsWith("http://")) { return url.slice(7); From 678f01bce6a1f0cccf180cdf7ba3971b90651931 Mon Sep 17 00:00:00 2001 From: lamacchinadesiderante Date: Mon, 13 May 2024 19:35:55 +0200 Subject: [PATCH 18/19] update favicon --- public/android-chrome-192x192.png | Bin 9078 -> 20533 bytes public/android-chrome-512x512.png | Bin 25871 -> 63970 bytes public/apple-touch-icon.png | Bin 8189 -> 18467 bytes public/favicon-16x16.png | Bin 578 -> 729 bytes public/favicon-32x32.png | Bin 1207 -> 1875 bytes public/favicon.ico | Bin 15406 -> 15406 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png index 93ec75e0641953b050c7cffd6bf8acc5fe725b4a..af9c6330afd567b951d3b342435ffc4326efc9c4 100644 GIT binary patch literal 20533 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 IM6N<$f&oeApa1{> literal 9078 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

F2qY|lZ(MjU| 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 literal 25871 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 I(|3>kA2PR@f&c&j diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index 44380a05ef68baf1cdb9150ecc7ff8d8bc19d720..8c6e2c5e39b51f971963ecf8a91a95797cd45dd4 100644 GIT binary patch literal 18467 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 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index e58304f649c748d011e7400c2ecb90e3e29c6ee7..57d230dde24d184ed4103a4bc5d21a6c26b3f0be 100644 GIT binary patch delta 705 zcmV;y0zUo11la|UB!8euL_t(IPnA>8OQKN}J!&dOMp{H=KZexAT{K}kD}*5`+O&z* z*^rxNIg9>)Sxy^=v}KD{1(p#LgW@j8bQg{lVntDeVQ6ah*}a!B8fG;gTt42r_nmjn zx%a8??>9(WixeJ;4}a1b`v0N`P$b_UQPmfIzuy!NhrgYioPR9Pp8E0e5qEcYf5EHO zYDKHnu9wT@FO+!VWF5e;yu2I>27|-JVo?tD_4T2lp#hhdmlzotK}$;us@1CG>~{N+ z!{PYk^Z9ZDpx5iyJRZ;D-rk-R&>D0b=I7_-P&S*z>FFshE-obB*w~2i@$mpL{>%V_ zR2-j}m{2po(0|a7P@kQhm12XzfZg3)TwhS18f%G>h*e&%jHBPOS-zc5|B!zf}Ncmw6(S2<>dvjSd0Ngf}e_)SR?D^VwcM$ z)Y)}z-+%4xElQ=5P-m&!sZc1y0Ak`G0mKPF%{!drzOzwNQ&Vy?Yv119hRI|?B9Rbp z_V@S6TSeN)g=>*WWU)SlY@*F(69znu8yg!!yFQ5waBy%Ccz%ACLE_e!sLwys>GUwK z`Ow3|0}c-l(cRrGhuJ{>cnZmL_t(IPoClHaE~{UD_7zUd?Ub)7}KJ z7J=`++dt5g5B4tvy$c2-2qH!3#exX;;M%>?sMNqQ$Ci3alFhBWzs|jKb9Wj&_=Cf_ ze9t+bbI$K~2^Tzc!Frqv5UQF+N5?dTP}tlc`plNW(9k>){eNz4>Hvt96%TyAXPkWR zACu)6c%KxdWXGKVRei<9cg^6TuH)zKE`A*y!7oYZ?(MZ}3TQSH6pzsnFbrJscrd6a2u7neXqII8u@j(aFIh+%$H&NKGWevb_*SV{UA;aZ zZbc#pr&0*A=YR8+0XN$LMHUA1ogKVqz()qO9w{8go$+zph{sJ?@ETWmjf2(|%Dh5A zFO~3iVF6zX1qa}ID1_w11VYK=iQd_Hm7>x8Q-G$uVL7#5EJ9sghPJkbMx$Zny4-Ha zBO^#oO~KpW&;7+7zeHdA3J+O$Vv2j)+xW1wglf4ALw^Wd^ZOws5|GBmPP!94rC4mn z3E0@^M!lY6@wOSLZf;^Ln?;jf!W#%cnVjT0YhWE+T``J8$_{{aGny7+_nOVRVZq&t z`8>$w!k{dh!gsbb4G+JwFX+s#ELK-9qo?N)Croq8pp_`Z5B`46ey;T|JTrk!wY|vY r`d}Dtj3SO!czn?w|1aRYf_Ci>y>-A5`;)WO00000NkvXXu0mjf4D1hl diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png index 07643ea98e78d0cecd7ead8e390e9427a8603dcb..f2220df94815c88425f53be711f06d67bbfeb048 100644 GIT binary patch delta 1861 zcmV-L2fFyT3DXXcBYy`PNklZ}Ma^t@!-ItDqWn4AqQaurJU^L(b?JHOsu>7O0nna}XP z@Ar7V&*%9(pKo@k_;8V_ArgTSz7n1it|iO!Cnq>MI^x~CcQ<8Sr~t^a22ln; zLPA3D+qZ91H-B#2Xn*_m?J}Ub>9}#@uyf~55S)3`s8Ivmx^;uEuP>T5ZHmIeLVW)G z8P%#)!?S14avL^m_+w;bWSV)6H2|+gix&Nzl9J+n?HcuDd$_u~V)Eq4ShHpg^7Hf2 zq)8L>@82KIn>Pp7UA=l0_wV0V032k&+uIxC$B!?TwSU1ACrRecifs zJ~L;|v@HG_h<5GTp>N;5dc&fkBAh#S4w5!}`SRtfz+1O&jR6A&+>DEh^EWhM1`zAw z;u5`J!2(1_N0-^8a^=dXRjU>RB;LP&kHLcnqf3`AIB?(q8Z>C2zkU4pQPXn%{CPZj z^vEWVuz#>HY~Q{;R(|}26AS<>wG7FxCvDq;BW;dt@l1@7Iu2j+S7 z=+Suf>J{qLsRIWG2khCi2bV5g(lyjb_wL&fw|Or*L<7$Nc&8k$;z$r`2%z@?{JgHcTr*M23qOFKQ}y zs0a>SyLMG@=Fz85ADlXMieDv4L=XTSE=NL5X3m^B*uQ^2?%uttN^aJynJ#d4cEeVXFe*OC4`0?Wk));|-fjD`RW~pZ7K>%SAe;O0G zh=24YCntlq-?wicK7IOxsHiABcbS`L15Qy6WP?hYw)7PM^BgV&Y0@x%GX?(*R&zm<7bLY;*lqplNe*Jp%?%f-$TD3yQjvZCy z85tSy^72AzYAOZ|8l<@%JC;rjT)A=uw|{QkQk`twx>Z4wAr9{C@9&QjCr%j0B@h7B z<7dv(q)C%BpUhW$d^}=eVsPiq9Rvjh=`_+$0n(^KLqqlU)B^=bPaq4OI(5?eU%GUu zrh{w{)V6Kgw2Df`KLn5~;bsQFO;~2)h^hsqf_7ZLetn2dBRo7@YrkjDo@y|>HGjp% za^x*p$`KI}O8xWa&($A-gM+bQ!v<^j{FeY&5)Nhn{Qs<3vy^I@jhmaBQqO)sAk2H) zwr%y69Q1flYjWR$1 zRjpc8Ss zHnHGJ4HcoK3@H>&<|Z5z6+MAf!S>68crfYZXS(2_Lx&I&5`wI(EVOLdQoSHEGgGUA z)xcCze6;u_OO_~urlDnMF(LvW^~NCmEG^PIVZsEZzE`haT6UzBxh5NQKQczOGbJ>l z<;$0Y4U8bA`KV7&Bgc*%Gk*h6BeGbr$tHCY^T-29DaFM$%>$VRK0N3JY*0IP>`->- zi~#`w+D{0Yjfb8=F_N93Lx(D`l3}r8e%5AWY7`cfBS(%@pXcpKFNN2+b7y#Xc&NG1 z4f!@;10tZsix;a1*%#<~Ml<4NR<2yB{iI}Anh`&1I~K%_(ke@-gnx&Q7%@U`clPXA zWq^avE((@upa6OJ-o1PI{?i7=)bXugZpQ>bijZ2~vGWPb|Srl(Dt#uu{9CmDS{NYtDrUCf>~Y<^Ud)(#yyDD@QH(W6Jz zSSZdJGiE?u(WTn1H5#sy#+565B0zq#JkM=D%SCWW_3G7gXV>BliJr>miu00000NkvXXu0mjfQVE|d delta 1188 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

*=p0?K5DCH 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 Nf4P3qz|X6J{{^qZySxAZ literal 15406 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 Date: Mon, 13 May 2024 19:43:43 +0200 Subject: [PATCH 19/19] update readme --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e7473c5..2303af9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Proxy Raye -Proxy Raye is an alternative front-end for **XVideos** and (soon) other adult sites. Watch videos on a clean UI without annoying ads popping up from everywhere! +Proxy Raye is an alternative front-end for adult websites. Watch videos on a clean UI without tracking and without annoying ads popping up from everywhere! + +## Currently supported platforms: + +- XVideos +- XNXX +- (...more coming soon!) ## Working demos @@ -29,11 +35,6 @@ npm run start ``` And head browser to `localhost:3000`. -### WARNING: -Proxy Raye tries to avoid ip blacklisting by setting random human-request-like headers at every call. But in the long run (after several hours of continuous requests) XVideos might **temporarily blacklist** your IP address. When this happen, it will stop returning HD videos from pages. Only low quality (SD) videos will be shown. - -Using a VPN can avoid such issue. - # Modify If you want to edit the project you can start development mode by opening root folder via console and running: