From 6841fb252138a14a42971abe20daba04fb5342ec Mon Sep 17 00:00:00 2001 From: Daniel Shleifman Date: Wed, 16 Jun 2021 16:57:05 +0300 Subject: [PATCH] added function to trim redundant {,[,( symbols if there is no closing brackets --- web/README.md | 3 +- web/src/components/App/Sidebar.jsx | 30 ++++++++---------- .../Table/[kinozal.tv]id1846470.torrent | Bin 15607 -> 0 bytes .../DialogTorrentDetailsContent/index.jsx | 20 ++++++++---- web/src/components/TorrentCard/index.jsx | 4 +-- web/src/locales/en/translation.json | 5 ++- web/src/locales/ru/translation.json | 5 ++- web/src/utils/Hosts.js | 1 - web/src/utils/Utils.js | 30 ++++++++++++++++++ 9 files changed, 65 insertions(+), 33 deletions(-) delete mode 100644 web/src/components/DialogTorrentDetailsContent/Table/[kinozal.tv]id1846470.torrent diff --git a/web/README.md b/web/README.md index 7d97cac..e037846 100644 --- a/web/README.md +++ b/web/README.md @@ -8,7 +8,8 @@ > `http://192.168.78.4:8090` - correct > > `http://192.168.78.4:8090/` - wrong -3. `yarn start` +3. in `.env` file add TMDB api key +4. `yarn start` ### Eslint > Prettier will fix the code every time the code is saved diff --git a/web/src/components/App/Sidebar.jsx b/web/src/components/App/Sidebar.jsx index 5434289..3aaa887 100644 --- a/web/src/components/App/Sidebar.jsx +++ b/web/src/components/App/Sidebar.jsx @@ -1,9 +1,8 @@ -import { playlistAllHost } from 'utils/Hosts' import Divider from '@material-ui/core/Divider' import ListItem from '@material-ui/core/ListItem' import ListItemIcon from '@material-ui/core/ListItemIcon' import ListItemText from '@material-ui/core/ListItemText' -import { CreditCard as CreditCardIcon, List as ListIcon, Language as LanguageIcon } from '@material-ui/icons' +import { CreditCard as CreditCardIcon, Language as LanguageIcon } from '@material-ui/icons' import List from '@material-ui/core/List' import { useTranslation } from 'react-i18next' import useChangeLanguage from 'utils/useChangeLanguage' @@ -24,12 +23,6 @@ export default function Sidebar({ isDrawerOpen, setIsDonationDialogOpen }) { - - - - - - @@ -37,20 +30,25 @@ export default function Sidebar({ isDrawerOpen, setIsDonationDialogOpen }) { - (currentLang === 'en' ? changeLang('ru') : changeLang('en'))}> - - - - - - - + (currentLang === 'en' ? changeLang('ru') : changeLang('en'))}> + + + + + + + + + + + + setIsDonationDialogOpen(true)}> diff --git a/web/src/components/DialogTorrentDetailsContent/Table/[kinozal.tv]id1846470.torrent b/web/src/components/DialogTorrentDetailsContent/Table/[kinozal.tv]id1846470.torrent deleted file mode 100644 index 099c99871241d3c025f0032f0404718aea666f7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15607 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 { - const newNameStrings = [] + const newNameStringArr = [] const torrentParsedName = name && ptt.parse(name) if (title !== name) { - newNameStrings.push(title) - } else if (torrentParsedName?.title) newNameStrings.push(torrentParsedName?.title) + newNameStringArr.push(removeRedundantCharacters(title)) + } else if (torrentParsedName?.title) newNameStringArr.push(torrentParsedName?.title) // These 2 checks are needed to get year and resolution from torrent name if title does not have this info if (torrentParsedName?.year && !title.includes(torrentParsedName?.year)) - newNameStrings.push(torrentParsedName?.year) + newNameStringArr.push(torrentParsedName?.year) if (torrentParsedName?.resolution && !title.includes(torrentParsedName?.resolution)) - newNameStrings.push(torrentParsedName?.resolution) + newNameStringArr.push(torrentParsedName?.resolution) - return newNameStrings.join('. ') + const newNameString = newNameStringArr.join('. ') + + // removeRedundantCharacters is returning ".." if it was "..." + const lastDotShouldBeAdded = + newNameString[newNameString.length - 1] === '.' && newNameString[newNameString.length - 2] === '.' + + return lastDotShouldBeAdded ? `${newNameString}.` : newNameString } return ( diff --git a/web/src/components/TorrentCard/index.jsx b/web/src/components/TorrentCard/index.jsx index 40cc498..1f24d73 100644 --- a/web/src/components/TorrentCard/index.jsx +++ b/web/src/components/TorrentCard/index.jsx @@ -6,7 +6,7 @@ import { Close as CloseIcon, Delete as DeleteIcon, } from '@material-ui/icons' -import { getPeerString, humanizeSize } from 'utils/Utils' +import { getPeerString, humanizeSize, removeRedundantCharacters } from 'utils/Utils' import { torrentsHost } from 'utils/Hosts' import { NoImageIcon } from 'icons' import DialogTorrentDetailsContent from 'components/DialogTorrentDetailsContent' @@ -45,7 +45,7 @@ const Torrent = ({ torrent }) => { const titleStrings = [] - let parsedTitle = parse('title') + let parsedTitle = removeRedundantCharacters(parse('title')) const parsedYear = parse('year') const parsedResolution = parse('resolution') if (parsedTitle) titleStrings.push(parsedTitle) diff --git a/web/src/locales/en/translation.json b/web/src/locales/en/translation.json index b9003d3..fab7ad5 100644 --- a/web/src/locales/en/translation.json +++ b/web/src/locales/en/translation.json @@ -17,7 +17,7 @@ "Cache": "Cache", "CacheSize": "Cache Size (Megabytes)", "Cancel": "Cancel", - "ChooseLanguage": "Russian", + "ChooseLanguage": "Ru", "Clear": "Clear", "Close": "Close", "CloseServer?": "Do you want to turn off server?", @@ -59,12 +59,11 @@ "Offline": "Offline", "OK": "OK", "OpenLink": "Open link", - "Peers": "[Connected] Peers", + "Peers": "Peers", "PeersListenPort": "Peers Listen Port", "PEX": "PEX (Peer Exchange)", "PiecesCount": "Pieces count", "PiecesLength": "Pieces length", - "PlaylistAll": "Playlist All", "Preload": "Preload", "PreloadBuffer": "Preload Buffer", "ReaderReadAHead": "Reader Read Ahead (5-100%)", diff --git a/web/src/locales/ru/translation.json b/web/src/locales/ru/translation.json index 70b6631..ccfd7d0 100644 --- a/web/src/locales/ru/translation.json +++ b/web/src/locales/ru/translation.json @@ -17,7 +17,7 @@ "Cache": "Кеш", "CacheSize": "Размер кеша (Мегабайты)", "Cancel": "Отмена", - "ChooseLanguage": "Английский", + "ChooseLanguage": "En", "Clear": "Очистить", "Close": "Закрыть", "CloseServer?": "Хотите выключить сервер?", @@ -59,12 +59,11 @@ "Offline": "Сервер не доступен", "OK": "OK", "OpenLink": "Открыть", - "Peers": "[Подкл.] Пиры", + "Peers": "Пиры", "PeersListenPort": "Порт для входящих подключений", "PEX": "PEX (Peer Exchange)", "PiecesCount": "Кол-во блоков", "PiecesLength": "Размер блока", - "PlaylistAll": "Плейлист всех", "Preload": "Предзагр.", "PreloadBuffer": "Наполнять кеш перед началом воспроизведения", "ReaderReadAHead": "Кеш предзагрузки (5-100%, рек. 95%)", diff --git a/web/src/utils/Hosts.js b/web/src/utils/Hosts.js index cbc05d9..6e1cc7d 100644 --- a/web/src/utils/Hosts.js +++ b/web/src/utils/Hosts.js @@ -10,7 +10,6 @@ export const settingsHost = () => `${torrserverHost}/settings` export const streamHost = () => `${torrserverHost}/stream` export const shutdownHost = () => `${torrserverHost}/shutdown` export const echoHost = () => `${torrserverHost}/echo` -export const playlistAllHost = () => `${torrserverHost}/playlistall/all.m3u` export const playlistTorrHost = () => `${torrserverHost}/stream` export const getTorrServerHost = () => torrserverHost diff --git a/web/src/utils/Utils.js b/web/src/utils/Utils.js index 1e1bac5..acb5c8e 100644 --- a/web/src/utils/Utils.js +++ b/web/src/utils/Utils.js @@ -11,3 +11,33 @@ export function getPeerString(torrent) { export const shortenText = (text, sympolAmount) => text ? text.slice(0, sympolAmount) + (text.length > sympolAmount ? '…' : '') : '' + +export const removeRedundantCharacters = string => { + let newString = string + const brackets = [ + ['(', ')'], + ['[', ']'], + ['{', '}'], + ] + + brackets.forEach(el => { + const leftBracketRegexFormula = `\\${el[0]}` + const leftBracketRegex = new RegExp(leftBracketRegexFormula, 'g') + const leftBracketAmount = [...newString.matchAll(leftBracketRegex)].length + const rightBracketRegexFormula = `\\${el[1]}` + const rightBracketRegex = new RegExp(rightBracketRegexFormula, 'g') + const rightBracketAmount = [...newString.matchAll(rightBracketRegex)].length + + if (leftBracketAmount !== rightBracketAmount) { + const removeFormula = `(\\${el[0]})(?!.*\\1).*` + const removeRegex = new RegExp(removeFormula, 'g') + newString = newString.replace(removeRegex, '') + } + }) + + const hasThreeDotsAtTheEnd = !!newString.match(/\.{3}$/g) + + const trimmedString = newString.replace(/[\\.| ]+$/g, '').trim() + + return hasThreeDotsAtTheEnd ? `${trimmedString}..` : trimmedString +}