From bf3584eee73bd1180ef1b3b0e41a6c8a48633522 Mon Sep 17 00:00:00 2001 From: Martin Mouritzen Date: Tue, 12 Jan 2021 21:46:55 +0100 Subject: [PATCH] lots of updates --- app/components/Chat/Chat.scss | 69 ++++ app/components/Chat/ChatMessageInput.jsx | 29 ++ app/components/Chat/ChatMessagePane.jsx | 34 ++ app/components/Chat/ChatModal.jsx | 29 ++ app/components/Chat/ChatPane.jsx | 77 ----- app/components/Chat/ChatPane.scss | 0 app/components/Chat/ChatProvider.jsx | 68 ++++ .../Episode/Chapters/EpisodeChapters.jsx | 25 +- app/components/Episode/EpisodePane.jsx | 11 +- app/components/Episode/EpisodePane.scss | 23 +- app/components/Episode/Map/EpisodeMap.jsx | 11 + app/components/Favorites/FavoriteListUI.jsx | 118 +++---- app/components/Favorites/FavoriteListUI.scss | 111 ++----- app/components/Player.jsx | 4 +- app/components/Player.scss | 37 ++- app/components/Player/OpenPlayerUI.jsx | 68 ++++ app/components/Player/OpenPlayerUI.scss | 9 + app/components/Player/PlayerUI.jsx | 310 +++++++++--------- app/components/Player/SleepTimerModal.jsx | 84 +++++ app/components/Player/SleepTimerModal.scss | 16 + app/components/Player/VolumeSlider.jsx | 73 +++++ app/components/PodCastClient.jsx | 9 +- app/components/PodCastClient.scss | 28 +- app/components/Podcast/EpisodeList.css | 56 +++- app/components/Podcast/EpisodeList.jsx | 6 +- app/components/Podcast/EpisodeListItem.jsx | 88 ++--- app/components/Podcast/PodCastPane.css | 3 +- app/components/Podcast/PodCastPane.jsx | 56 +++- app/components/Podcast/PodcastExtras.css | 33 +- app/components/Podcast/PodcastExtras.jsx | 4 +- app/components/Podcast/PodcastHeader.css | 27 ++ app/components/Podcast/PodcastHeader.jsx | 56 +++- app/components/Podcast/PodcastMap.jsx | 58 ++++ app/components/Podcast/PodcastPaneUI.jsx | 5 +- app/components/Podcast/PodcastPersons.jsx | 46 +++ app/components/Podcast/PodcastPersons.scss | 40 +++ app/components/Podcast/ShareButtons.jsx | 14 +- app/components/Search/SearchPane.css | 8 +- app/components/Search/SearchPane.jsx | 21 +- app/components/Search/SearchPaneUI.jsx | 170 +++++----- app/components/Search/SearchResult.jsx | 116 +++++-- app/components/SideBar.jsx | 118 +++---- .../UI/Podcast/SubscribeButtonUI.css | 14 +- app/components/UI/common/Notice/Notice.jsx | 58 ++++ app/components/UI/common/Notice/Notice.scss | 39 +++ app/components/UI/common/Notice/Warning.jsx | 18 + app/components/UI/common/PodcastImage.jsx | 14 +- .../UI/common/QuickMessagePopup.jsx | 10 + app/components/Welcome.css | 2 +- app/components/Welcome.jsx | 15 + app/components/Window/Modal.jsx | 89 +++-- app/components/Window/Modal.scss | 16 +- app/components/Window/WebContainer.jsx | 1 - app/images/design/icons/information.svg | 1 + app/images/design/icons/send.svg | 1 + app/images/design/player/chat.svg | 1 + app/index.js | 4 +- app/library/AudioController.js | 123 ++++++- app/library/PodcastFeed.js | 193 +++++++++++ app/library/RSSFeed.js | 295 +++++++++++++++++ app/library/podCastServices/ITunes.js | 72 ++-- app/redux/actions/podcastActions.js | 2 +- app/redux/actions/uiActions.js | 15 +- app/redux/constants/ui-types.js | 2 + app/redux/reducers/uiReducer.js | 15 +- app/redux/reducers/userReducer.js | 4 +- app/redux/store.js | 40 ++- app/web/assets/podcastDetails.php | 8 +- app/web/index.template.html | 20 ++ configs/mac/entitlements.mac.inherit.plist | 10 + configs/mac/entitlements.mac.plist.txt | 8 + configs/webpack.config.web.prod.babel.js | 2 +- images/listen buttons/listen-black-shadow.png | Bin 0 -> 24613 bytes images/listen buttons/listen-black-shadow.psd | Bin 0 -> 113443 bytes images/listen buttons/listen-medium.svg | 9 + .../listen-on-podfriend-130x30.png | Bin 0 -> 22511 bytes .../listen-on-podfriend-small.svg | 9 + images/listen buttons/listen-small (1).svg | 17 + images/listen buttons/listen-small.psd | Bin 0 -> 89857 bytes images/listen buttons/test.svg | 9 + package.json | 17 +- resources/icons/podfriend.icns | Bin 0 -> 152418 bytes yarn.lock | 103 ++++-- 83 files changed, 2629 insertions(+), 795 deletions(-) create mode 100644 app/components/Chat/Chat.scss create mode 100644 app/components/Chat/ChatMessageInput.jsx create mode 100644 app/components/Chat/ChatMessagePane.jsx create mode 100644 app/components/Chat/ChatModal.jsx delete mode 100644 app/components/Chat/ChatPane.jsx delete mode 100644 app/components/Chat/ChatPane.scss create mode 100644 app/components/Chat/ChatProvider.jsx create mode 100644 app/components/Episode/Map/EpisodeMap.jsx create mode 100644 app/components/Player/OpenPlayerUI.jsx create mode 100644 app/components/Player/OpenPlayerUI.scss create mode 100644 app/components/Player/SleepTimerModal.jsx create mode 100644 app/components/Player/SleepTimerModal.scss create mode 100644 app/components/Player/VolumeSlider.jsx create mode 100644 app/components/Podcast/PodcastMap.jsx create mode 100644 app/components/Podcast/PodcastPersons.jsx create mode 100644 app/components/Podcast/PodcastPersons.scss create mode 100644 app/components/UI/common/Notice/Notice.jsx create mode 100644 app/components/UI/common/Notice/Notice.scss create mode 100644 app/components/UI/common/Notice/Warning.jsx create mode 100644 app/components/UI/common/QuickMessagePopup.jsx create mode 100644 app/images/design/icons/information.svg create mode 100644 app/images/design/icons/send.svg create mode 100644 app/images/design/player/chat.svg create mode 100644 app/library/PodcastFeed.js create mode 100644 app/library/RSSFeed.js create mode 100644 configs/mac/entitlements.mac.inherit.plist create mode 100644 configs/mac/entitlements.mac.plist.txt create mode 100644 images/listen buttons/listen-black-shadow.png create mode 100644 images/listen buttons/listen-black-shadow.psd create mode 100644 images/listen buttons/listen-medium.svg create mode 100644 images/listen buttons/listen-on-podfriend-130x30.png create mode 100644 images/listen buttons/listen-on-podfriend-small.svg create mode 100644 images/listen buttons/listen-small (1).svg create mode 100644 images/listen buttons/listen-small.psd create mode 100644 images/listen buttons/test.svg create mode 100644 resources/icons/podfriend.icns diff --git a/app/components/Chat/Chat.scss b/app/components/Chat/Chat.scss new file mode 100644 index 00000000..5656fec7 --- /dev/null +++ b/app/components/Chat/Chat.scss @@ -0,0 +1,69 @@ +.messagePane { + min-height: 200px; + padding-top: 5px; + /* + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + */ + + .messageLine { + padding: 5px; + padding-left: 7px; + font-size: 15px; + + .messageUsername { + margin-right: 5px; + font-weight: bold; + } + .messageText { + + } + } +} +.textInputPane { + max-height: 50px; + height: 50px; + padding: 5px; + + display: flex; + justify-content: center; + + input[type=text] { + background-color: #EEEEEE; + border-radius: 5px; + border: 0px; + outline: 0px; + padding-left: 10px; + padding-right: 5px; + + color: #333333; + font-size: 16px; + + flex: 1; + + &::placeholder { + color: #999999; + } + } + .sendButton { + height: 40px; + display: flex; + justify-content: center; + align-items: center; + + svg { + height: 30px; + fill: #0176e5; + } + &.hasMessage { + width: 35px; + overflow: hidden; + } + &.noMessage { + width: 0px; + padding: 0px; + margin: 0px; + overflow: hidden; + } + } +} \ No newline at end of file diff --git a/app/components/Chat/ChatMessageInput.jsx b/app/components/Chat/ChatMessageInput.jsx new file mode 100644 index 00000000..075d5158 --- /dev/null +++ b/app/components/Chat/ChatMessageInput.jsx @@ -0,0 +1,29 @@ +import React, { useState } from 'react'; + +import SVG from 'react-inlinesvg'; +const SendIcon = () => ; + +import styles from './Chat.scss'; + +const ChatMessageInput = ({ onMessageSubmit }) => { + const [currentMessage,setCurrentMessage] = useState(''); + + const onChatMessageTextChange = (event) => { + setCurrentMessage(event.target.value); + }; + const sendChatMessage = (event) => { + event.preventDefault(); + onMessageSubmit(currentMessage); + setCurrentMessage(''); + }; + + return ( +
+ +
0 ? styles.hasMessage : styles.noMessage)} onClick={sendChatMessage}> + +
+
+ ); +}; +export default ChatMessageInput; \ No newline at end of file diff --git a/app/components/Chat/ChatMessagePane.jsx b/app/components/Chat/ChatMessagePane.jsx new file mode 100644 index 00000000..ca30ff3d --- /dev/null +++ b/app/components/Chat/ChatMessagePane.jsx @@ -0,0 +1,34 @@ +import React, { useRef, useEffect } from 'react'; + +import styles from './Chat.scss'; + +const ChatMessagePane = ({ messages = [] }) => { + const messagePane = useRef(null); + + useEffect(() => { + /* + if (messagePane) { + messagePane.current.scrollTop = messagePane.current.scrollHeight; + } + */ + var bottomSheetContent = document.querySelector('[data-rsbs-content]'); + if (bottomSheetContent) { + // bottomSheetContent.style.maxHeight = '50vh'; + bottomSheetContent.scrollTop = bottomSheetContent.scrollHeight; + } + },[messages]); + + return ( +
+ { messages.map((message,index) => { + return ( +
+ {message.name}: + {message.text} +
+ ); + } ) } +
+ ); +}; +export default ChatMessagePane; \ No newline at end of file diff --git a/app/components/Chat/ChatModal.jsx b/app/components/Chat/ChatModal.jsx new file mode 100644 index 00000000..611171dd --- /dev/null +++ b/app/components/Chat/ChatModal.jsx @@ -0,0 +1,29 @@ +import React, { useEffect, useState } from 'react'; + +import Modal from 'podfriend-approot/components/Window/Modal'; + +import ChatMessageInput from './ChatMessageInput.jsx'; +import ChatMessagePane from 'podfriend-approot/components/Chat/ChatMessagePane.jsx'; + +const ChatModal = ({ shown, onDismiss, isLoggedIn, activePodcast, activeEpisode, onMessageSubmit, messages }) => { + return ( + maxHeight / 2} + snapPoints={({ maxHeight }) => [ maxHeight / 2, maxHeight - 30 ]} + header={ +

+ CHAT +

+ } + footer={ + + } + > + +
+ ); +} +export default ChatModal; \ No newline at end of file diff --git a/app/components/Chat/ChatPane.jsx b/app/components/Chat/ChatPane.jsx deleted file mode 100644 index 9362835f..00000000 --- a/app/components/Chat/ChatPane.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -import styles from './ChatPane.scss'; - -import socketIOClient from "socket.io-client"; - -const chatServerURI = "http://127.0.0.1:9999"; - -const ChatMessageInput = ({ onMessageSubmit }) => { - const [currentMessage,setCurrentMessage] = useState(''); - - const onChatMessageTextChange = (event) => { - setCurrentMessage(event.target.value); - }; - const sendChatMessage = () => { - onMessageSubmit(currentMessage); - setCurrentMessage(''); - }; - - return ( -
- -
- ); -}; - -const ChatPane = () => { - const [messages,setMessages] = useState([]); - const [socket,setSocket] = useState(false); - - const onMessageSubmit = (message) => { - socket.emit('chatMessage',{ - message: message - }); - }; - - useEffect(() => { - setSocket(socketIOClient(chatServerURI)); - },[]); - - useEffect(() => { - if (!socket) { - return; - } - - socket.on('connect',() => { - console.log('Chat connected!'); - }); - socket.on("chatMessage", data => { - console.log(data); - const newMessage = { - user: data.user, - text: data.text - }; - setMessages((messages) => { return [...messages, newMessage]; }); - }); - return () => { - socket.disconnect(); - }; - }, [ socket ]); - - return ( -
- Messages: - { messages.map((message) => { - return ( -
- {message.user}: {message.text} -
- ); - } ) } - - -
- ); -}; -export default ChatPane; \ No newline at end of file diff --git a/app/components/Chat/ChatPane.scss b/app/components/Chat/ChatPane.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/Chat/ChatProvider.jsx b/app/components/Chat/ChatProvider.jsx new file mode 100644 index 00000000..ab646f4c --- /dev/null +++ b/app/components/Chat/ChatProvider.jsx @@ -0,0 +1,68 @@ +import React, { useState, useEffect } from 'react'; + +import { useSelector } from 'react-redux'; + +import socketIOClient from "socket.io-client"; + +const chatServerURI = process.env.NODE_ENV === 'development' ? "http://192.168.86.89:9999" : 'https://chat.podfriend.com:9999/'; + +const ChatProvider = ({ chatModal, roomId }) => { + const [socket,setSocket] = useState(false); + const [messages,setMessages] = useState([]); + const isLoggedIn = useSelector((state) => { return state.user.isLoggedIn}); + const authToken = useSelector((state) => { return state.user.authToken}); + + const onMessageSubmit = (message) => { + socket.emit('chatMessage',{ + message: message + }); + }; + + useEffect(() => { + setSocket(socketIOClient(chatServerURI)); + },[]); + + useEffect(() => { + if (socket) { + socket.emit('login',{ + authToken: authToken, + roomId: roomId + }); + } + },[socket]); + + useEffect(() => { + if (!socket) { + return; + } + + socket.on('connect',() => { + console.log('Chat connected!'); + }); + socket.on('loginCompleted',(data) => { + console.log('Logged into chat!'); + console.log(data); + }); + socket.on("chatMessage", data => { + const newMessage = { + name: data.name, + text: data.text + }; + setMessages((messages) => { return [...messages, newMessage]; }); + }); + return () => { + socket.disconnect(); + }; + }, [ socket ]); + + const ChatModal = chatModal; + + return ( + + ); +}; +export default ChatProvider; \ No newline at end of file diff --git a/app/components/Episode/Chapters/EpisodeChapters.jsx b/app/components/Episode/Chapters/EpisodeChapters.jsx index b7c2beb5..b6599722 100644 --- a/app/components/Episode/Chapters/EpisodeChapters.jsx +++ b/app/components/Episode/Chapters/EpisodeChapters.jsx @@ -6,7 +6,7 @@ import styles from './EpisodeChapters.scss'; var randomColor = require('randomcolor'); -const EpisodeChapters = ({ chapters, progress }) => { +const EpisodeChapters = ({ audioController, chapters, progress }) => { // const [chapters,setChapters] = useState(false); const [fadeOutChapter,setFadeoutChapter] = useState(false); @@ -22,6 +22,27 @@ const EpisodeChapters = ({ chapters, progress }) => { console.log(currentChapter); },[currentChapter]); */ + useEffect(() => { + setCurrentChapter(false); + },[]); + + useEffect(() => { + if (!currentChapter) { + return; + } + + if ('mediaSession' in navigator) { + if (currentChapter.img && audioController) { + audioController.setCoverImage(currentChapter.img); + } + else if (audioController) { + audioController.restoreCoverImage(); + } + } + + // console.log('new current Chapter: '); + // console.log(currentChapter); + },[currentChapter]); useEffect(() => { var foundChapter = false; @@ -37,7 +58,7 @@ const EpisodeChapters = ({ chapters, progress }) => { } } } - if (foundChapter !== currentChapter) { + if (foundChapter != currentChapter) { setFadeoutChapter(currentChapter); setCurrentChapter(foundChapter); } diff --git a/app/components/Episode/EpisodePane.jsx b/app/components/Episode/EpisodePane.jsx index 86f63ef6..4c190f07 100644 --- a/app/components/Episode/EpisodePane.jsx +++ b/app/components/Episode/EpisodePane.jsx @@ -8,8 +8,6 @@ import styles from './EpisodePane.scss'; import { Link, useParams, useHistory, useLocation } from "react-router-dom"; -import ChatPane from 'podfriend-approot/components/Chat/ChatPane.jsx'; - import PodcastImage from 'podfriend-approot/components/UI/common/PodcastImage.jsx'; import LoadingRings from 'podfriend-approot/images/design/loading-rings.svg'; @@ -134,10 +132,7 @@ const EpisodePane = () => { setDescription(tempDescription); setEpisode(episode); - if (episodeId == '583592038') { - loadChapters('https://studio.hypercatcher.com/chapters/podcast/http:feed.nashownotes.comrss.xml/episode/http:1291.noagendanotes.com'); - } - else if (episode.chaptersUrl) { + if (episode.chaptersUrl) { loadChapters(episode.chaptersUrl); } else { @@ -209,12 +204,12 @@ const EpisodePane = () => { { selectedPodcast !== false && episode !== false && <> { !isActiveEpisode && -
+
Play this episode
} { isActiveEpisode && -
+
Resume this episode
} diff --git a/app/components/Episode/EpisodePane.scss b/app/components/Episode/EpisodePane.scss index f83cd3c8..9bfdbc53 100644 --- a/app/components/Episode/EpisodePane.scss +++ b/app/components/Episode/EpisodePane.scss @@ -1,9 +1,14 @@ .episodePane { background-color: #FFFFFF; - height: 100%; + overflow: auto; - padding-bottom: 120px; + height: calc(100% - 90px); + @media only screen and (max-width: 570px) { + height: calc(100% - 60px); + } + + padding-bottom: 50px; position: relative; @@ -63,7 +68,7 @@ .episodeInfo { margin-left: auto; margin-right: auto; - margin-top: calc(13vw + 25px); + margin-top: calc(13vw + 75px); max-width: 600px; .episodeTitle { @@ -93,9 +98,12 @@ .playButton { background-color: #0076e4; margin-top: 10px; + margin-left: 10px; + margin-right: 10px; + margin-bottom: 20px; padding: 20px; - padding-top: 10px; - padding-bottom: 10px; + padding-top: 20px; + padding-bottom: 20px; border-radius: 5px; color: #FFFFFF; display: flex; @@ -108,6 +116,11 @@ margin-right: 10px; } } + @media only screen and (min-width: 480px) { + .episodeInfo { + margin-top: 110px; + } + } @media only screen and (min-width: 600px) { .episodeInfo { margin-top: 50px; diff --git a/app/components/Episode/Map/EpisodeMap.jsx b/app/components/Episode/Map/EpisodeMap.jsx new file mode 100644 index 00000000..0e99f7f6 --- /dev/null +++ b/app/components/Episode/Map/EpisodeMap.jsx @@ -0,0 +1,11 @@ +import React from 'react'; + +const EpisodeMap = () => { + return ( +
+ Map +
+ ); +}; + +export default EpisodeMap; \ No newline at end of file diff --git a/app/components/Favorites/FavoriteListUI.jsx b/app/components/Favorites/FavoriteListUI.jsx index 2f531377..117fa6b0 100644 --- a/app/components/Favorites/FavoriteListUI.jsx +++ b/app/components/Favorites/FavoriteListUI.jsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Link, withRouter } from 'react-router-alias'; +import { Link, useLocation } from 'react-router-alias'; // import PodcastUtil from '~/app/library/PodcastUtil.js'; @@ -8,66 +8,68 @@ import styles from './FavoriteListUI.scss'; import PodcastImage from 'podfriend-approot/components/UI/common/PodcastImage.jsx'; -class FavoriteListUI extends React.Component { - /** - * - */ - constructor(props) { - super(props); +import LoadingRings from 'podfriend-approot/images/design/loading-rings.svg'; - } - render() { - return ( -
- { this.props.subscribedPodcasts && this.props.subscribedPodcasts.length === 0 && -
- This is where your favorite podcasts will appear.

- Favorite a podcast, to put it in here! -
- } - { this.props.subscribedPodcasts && this.props.subscribedPodcasts.map((podcast,index) => { - var isArchived = !this.props.showArchived && podcast.archived; +const FavoriteListUI = ({ showResponsiveList, subscribedPodcasts, showArchived, activePodcast }) => { + var location = useLocation(); - var isPlaying = this.props.activePodcast && this.props.activePodcast.feedUrl == podcast.feedUrl; - - var podcastPath = this.props.location.pathname.substring(9); - var subPathIndex = podcastPath.indexOf('/'); - - if (subPathIndex !== -1) { - podcastPath = podcastPath.substring(0,subPathIndex); - } - - var isSelected = podcast.path == podcastPath; + var isCheckingPodcasts = false; - // var podcastInternalUrl = '/podcast/' + PodcastUtil.generatePodcastUrl(podcast.name) + '/'; + return ( +
+ { isCheckingPodcasts && +
+ Refreshing your podcasts +
+ } + { subscribedPodcasts && subscribedPodcasts.length === 0 && +
+ This is where your favorite podcasts will appear.

+ Favorite a podcast, to put it in here! +
+ } + { subscribedPodcasts && subscribedPodcasts.map((podcast,index) => { + var isArchived = !showArchived && podcast.archived; - return ( - - -
- {podcast.name} - { /* 12 episodes, 2 new */ } -
- - - ) - }) - } -
- ); - } + var isPlaying = activePodcast && activePodcast.feedUrl == podcast.feedUrl; + + var podcastPath = location.pathname.substring(9); + var subPathIndex = podcastPath.indexOf('/'); + + if (subPathIndex !== -1) { + podcastPath = podcastPath.substring(0,subPathIndex); + } + + var isSelected = podcast.path == podcastPath; + + // var podcastInternalUrl = '/podcast/' + PodcastUtil.generatePodcastUrl(podcast.name) + '/'; + + return ( + + +
+ {podcast.name} + { /* 12 episodes, 2 new */ } +
+ + + ) + }) + } +
+ ); } -export default withRouter(FavoriteListUI); \ No newline at end of file +export default FavoriteListUI; \ No newline at end of file diff --git a/app/components/Favorites/FavoriteListUI.scss b/app/components/Favorites/FavoriteListUI.scss index e81239c3..ad5f5f19 100644 --- a/app/components/Favorites/FavoriteListUI.scss +++ b/app/components/Favorites/FavoriteListUI.scss @@ -14,6 +14,30 @@ display: table; } +.checkingChanges { + border: 1px solid #c0c0c0; + background-color: #e0e0e2; + margin-left: 8px; + margin-right: 2px; + margin-bottom: 10px; + padding: 10px; + border-radius: 5px; + + display: flex; + justify-content: flex-start; + align-items: center; + + color: #999999; + + .loadingIndicator { + width: 48px; + height: 64px; + margin-right: 10px; + opacity: 0.5; + filter: grayscale(100%); + } +} + .podcast, .podcastPlaying, .podcastSelected, .podcastArchived { text-decoration: none; font-size: 12px; @@ -138,95 +162,8 @@ min-width: none; max-height: none; max-width: none; - /* - min-width: 27vw; - min-height: 27vw; - max-width: 27vw; - max-height: 27vw; - width: 27vw; - height: 27vw; - */ } @media only screen and (max-width: 410px) { grid-template-columns: repeat(auto-fill, minmax(145px, 1fr)); } - /* - @media only screen and (min-width: 700px) { - .podcast, .podcastPlaying, .podcastSelected { - max-width: 22vw; - height: 35vw; - max-height: 35vw; - } - .cover { - min-width: 20vw; - min-height: 20vw; - max-width: 20vw; - max-height: 20vw; - width: 20vw; - height: 20vw; - } - } - @media only screen and (min-width: 900px) { - .podcast, .podcastPlaying, .podcastSelected { - max-width: 190px; - height: 290px; - max-height: 290px; - margin-left: 5px; - margin-right: 5px; - margin-bottom: 10px; - padding: 5px; - } - .podcastDetails { - padding-left: 5px; - padding-right: 5px; - } - .podcastDetails .podcastName { - font-size: 18px; - margin-top: 10px; - } - .cover { - min-width: 170px; - min-height: 170px; - max-width: 170px; - max-height: 170px; - width: 170px; - height: 170px; - } - } - @media only screen and (max-width: 560px) { - grid-template-columns: auto auto; - - .podcast, .podcastPlaying, .podcastSelected { - float: left; - display: flex; - flex-direction: column; - max-width: 44vw; - height: 62vw; - max-height: 62vw; - margin-left: 1vw; - margin-right: 1vw; - padding: 1vw; - } - .podcastDetails { - padding: 0px; - max-width: 42vw; - padding-left: 1vw; - padding-right: 1vw; - } - .podcastDetails .podcastName { - max-width: 42vw; - margin-top: 2vw; - margin-bottom: 1vw; - -webkit-line-clamp: 3; - } - .cover { - min-width: 42vw; - min-height: 42vw; - max-width: 42vw; - max-height: 42vw; - width: 42vw; - height: 42vw; - } - } - */ } \ No newline at end of file diff --git a/app/components/Player.jsx b/app/components/Player.jsx index b8db0880..55670944 100644 --- a/app/components/Player.jsx +++ b/app/components/Player.jsx @@ -49,7 +49,9 @@ class Player extends Component { playing: false, progress: this.props.activeEpisode ? (this.props.activeEpisode.currentTime ? this.props.activeEpisode.currentTime : 0) : 0, duration: this.props.activeEpisode ? (this.props.activeEpisode.duration ? this.props.activeEpisode.duration : 0) : 0, - volume: 100 + volume: 100, + sleepTimerEnabled: false, + sleepTimerEnding: false }; this.onCanPlay = this.onCanPlay.bind(this); this.onBuffering = this.onBuffering.bind(this); diff --git a/app/components/Player.scss b/app/components/Player.scss index 7030dc15..afefa503 100644 --- a/app/components/Player.scss +++ b/app/components/Player.scss @@ -33,6 +33,7 @@ flex-direction: column; justify-content: center; height: 90px; + max-width: 400px; } .coverContainer { transition: all 0.7s; @@ -155,7 +156,7 @@ right: 3px; width: 21px; } -.backwardButton, .fastBackwardButton, .forwardButton, .fastForwardButton, .moreControlsButton { +.chatButton, .backwardButton, .fastBackwardButton, .forwardButton, .fastForwardButton, .moreControlsButton { display: inline-block; margin-right: 15px; @@ -177,11 +178,11 @@ .forwardButton { margin-left: 20px; } -.backwardButton svg, .fastBackwardButton svg, .forwardButton svg, .fastForwardButton svg, .moreControlsButton svg { +.chatButton svg, .backwardButton svg, .fastBackwardButton svg, .forwardButton svg, .fastForwardButton svg, .moreControlsButton svg { fill: rgba(255,255,255,0.8); position: relative; } -.backwardButton svg, .forwardButton svg { +.chatButton svg, .backwardButton svg, .forwardButton svg { width: 30px; height: 30px; } @@ -194,13 +195,16 @@ background-color: #1180e7; transform: scale(1.1); } - .backwardButton:hover svg, .fastBackwardButton:hover svg, .forwardButton:hover svg, .fastForwardButton:hover svg, .moreControlsButton:hover svg { + .chatButton svg, .backwardButton:hover svg, .fastBackwardButton:hover svg, .forwardButton:hover svg, .fastForwardButton:hover svg, .moreControlsButton:hover svg { fill: #FFFFFF; } - .backwardButton:hover, .fastBackwardButton:hover, .forwardButton:hover, .fastForwardButton:hover, .moreControlsButton:hover { + .chatButton:hover, .backwardButton:hover, .fastBackwardButton:hover, .forwardButton:hover, .fastForwardButton:hover, .moreControlsButton:hover { background-color: #0153a3; transform: scale(1.3); } + .chatButton:hover svg { + transform: scale(0.9); + } } /************************ * Playertrack animation @@ -327,15 +331,17 @@ .playingText .title { font-size: 15px; } - .volumeControls { - display: none; - } .fastBackwardButton, .forwardButton, .fastForwardButton { } } } +@media only screen and (max-width: 1030px) { + .volumeControls { + display: none; + } +} .bottomProgressBar { height: 0px; overflow: hidden; @@ -357,12 +363,12 @@ } } @media only screen and (max-width: 360px) { - .fastBackwardButton, .fastForwardButton { + .chatButton, .fastBackwardButton, .fastForwardButton { width: 0 !important; } } @media only screen and (max-width: 400px) { - .fastBackwardButton { + .chatButton, .fastBackwardButton { width: 0 !important; } } @@ -480,6 +486,9 @@ margin-bottom: 20px; flex: 0 1 auto; } + .volumeControls { + display: none; + } .progressText { margin-left: 10px; } @@ -491,12 +500,6 @@ margin-right: 0px; height: auto; } - .episodeInfo { - width: 100%; - background-color: #FFFFFF; - padding-bottom: 60px; - flex: 2; - } .coverContainer { position: relative; top: 0px; @@ -535,7 +538,7 @@ } } @media only screen and (max-width: 460px) { - .backwardButton, .fastBackwardButton, .forwardButton, .fastForwardButton, .moreControlsButton { + .chatButton, .backwardButton, .fastBackwardButton, .forwardButton, .fastForwardButton, .moreControlsButton { margin-left: 10px; margin-right: 10px; } diff --git a/app/components/Player/OpenPlayerUI.jsx b/app/components/Player/OpenPlayerUI.jsx new file mode 100644 index 00000000..b00952d1 --- /dev/null +++ b/app/components/Player/OpenPlayerUI.jsx @@ -0,0 +1,68 @@ +import React from 'react'; + +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; + +import EpisodeChapterList from 'podfriend-approot/components/Episode/Chapters/EpisodeChapterList.jsx'; + +import styles from './OpenPlayerUI.scss'; + +const TabPanel = ({ children }) => { + return ( +
+ { children } +
+ ); +}; + +const OpenPlayerUI = ({ activePodcast, activeEpisode, description, chaptersLoading, chapters, currentChapter }) => { + + const [tabIndex, setTabIndex] = React.useState('description'); + + const handleTabChange = (event, newValue) => { + setTabIndex(newValue); + }; + + return ( +
+
+ + + +
+ + + + + { chaptersLoading === true && + + } + { chaptersLoading === false && chapters !== false && + + } + + { tabIndex === 'description' && + +
+ + } + { tabIndex === 'chapters' && + + { chaptersLoading === true && + +
+ Fetching chapters for episode +
+ } + { chapters !== false && + + } +
+ } +
+ ); +}; +export default OpenPlayerUI; \ No newline at end of file diff --git a/app/components/Player/OpenPlayerUI.scss b/app/components/Player/OpenPlayerUI.scss new file mode 100644 index 00000000..b65e5729 --- /dev/null +++ b/app/components/Player/OpenPlayerUI.scss @@ -0,0 +1,9 @@ +.episodeInfo { + width: 100%; + background-color: #FFFFFF; + padding-bottom: 60px; + flex: 2; +} +.description { + padding: 20px; +} \ No newline at end of file diff --git a/app/components/Player/PlayerUI.jsx b/app/components/Player/PlayerUI.jsx index 28eb4d45..c815432f 100644 --- a/app/components/Player/PlayerUI.jsx +++ b/app/components/Player/PlayerUI.jsx @@ -2,8 +2,6 @@ import React, { useRef, useEffect, useState } from 'react'; import { useSelector, useDispatch } from 'react-redux'; -import { showFullPlayer } from "podfriend-approot/redux/actions/uiActions"; - import { Link, useHistory, useLocation } from 'react-router-dom'; import { Range } from 'react-range'; @@ -12,8 +10,9 @@ import DOMPurify from 'dompurify'; import Wave from 'podfriend-approot/images/design/blue-wave-1.svg'; -import SVG from 'react-inlinesvg'; + +import SVG from 'react-inlinesvg'; const FullScreenIcon = () => ; const PlayIcon = () => ; const PauseIcon = () => ; @@ -23,6 +22,7 @@ const MoreIcon = () => ; const SpeedIcon = () => ; const ClockIcon = () => ; +const ChatIcon = () => ; const ChromecastIcon = () => ; const SkipForwardIcon = () => ; const SkipBackwardIcon = () => ; @@ -38,21 +38,28 @@ import { ContextMenu, ContextMenuItem } from 'podfriend-approot/components/wwt/C import PodcastImage from 'podfriend-approot/components/UI/common/PodcastImage.jsx'; -import EpisodeChapterList from 'podfriend-approot/components/Episode/Chapters/EpisodeChapterList.jsx'; + import EpisodeChapters from 'podfriend-approot/components/Episode/Chapters/EpisodeChapters.jsx'; import PodcastSubtitles from 'podfriend-approot/components/Episode/Subtitles/PodcastSubtitles.jsx'; - -import { showSpeedSettingWindow, showShareWindow } from 'podfriend-approot/redux/actions/uiActions'; +import { showFullPlayer, showSpeedSettingWindow, showShareWindow, showSleepTimer, hideSleepTimer } from 'podfriend-approot/redux/actions/uiActions'; import { Tabs, Tab } from 'podfriend-approot/components/wwt/Tabs/Tabs.jsx'; import DraggablePane from 'podfriend-approot/components/UI/common/DraggablePane.jsx'; +import ChatProvider from 'podfriend-approot/components/Chat/ChatProvider.jsx'; +import ChatModal from 'podfriend-approot/components/Chat/ChatModal.jsx'; +import SleepTimerModal from './SleepTimerModal.jsx'; + +import OpenPlayerUI from './OpenPlayerUI.jsx'; + +import VolumeSlider from './VolumeSlider.jsx'; + /** * */ -const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progress, duration, playing, hasEpisode, pause, play, canPlay, isBuffering, onCanPlay, onBuffering, onLoadedMetadata, onLoadedData, onPlay, onPause, onSeek, onTimeUpdate, onEnded, onPrevEpisode, onBackward, onNextEpisode, onForward, onProgressSliderChange, onAudioElementReady }) => { +const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progress, duration, playing, hasEpisode, pause, play, canPlay, isBuffering, onCanPlay, onBuffering, onLoadedMetadata, onLoadedData, onPlay, onPause, onSeek, onTimeUpdate, onEnded, onPrevEpisode, onBackward, onNextEpisode, onForward, onProgressSliderChange, onAudioElementReady, onTimerChanged }) => { const dispatch = useDispatch(); const history = useHistory(); const audioElement = useRef(null); @@ -65,8 +72,10 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre const [chaptersLoading,setChaptersLoading] = useState(true); const [currentChapter,setCurrentChapter] = useState(false); const [subtitleFileURL,setSubtitleFileURL] = useState(false); + const [chatShown,setChatShown] = useState(false); const fullPlayerOpen = useSelector((state) => state.ui.showFullPlayer); + const showSleepTimerWindow = useSelector((state) => state.ui.showSleepTimerWindow); useEffect(() => { audioController.setAudioElement(audioElement); @@ -74,6 +83,9 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre },[audioElement]); const openEpisode = (event) => { + if (!hasEpisode) { + return; + } event.preventDefault(); if (fullPlayerOpen === false) { // setEpisodeOpen(true); @@ -198,25 +210,42 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre const loadChapters = async(url) => { console.log('loading chapters'); let result = false; + try { result = await fetch(url); } catch(exception) { + // console.error('Cors probably missing on chapters, using proxy'); url = 'https://www.podfriend.com/tmp/rssproxy.php?rssUrl=' + encodeURI(url); - result = await fetch(url); - } - result = await result.json(); + try { + result = await fetch(url); + } + catch(exception2) { + console.error('Proxy call to chapters failed.'); + console.error(exception2); + } + } try { - if (result.chapters && result.chapters.length > 0) { - setChapters(result.chapters); + let resultJson = await result.json(); + + try { + if (resultJson.chapters && resultJson.chapters.length > 0) { + setChapters(resultJson.chapters); + setChaptersLoading(false); + } + } + catch(exception) { + console.error('Exception getting chapters from: ' + url); + console.error(exception); setChaptersLoading(false); } } catch(exception) { - console.log('Exception getting chapters from: ' + url); - console.log(exception); - setChaptersLoading(false); + console.error('Exception parsing chapters'); + console.error(exception); + console.error(url); + console.error(result); } }; @@ -251,12 +280,12 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre episode = await episode.json(); - console.log('episode data'); - console.log(episode); + // console.log('episode data'); + // console.log(episode); var description = DOMPurify.sanitize(episode.description, { ALLOWED_TAGS: [ - 'p','br','ol','ul','li','b' + 'a','p','br','ol','ul','li','b' ] }); description = description.replace(/(?:\r\n|\r|\n)/g, '
'); @@ -288,6 +317,10 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre dispatch(showFullPlayer(false)); }; + const toggleChat = () => { + setChatShown(!chatShown); + }; + const generateTimeHash = () => { return '#t=' + Math.round(activeEpisode.currentTime ? activeEpisode.currentTime : 0); }; @@ -295,7 +328,7 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre return ( <>
{ dispatch(showFullPlayer(false)); }} /> - +
{ chapters !== false && - + }
-
-
-
- {TimeUtil.formatPrettyDurationText(progress)} -
-
- ( -
{ props.onMouseDown(event); }} - onTouchStart={(event) => { props.onTouchStart(event); }} - style={{ - ...props.style, - height: fullPlayerOpen ? '36px' : '24px', - width: '100%', - display: 'flex' - }} - > -
- {children} -
-
- )} - renderThumb={({ props, isDragged }) => ( -
+
+
+ {TimeUtil.formatPrettyDurationText(progress)} +
+
+ ( +
{ props.onMouseDown(event); }} + onTouchStart={(event) => { props.onTouchStart(event); }} + style={{ + ...props.style, + height: fullPlayerOpen ? '36px' : '24px', + width: '100%', + display: 'flex' + }} + > +
+ {children} +
+
+ )} + renderThumb={({ props, isDragged }) => ( +
+ )} + onChange={(values) => { onProgressSliderChange(values[0],false); }} /> - )} - onChange={(values) => { onProgressSliderChange(values[0],false); }} - /> - {/* - */} + {/* + */} +
+
+ {TimeUtil.formatPrettyDurationText(duration)} +
-
- {TimeUtil.formatPrettyDurationText(duration)} +
+ { false && +
+ } +
+
+ { isBuffering && +
+ { fullPlayerOpen && + + } + { fullPlayerOpen === false && + + } +
+ } + { canPlay && !playing && +
+ } + { canPlay && playing && +
+ } + +
+
+
-
-
 
-
-
- { isBuffering && -
- { fullPlayerOpen && - - } - { fullPlayerOpen === false && - - } -
- } - { canPlay && !playing && -
- } - { canPlay && playing && -
- } - -
-
-
-
-
-
- { /* - { this.props.volume === 0 && - - } - { this.props.volume > 0 && this.props.volume <= 60 && - - } - { this.props.volume > 60 && - - } - - */ } -
+ } + { audioElement.current && + + } { fullPlayerOpen && -
-
- - - -
- { chapters !== false && -
-
Chapters
- -
- } -
+ + } @@ -489,11 +493,17 @@ const PlayerUI = ({ audioController, activePodcast, activeEpisode, title, progre { dispatch(showSpeedSettingWindow()); }}> Set audio speed { dispatch(showShareWindow()); }}> Share episode + { dispatch(showSleepTimer()); }}> Set sleep timer {/* - Set sleep timer Chromecast */} + { showSleepTimerWindow && + { dispatch(hideSleepTimer()); }} /> + } + { chatShown && + { setChatShown(false); }} activePodcast={activePodcast} activeEpisode={activeEpisode} />} /> + } ); } diff --git a/app/components/Player/SleepTimerModal.jsx b/app/components/Player/SleepTimerModal.jsx new file mode 100644 index 00000000..1ff0d1d1 --- /dev/null +++ b/app/components/Player/SleepTimerModal.jsx @@ -0,0 +1,84 @@ +import React, { useEffect, useState } from 'react'; + +import { useDispatch } from 'react-redux'; + +import Modal from 'podfriend-approot/components/Window/Modal'; + +import styles from './SleepTimerModal.scss'; + +import TimeUtil from 'podfriend-approot/library/TimeUtil.js'; + +const SleepTimerModal = ({ shown, onDismiss, audioController }) => { + const [isActive,setIsActive] = useState(audioController.sleepTimerSeconds !== false); + const [secondsLeft,setSecondsLeft] = useState(audioController.getRemainingSleepTimerSeconds()); + + const onTimerChanged = (seconds) => { + audioController.setSleepTimer(seconds); + }; + + const addFiveMinutes = () => { + audioController.setSleepTimer(audioController.sleepTimerSeconds + (60 * 5)); + }; + + const cancelSleepTimer = () => { + audioController.cancelSleepTimer(); + setIsActive(false); + }; +/* + useEffect(() => { + console.log('seconds changed: ' + audioController.sleepTimerSeconds); + if (audioController.sleepTimerSeconds === false) { + setIsActive(false); + } + else { + setIsActive(true); + } + },[audioController.sleepTimerSeconds]); + */ + + useEffect(() => { + const interval = setInterval(() => { + if (audioController.sleepTimerSeconds !== false) { + setIsActive(true); + + + setSecondsLeft(audioController.getRemainingSleepTimerSeconds()); + } + else { + setIsActive(false); + } + }, 1000); + return () => clearInterval(interval); + }, []); + + return ( + +
+

Sleep timer

+ { isActive !== false && +
+
+ Current timer: {TimeUtil.formatPrettyDurationText(secondsLeft)} +
+
+
Add 5 more minutes
+
Cancel sleep timer
+
+
+ } + { isActive === false && +
+
{ onTimerChanged(3600 * 2); }} className={styles.sleepTimerLine}>2 hours
+
{ onTimerChanged(3600 * 1); }} className={styles.sleepTimerLine}>1 hours
+
{ onTimerChanged(45 * 60); }} className={styles.sleepTimerLine}>45 minutes
+
{ onTimerChanged(30 * 60); }} className={styles.sleepTimerLine}>30 minutes
+
{ onTimerChanged(15 * 60); }} className={styles.sleepTimerLine}>15 minutes
+
{ onTimerChanged(5 * 60); }} className={styles.sleepTimerLine}>5 minutes
+
+ } +
+
+ ); +}; + +export default SleepTimerModal; \ No newline at end of file diff --git a/app/components/Player/SleepTimerModal.scss b/app/components/Player/SleepTimerModal.scss new file mode 100644 index 00000000..c0b0cb28 --- /dev/null +++ b/app/components/Player/SleepTimerModal.scss @@ -0,0 +1,16 @@ +.sleepTimerLine { + padding: 20px; + border-bottom: 1px solid #999999; + width: 100%; + min-width: 250px; + + @media (any-hover: hover) { + &:hover { + background-color: #EEEEEE; + cursor: pointer; + } + } +} +.currentTimer { + padding: 20px; +} \ No newline at end of file diff --git a/app/components/Player/VolumeSlider.jsx b/app/components/Player/VolumeSlider.jsx new file mode 100644 index 00000000..fdb6a83a --- /dev/null +++ b/app/components/Player/VolumeSlider.jsx @@ -0,0 +1,73 @@ +import React from 'react'; + +import { Range } from 'react-range'; + +import styles from './../Player.scss'; + +import { FaVolumeMute, FaVolumeDown, FaVolumeUp } from "react-icons/fa"; + +const VolumeSlider = ({ audioElement }) => { + const onVolumeSliderChange = (newVolume) => { + audioElement.volume = newVolume; + }; + + return ( +
+ { audioElement.volume === 0 && + + } + { audioElement.volume > 0 && audioElement.volume <= 0.6 && + + } + { audioElement.volume > 0.6 && + + } + ( +
{ props.onMouseDown(event); }} + onTouchStart={(event) => { props.onTouchStart(event); }} + style={{ + ...props.style, + height: '24px', + width: '100%', + display: 'flex' + }} + > +
+ {children} +
+
+ )} + renderThumb={({ props, isDragged }) => ( +
+ )} + onChange={(values) => { onVolumeSliderChange(values[0],false); }} + /> +
+ ); +} +export default VolumeSlider; \ No newline at end of file diff --git a/app/components/PodCastClient.jsx b/app/components/PodCastClient.jsx index 49fda3b3..85feb17b 100644 --- a/app/components/PodCastClient.jsx +++ b/app/components/PodCastClient.jsx @@ -85,10 +85,6 @@ class PodcastClient extends Component { this.checkMouseNavigation = this.checkMouseNavigation.bind(this); this.mainArea = React.createRef(); - - var timeStamp = new URLSearchParams(this.props.location.search).get("t"); - - console.log('timeStamp: ' + timeStamp); this.state = { services: services @@ -250,7 +246,10 @@ class PodcastClient extends Component { } { false && - + } diff --git a/app/components/PodCastClient.scss b/app/components/PodCastClient.scss index c1e03fbb..86a2d275 100644 --- a/app/components/PodCastClient.scss +++ b/app/components/PodCastClient.scss @@ -7,10 +7,22 @@ html, body { overflow: hidden; } -input[type=submit], input[type=text], textarea { +h2 { + color: #000000; + margin: 0px; + padding: 0px; + margin-bottom: 20px; +} +/* input[type=submit], input[type=text], input[type=email], input[type=password], textarea { + let's see if the below is enough +*/ +input, textarea { -webkit-user-select:text; -webkit-appearance: none; } +input[type=checkbox] { + -webkit-appearance: auto; +} :global(.themeDark) { } @@ -142,6 +154,15 @@ input[type=submit], input[type=text], textarea { /******************************************* * Global Podfriend styles ********************************************/ +:root { + +} +:global { + + div[data-rsbs-root] * { + z-Index: 10000; + } +} :global { .podcastPage { overflow-y: auto; @@ -226,9 +247,7 @@ input[type=submit], input[type=text], textarea { position: relative; background-color: #f0f0f0; - &:not(:first-child) { - border-top: 1px solid #d5d5d5; - } + border-bottom: 1px solid #d5d5d5; .sectionInner { padding-top: 15px; @@ -519,7 +538,6 @@ input[type=submit], input[type=text], textarea { .cover { width: 100%; height: auto; - /* max-height: 195px; */ display: block; background-size: contain; background-repeat: no-repeat; diff --git a/app/components/Podcast/EpisodeList.css b/app/components/Podcast/EpisodeList.css index 939f73e4..8d2d6bcc 100644 --- a/app/components/Podcast/EpisodeList.css +++ b/app/components/Podcast/EpisodeList.css @@ -1,5 +1,6 @@ .episodeListLoading { - margin: 10px; + padding: 10px; + background-color: #FFFFFF; } .episodeList { flex: 1; @@ -78,28 +79,35 @@ padding-left: 20px; color: #BBBBBB; } +/* .play { min-width: 55px; max-width: 55px; padding-top: 15px; padding-left: 20px; } +*/ .icon { border-radius: 50%; background-color: #cccccc; border: 2px solid #cccccc; - width: 30px; - height: 30px; - padding: 10px; - padding-top: 10px; + width: 40px; + height: 40px; transition: all 0.4s; + padding: 10px; + + opacity: 0.8; + + display: flex; + justify-content: center; + align-items: center; } .icon:hover { transform: scale(1.2); } .playIcon, .pauseIcon { background-color: #0176e5; - border: 2px solid #0176e5; + border: 2px solid #FFFFFF; } .playIcon svg, .pauseIcon svg { fill: #FFFFFF; @@ -119,13 +127,12 @@ } .playIcon svg { position: relative; - bottom: 5px; - right: 2px; + left: 2px; } .pauseIcon svg { position: relative; - bottom: 5px; - right: 4px; + bottom: 1px; + right: 1px; } .checkIcon svg { @@ -234,9 +241,36 @@ -webkit-box-orient: vertical; text-overflow: ellipsis; overflow: hidden; + + word-break : break-all; transition: all 2s; } +.cover { + margin-left: 20px; + margin-top: 20px; + width: 120px; + height: 120px; + max-width: 120px; + max-height: 120px; + + background-size: cover; + border-radius: 5px; + + display: flex; + justify-content: center; + align-items: center; + + box-shadow: 0px 0px 7px 0px rgba(0,0,0,0.25); +} +@media only screen and (max-width: 460px) { + .cover { + width: 60px; + height: 60px; + max-width: 60px; + max-height: 60px; + } +} .episodePlaying .date { @@ -285,9 +319,11 @@ } } @media only screen and (max-width: 450px) { + /* .episode .play { display: none; } + */ } @media only screen and (max-width: 600px) { .episode { diff --git a/app/components/Podcast/EpisodeList.jsx b/app/components/Podcast/EpisodeList.jsx index fbfc0319..9a0eef70 100644 --- a/app/components/Podcast/EpisodeList.jsx +++ b/app/components/Podcast/EpisodeList.jsx @@ -372,10 +372,12 @@ class EpisodeList extends Component { { +const EpisodeListItem = ({ id, title, description, episodeImage, duration, currentTime, podcast, podcastTitle, podcastPath, isActiveEpisode, listened, hideListenedEpisodes, isPlaying, episode, episodeType, selectEpisodeAndPlay, date }) => { // const dispatch = useDispatch(); const [episodeTitle,setEpisodeTitle] = useState(title); const [episodeDescription,setEpisodeDescription] = useState(description); @@ -60,46 +62,57 @@ const EpisodeListItem = ({ id, title, description, duration, currentTime, podcas return (
-
-
- -
-
{ Events.emit('podcastPauseRequested',false); event.stopPropagation(); }}> - -
-
- -
-
-
-
-
- { episodeType && episodeType != 'full' && episodeType !== '' && - {episodeType} - } -
- {format(date,'MMM D, YYYY')} - ({distanceInWordsToNow(date)} ago) + +
+
+ +
+
{ Events.emit('podcastPauseRequested',false); event.stopPropagation(); }}> + +
+
+ +
-
-
- -
-
-
- - - { minutesLeft == totalMinutes && - {totalMinutes} minutes - } - { minutesLeft != totalMinutes && - {Math.round((duration - currentTime) / 60)} of {totalMinutes} minutes left + +
+
+
+ { episodeType && episodeType != 'full' && episodeType !== '' && + {episodeType} } +
+ {format(date,'MMM D, YYYY')} + ({distanceInWordsToNow(date)} ago) +
+
+
+ +
+
+
+ + + { minutesLeft == totalMinutes && + {totalMinutes} minutes + } + { minutesLeft != totalMinutes && + {Math.round((duration - currentTime) / 60)} of {totalMinutes} minutes left + } + - - + +
-
); }; function episodeShouldCache(prevEpisode,nextEpisode) { @@ -113,6 +126,7 @@ function episodeShouldCache(prevEpisode,nextEpisode) { if (nextEpisode.isActiveEpisode != prevEpisode.isActiveEpisode) { return false; } if (nextEpisode.hideListenedEpisodes != prevEpisode.hideListenedEpisodes) { return false; } if (prevEpisode.isActiveEpisode && nextEpisode.isPlaying != prevEpisode.isPlaying) { return false; } + if (nextEpisode.episodeImage != prevEpisode.episodeImage) { return false; } return true; } diff --git a/app/components/Podcast/PodCastPane.css b/app/components/Podcast/PodCastPane.css index 0d7bc03d..908264f0 100644 --- a/app/components/Podcast/PodCastPane.css +++ b/app/components/Podcast/PodCastPane.css @@ -1,12 +1,11 @@ .podcastPane { width: 100%; - height: calc(100% - 90px); overflow: auto; - background-color: #FFFFFF; + background-color: #0176e5; position: relative; } diff --git a/app/components/Podcast/PodCastPane.jsx b/app/components/Podcast/PodCastPane.jsx index 00c71d4e..545a02fc 100644 --- a/app/components/Podcast/PodCastPane.jsx +++ b/app/components/Podcast/PodCastPane.jsx @@ -3,6 +3,8 @@ import React, { Component } from 'react'; import { connect } from "react-redux"; import { viewPodcast, archivePodcast, unarchivePodcast, subscribeToPodcast, unsubscribeToPodcast } from "podfriend-approot/redux/actions/podcastActions"; +import PodcastFeed from 'podfriend-approot/library/PodcastFeed.js'; + import { Link, withRouter } from 'react-router-alias'; import DOMPurify from 'dompurify'; @@ -70,11 +72,42 @@ class PodCastPane extends Component { podcastLoading: true, podcastFeed: {}, scrolled: false, - scrolledRequestTime: new Date() + scrolledRequestTime: new Date(), + fetchingRSSFeed: false, + fetchedRSSFeed: false, + rssFeed: false }; this.adjustScrollOffsetOnLoad = this.adjustScrollOffsetOnLoad.bind(this); } + + retrieveOriginalPodcastFeed() { + // console.error('wa1'); + if (!this.state.fetchedRSSFeed && !this.state.fetchingRSSFeed) { + // console.error('wa2'); + this.setState({ + fetchingRSSFeed: true, + rssFeed: false + },async () => { + // console.error('wa3'); + var podcastFeed = new PodcastFeed(this.props.selectedPodcast.feedUrl); + podcastFeed.parse() + .then((feed) => { + // console.error('wa4'); + // console.error(feed); + this.setState({ + fetchingRSSFeed: false, + fetchedRSSFeed: true, + rssFeed: feed + }); + }) + .catch((error) => { + console.error('Error parsing RSS feed: '); + console.error(error); + }); + }); + } + } /** * */ @@ -84,21 +117,34 @@ class PodCastPane extends Component { this.props.viewPodcast(podcastPath); this.adjustScrollOffsetOnLoad(); + this.retrieveOriginalPodcastFeed(); } /** * */ componentDidUpdate(prevProps, prevState, snapshot) { var podcastPath = this.props.match.params.podcastName; + + // console.error('cdu: ' + this.props.selectedPodcast.feedUrl); + // console.error('dcu: ' + prevProps.selectedPodcast.feedUrl); - if (podcastPath !== prevProps.match.params.podcastName) { + if (this.props.selectedPodcast.feedUrl !== prevProps.selectedPodcast.feedUrl) { + console.log('cdu2: ' + this.props.selectedPodcast.feedUrl); this.setState({ - podcastLoading: true + fetchingRSSFeed: false, + fetchedRSSFeed: false, + rssFeed: false },() => { - this.props.viewPodcast(podcastPath); + this.retrieveOriginalPodcastFeed(); }); } if (this.props.location.pathname != prevProps.location.pathname) { + this.setState({ + podcastLoading: true + },() => { + this.props.viewPodcast(podcastPath); + }); + this.adjustScrollOffsetOnLoad(); } } @@ -187,6 +233,8 @@ class PodCastPane extends Component { isArchived={isArchived} isSubscribed={isSubscribed} + rssFeed={this.state.rssFeed} + showEpisode={this.props.showEpisode} podcastLoadingError={this.props.podcastLoadingError} diff --git a/app/components/Podcast/PodcastExtras.css b/app/components/Podcast/PodcastExtras.css index f3b66f78..44ac69a0 100644 --- a/app/components/Podcast/PodcastExtras.css +++ b/app/components/Podcast/PodcastExtras.css @@ -34,10 +34,6 @@ margin-top: 15px; text-align: left; } -.donateButton:hover { - background-color: #ffe280; - transform: scale(1.1); -} .donateButton svg { fill: #000000; } @@ -51,10 +47,6 @@ transition: all .2s; border-radius: 5px; } -.archiveButton:hover { - background-color: #3474b1; - transform: scale(1.1); -} .archiveButton svg { fill: #FFFFFF; position: relative; @@ -62,15 +54,25 @@ margin-right: 10px; transition: all 0.5s; } -.archiveButton:hover svg { - fill: #bc9671; -} .toolTipText { width: 400px; } .toolTipText p { font-size: 14px; } +@media (any-hover: hover) { + .donateButton:hover { + background-color: #ffe280; + transform: scale(1.1); + } + .archiveButton:hover { + background-color: #3474b1; + transform: scale(1.1); + } + .archiveButton:hover svg { + fill: #bc9671; + } +} @media only screen and (max-width: 1750px) { .podcastExtras .subscribe { display: flex; @@ -97,15 +99,15 @@ padding-right: 30px; } .podcastExtras .subscribe, .podcastExtras .share { + background-color: #FFFFFF; padding: 0px; - margin-top: 20px; - margin-bottom: 20px; + padding-top: 20px; + padding-bottom: 20px; } } @media only screen and (max-width: 1200px) { .podcastExtras .subscribe { flex-direction: column; - padding-top: 0px; } .podcastExtras .subscribe >:not(:first-child) { margin: 0px; @@ -118,9 +120,6 @@ padding-left: 10px; padding-right: 10px; } - .podcastExtras .subscribe { - padding: 0px; - } } @media only screen and (min-width: 1920px) { .podcastExtras { diff --git a/app/components/Podcast/PodcastExtras.jsx b/app/components/Podcast/PodcastExtras.jsx index 0e8c0a78..1f104ace 100644 --- a/app/components/Podcast/PodcastExtras.jsx +++ b/app/components/Podcast/PodcastExtras.jsx @@ -10,7 +10,7 @@ const DonateIcon = () => { +const PodcastExtras = React.memo(({isSubscribed, isArchived, selectedPodcast,subscribedPodcasts,subscribeToPodcast,unsubscribeToPodcast, podcastLoading, archivePodcast, unarchivePodcast}) => { let isArchiveTooltipActive = false; const showTooltip = () => { @@ -74,6 +74,6 @@ const PodcastExtras = ({isSubscribed, isArchived, selectedPodcast,subscribedPodc
); -}; +}); export default PodcastExtras; \ No newline at end of file diff --git a/app/components/Podcast/PodcastHeader.css b/app/components/Podcast/PodcastHeader.css index 6b821152..6e83a4f5 100644 --- a/app/components/Podcast/PodcastHeader.css +++ b/app/components/Podcast/PodcastHeader.css @@ -123,7 +123,30 @@ padding-right: 34px; padding-top: 40px; } +.locationLine { + color: #000000; + background-color: #FFFFFF; + padding-left: 34px; + padding-right: 34px; + padding-top: 30px; + display: flex; + justify-content: flex-start; + align-items: center; + + cursor: pointer; +} +.locationLine svg { + fill: #666666; + margin-right: 10px; +} +.personContainer { + background-color: #FFFFFF; + padding-left: 34px; + padding-right: 34px; + padding-top: 30px; +} .categories { + background-color: #FFFFFF; padding-left: 34px; padding-right: 34px; padding-top: 20px; @@ -249,6 +272,10 @@ padding-left: 10px; padding-right: 10px; } + .locationLine, .personContainer { + padding-left: 10px; + padding-right: 10px; + } } @media only screen and (max-width: 380px) { .descriptionBody { diff --git a/app/components/Podcast/PodcastHeader.jsx b/app/components/Podcast/PodcastHeader.jsx index 41d6dd7e..7041962b 100644 --- a/app/components/Podcast/PodcastHeader.jsx +++ b/app/components/Podcast/PodcastHeader.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import styles from './PodcastHeader.css'; @@ -6,7 +6,7 @@ import Wave from 'podfriend-approot/images/design/blue-wave-1.svg'; import { Link } from 'react-router-alias'; -import { FaGlobeAmericas, FaMicrophoneAlt } from "react-icons/fa"; +import { FaMapMarkerAlt, FaGlobeAmericas, FaMicrophoneAlt } from "react-icons/fa"; import { ReviewStarsWithText } from 'podfriend-approot/components/Reviews/StarRating.jsx'; @@ -16,7 +16,17 @@ import PodcastImage from 'podfriend-approot/components/UI/common/PodcastImage.js import LoadingRings from 'podfriend-approot/images/design/loading-rings.svg'; -const PodcastHeader = ({ coverImage, imageUrlHash = false, path, title, author, website, description, podcastLoading, podcastLoadingError, categories = false }) => { +import PodcastMap from './PodcastMap.jsx'; +import PodcastPersons from './PodcastPersons.jsx'; + +import Modal from 'podfriend-approot/components/Window/Modal'; + +const PodcastHeader = React.memo(({ coverImage, imageUrlHash = false, path, title, author, website, description, podcastLoading, podcastLoadingError, categories = false, rssFeed = false }) => { + const [location,setLocation] = useState(false); + const [showLocation,setShowLocation] = useState(false); + + const [persons,setPersons] = useState(false); + const goToWebsite = () => { if (isElectron()) { var shell = require('electron').shell; @@ -27,6 +37,25 @@ const PodcastHeader = ({ coverImage, imageUrlHash = false, path, title, author, } } + useEffect(() => { + if (rssFeed.location) { + setLocation(rssFeed.location); + } + else { + setLocation(false); + } + if (rssFeed.persons) { + setPersons(rssFeed.persons); + } + else { + setPersons(false); + } + },[rssFeed]); + + const onDismissLocation = () => { + setShowLocation(false); + }; + return ( <>
@@ -93,7 +122,6 @@ const PodcastHeader = ({ coverImage, imageUrlHash = false, path, title, author, { (description || !podcastLoading) &&
} -
@@ -109,6 +137,24 @@ const PodcastHeader = ({ coverImage, imageUrlHash = false, path, title, author, { (description || !podcastLoading) &&
} + + { location !== false && +
{ setShowLocation(!showLocation); }}> + {location.name} +
+ } + { showLocation !== false && + + + + } + { persons !== false && +
+

Creators and guests behind the podcast

+ +
+ } +
{ categories && Object.keys(categories).map((categoryId) => { return ( @@ -119,5 +165,5 @@ const PodcastHeader = ({ coverImage, imageUrlHash = false, path, title, author,
); -} +}); export default PodcastHeader; \ No newline at end of file diff --git a/app/components/Podcast/PodcastMap.jsx b/app/components/Podcast/PodcastMap.jsx new file mode 100644 index 00000000..001e3b85 --- /dev/null +++ b/app/components/Podcast/PodcastMap.jsx @@ -0,0 +1,58 @@ +import React from 'react'; + +import { FaMapMarkerAlt } from "react-icons/fa"; + +import GoogleMapReact from 'google-map-react'; + +const PodcastMap = ({ location }) => { + var geoCoords = false; + try { + geoCoords = location.geo.split(','); + geoCoords[0] = parseFloat(geoCoords[0].replace(/[^\d.-]/g, '')); + geoCoords[1] = parseFloat(geoCoords[1].replace(/[^\d.-]/g, '')); + } + catch (exception) { + console.log('Could not split geo coordinates'); + console.log(location); + console.log(location.geo); + console.log(exception); + } + + const Marker = ({ text }) => { + return ( +
+ +
+ {text} +
+
+ ) + }; + + const center = { + lat: geoCoords[0], + lng: geoCoords[1] + }; + const zoom = 11; + + return ( +
+ { location.name && +

{location.name}

+ } + + + +
+ ); +}; + +export default PodcastMap; \ No newline at end of file diff --git a/app/components/Podcast/PodcastPaneUI.jsx b/app/components/Podcast/PodcastPaneUI.jsx index b3aef01a..edf8ae61 100644 --- a/app/components/Podcast/PodcastPaneUI.jsx +++ b/app/components/Podcast/PodcastPaneUI.jsx @@ -15,7 +15,7 @@ import styles from './PodCastPane.css'; import PodcastHeader from './PodcastHeader.jsx'; import PodcastExtras from './PodcastExtras.jsx'; -const PodCastPaneUI = ({ showEpisode = false, selectedPodcast, description, podcastLoading, podcastLoadingError, isSubscribed, subscribedPodcasts, subscribeToPodcast, unsubscribeToPodcast, isArchived, archivePodcast, unarchivePodcast, currentPodcastPlaying, onEpisodeSelect }) => { +const PodCastPaneUI = ({ showEpisode = false, selectedPodcast, description, podcastLoading, podcastLoadingError, isSubscribed, subscribedPodcasts, subscribeToPodcast, unsubscribeToPodcast, isArchived, archivePodcast, unarchivePodcast, currentPodcastPlaying, onEpisodeSelect, rssFeed = false }) => { const location = useLocation(); const podcastPane = useRef(null); @@ -44,6 +44,7 @@ const PodCastPaneUI = ({ showEpisode = false, selectedPodcast, description, podc podcastLoading={podcastLoading} podcastLoadingError={podcastLoadingError} + rssFeed={rssFeed} />
diff --git a/app/components/Podcast/PodcastPersons.jsx b/app/components/Podcast/PodcastPersons.jsx new file mode 100644 index 00000000..f334cdd0 --- /dev/null +++ b/app/components/Podcast/PodcastPersons.jsx @@ -0,0 +1,46 @@ +import React from 'react'; + +import { FaExternalLinkAlt } from "react-icons/fa"; + +import isElectron from 'is-electron'; + +import styles from './PodcastPersons.scss'; + +const PodcastPersons = ({ persons }) => { + + const goToWebsite = (website) => { + if (!website) { + return false; + } + if (isElectron()) { + var shell = require('electron').shell; + shell.openExternal(website); + } + else { + window.open(website,"_blank"); + } + } + + return ( +
+ { persons.map && persons.map((person) => { + return ( +
{ goToWebsite(person.href); }}> + { person.img && + + } +
+ {person.name ? person.name : person['#text'] } +
+ { person.role && +
+ {person.role} +
+ } +
+ ) + }) } +
+ ); +} +export default PodcastPersons; \ No newline at end of file diff --git a/app/components/Podcast/PodcastPersons.scss b/app/components/Podcast/PodcastPersons.scss new file mode 100644 index 00000000..ddaebc3f --- /dev/null +++ b/app/components/Podcast/PodcastPersons.scss @@ -0,0 +1,40 @@ +.persons { + width: 100%; + max-height: 150px; + overflow-x: auto; + overflow-y: hidden; + + display: flex; + flex-direction: row; + + .person { + margin-right: 30px; + margin-bottom: 10px; + + cursor: pointer; + + display: flex; + flex-direction: column; + + justify-content: center; + align-items: center; + + .photo { + width: 90px; + height: 90px; + border-radius: 50%; + margin-bottom: 5px; + } + .name { + color: #000000; + } + .role { + font-size: 16px; + } + } +} +.persons::after { + content: ""; + clear: both; + display: table; +} \ No newline at end of file diff --git a/app/components/Podcast/ShareButtons.jsx b/app/components/Podcast/ShareButtons.jsx index 733d05ce..b627fc18 100644 --- a/app/components/Podcast/ShareButtons.jsx +++ b/app/components/Podcast/ShareButtons.jsx @@ -24,13 +24,11 @@ const ShareButtons = ({ podcastTitle, podcastPath, episodeTitle, episodeDescript }; const navigatorShare = () => { - navigator.share( - { - title: shareTitle, - text: episodeDescription ? episodeDescription : false, - url: shareURL - } - ); + navigator.share({ + title: shareTitle, + text: shareTitle, + url: shareURL + }); }; return ( @@ -40,7 +38,7 @@ const ShareButtons = ({ podcastTitle, podcastPath, episodeTitle, episodeDescript   { navigator.share && <> -
{ navigatorShare(); }}> +
{ event.stopPropagation(); event.preventDefault(); navigatorShare(); }}> Share panel
  diff --git a/app/components/Search/SearchPane.css b/app/components/Search/SearchPane.css index 1c0f8924..4708b163 100644 --- a/app/components/Search/SearchPane.css +++ b/app/components/Search/SearchPane.css @@ -1,7 +1,8 @@ .searchPane { width: 100%; - height: 100%; overflow: auto; + + height: calc(100% - 90px); padding-top: 20px; padding-bottom: 20px; @@ -9,6 +10,11 @@ background-color: #FFFFFF; } +@media only screen and (max-width: 570px) { + .searchPane { + height: calc(100% - 60px); + } +} .searchResults:after { content: ""; display: table; diff --git a/app/components/Search/SearchPane.jsx b/app/components/Search/SearchPane.jsx index 0be46e7c..c4bb0641 100644 --- a/app/components/Search/SearchPane.jsx +++ b/app/components/Search/SearchPane.jsx @@ -31,10 +31,12 @@ class SearchPane extends Component { super(props); this.state = { - selectedGenres: [] + selectedGenres: [], + searchType: props.searchType ? props.searchType : 'podcasts' }; this.onGenreFilterChange = this.onGenreFilterChange.bind(this); + this.onSearchTypeChange = this.onSearchTypeChange.bind(this); } /** * @@ -44,6 +46,14 @@ class SearchPane extends Component { selectedGenres: selectedGenres && selectedGenres.length > 0 ? selectedGenres.map((option) => { return option.value; }) : [] }); } + + onSearchTypeChange(newValue) { + this.setState({ + searchType: newValue + },() => { + this.props.searchPodcasts(this.props.query,this.state.searchType,this.props.authorName,this.props.authorId); + }); + } /** * */ @@ -54,10 +64,11 @@ class SearchPane extends Component { searching={this.props.searching} searchResults={this.props.searchResults} searchError={this.props.searchError} - searchType={this.props.searchType} + useSearchType={this.state.searchType} authorId={this.props.authorId} query={this.props.query} onGenreFilterChange={this.onGenreFilterChange} + onSearchTypeChange={this.onSearchTypeChange} selectedGenres={this.state.selectedGenres} /> ); @@ -67,17 +78,17 @@ class SearchPane extends Component { */ componentDidMount() { console.log(this.props.query); - console.log(this.props.searchType); + console.log(this.state.searchType); console.log(this.props.authorName); console.log(this.props.authorId); - this.props.searchPodcasts(this.props.query,this.props.searchType,this.props.authorName,this.props.authorId); + this.props.searchPodcasts(this.props.query,this.state.searchType,this.props.authorName,this.props.authorId); } /** * */ componentDidUpdate(prevProps, prevState, snapshot) { if (this.props.location.pathname !== prevProps.location.pathname || this.props.query !== prevProps.query || this.props.authorId !== prevProps.authorId) { - this.props.searchPodcasts(this.props.query,this.props.searchType,this.props.authorName,this.props.authorId); + this.props.searchPodcasts(this.props.query,this.state.searchType,this.props.authorName,this.props.authorId); } } } diff --git a/app/components/Search/SearchPaneUI.jsx b/app/components/Search/SearchPaneUI.jsx index 8bcfc1c5..c4eecb0c 100644 --- a/app/components/Search/SearchPaneUI.jsx +++ b/app/components/Search/SearchPaneUI.jsx @@ -1,89 +1,101 @@ -import React, { Component } from 'react'; +import React, { useState, useEffect } from 'react'; import Select from 'react-select' +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; + import SearchResult from './SearchResult.jsx'; import styles from './SearchPane.css'; -class SearchPaneUI extends Component { - constructor(props) { - super(props); - } - render() { - // console.log(this.props.searchResults); - return ( -
- { !this.props.query && - - Recent searches - - } - { this.props.query && - - { this.props.searchType == 'podcast' && -

Search results for "{this.props.query}"

- } - { this.props.searchType == 'author' && -

Podcasts by {this.props.query}

- } - { this.props.searchError && -
- {this.props.searchError} -
- } - { this.props.searchGenres && this.props.searchGenres.length > 0 && -
- Only show podcasts in - { return { value: genre, label: genre }; }) } onChange={onGenreFilterChange} /> +
+ } + { !searchError && searching && +
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
- } - { !this.props.searchError && this.props.searching && -
-
 
-
 
-
 
-
 
-
 
-
 
-
 
-
 
-
 
-
- } - { !this.props.searchError && !this.props.searching && this.props.searchResults && this.props.searchResults.length > 0 && -
- { this.props.searchResults.map && this.props.searchResults.map((result,index) => { - var showResult = false; - if (!this.props.selectedGenres || this.props.selectedGenres.length == 0) { - showResult = true; + } + { !searchError && !searching && searchResults && searchResults.length > 0 && +
+ { searchResults.map && searchResults.map((result,index) => { + var showResult = false; + if (!selectedGenres || selectedGenres.length == 0) { + showResult = true; + } + else if (selectedGenres && selectedGenres.length > 0) { + if (result.genres && result.genres.length > 0) { + result.genres.forEach((genre) => { + if (selectedGenres.includes(genre)) { + showResult = true; + } + }); } - else if (this.props.selectedGenres && this.props.selectedGenres.length > 0) { - if (result.genres && result.genres.length > 0) { - result.genres.forEach((genre) => { - if (this.props.selectedGenres.includes(genre)) { - showResult = true; - } - }); - } - } - if (showResult) { - return ( - - ) - } - }) } -
- } - { !this.props.searching && this.props.searchResults && this.props.searchResults.length === 0 && - - No results found. - - } - - } -
- ); - } + } + if (showResult) { + return ( + + ) + } + }) } +
+ } + { !searching && searchResults && searchResults.length === 0 && +
+ No results found. +
+ } + + } +
+ ); } - export default SearchPaneUI; \ No newline at end of file diff --git a/app/components/Search/SearchResult.jsx b/app/components/Search/SearchResult.jsx index 02731818..3e605e3a 100644 --- a/app/components/Search/SearchResult.jsx +++ b/app/components/Search/SearchResult.jsx @@ -40,45 +40,91 @@ class SearchResult extends Component { isSubscribed = true; } }); - - return ( - - -
- { !isSubscribed && -
{ event.preventDefault(); event.stopPropagation(); this.props.subscribeToPodcast(this.props.result); }}> - + + if (this.props.searchType == 'podcast') { + const resultUrl = '/podcast/' + this.props.result.path; + + return ( + + +
+ { !isSubscribed && +
{ event.preventDefault(); event.stopPropagation(); this.props.subscribeToPodcast(this.props.result); }}> + +
+ } + { isSubscribed && +
{ event.preventDefault(); event.stopPropagation(); this.props.unsubscribeToPodcast(this.props.result); }}> + +
+ } +
+
+
+ {this.props.result.author}
- } - { isSubscribed && -
{ event.preventDefault(); event.stopPropagation(); this.props.unsubscribeToPodcast(this.props.result); }}> - +
+ {this.props.result.name}
- } -
-
-
- {this.props.result.author}
-
- {this.props.result.name} + + ); + } + else { + const resultUrl = '/podcast/' + this.props.result.path + '/' + this.props.result.id; + + return ( + + +
+ { !isSubscribed && +
{ event.preventDefault(); event.stopPropagation(); this.props.subscribeToPodcast(this.props.result); }}> + +
+ } + { isSubscribed && +
{ event.preventDefault(); event.stopPropagation(); this.props.unsubscribeToPodcast(this.props.result); }}> + +
+ } +
+
+
+ {this.props.result.name} +
+
+ {this.props.result.title} +
-
- - ); + + ); + } } } diff --git a/app/components/SideBar.jsx b/app/components/SideBar.jsx index 9371674a..2b62da66 100644 --- a/app/components/SideBar.jsx +++ b/app/components/SideBar.jsx @@ -81,74 +81,74 @@ class SideBar extends Component {
-
- - - Home - - - Podfrndr - - { this.props.isLoggedIn === false && -
- Log in -
- } -
- { false && this.props.isLoggedIn === true && -
- Account -
- } - { false && - - For Podcasters - - } - { /* -
+
-
- - Favorites + + Home -
- + + Podfrndr + + { this.props.isLoggedIn === false && +
+ Log in +
+ } +
+ { false && this.props.isLoggedIn === true && +
+ Account +
+ } + { false && + + For Podcasters + + } + { /* +
- + + Favorites + +
- /> -
- Uncategorized -
-
- Recent podcasts -
+ - -
Add new category
+
+ Uncategorized +
+
+ Recent podcasts +
- */ } -
-
-
-
Podcasts
-
- + +
Add new category
+ + */ } +
- { this.state.hasArchivedPodcasts && -
-
- - -
+
+
Podcasts
+
+
- } + { this.state.hasArchivedPodcasts && +
+
+ + +
+
+ }
diff --git a/app/components/UI/Podcast/SubscribeButtonUI.css b/app/components/UI/Podcast/SubscribeButtonUI.css index bf2836a0..a3b6a58b 100644 --- a/app/components/UI/Podcast/SubscribeButtonUI.css +++ b/app/components/UI/Podcast/SubscribeButtonUI.css @@ -7,10 +7,6 @@ transition: all .2s; border-radius: 5px; } -.subscribeButton:hover { - background-color: #11de77; - transform: scale(1.1); -} .subscribeButton svg { fill: #FFFFFF; position: relative; @@ -18,8 +14,14 @@ margin-right: 10px; transition: all 0.5s; } -.subscribeButton:hover svg { - fill: #FF0000; +@media (any-hover: hover) { + .subscribeButton:hover { + background-color: #11de77; + transform: scale(1.1); + } + .subscribeButton:hover svg { + fill: #FF0000; + } } @media only screen and (max-width: 770px) { .subscribeButton { diff --git a/app/components/UI/common/Notice/Notice.jsx b/app/components/UI/common/Notice/Notice.jsx new file mode 100644 index 00000000..c82e10a2 --- /dev/null +++ b/app/components/UI/common/Notice/Notice.jsx @@ -0,0 +1,58 @@ +import React, { useEffect, useState } from 'react'; + +import SVG from 'react-inlinesvg'; +const InformationIcon = () => ; + +import styles from './Notice.scss'; + +const Notice = ({ type, style, title, children, targetClass, targetPlatform }) => { + const [shown,setShown] = useState(false); + + const isIOS = () => { + return [ + 'iPad Simulator', + 'iPhone Simulator', + 'iPod Simulator', + 'iPad', + 'iPhone', + 'iPod' + ].includes(navigator.platform) + // iPad on iOS 13 detection + || (navigator.userAgent.includes("Mac") && "ontouchend" in document) + } + + useEffect(() => { + var shouldShow = false; + return; + if (targetPlatform === 'ios') { + if (isIOS()) { + setShown(true); + } + else { + setShown(false); + } + } + },[targetPlatform]); + + if (shown) { + return ( +
+
+ +
+
+
+ {title} +
+
+ {children} +
+
+
+ ); + } + else { + return null; + } +}; +export default Notice; \ No newline at end of file diff --git a/app/components/UI/common/Notice/Notice.scss b/app/components/UI/common/Notice/Notice.scss new file mode 100644 index 00000000..7c1ec44a --- /dev/null +++ b/app/components/UI/common/Notice/Notice.scss @@ -0,0 +1,39 @@ +.notice { + padding: 15px; + + margin: 15px; + border-radius: 5px; + + display: flex; + + color: #022041; + + .headline { + color: #022041; + margin-bottom: 5px; + -webkit-text-stroke: 0.25px; + } + .text { + color: #022041; + p { + margin-top: 0px; + color: #022041; + } + } + .icon { + margin-right: 10px; + + svg { + width: 40px; + height: 40px; + fill: #022041; + } + } + &.notice_warning { + background-color: #ffb52b; + border-bottom: 5px solid #ffdd80; + } + &.notice_error { + background-color: #ffdcdc; + } +} \ No newline at end of file diff --git a/app/components/UI/common/Notice/Warning.jsx b/app/components/UI/common/Notice/Warning.jsx new file mode 100644 index 00000000..e55723d1 --- /dev/null +++ b/app/components/UI/common/Notice/Warning.jsx @@ -0,0 +1,18 @@ +import React from 'react'; + +import Notice from './Notice.jsx'; + +const Warning = ({ style, title, children, targetClass, targetPlatform }) => { + return ( + + {children} + + ); +}; +export default Warning; \ No newline at end of file diff --git a/app/components/UI/common/PodcastImage.jsx b/app/components/UI/common/PodcastImage.jsx index 6f350a6b..8a4f8d0b 100644 --- a/app/components/UI/common/PodcastImage.jsx +++ b/app/components/UI/common/PodcastImage.jsx @@ -1,4 +1,5 @@ import React, { useState, useEffect } from 'react'; +import { FaAssistiveListeningSystems } from 'react-icons/fa'; const STATUS_PRELOAD = 1; const STATUS_LOADED = 2; @@ -17,7 +18,7 @@ const loadImage = (src) => { }); } -const PodcastImage = React.memo(({ podcastId = false, podcastPath = false, src, width = 100, height = 100, alt = "", className = "", imageErrorText = "", fallBackImage = false, loadingComponent = false }) => { +const PodcastImage = React.memo(({ podcastId = false, podcastPath = false, src, width = 100, height = 100, alt = "", className = "", imageErrorText = "", fallBackImage = false, loadingComponent = false, asBackground = false, children }) => { const originalSource = src; if (podcastPath) { @@ -82,7 +83,7 @@ const PodcastImage = React.memo(({ podcastId = false, podcastPath = false, src, fontColor = '#FFFFFF'; } - const fontSize = Math.round(width / 8); + const fontSize = Math.round(width / 12); return (
32 ? 32 : fontSize + fontSize: fontSize > 18 ? 18 : fontSize }} className={className} originalsource={originalSource}> {imageErrorText}
); } + else if (asBackground) { + return ( +
+ {children} +
+ ); + } else { return ( { + return ReactDOM.createPortal( +
+ Hell yeah. Jeg er gennemsigtig tekst på sort baggrund med opacity og blur +
+ ); +}; +export default QuickMessagePopup; \ No newline at end of file diff --git a/app/components/Welcome.css b/app/components/Welcome.css index ad59287e..bee725d7 100644 --- a/app/components/Welcome.css +++ b/app/components/Welcome.css @@ -1,5 +1,5 @@ .homePage { - background-color: #FFFFFF; + background-color: #0176e5; padding-bottom: 90px; } .logo { diff --git a/app/components/Welcome.jsx b/app/components/Welcome.jsx index eeb97c83..79060ad9 100644 --- a/app/components/Welcome.jsx +++ b/app/components/Welcome.jsx @@ -17,6 +17,8 @@ import styles from './welcome.css'; import DOMPurify from 'dompurify'; +import Warning from 'podfriend-approot/components/UI/common/Notice/Warning.jsx'; + import SVG from 'react-inlinesvg'; const PlayIcon = () => ; const PauseIcon = () => ; @@ -155,6 +157,19 @@ const Welcome = () => { return (
+ { false && +
+ +

You have added Podfriend to your home screen, and we love that you want to do that.

+

However... Apple have a really weird rule that makes audio no

+
+
+ } {/*
diff --git a/app/components/Window/Modal.jsx b/app/components/Window/Modal.jsx index 5e9b2b74..54a7e2f8 100644 --- a/app/components/Window/Modal.jsx +++ b/app/components/Window/Modal.jsx @@ -1,14 +1,35 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useRef } from 'react'; +import ReactDOM from 'react-dom' + +import { BottomSheet } from 'react-spring-bottom-sheet'; +import 'react-spring-bottom-sheet/dist/style.css' + +import useMediaQuery from '@material-ui/core/useMediaQuery'; import styles from './Modal.scss'; /** * */ -const Modal = ({ shown = true, pageModal = false, onClose, title, children, useBlur, hideModalCallback }) => { +const Modal = ({ shown = true, pageModal = false, onClose, title, children, useBlur, hideModalCallback, defaultSnap, snapPoints, header, footer, onlyBottomSheet }) => { + const portalElement = useRef(null); + const [isReadyToDisplay, setIsReadyToDisplay] = useState(false); + const matches = useMediaQuery('(max-width:600px)'); + const [hiding,setHiding] = useState(false); const [hidden,setHidden] = useState(false); + useEffect(() => { + portalElement.current = document.createElement('div'); + document.body.appendChild(portalElement.current); + + setIsReadyToDisplay(true); + + return () => { + document.body.removeChild(portalElement.current); + }; + },[]); + const hideModal = () => { setHidden(true); @@ -18,7 +39,7 @@ const Modal = ({ shown = true, pageModal = false, onClose, title, children, useB } useEffect(() => { - console.log('shown changed'); + console.log('shown changed: ' + shown); setHidden(!shown); },[shown]); @@ -41,24 +62,52 @@ const Modal = ({ shown = true, pageModal = false, onClose, title, children, useB modalOuterClasses = (hiding ? [styles.pageModalOuterHiding].join(' ') : styles.pageModalOuter); } - return ( -
{ event.stopPropagation(); startHidingModal(); } } - style={{ touchAction: 'none', backdropFilter: useBlur ? 'grayscale(50%) blur(2px)' : 'none', display: hidden ? 'none' : 'flex' }} - onTouchStart={(event) => { event.preventDefault(); event.stopPropagation(); }} - onTouchMove={(event) => { event.preventDefault(); event.stopPropagation(); }} - onDrag={(event) => { event.preventDefault(); event.stopPropagation(); }} - > -
-
{ event.stopPropagation(); } } > - { title && -

{title}

- } - {React.cloneElement(children, extraObject )} -
-
-
+ const childContent = ( + <> + { title && +

{title}

+ } + {React.cloneElement(children, extraObject )} + ); + + if (isReadyToDisplay) { + return ReactDOM.createPortal( + <> + +
+ {childContent} +
+
+ { !matches && !onlyBottomSheet && +
{ event.stopPropagation(); startHidingModal(); } } + style={{ touchAction: 'none', backdropFilter: useBlur ? 'grayscale(50%) blur(2px)' : 'none', display: hidden ? 'none' : 'flex' }} + onTouchStart={(event) => { event.preventDefault(); event.stopPropagation(); }} + onTouchMove={(event) => { event.preventDefault(); event.stopPropagation(); }} + onDrag={(event) => { event.preventDefault(); event.stopPropagation(); }} + > +
{ event.stopPropagation(); }}> +
{ event.stopPropagation(); } } > + {childContent} +
+
+
+ } + + , portalElement.current); + } + else { + return null; + } } export default Modal; \ No newline at end of file diff --git a/app/components/Window/Modal.scss b/app/components/Window/Modal.scss index dc92019d..7b314bd6 100644 --- a/app/components/Window/Modal.scss +++ b/app/components/Window/Modal.scss @@ -9,6 +9,17 @@ .modalPage { padding: 20px; } + .modalContent { + padding-left: 20px; + padding-right: 20px; + } + .bottomSheet { + + } + .bottomSheet h1 { + color: #000000; + margin-left: 20px; + } } .pageModalOuter, .modalOuter { display: flex; @@ -57,7 +68,10 @@ border-radius: 10px; overflow: hidden; + flex: 1; + max-width: 90vw; + max-height: 95vh; margin-left: auto; margin-right: auto; @@ -83,7 +97,7 @@ } @media only screen and (min-width: 750px) { .modal { - max-width: 840px; + max-width: 90vw; } } @media only screen and (max-width: 600px) { diff --git a/app/components/Window/WebContainer.jsx b/app/components/Window/WebContainer.jsx index 0f851677..0f77e4a4 100644 --- a/app/components/Window/WebContainer.jsx +++ b/app/components/Window/WebContainer.jsx @@ -27,7 +27,6 @@ if (navigator.standalone || window.matchMedia(mediaQueryStandAlone).matches) { appType = 'standalone'; Router = MemoryRouter; } - /* * */ diff --git a/app/images/design/icons/information.svg b/app/images/design/icons/information.svg new file mode 100644 index 00000000..5552943d --- /dev/null +++ b/app/images/design/icons/information.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/images/design/icons/send.svg b/app/images/design/icons/send.svg new file mode 100644 index 00000000..8623bf28 --- /dev/null +++ b/app/images/design/icons/send.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/images/design/player/chat.svg b/app/images/design/player/chat.svg new file mode 100644 index 00000000..1c39cd71 --- /dev/null +++ b/app/images/design/player/chat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/index.js b/app/index.js index d5fb7869..d64514a7 100644 --- a/app/index.js +++ b/app/index.js @@ -3,9 +3,7 @@ import { render } from 'react-dom'; import configureStore from './redux/store' -import storage from 'redux-persist/lib/storage'; - -var [ store, persistor, history ] = configureStore(storage,true); +var [ store, persistor, history ] = configureStore(true); import Events from './library/Events.js'; diff --git a/app/library/AudioController.js b/app/library/AudioController.js index c46bc947..20b5e65e 100644 --- a/app/library/AudioController.js +++ b/app/library/AudioController.js @@ -3,6 +3,12 @@ class AudioController { STATE_LOADING = 1; STATE_PLAYING = 2; STATE_PAUSED = 3; + + sleepTimerStartedTimeStamp = false; + sleepTimerSeconds = false; + sleepTimerId = false; + + playingTrack = false; /** * @@ -14,7 +20,18 @@ class AudioController { } init() { - + if ('mediaSession' in navigator) { + navigator.mediaSession.playbackState = "none"; + + try { navigator.mediaSession.setActionHandler('play',() => { this.play(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('pause',() => { this.pause(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('stop',() => { this.pause(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('seekbackward',() => { this.rewind(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('seekforward',() => { this.forward(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('seekto',() => { this.setCurrentTime(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('previoustrack',() => { this.previousTrack(); }); } catch (exception) { console.log('media exception: ' + exception); } + try { navigator.mediaSession.setActionHandler('nexttrack',() => { this.nextTrack(); }); } catch (exception) { console.log('media exception: ' + exception); } + } } /** * @@ -25,6 +42,58 @@ class AudioController { /** * */ + setCoverImage(src) { + var trackClone = {...this.playingTrack}; + trackClone.artwork = [{ + src: src, + sizes: '200x200', + type: 'image/png' + }]; + + // console.log('setting cover image'); + // console.log(trackClone); + + navigator.mediaSession.metadata = new MediaMetadata(trackClone); + } + /** + * + */ + restoreCoverImage() { + console.log('restoring cover image'); + navigator.mediaSession.metadata = new MediaMetadata(this.playingTrack); + } + /** + * + */ + setSleepTimer(seconds) { + clearTimeout(this.sleepTimerId); + this.sleepTimerStartedTimeStamp = new Date(); + this.sleepTimerSeconds = seconds; + this.sleepTimerId = setTimeout(() => { + this.sleepTimerSeconds = false; + this.sleepTimerStartedTimeStamp = false; + this.player.pause(); + },(this.sleepTimerSeconds * 1000)); + } + cancelSleepTimer() { + this.sleepTimerStartedTimeStamp = false; + this.sleepTimerSeconds = false; + clearTimeout(this.sleepTimerId); + } + /** + * + */ + getRemainingSleepTimerSeconds() { + var timeStarted = this.sleepTimerStartedTimeStamp; + if (timeStarted) { + var dif = (new Date().getTime() - timeStarted.getTime()) / 1000; + return this.sleepTimerSeconds - dif + } + return timeStarted; + } + /** + * + */ setPlaybackRate(playbackRate) { if (this.audioElement && this.audioElement.current) { this.audioElement.current.playbackRate = playbackRate; @@ -61,6 +130,9 @@ class AudioController { return this.audioElement.current.duration; } pause() { + if ('mediaSession' in navigator) { + navigator.mediaSession.playbackState = "paused"; + } this.audioElement.current.pause(); return Promise.resolve(true); } @@ -69,7 +141,13 @@ class AudioController { return Promise.resolve(true); } play() { - this.audioElement.current.play(); + var returnValue = this.audioElement.current.play() + if (returnValue.then) { + if ('mediaSession' in navigator) { + navigator.mediaSession.playbackState = "playing"; + } + return returnValue.then; + } return Promise.resolve(true); } setVolume(newVolume) { @@ -79,18 +157,51 @@ class AudioController { return this.audioComponent.current.volume; } forward() { - + if (this.player) { + this.player.onForward(); + } } rewind() { - + if (this.player) { + this.player.onBackward(); + } } nextTrack() { - + if (this.player) { + this.player.onNextEpisode(); + } } previousTrack() { - + if (this.player) { + this.player.onPrevEpisode(); + } } setEpisode(podcast,episode) { + const coverPath = 'https://podcastcovers.podfriend.com/' + podcast.path + '/'; + + var sizes = [20,120,400,600,800]; + + var coverSizes = []; + + for(var i=0;i { diff --git a/app/library/PodcastFeed.js b/app/library/PodcastFeed.js new file mode 100644 index 00000000..d575f813 --- /dev/null +++ b/app/library/PodcastFeed.js @@ -0,0 +1,193 @@ +import RSSFeed from './RSSFeed.js'; + +import XMLParser from 'fast-xml-parser'; +/** +* +*/ +class PodcastFeed { + feedUrl = this; + + constructor (feedUrl) { + this.feedUrl = feedUrl; + } + decodeXMLString = function (text) { + if (text) { + return text.replace(/'/g, "'") + .replace(/"/g, '"') + .replace(/>/g, '>') + .replace(/</g, '<') + .replace(/&/g, '&'); + } + return ''; + } + /** + * Converts itunes duration to seconds + */ + convertDurationToSeconds(duration) { + if (Number.isInteger(duration)) { + return duration; + } + if (!duration) { + return false; + } + var timePieces = duration.split(':'); + + if (timePieces.length === 1) { + return timePieces[0]; + } + if (timePieces.length === 2) { + timePieces = [ + "00", + timePieces[0], + timePieces[1] + ]; + } + return (+timePieces[0]) * 60 * 60 + (+timePieces[1]) * 60 + (+timePieces[2]); + } + async parse() { + if (!this.feedUrl) { + return; + } + console.log('parsing feed: ' + this.feedUrl); + + var response = false; + try { + response = await fetch(this.feedUrl); + } + catch { + response = await fetch('https://www.podfriend.com/tmp/rssproxy.php?rssUrl=' + encodeURI(this.feedUrl)); + } + + if (response) { + var responseBody = await response.text(); + + var xml = XMLParser.parse(responseBody,{ + attributeNamePrefix: '', + ignoreAttributes: false + }); + return this.parseContent(xml); + } + return false; + } + parseContent(xml) { + try { + var podcast = xml.rss.channel; + + console.log(podcast); + + var rssFeed = new RSSFeed(); + + rssFeed.title = this.decodeXMLString(podcast.title); + rssFeed.description = this.decodeXMLString(podcast.description); + + if (Array.isArray(rssFeed.link)) { + rssFeed.link = podcast['link'][0]; + podcast['link'].shift(); + rssFeed.extraLinks = podcast['link']; + } + else { + rssFeed.link = podcast['link']; + } + + rssFeed.docs = podcast['docs']; + rssFeed.generator = podcast['generator']; + rssFeed.language = podcast['language'] ? podcast['language'] : 'en'; + rssFeed.copyright = podcast['copyright']; + rssFeed.pubDate = podcast['pubDate']; + rssFeed.lastBuildDate = podcast['lastBuildDate']; + rssFeed.location = podcast['podcast:location'] ? podcast['podcast:location'] : false; + + rssFeed.imageUrl = podcast['image'] ? podcast['image']['url'] : false; + rssFeed.imageTitle = podcast['image'] ? podcast['image']['title'] : false; + rssFeed.imageWidth = podcast['image'] ? podcast['image']['width'] : false; + rssFeed.imageHeight = podcast['image'] ? podcast['image']['height'] : false; + + rssFeed.managingEditor = podcast['managingEditor']; + rssFeed.webMaster = podcast['webMaster']; + rssFeed.locked = podcast['locked']; + + rssFeed.keywords = podcast['itunes:keywords']; + + rssFeed.summary = this.decodeXMLString(podcast['itunes:summary']); + + rssFeed.author = this.decodeXMLString(podcast['itunes:author']); + + rssFeed.explicit = podcast['itunes:explicit']; + + rssFeed.persons = podcast['podcast:person'] ? podcast['podcast:person'] : false; + rssFeed.contacts = podcast['podcast:contact']; + rssFeed.ids = podcast['podcast:id']; + rssFeed.funding = podcast['podcast:funding']; + rssFeed.images = podcast['podcast:images']; + + if (podcast['itunes:category']) { + var categories = []; + if (Array.isArray(podcast['itunes:category'])) { + for(var i=0;i { + if (!episode['itunes:duration']) { + episode['itunes:duration'] = '00:00'; + } + + episodes.push({ + uid: Math.random() * 99999999999, // We just use this to generate keys in React + title: this.decodeXMLString(episode.title), + description: this.decodeXMLString(episode['itunes:summary'] ? episode['itunes:summary'] : episode['itunes:subtitle'] ? episode['itunes:subtitle'] : episode['description'] ? episode['description'] : ''), + author: this.decodeXMLString(episode.author ? episode.author : episode['itunes:author'] ? episode['itunes:author'] : false), + imageUrl: episode['itunes:image'] ? episode['itunes:image']['href'] : false, + explicit: episode['itunes:explicit'], + keywords: episode['itunes:keywords'], + subtitle: episode['itunes:subtitle'], + itunesSummary: episode['itunes:summary'], + pubDate: episode.pubDate, + date: new Date(Date.parse(episode.pubDate)), + link: episode.link, + guid: episode.guid ? (episode.guid['#text'] ? episode.guid['#text'] : episode.guid) : false, + guidIsPermaLink: episode.guid ? episode.guid['isPermaLink'] === 'true' ? true : false : false, + enclosureType: episode.enclosure ? episode.enclosure.type : '', + enclosureLength: episode.enclosure ? episode.enclosure.length : '', + enclosureUrl: episode.enclosure ? episode.enclosure.url : '', + duration: this.convertDurationToSeconds(episode['itunes:duration']), + transcript: episode['podcast:transcript'], + transcriptUrl: episode['podcast:transcript'] ? Array.isArray(episode['podcast:transcript']) ? episode['podcast:transcript'][0]['url'] : episode['podcast:transcript']['url'] : false, + chaptersUrl: episode['podcast:chapters'] ? episode['podcast:chapters']['url'] : '', + chaptersType: episode['podcast:chapters'] ? episode['podcast:chapters']['type'] : '' + }); + }); + rssFeed.items = episodes; + } + return rssFeed; + } + catch(error) { + console.log('Error parsing podcast feed: ' + error); + console.log(xml); + } + } +} + +export default PodcastFeed; \ No newline at end of file diff --git a/app/library/RSSFeed.js b/app/library/RSSFeed.js new file mode 100644 index 00000000..af3598c8 --- /dev/null +++ b/app/library/RSSFeed.js @@ -0,0 +1,295 @@ +/** +* A Javascript representation of a RSS Feed +*/ +class RSSFeed { + title = ''; + description = ''; + + docs = ''; + link = ''; + language = 'en'; + copyright = ''; + + managingEditor = ''; + editorEmail = ''; + webMaster = ''; + owner = false; + ownerEmail = false; + + pubDate = false; + lastBuildDate = false; + + imageUrl = false; + + categories = false; + + items = []; + + generateXML() { + var xml = ''; + + xml += this.generatePodcastInfoXML(); + xml += this.generatePodcastItemXML(); + + return xml; + } + /** + * @preview boolean If true, will cut things like description to 100 chars. + */ + generatePodcastInfoXML(preview = false) { + let code = ''; + code += '\n'; + code += '\t\n'; + code += `\t\t${this.encodeXMLString(this.title)}\n`; + + if (this.description) { + if (preview) { + code += `\t\t${this.encodeXMLString(this.description.length > 100 ? this.description.substring(0,100) + ' [long text hidden in preview].' : this.description)}\n`; + } + else { + code += `\t\t${this.encodeXMLString(this.description)}\n`; + } + } + if (this.summary) { + code += `\t\t${this.summary}\n`; + } + + if (this.link) { + code += `\t\t${this.link}\n`; + } + if (Array.isArray(this.extraLinks)) { + for(var i=0;i\n`; + } + } + if (this.docs) { + code += `\t\t${this.encodeXMLString(this.docs)}\n`; + } + if (this.language) { + code += `\t\t${this.encodeXMLString(this.language)}\n`; + } + code += `\t\tPodcast Index RSS Builder\n`; + + if (this.pubDate) { + code += `\t\t${this.encodeXMLString(this.pubDate)}\n`; + } + if (this.lastBuildDate) { + code += `\t\t${this.encodeXMLString(this.lastBuildDate)}\n`; + } + + if (this.copyright) { + code += `\t\t${this.encodeXMLString(this.copyright)}\n`; + } + if (this.managingEditor) { + code += `\t\t${this.encodeXMLString(this.managingEditor)}\n`; + } + if (this.webMaster) { + code += `\t\t${this.encodeXMLString(this.webMaster)}\n`; + } + if (this.author) { + code += `\t\t${this.encodeXMLString(this.author)}\n`; + } + if (this.owner || this.ownerEmail) { + code += '\t\t\n'; + if (this.owner) { + code += `\t\t\t${this.encodeXMLString(this.owner)}\n`; + } + if (this.ownerEmail) { + code += `\t\t\t${this.encodeXMLString(this.ownerEmail)}\n`; + } + code += '\t\t\n'; + } + + if (this.keywords) { + code += `\t\t${this.encodeXMLString(this.keywords)}\n`; + } + + if (this.imageUrl) { + code += `\t\t\n`; + code += `\t\t\t${this.encodeXMLString(this.imageUrl)}\n`; + if (this.imageTitle) { + code += `\t\t\t${this.encodeXMLString(this.imageTitle)}\n`; + } + if (this.imageWidth) { + code += `\t\t\t${this.imageWidth}\n`; + } + if (this.imageHeight) { + code += `\t\t\t${this.imageHeight}\n`; + } + code += `\t\t\n`; + code += `\t\t\n`; + } + + if (this.explicit) { + code += `\t\t${this.explicit}\n`; + } + + if (this.categories) { + for(var z=0;z\n`; + } + } +/* + console.log(this.persons); + + if (this.persons) { + if (!Array.isArray(this.persons)) { + this.persons = [this.persons]; + } + this.persons.forEach((person) => { + code += '\t\t'; + code += person; + code += '\n'; + }); + } + if (this.contacts) { + + } + if (this.ids) { + + } + if (this.funding) { + + } + if (this.images) { + + } +*/ +/* + rssFeed.persons = podcast['podcast:person']; + rssFeed.contacts = podcast['podcast:contact']; + rssFeed.ids = podcast['podcast:id']; + rssFeed.funding = podcast['podcast:funding']; + rssFeed.images = podcast['podcast:images']; + */ + + code += this.generatePodcastItemsXML(preview); + + code += '\t\n'; + code += ''; + return code; + } + /** + * + */ + generatePodcastItemsXML(preview) { + return this.items.map((item,index) => { + return this.generatePodcastItemXML(item,preview); + }).join(''); + } + addEpisodeLine(item,tagName,attributeName = tagName) { + if (item[attributeName]) { + return `\t\t\t<${tagName}>${this.encodeXMLString(item[attributeName])}\n`; + } + else { + return ''; + } + } + encodeXMLString(text) { + return text.replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + /** + * + */ + generatePodcastItemXML(item, preview) { + let code = ''; + code += '\t\t\n'; + code += this.addEpisodeLine(item,'title'); + + if (item.description && item.description.length) { + if (preview) { + code += `\t\t\t${this.encodeXMLString(item.description.length > 100 ? item.description.substring(0,100) + ' [long text hidden in preview].' : item.description)}\n`; + code += `\t\t\t${this.encodeXMLString(item.description.length > 100 ? item.description.substring(0,100) + ' [long text hidden in preview].' : item.description)}\n`; + } + else { + code += `\t\t\t${this.encodeXMLString(item.description)}\n`; + code += `\t\t\t${this.encodeXMLString(item.description)}\n`; + } + } + code += this.addEpisodeLine(item,'link'); + code += this.addEpisodeLine(item,'itunes:subtitle','subtitle'); + + if (item.imageUrl) { + code += `\t\t\t\n`; + } + + + if (item.enclosureUrl) { + code += `\t\t\t${item.guid}\n`; + } + // code += this.addEpisodeLine(item,'pubDate'); + + if (item.date) { + code += `\t\t\t${item.date.toUTCString()}\n`; + } + else if (item.pubDate) { + code += this.addEpisodeLine(item,'pubDate','pubDate'); + } + + if (item.chaptersUrl) { + code += `\t\t\t\n`; + } + + // If there is more than one transcript, let's bail. We don't support that right now. + if (Array.isArray(item.transcript)) { + var transcripts = item.transcript; + if (!Array.isArray(item.transcript)) { + transcripts = [ item.transcript ]; + } + transcripts.forEach((transcript) => { + code += `\t\t\t\n`; + }); + } + else if (item.transcriptUrl) { + var re = /(?:\.([^.]+))?$/; + var transcriptExtension = re.exec(item.transcriptUrl)[1]; + + var mimeTypes = { + srt: 'text/srt', + json: 'text/json', + html: 'text/html' + }; + var relTypes = { + srt: 'captions', + json: 'captions', + html: 'transcript' + }; + var mimeType = mimeTypes[transcriptExtension] ? mimeTypes[transcriptExtension] : 'text/html'; + var relType = relTypes[transcriptExtension] ? relTypes[transcriptExtension] : 'transcript'; + code += `\t\t\t\n`; + } + + + code += this.addEpisodeLine(item,'itunes:explicit','explicit'); + code += this.addEpisodeLine(item,'itunes:keywords','keywords'); + + code += this.addEpisodeLine(item,'author','author'); + code += this.addEpisodeLine(item,'itunes:author','author'); + + code += '\t\t\n'; + return code; + } +} +export default RSSFeed; \ No newline at end of file diff --git a/app/library/podCastServices/ITunes.js b/app/library/podCastServices/ITunes.js index 8b2922e5..e816428f 100644 --- a/app/library/podCastServices/ITunes.js +++ b/app/library/podCastServices/ITunes.js @@ -19,7 +19,7 @@ class ITunes { /** * */ - search(query,authorInfo = false,searchType = 'podcast') { + search(query,searchType = 'podcast') { var searchUrl = false; if (searchType == 'podcast') { if (this.proxyCalls) { @@ -29,13 +29,14 @@ class ITunes { searchUrl = 'https://itunes.apple.com:443/search?term=' + encodeURIComponent(query) + '&media=podcast&limit=200'; } } - else if (searchType == 'author') { + else if (searchType == 'person' || searchType == 'author') { if (this.proxyCalls) { - searchUrl = this.proxyConfig['serverURL'] + 'search/author/?authorName=' + encodeURIComponent(authorInfo.authorName) + '&authorId=' + encodeURIComponent(authorInfo.authorId); + searchUrl = this.proxyConfig['serverURL'] + 'search/person/' + encodeURIComponent(query); } else { searchUrl = 'https://itunes.apple.com:443/lookup?id=' + encodeURIComponent(author) + '&entity=podcast&limit=200'; } + console.log(searchUrl); } // console.log('searching: ' + searchUrl); return axios({ @@ -49,36 +50,43 @@ class ITunes { let results = []; for (var i = 0; i < response.data.results.length; i++) { let resultRaw = response.data.results[i]; - - if (resultRaw.wrapperType != 'track') { - continue; - } - - resultRaw.genres = resultRaw.genres.filter((value,index,array) => { - return value != 'Podcasts' - }); - var result = { - version: 1, - provider: 'itunes', - providerData: { - artistId: resultRaw.artistId, - collectionId: resultRaw.collectionId, - collectionId: resultRaw.collectionId - }, - explicit: resultRaw.collectionExplicitness == 'explicit' ? true : false, - country: resultRaw.country, - feedUrl: resultRaw.feedUrl, - author: resultRaw.artistName, - name: resultRaw.name, - artworkUrl30: resultRaw.artworkUrl30, - artworkUrl60: resultRaw.artworkUrl60, - artworkUrl100: resultRaw.artworkUrl100, - artworkUrl600: resultRaw.artworkUrl600, - primaryGenre: resultRaw.primaryGenreName, - genres: resultRaw.genres, - episodeCount: resultRaw.trackCount - }; + var result = {}; + if (searchType == 'podcast') { + if (resultRaw.wrapperType != 'track') { + continue; + } + + resultRaw.genres = resultRaw.genres.filter((value,index,array) => { + return value != 'Podcasts' + }); + + result = { + version: 1, + provider: 'itunes', + providerData: { + artistId: resultRaw.artistId, + collectionId: resultRaw.collectionId, + collectionId: resultRaw.collectionId + }, + explicit: resultRaw.collectionExplicitness == 'explicit' ? true : false, + country: resultRaw.country, + feedUrl: resultRaw.feedUrl, + author: resultRaw.artistName, + name: resultRaw.name, + artworkUrl30: resultRaw.artworkUrl30, + artworkUrl60: resultRaw.artworkUrl60, + artworkUrl100: resultRaw.artworkUrl100, + artworkUrl600: resultRaw.artworkUrl600, + primaryGenre: resultRaw.primaryGenreName, + genres: resultRaw.genres, + episodeCount: resultRaw.trackCount + }; + } + else if (searchType == 'person' || searchType == 'author') { + console.log('person result'); + console.log(resultRaw); + } // console.log(result); results.push(result); } diff --git a/app/redux/actions/podcastActions.js b/app/redux/actions/podcastActions.js index 7a357ff5..a479a778 100644 --- a/app/redux/actions/podcastActions.js +++ b/app/redux/actions/podcastActions.js @@ -138,7 +138,7 @@ export function searchPodcasts(query,searchType = 'podcast',authorName = false,a }); var service = services['itunes']; - return service.search(query,{ authorName: authorName, authorId: authorId },searchType) + return service.search(query,searchType) .then((results) => { var genres = []; var genreKeys = {}; diff --git a/app/redux/actions/uiActions.js b/app/redux/actions/uiActions.js index f9648909..7ec012cb 100644 --- a/app/redux/actions/uiActions.js +++ b/app/redux/actions/uiActions.js @@ -4,7 +4,8 @@ import { UI_HIDE_LOGIN, UI_SHOW_FULLPLAYER, UI_HIDE_FULLPLAYER, - UI_SHOW_SHARE_WINDOW + UI_SHOW_SHARE_WINDOW, + UI_SHOW_SLEEPTIMER_WINDOW } from "../constants/ui-types"; export function showSpeedSettingWindow() { @@ -31,6 +32,18 @@ export function hideShareWindow() { payload: false }; } +export function showSleepTimer() { + return { + type: UI_SHOW_SLEEPTIMER_WINDOW, + payload: true + }; +} +export function hideSleepTimer() { + return { + type: UI_SHOW_SLEEPTIMER_WINDOW, + payload: false + }; +} export function initiateLogin() { return { diff --git a/app/redux/constants/ui-types.js b/app/redux/constants/ui-types.js index b81c46e7..69acf7a3 100644 --- a/app/redux/constants/ui-types.js +++ b/app/redux/constants/ui-types.js @@ -1,6 +1,8 @@ export const UI_SHOW_SPEED_SETTING_WINDOW = 'UI_SHOW_SPEED_SETTING_WINDOW'; export const UI_HIDE_SPEED_SETTING_WINDOW = 'UI_HIDE_SPEED_SETTING_WINDOW'; export const UI_SHOW_SHARE_WINDOW = 'UI_SHOW_SHARE_WINDOW'; +export const UI_SHOW_SLEEPTIMER_WINDOW = 'UI_SHOW_SLEEPTIMER_WINDOW'; + export const UI_SHOW_LOGIN = 'UI_SHOW_LOGIN'; export const UI_HIDE_LOGIN = 'UI_HIDE_LOGIN'; diff --git a/app/redux/reducers/uiReducer.js b/app/redux/reducers/uiReducer.js index 59044224..97431c2d 100644 --- a/app/redux/reducers/uiReducer.js +++ b/app/redux/reducers/uiReducer.js @@ -2,15 +2,21 @@ import { UI_SHOW_SPEED_SETTING_WINDOW, UI_HIDE_SPEED_SETTING_WINDOW, UI_SHOW_SHARE_WINDOW, + UI_SHOW_SLEEPTIMER_WINDOW, UI_SHOW_LOGIN, UI_HIDE_LOGIN, UI_SHOW_FULLPLAYER, UI_HIDE_FULLPLAYER } from "../constants/ui-types"; +import { + USER_LOGGED_IN +} from '../constants/action-types.js'; + const initialState = { showSpeedSettingWindow: false, showShareWindow: false, + showSleepTimerWindow: false, showLogin: false, showFullPlayer: false }; @@ -26,17 +32,22 @@ const uiReducer = (state = initialState, action) => { showSpeedSettingWindow: action.payload }); } - if (action.type === UI_SHOW_SHARE_WINDOW) { + else if (action.type === UI_SHOW_SHARE_WINDOW) { return Object.assign({}, state, { showShareWindow: action.payload }); } + else if (action.type === UI_SHOW_SLEEPTIMER_WINDOW) { + return Object.assign({}, state, { + showSleepTimerWindow: action.payload + }); + } else if (action.type === UI_SHOW_LOGIN) { return Object.assign({}, state, { showLogin: true }); } - else if (action.type === UI_HIDE_LOGIN) { + else if (action.type === UI_HIDE_LOGIN || action.type === USER_LOGGED_IN) { return Object.assign({}, state, { showLogin: false }); diff --git a/app/redux/reducers/userReducer.js b/app/redux/reducers/userReducer.js index 510068f4..856952dd 100644 --- a/app/redux/reducers/userReducer.js +++ b/app/redux/reducers/userReducer.js @@ -14,7 +14,6 @@ const initialState = { const userReducer = (state = initialState, action) => { if (action.type === AUTH_TOKEN_RECEIVED) { - console.log('auth received'); return Object.assign({}, state, { authToken: action.payload }); @@ -22,8 +21,7 @@ const userReducer = (state = initialState, action) => { else if (action.type === USER_LOGGED_IN) { return Object.assign({}, state, { isLoggedIn: true, - profileData: action.payload, - showLogin: false + profileData: action.payload }); } else if (action.type === USER_LOGGED_OUT) { diff --git a/app/redux/store.js b/app/redux/store.js index 72b44c53..e52a0dfa 100644 --- a/app/redux/store.js +++ b/app/redux/store.js @@ -1,7 +1,10 @@ import { createStore, applyMiddleware, compose, combineReducers } from 'redux'; -import { persistStore, persistReducer } from 'redux-persist'; +import { getStoredState, persistStore, persistReducer } from 'redux-persist'; import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2'; +import storage from 'redux-persist/lib/storage'; +import localforage from 'localforage'; + // import { createBrowserHistory } from 'history'; // import { syncHistoryWithStore } from 'react-router-redux' @@ -11,12 +14,43 @@ import rootReducer from './reducers/rootReducer'; import { createOffline } from '@redux-offline/redux-offline'; import offlineConfig from '@redux-offline/redux-offline/lib/defaults/index'; -export default function configureStore(storage,enableDevTools) { +const migrateStorage = async (state) => { + // Migrate from async storage to indexdb + // console.log('migrate - Attempting migration'); + // console.log(state); + if (!state) { + // if indexdb storage is empty try to read state from previous storage + console.log('migrate - No state in indexdb.'); + try { + const asyncState = await getStoredState({ + key: 'root', + storage, + stateReconciler: autoMergeLevel2, + throttle: 1000, + blacklist: ['audio','ui'] + }) + if (asyncState) { + console.log('migrate - Async state not empty. Attempting migration.') // eslint-disable-line + // if data exists in `AsyncStorage` - rehydrate fs persistor with it + + return asyncState; + } + } + catch (ex) { + console.warn('migrate - getStoredState error', ex) // eslint-disable-line + } + } + // console.log('migrate - indexdb state not empty') // eslint-disable-line + return state; +} + +export default function configureStore(enableDevTools) { console.log(enableDevTools); const persistConfig = { key: 'root', - storage, + storage: localforage, + migrate: migrateStorage, stateReconciler: autoMergeLevel2, throttle: 1000, blacklist: ['audio','ui'] diff --git a/app/web/assets/podcastDetails.php b/app/web/assets/podcastDetails.php index ebb02a71..4e22c475 100644 --- a/app/web/assets/podcastDetails.php +++ b/app/web/assets/podcastDetails.php @@ -70,14 +70,18 @@ } } } -$canonicalURL = "https://web.podfriend.com".($podcast["path"] ? "/".$podcast["path"]."/".$episodeId : ""); +if ($podcast["path"]) { + $canonicalURL = "https://web.podfriend.com/podcast/".($podcast["path"] ? $podcast["path"]."/".$episodeId : ""); +} print "".$title."\n"; print "\n"; print "\n"; print "\n"; print "\n"; -print "\n"; +if ($canonicalURL) { + print "\n"; +} if ($hasEpisode) { print "\n"; diff --git a/app/web/index.template.html b/app/web/index.template.html index 6893f597..0ba76413 100644 --- a/app/web/index.template.html +++ b/app/web/index.template.html @@ -36,6 +36,26 @@ + +
diff --git a/configs/mac/entitlements.mac.inherit.plist b/configs/mac/entitlements.mac.inherit.plist new file mode 100644 index 00000000..ab867b6f --- /dev/null +++ b/configs/mac/entitlements.mac.inherit.plist @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.inherit + + + \ No newline at end of file diff --git a/configs/mac/entitlements.mac.plist.txt b/configs/mac/entitlements.mac.plist.txt new file mode 100644 index 00000000..44e88f5c --- /dev/null +++ b/configs/mac/entitlements.mac.plist.txt @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + \ No newline at end of file diff --git a/configs/webpack.config.web.prod.babel.js b/configs/webpack.config.web.prod.babel.js index 10087c85..79d4cd6c 100644 --- a/configs/webpack.config.web.prod.babel.js +++ b/configs/webpack.config.web.prod.babel.js @@ -24,7 +24,7 @@ const productionConfig = merge.smart(baseConfig, { output: { path: path.join(__dirname, '..', 'release/web/'), publicPath: './', - filename: 'web.prod.js', + filename: 'web.[contenthash].prod.js', libraryTarget: 'umd' }, module: { diff --git a/images/listen buttons/listen-black-shadow.png b/images/listen buttons/listen-black-shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..9324d414d3c94d7c50112cb1b48b4b07c9a4c1e9 GIT binary patch literal 24613 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

f4)Dqa=mw++sY9}m2Xqe#fg-@Y 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 C%G&Y( literal 0 HcmV?d00001 diff --git a/images/listen buttons/listen-medium.svg b/images/listen buttons/listen-medium.svg new file mode 100644 index 00000000..102b55b3 --- /dev/null +++ b/images/listen buttons/listen-medium.svg @@ -0,0 +1,9 @@ + + +Listen onPodfriend \ No newline at end of file diff --git a/images/listen buttons/listen-on-podfriend-130x30.png b/images/listen buttons/listen-on-podfriend-130x30.png new file mode 100644 index 0000000000000000000000000000000000000000..5840092a96436cace4531015494f8f1acb6bff29 GIT binary patch literal 22511 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 U8At5Nr#wJg + +Listen onPodfriend \ No newline at end of file diff --git a/images/listen buttons/listen-small (1).svg b/images/listen buttons/listen-small (1).svg new file mode 100644 index 00000000..72f6165d --- /dev/null +++ b/images/listen buttons/listen-small (1).svg @@ -0,0 +1,17 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + diff --git a/images/listen buttons/listen-small.psd b/images/listen buttons/listen-small.psd new file mode 100644 index 0000000000000000000000000000000000000000..9bea9e4f3ce6d663ffbe071b970719f5b9b45aa1 GIT binary patch literal 89857 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 + +Listen onPodfriend \ No newline at end of file diff --git a/package.json b/package.json index 2b761ec4..7c6b5746 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "podfriend", "productName": "PodFriend", - "version": "0.6.6", + "version": "0.7.0", "description": "PodFriend - Because everyone needs a PodFriend.", "license": "UNLICENSED", "private": true, @@ -43,6 +43,15 @@ "app/components/*.jsx", "package.json" ], + "mac": { + "icon": "./resources/icons/podfriend.icns", + "hardenedRuntime": true, + "entitlements": "./configs/mac/entitlements.mac.inherit.plist", + "target": [ + "dmg", + "zip" + ] + }, "dmg": { "contents": [ { @@ -232,10 +241,10 @@ "electron-updater": "^4.0.0", "extract-text-webpack-plugin": "^4.0.0-beta.0", "fast-xml-parser": "^3.12.16", + "google-map-react": "^2.1.9", "history": "^4.7.2", "html-entities": "^1.3.1", "is-electron": "^2.2.0", - "jsmediatags": "^3.9.3", "localforage": "^1.7.4", "loudness": "^0.3.0", "node-fetch": "^2.6.0", @@ -261,10 +270,12 @@ "react-select": "^3.0.4", "react-spinners": "^0.8.3", "react-spring": "^8.0.27", - "react-spring-bottom-sheet": "^2.2.6", + "react-spring-bottom-sheet": "^3.1.4", "react-tinder-card": "^1.3.1", "react-toggle": "^4.1.1", "react-use-gesture": "^8.0.1", + "react-virtualized-auto-sizer": "^1.0.3", + "react-window": "^1.8.6", "redux": "^4.0.5", "redux-devtools-extension": "^2.13.8", "redux-logger": "^3.0.6", diff --git a/resources/icons/podfriend.icns b/resources/icons/podfriend.icns new file mode 100644 index 0000000000000000000000000000000000000000..bd175648a9ce3829b1831ea9dfeaf6b79353415a GIT binary patch literal 152418 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

vTwlHuUDHU@JHpCr&DYtt~5o~`; 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%0AY*qTCz8**i@Uj8->zJT)uUY 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 k2&$+46&4r^5pBGrr2d0n(!1cmMzZ literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index 5c35ae5e..2fa22d6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1199,6 +1199,23 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz#a371e91029ebf265015e64f81bfbf7d228c9681f" integrity sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA== +"@googlemaps/js-api-loader@^1.7.0": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@googlemaps/js-api-loader/-/js-api-loader-1.11.1.tgz#b7f02c04d8d8602fb4bd873b03685fccefce1c6f" + integrity sha512-2ug4uBu0onRXTAo7Yxkay5N7pdNIz3XpTElMTLdCtEfQDxikbjeR6GS8atVhblX+ubFBNlXvDzz7VtuXv0vMRQ== + dependencies: + fast-deep-equal "^3.1.3" + +"@juggle/resize-observer@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.2.0.tgz#5e0b448d27fe3091bae6216456512c5904d05661" + integrity sha512-fsLxt0CHx2HCV9EL8lDoVkwHffsA0snUpddYjdLyXcG5E41xaamn9ZyQqOE9TUJdrRlH8/hjIf+UdOdDeKCUgg== + +"@mapbox/point-geometry@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= + "@material-ui/core@^4.11.2": version "4.11.2" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.2.tgz#f8276dfa40d88304e6ceb98962af73803d27d42d" @@ -1723,6 +1740,14 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@xstate/react@^1.2.0": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@xstate/react/-/react-1.2.2.tgz#54d32034d40384782ee11145bbbb31b841a5a464" + integrity sha512-pXcUtts6EaEUmquzpMZ2yhAZZLAFYxKVaaHnQ8MPWpGuby0B5QMch17Ij59+LGQACQTSE0nDqXrvvBQId6m8qQ== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + use-subscription "^1.3.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -5288,6 +5313,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -5529,7 +5559,7 @@ fancy-log@^1.3.2: parse-node-version "^1.0.0" time-stamp "^1.0.0" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -6354,6 +6384,16 @@ gonzales-pe@^4.2.3: dependencies: minimist "^1.2.5" +google-map-react@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/google-map-react/-/google-map-react-2.1.9.tgz#6e539ce8bf28e7b8cda6058402e7581d1d1cec3d" + integrity sha512-//Pa0o6sdspU2H0ehVztSDQSnYYeV6TY4Z6ftty34yiCJYLliOzeq17dA9uFkyUFdL+XwbTU6e9mfs+bjBMIzw== + dependencies: + "@googlemaps/js-api-loader" "^1.7.0" + "@mapbox/point-geometry" "^0.1.0" + eventemitter3 "^4.0.4" + prop-types "^15.7.2" + got@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" @@ -8132,13 +8172,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -jsmediatags@^3.9.3: - version "3.9.3" - resolved "https://registry.yarnpkg.com/jsmediatags/-/jsmediatags-3.9.3.tgz#309632d221d701bd385df65c9c6840cb399e11ff" - integrity sha512-h53yFnPYF1Y5jwr2ebcVzIIsvRpSalm0jhNiJDUztoPPHGpuHxi9YHUzdDgiw+ykiinXHd1s6HSIbudHw79zQw== - dependencies: - xhr2 "^0.1.4" - json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -8931,7 +8964,7 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memoize-one@^5.0.0: +"memoize-one@>=3.1.1 <6", memoize-one@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== @@ -11328,17 +11361,19 @@ react-spinners@^0.8.3: dependencies: "@emotion/core" "^10.0.15" -react-spring-bottom-sheet@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/react-spring-bottom-sheet/-/react-spring-bottom-sheet-2.2.6.tgz#854b56c0ecacf83597c28d6bd0d54eb889a7cedf" - integrity sha512-rKgbvkzJuQBjertQ+NEJMV6noVcDtxCtSoIf31FhRlIw7Ja8Nl3N2KE7+3rETPVIjzOBscmL9mll6tqK5VRWCw== +react-spring-bottom-sheet@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/react-spring-bottom-sheet/-/react-spring-bottom-sheet-3.1.4.tgz#ebdb29bc11dc0ddfa4a55de1a285dc8f3047d6c9" + integrity sha512-Aq8rnSHeCw0dojCHXAn8lMDriBaXK1iTmQ3y4re5+c89AzncVEwBY7Qtg5IhhiFOasfS4pCu5r1Sv0dP4WhCiw== dependencies: + "@juggle/resize-observer" "^3.2.0" "@reach/portal" "^0.12.1" + "@xstate/react" "^1.2.0" body-scroll-lock "^3.1.5" focus-trap "^6.2.2" react-spring "^8.0.27" react-use-gesture "^8.0.1" - resize-observer-polyfill "^1.5.1" + xstate "^4.15.1" react-spring@^8.0.27: version "8.0.27" @@ -11392,6 +11427,19 @@ react-use-gesture@^8.0.1: resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-8.0.1.tgz#4360c0f7c9e26baf9fbe58f63fc9de7ef699c17f" integrity sha512-CXzUNkulUdgouaAlvAsC5ZVo0fi9KGSBSk81WrE4kOIcJccpANe9zZkAYr5YZZhqpicIFxitsrGVS4wmoMun9A== +react-virtualized-auto-sizer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.3.tgz#a491577dc70102b9faaef473d640437eab9db120" + integrity sha512-HnJo3Hk5Ky2TUL2GpLOs5sKiyskFwdNllI3P5Mp0tgFatz6ClnEG1gnK76/NhSkd/3YtYPTVjIsINYVBd/fRxw== + +react-window@^1.8.6: + version "1.8.6" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112" + integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + react@^16.6.3: version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" @@ -11832,11 +11880,6 @@ reselect@^4.0.0: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -13900,6 +13943,18 @@ url@^0.11.0, url@~0.11.0: punycode "1.3.2" querystring "0.2.0" +use-isomorphic-layout-effect@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" + integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + +use-subscription@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== + dependencies: + object-assign "^4.1.1" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -14569,11 +14624,6 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -xhr2@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" - integrity sha1-f4dliEdxbbUCYyOBL4GMras4el8= - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -14584,6 +14634,11 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xstate@^4.15.1: + version "4.15.3" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.15.3.tgz#9c8225cda3be2359c7d6d1d587e02fa5bf9bfff7" + integrity sha512-nf4zzLNs5W57stMZib9UG9PA5ywu89INsaXBMZf7iQxkYD9apbIOQcK8nu/iVZEDOVE+vR8GQnTaOg/8iDSK5Q== + xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"