{"version":3,"sources":["assets/undraw_empty.svg","assets/undraw_blank_canvas.svg","../node_modules/@ionic/core/dist/esm-es5 lazy /^/.//.*/.entry/.js$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","../node_modules/ionicons/dist/esm-es5 lazy /^/.//.*/.entry/.js$/ include: //.entry/.js$/ exclude: //.system/.entry/.js$/ groupOptions: {} namespace object","util/api/trakt.ts","util/api/tmdb.ts","util/pad.ts","util/api/filepursuit.ts","context.ts","components/Modal.tsx","components/PlayableCard.tsx","components/HorizScroll.tsx","components/scrolls/dummyArray.ts","components/scrolls/ContinueWatching.tsx","components/Card.tsx","components/scrolls/Trending.tsx","components/scrolls/Watchlist.tsx","pages/Shows.tsx","pages/Movies.tsx","pages/Favorites.tsx","pages/callback/TraktCallback.tsx","pages/Login.tsx","components/PlayableEpisodeCard.tsx","components/SeasonProgress.tsx","pages/Show.tsx","pages/Season.tsx","pages/SeachResults.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","options","client_id","client_secret","redirect_uri","api_url","useragent","pagination","trakt","Trakt","API_KEY","BASE_URL","get","url","a","fetch","res","json","pad","n","getLinks","term","encodeURIComponent","text","$","cheerio","load","linkElems","links","each","i","elem","link","attribs","onclick","replace","push","getLinksByShow","name","episode","season","startPlaying","episodeId","playLink","sync","history","add","episodes","isMobile","window","location","href","alert","ThemeContext","React","createContext","current","Modal","showModal","setShowModal","setLoading","pageRef","useContext","RefContext","useState","canSwipe","setCanSwipe","modalRef","useRef","isOpen","swipeToClose","presentingElement","mode","onDidDismiss","ref","className","style","padding","height","overflowY","display","flexDirection","onScroll","scrollTop","width","backgroundColor","borderRadius","margin","marginTop","paddingLeft","length","index","onClick","key","borderBottom","outline","color","textAlign","basename","whiteSpace","overflow","textOverflow","justifyContent","alignItems","fill","PlayableCard","traktId","bgUrl","year","isLoading","setLinks","position","message","icon","play","truncate","top","left","right","newLinks","menu","HorizScroll","children","ContinueWatchilengthng","content","shows","setShows","isLoaded","setLoaded","useAsyncEffect","watched","type","limit","showIds","show","tmdbPromises","tmdb","traktPromises","progress","extended","showElements","promises","all","info","traktInfo","forEach","tmdbShow","showId","next_episode","Date","first_aired","backdrop_path","number","first_air_date","parseInt","slice","marginLeft","src","empty","alt","dummyArray","x","animated","Card","seasons","isPoster","bgStyles","bgPosterStyles","Trending","trending","showInfos","showPromises","ep","foundShow","find","poster_path","number_of_seasons","Watchlist","watchlist","undefined","filter","showPromise","blank_canvas","Shows","collapse","size","onFocus","placeholder","value","onIonChange","val","detail","Movies","Favorites","Storage","Plugins","TraktCallback","setAuthed","useEffect","qs","parse","search","exchange_code","result","token","export_token","set","JSON","stringify","Login","setUrl","get_url","disabled","showName","episodeName","seen","reference","open","event","showPopover","setShowPopover","isWatched","setWatched","checkmarkCircle","persist","nativeEvent","ellipsisVertical","cssClass","remove","SeasonProgress","completed","aired","setProgress","paddingTop","marginBottom","zIndex","marginRight","fontSize","chevronForward","Show","match","isInWatchlist","setIsInWatchlist","showToast","setShowToast","still_path","tmdbInfo","setTmdbInfo","title","rating","runtime","genres","overview","setTraktInfo","epRef","useCallback","node","scrollIntoView","behavior","block","params","summary","allRes","shift","seasonInfo","console","error","Provider","backgroundImage","chevronBack","overflowX","star","verticalAlign","toPrecision","genre","maxWidth","boxSizing","Season","air_date","vote_average","vote_count","showInfo","setShowInfo","complted","last_watched_at","setSeasonsInfo","setSeasons","specials","alignContent","flexWrap","bottom","SearchResults","initialTerm","searchRef","setTerm","query","setFocus","onIonClear","gridTemplateColumns","gridGap","gridAutoRows","justifyItems","App","isAuthed","document","body","classList","toggle","import_token","path","render","exact","to","props","slot","tab","tv","film","heart","Boolean","hostname","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"yFAAAA,EAAOC,QAAU,IAA0B,0C,oBCA3CD,EAAOC,QAAU,IAA0B,iD,0DCA3C,IAAIC,EAAM,CACT,8BAA+B,CAC9B,IACA,GAED,uBAAwB,CACvB,IACA,GAED,uBAAwB,CACvB,IACA,GAED,0BAA2B,CAC1B,IACA,IAED,6BAA8B,CAC7B,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,wBAAyB,CACxB,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,sBAAuB,CACtB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,uBAAwB,CACvB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,mCAAoC,CACnC,IACA,IAED,uBAAwB,CACvB,IACA,IAED,+BAAgC,CAC/B,IACA,IAED,wBAAyB,CACxB,IACA,IAED,yBAA0B,CACzB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,uBAAwB,CACvB,IACA,GAED,uBAAwB,CACvB,IACA,IAED,yBAA0B,CACzB,IACA,GAED,8BAA+B,CAC9B,IACA,IAED,yBAA0B,CACzB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,6BAA8B,CAC7B,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,+BAAgC,CAC/B,IACA,IAED,yBAA0B,CACzB,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,yBAA0B,CACzB,IACA,IAED,yBAA0B,CACzB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,uBAAwB,CACvB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,0BAA2B,CAC1B,IACA,IAED,uBAAwB,CACvB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,gCAAiC,CAChC,IACA,KAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,K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","file":"static/js/main.09c132b6.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/undraw_empty.1745ba6d.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_blank_canvas.408b6f34.svg\";","var map = {\n\t\"./ion-action-sheet.entry.js\": [\n\t\t489,\n\t\t5\n\t],\n\t\"./ion-alert.entry.js\": [\n\t\t490,\n\t\t6\n\t],\n\t\"./ion-app_8.entry.js\": [\n\t\t491,\n\t\t7\n\t],\n\t\"./ion-avatar_3.entry.js\": [\n\t\t492,\n\t\t18\n\t],\n\t\"./ion-back-button.entry.js\": [\n\t\t493,\n\t\t19\n\t],\n\t\"./ion-backdrop.entry.js\": [\n\t\t494,\n\t\t43\n\t],\n\t\"./ion-button_2.entry.js\": [\n\t\t495,\n\t\t20\n\t],\n\t\"./ion-card_5.entry.js\": [\n\t\t496,\n\t\t21\n\t],\n\t\"./ion-checkbox.entry.js\": [\n\t\t497,\n\t\t22\n\t],\n\t\"./ion-chip.entry.js\": [\n\t\t498,\n\t\t23\n\t],\n\t\"./ion-col_3.entry.js\": [\n\t\t499,\n\t\t44\n\t],\n\t\"./ion-datetime_3.entry.js\": [\n\t\t500,\n\t\t10\n\t],\n\t\"./ion-fab_3.entry.js\": [\n\t\t501,\n\t\t24\n\t],\n\t\"./ion-img.entry.js\": [\n\t\t502,\n\t\t45\n\t],\n\t\"./ion-infinite-scroll_2.entry.js\": [\n\t\t503,\n\t\t46\n\t],\n\t\"./ion-input.entry.js\": [\n\t\t504,\n\t\t25\n\t],\n\t\"./ion-item-option_3.entry.js\": [\n\t\t505,\n\t\t26\n\t],\n\t\"./ion-item_8.entry.js\": [\n\t\t506,\n\t\t27\n\t],\n\t\"./ion-loading.entry.js\": [\n\t\t507,\n\t\t28\n\t],\n\t\"./ion-menu_3.entry.js\": [\n\t\t508,\n\t\t29\n\t],\n\t\"./ion-modal.entry.js\": [\n\t\t509,\n\t\t8\n\t],\n\t\"./ion-nav_2.entry.js\": [\n\t\t510,\n\t\t15\n\t],\n\t\"./ion-popover.entry.js\": [\n\t\t511,\n\t\t9\n\t],\n\t\"./ion-progress-bar.entry.js\": [\n\t\t512,\n\t\t30\n\t],\n\t\"./ion-radio_2.entry.js\": [\n\t\t513,\n\t\t31\n\t],\n\t\"./ion-range.entry.js\": [\n\t\t514,\n\t\t32\n\t],\n\t\"./ion-refresher_2.entry.js\": [\n\t\t515,\n\t\t11\n\t],\n\t\"./ion-reorder_2.entry.js\": [\n\t\t516,\n\t\t17\n\t],\n\t\"./ion-ripple-effect.entry.js\": [\n\t\t517,\n\t\t47\n\t],\n\t\"./ion-route_4.entry.js\": [\n\t\t518,\n\t\t33\n\t],\n\t\"./ion-searchbar.entry.js\": [\n\t\t519,\n\t\t34\n\t],\n\t\"./ion-segment_2.entry.js\": [\n\t\t520,\n\t\t35\n\t],\n\t\"./ion-select_3.entry.js\": [\n\t\t521,\n\t\t36\n\t],\n\t\"./ion-slide_2.entry.js\": [\n\t\t522,\n\t\t48\n\t],\n\t\"./ion-spinner.entry.js\": [\n\t\t523,\n\t\t13\n\t],\n\t\"./ion-split-pane.entry.js\": [\n\t\t524,\n\t\t49\n\t],\n\t\"./ion-tab-bar_2.entry.js\": [\n\t\t525,\n\t\t37\n\t],\n\t\"./ion-tab_2.entry.js\": [\n\t\t526,\n\t\t16\n\t],\n\t\"./ion-text.entry.js\": [\n\t\t527,\n\t\t38\n\t],\n\t\"./ion-textarea.entry.js\": [\n\t\t528,\n\t\t39\n\t],\n\t\"./ion-toast.entry.js\": [\n\t\t529,\n\t\t40\n\t],\n\t\"./ion-toggle.entry.js\": [\n\t\t530,\n\t\t12\n\t],\n\t\"./ion-virtual-scroll.entry.js\": [\n\t\t531,\n\t\t50\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 233;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./ion-icon.entry.js\": [\n\t\t535,\n\t\t57\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 253;\nmodule.exports = webpackAsyncContext;","// @ts-ignore\nimport Trakt from \"nodeless-trakt\";\n\nconst options = {\n client_id: \"f5b19ea0b39fdefe33d48922e03e46df352bd479a9cb8d1619e17cfad855a3c3\",\n client_secret:\n \"27fbe27013d7bc46bd6ee956093d51605e42ec917c42321651558b2688593a0a\",\n redirect_uri: `${\n process.env.NODE_ENV === \"development\"\n ? \"http://localhost:3000\"\n : \"https://ionic-dionysus.acardosi.dev\"\n }/callback/trakt`,\n api_url: null, // defaults to 'https://api.trakt.tv'\n useragent: null, // defaults to 'trakt.tv/'\n pagination: true, // defaults to false, global pagination (see below)\n};\nconst trakt = new Trakt(options);\n\nexport default trakt;\n","const API_KEY = \"2e0bfe56b018618b270a6e0428559292\";\nconst BASE_URL = \"https://api.themoviedb.org/3\";\n\nexport default async function get(url: string, options?: any) {\n const res = await fetch(\n BASE_URL + url + `?api_key=${API_KEY}`,\n options ? options : {}\n );\n return await res.json();\n}\n","export default function pad(n: number) {\n return (n < 10 ? \"0\" : \"\") + n;\n}\n","import cheerio from \"cheerio\";\nimport pad from \"../pad\";\nimport { isMobile } from \"react-device-detect\";\nimport trakt from \"./trakt\";\n\nexport async function getLinks(term: string) {\n const res = await fetch(\n `https://corsssssss.herokuapp.com/https://filepursuit.com/pursuit?q=${encodeURIComponent(\n term\n )}`\n );\n\n const text = await res.text();\n const $ = cheerio.load(text);\n const linkElems = $(\".badge-wrap > a\");\n\n let links: string[] = [];\n\n linkElems.each((i, elem) => {\n let link = elem.attribs.onclick;\n\n link = link.replace(\n \"if (!window.__cfRLUnblockHandlers) return false; copyToClipboard('\",\n \"\"\n );\n link = link.replace(\"')\", \"\");\n links.push(link);\n });\n\n return links;\n}\n\nexport async function getLinksByShow(\n name: string,\n episode: number,\n season: number\n) {\n return await getLinks(`${name} s${pad(season)}e${pad(episode)}`);\n}\n\nexport default async function startPlaying(\n name: string,\n episode: number,\n season: number,\n episodeId: number\n) {\n const links = await getLinksByShow(name, episode, season);\n playLink(links[0], episodeId);\n}\n\nexport async function playLink(link: string, episodeId: number) {\n await trakt.sync.history.add({\n episodes: [\n {\n ids: {\n trakt: episodeId,\n },\n },\n ],\n });\n if (isMobile) {\n window.location.href = `vlc://${link}`;\n } else {\n alert(link);\n // window.open(link, \"watch\");\n }\n}\n","import React from \"react\";\n\nconst ThemeContext = React.createContext({ current: null });\nexport default ThemeContext;\n","import { IonModal, IonButton, IonSpinner } from \"@ionic/react\";\nimport React, { useContext, useState, useRef } from \"react\";\nimport { playLink } from \"../util/api/filepursuit\";\nimport { basename } from \"path\";\nimport RefContext from \"../context\";\ninterface IProps {\n showModal: boolean;\n setShowModal: any;\n setLoading: any;\n links: string[];\n episodeId: number;\n}\nexport default function Modal({\n showModal,\n setShowModal,\n setLoading,\n links,\n episodeId,\n}: IProps) {\n const pageRef = useContext(RefContext);\n const [canSwipe, setCanSwipe] = useState(true);\n const modalRef: any = useRef(null);\n\n return (\n setShowModal(false)}\n >\n {\n if (modalRef !== null && modalRef.current !== null) {\n if (modalRef.current.scrollTop < 20) {\n setCanSwipe(true);\n } else if (canSwipe === true) {\n setCanSwipe(false);\n }\n }\n }}\n >\n \n\n \n Choose your source\n \n {links.length > 0 ? (\n links.map((link: string, index: number) => (\n {\n setLoading(true);\n await playLink(link, episodeId);\n setLoading(false);\n }}\n key={index}\n style={{\n borderBottom: \"solid var(--ion-border-color) 1px\",\n width: \"100%\",\n backgroundColor: \"transparent\",\n outline: \"0\",\n color: \"var(--ion-text-color)\",\n textAlign: \"left\",\n }}\n >\n

{basename(link)}

\n \n {link}\n

\n \n ))\n ) : (\n \n \n \n )}\n \n\n setShowModal(false)}>\n Cancel\n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { IonButton, IonIcon, IonLoading } from \"@ionic/react\";\nimport { play, menu } from \"ionicons/icons\";\nimport truncate from \"truncate\";\n\nimport startPlaying, { getLinksByShow } from \"../util/api/filepursuit\";\nimport Modal from \"./Modal\";\n\ninterface IProps {\n traktId: number;\n bgUrl: string | null;\n name: string;\n season: number;\n episode: number;\n year: number | null;\n episodeId: number;\n}\n\nexport default function PlayableCard({\n traktId,\n bgUrl,\n name,\n season,\n episode,\n year,\n episodeId,\n}: IProps) {\n const [isLoading, setLoading] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [links, setLinks]: any[] = useState([]);\n\n return (\n \n \n\n {\n setLoading(true);\n await startPlaying(name, episode, season, episodeId);\n setLoading(false);\n }}\n className=\"show\"\n style={\n bgUrl !== null\n ? {\n \"--background\": `linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url(${bgUrl})`,\n }\n : {}\n }\n >\n \n
\n

{truncate(name, 18)}

\n

\n S{season}:E{episode} {year !== null ? `- ${year}` : \"\"}\n

\n
\n \n \n Episodes\n \n\n \n\n {\n setShowModal(true);\n const newLinks = await getLinksByShow(name, episode, season);\n setLinks(newLinks);\n }}\n >\n \n \n \n );\n}\n","import React from \"react\";\n\ninterface IProps {\n children: any;\n}\n\nexport default function HorizScroll({ children }: IProps) {\n return
{children}
;\n}\n","export default [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n","import React, { useState } from \"react\";\nimport trakt from \"../../util/api/trakt\";\nimport tmdb from \"../../util/api/tmdb\";\nimport useAsyncEffect from \"use-async-effect\";\nimport PlayableCard from \"../PlayableCard\";\nimport HorizScroll from \"../HorizScroll\";\nimport empty from \"../../assets/undraw_empty.svg\";\nimport { IonSkeletonText } from \"@ionic/react\";\nimport dummyArray from \"./dummyArray\";\n\ninterface IShowIds {\n trakt: string;\n tmdb: string;\n}\n\nexport default function ContinueWatchilengthng() {\n const [shows, setShows]: any[] = useState([]);\n const [isLoaded, setLoaded] = useState(false);\n\n useAsyncEffect(async () => {\n const shows = await trakt.sync.watched({ type: \"shows\", limit: 15 });\n\n if (shows.length < 1) {\n setLoaded(true);\n return;\n }\n\n const showIds = shows.map(\n (show: { show: { ids: IShowIds } }) => show.show.ids\n );\n\n const tmdbPromises = showIds.map((showIds: IShowIds) => {\n return tmdb(`/tv/${showIds.tmdb}`);\n });\n\n const traktPromises = showIds.map((showIds: IShowIds) => {\n return trakt.shows.progress.watched({\n id: showIds.trakt,\n extended: \"full\",\n });\n });\n\n const showElements: any[] = [];\n const width = 342;\n\n let promises = [Promise.all(traktPromises), Promise.all(tmdbPromises)];\n\n await Promise.all(promises).then((info: any) => {\n const traktInfo: any = info[0];\n const tmdbInfo = info[1];\n\n tmdbInfo.forEach((tmdbShow: any, index: number) => {\n const showId = showIds[index];\n\n // The next_episode is null if they finished the show\n if (traktInfo[index].next_episode === null) {\n return;\n }\n\n const firstAired = new Date(traktInfo[index].next_episode.first_aired);\n\n // If the first air date is in the future, don't render the card\n if (firstAired > new Date()) {\n return;\n }\n showElements.push(\n \n );\n });\n });\n setShows(showElements);\n setLoaded(true);\n }, []);\n\n let content;\n if (shows.length > 0 && isLoaded) {\n // regular\n content = {shows};\n }\n\n if (shows.length === 0 && isLoaded) {\n // undraw\n content = (\n \n

\n Shows you can continue watching will appear here\n

\n \"Empty\"\n \n );\n }\n\n if (shows.length === 0 && !isLoaded) {\n // loading\n content = (\n \n {dummyArray.map((x: number, index) => (\n \n ))}\n \n );\n }\n\n return (\n <>\n \n Continue Watching\n \n {content}\n \n );\n}\n","import React from \"react\";\nimport { IonButton } from \"@ionic/react\";\nimport truncate from \"truncate\";\n\ninterface IProps {\n traktId: number;\n bgUrl: string | null;\n name: string;\n seasons: number;\n year: number | null;\n isPoster?: boolean;\n}\n\nexport default function Card({\n traktId,\n bgUrl,\n name,\n seasons,\n year,\n isPoster,\n}: IProps) {\n const bgStyles =\n bgUrl !== null\n ? {\n \"--background\": `linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(${bgUrl})`,\n \"--color:\": \"var(--ion-color-light)\",\n }\n : {\n \"--background\": \"var(--ion-color-light)\",\n };\n\n const bgPosterStyles =\n bgUrl !== null\n ? {\n \"--background\": `url(${bgUrl})`,\n \"--color:\": \"var(--ion-color-light)\",\n }\n : {\n \"--background\": \"var(--ion-color-light)\",\n };\n\n return (\n \n \n
\n {isPoster ? (\n \"\"\n ) : (\n <>\n

{truncate(name, 18)}

{\" \"}\n

\n {seasons} seasons {year !== null ? `- ${year}` : \"\"}\n

\n \n )}\n
\n \n \n );\n}\n","import React, { useState } from \"react\";\nimport trakt from \"../../util/api/trakt\";\nimport tmdb from \"../../util/api/tmdb\";\nimport useAsyncEffect from \"use-async-effect\";\nimport Card from \".././Card\";\nimport HorizScroll from \".././HorizScroll\";\nimport dummyArray from \"./dummyArray\";\nimport { IonSkeletonText } from \"@ionic/react\";\n\nexport default function Trending() {\n const [shows, setShows]: any[] = useState([]);\n const [isLoaded, setLoaded] = useState(false);\n\n useAsyncEffect(async () => {\n const showInfos = await trakt.shows.trending();\n\n const showPromises = showInfos.map((ep: any) => {\n return tmdb(`/tv/${ep.show.ids.tmdb}`);\n });\n\n const showElements: any[] = [];\n const width = 154;\n\n await Promise.all(showPromises).then((shows: any[]) => {\n shows.forEach((show) => {\n const foundShow = showInfos.find(\n (ep: any) => ep.show.ids.tmdb === show.id\n );\n showElements.push(\n \n );\n });\n });\n\n setShows(showElements);\n setLoaded(true);\n }, []);\n return (\n <>\n \n Trending\n \n {shows.length > 0 && isLoaded ? (\n {shows}\n ) : (\n \n {dummyArray.map((x: number, index) => (\n \n ))}\n \n )}\n \n );\n}\n","import React, { useState } from \"react\";\nimport trakt from \"../../util/api/trakt\";\nimport tmdb from \"../../util/api/tmdb\";\nimport useAsyncEffect from \"use-async-effect\";\nimport Card from \"../Card\";\nimport HorizScroll from \"../HorizScroll\";\nimport blank_canvas from \"../../assets/undraw_blank_canvas.svg\";\nimport dummyArray from \"./dummyArray\";\nimport { IonSkeletonText } from \"@ionic/react\";\n\nexport default function Watchlist() {\n const [shows, setShows]: any[] = useState([]);\n const [isLoaded, setLoaded] = useState(false);\n\n useAsyncEffect(async () => {\n const showInfos = await trakt.sync.watchlist.get({ type: \"shows\" });\n\n let showPromises = showInfos.map((ep: any) => {\n if (ep !== undefined) {\n return tmdb(`/tv/${ep.show.ids.tmdb}`);\n } else {\n return null;\n }\n });\n\n showPromises = showPromises.filter(\n (showPromise: Promise) => showPromise !== null\n );\n\n const showElements: any[] = [];\n const width = 342;\n\n await Promise.all(showPromises).then((shows: any[]) => {\n shows.forEach((show) => {\n if (show !== undefined) {\n const foundShow = showInfos.find(\n (ep: any) => ep.show.ids.tmdb === show.id\n );\n\n showElements.push(\n \n );\n }\n });\n });\n\n setShows(showElements);\n setLoaded(true);\n }, []);\n\n let content;\n if (shows.length > 0 && isLoaded) {\n // regular\n content = {shows};\n }\n\n if (shows.length === 0 && isLoaded) {\n // undraw\n content = (\n \n

Shows in your watchlist will appear here

\n \n \n );\n }\n\n if (shows.length === 0 && !isLoaded) {\n // loading\n content = (\n \n {dummyArray.map((x: number, index) => (\n \n ))}\n \n );\n }\n return (\n <>\n \n My Watchlist\n \n {content}\n \n );\n}\n","import React from \"react\";\nimport {\n IonContent,\n IonHeader,\n IonPage,\n IonTitle,\n IonToolbar,\n IonSearchbar,\n} from \"@ionic/react\";\n\nimport ContinueWatching from \"../components/scrolls/ContinueWatching\";\nimport Trending from \"../components/scrolls/Trending\";\nimport Watchlist from \"../components/scrolls/Watchlist\";\n\ninterface IProps {\n history: any;\n}\n\nfunction Shows({ history }: IProps) {\n function onChange(val: string) {\n if (val !== \"\") {\n history.push(`/search/shows/${val}`);\n }\n }\n\n return (\n \n \n \n TV Shows\n \n \n \n \n \n Dionysus tab 1\n \n \n {\n history.push(\"/search/shows/\");\n }}\n placeholder=\"Search for TV Shows\"\n value=\"\"\n onIonChange={(e: any) => onChange(e.detail.value)}\n />\n\n \n \n \n \n \n );\n}\n\nexport default Shows;\n","import React from \"react\";\nimport {\n IonContent,\n IonHeader,\n IonPage,\n IonTitle,\n IonToolbar,\n} from \"@ionic/react\";\n\nfunction Movies() {\n return (\n \n \n \n Tab 2\n \n \n \n \n \n Tab 2\n \n \n \n \n );\n}\n\nexport default Movies;\n","import React from \"react\";\nimport {\n IonContent,\n IonHeader,\n IonPage,\n IonTitle,\n IonToolbar,\n} from \"@ionic/react\";\n\nfunction Favorites() {\n return (\n \n \n \n Favorites\n \n \n \n \n \n Tab 3\n \n \n \n \n );\n}\n\nexport default Favorites;\n","import React, { useEffect } from \"react\";\nimport {\n IonContent,\n IonHeader,\n IonPage,\n IonTitle,\n IonToolbar,\n} from \"@ionic/react\";\nimport qs from \"qs\";\nimport { Plugins } from \"@capacitor/core\";\nimport trakt from \"../../util/api/trakt\";\n\nconst { Storage } = Plugins;\n\ninterface IProps {\n history: any;\n setAuthed: any;\n}\n\nfunction TraktCallback({ history, setAuthed }: IProps) {\n useEffect(() => {\n (async () => {\n //const r = await startTorrent(\"South Park\", 13, 12);\n\n const { code } = qs.parse(window.location.search.replace(\"?\", \"\"));\n\n trakt.exchange_code(code).then(async (result: any) => {\n const token = trakt.export_token();\n await Storage.set({\n key: \"token\",\n value: JSON.stringify(token),\n });\n setAuthed(true);\n history.push(\"/\");\n // contains tokens & session information\n // API can now be used with authorized requests\n });\n })();\n }, [history, setAuthed]);\n return (\n \n \n \n Trakt auth\n \n \n \n \n \n Tab 1\n \n \n \n \n );\n}\n\nexport default TraktCallback;\n","import React, { useEffect, useState } from \"react\";\nimport {\n IonPage,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonContent,\n IonButton,\n} from \"@ionic/react\";\nimport trakt from \"../util/api/trakt\";\n\nexport default function Login() {\n const [url, setUrl] = useState(\"\");\n useEffect(() => {\n (async () => {\n setUrl(trakt.get_url());\n })();\n }, []);\n return (\n \n \n \n Login\n \n \n \n \n \n Login\n \n \n \n
\n

Login to Trakt.tv

\n

\n Dionysus requires a Trakt.tv account for keeping track of your\n watch history\n

\n {\n window.location.href = url;\n }}\n >\n Sign up\n \n {\n window.location.href = url;\n }}\n >\n Login\n \n
\n \n
\n
\n );\n}\n","import React, { useState } from \"react\";\nimport {\n IonButton,\n IonIcon,\n IonLoading,\n IonPopover,\n IonList,\n IonItem,\n} from \"@ionic/react\";\nimport { play, checkmarkCircle, ellipsisVertical } from \"ionicons/icons\";\nimport truncate from \"truncate\";\nimport startPlaying, { getLinksByShow } from \"../util/api/filepursuit\";\nimport Modal from \"./Modal\";\nimport trakt from \"../util/api/trakt\";\n\ninterface IProps {\n bgUrl: string | null;\n season: number;\n episode: number;\n episodeName: string;\n showName: string;\n seen: boolean;\n reference?: any;\n episodeId: number;\n showId: number;\n}\n\nexport default function PlayableCard({\n episodeId,\n showId,\n bgUrl,\n season,\n episode,\n showName,\n episodeName,\n seen,\n reference,\n}: IProps) {\n const [isLoading, setLoading] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [showPopover, setShowPopover] = useState<{\n open: boolean;\n event: Event | undefined;\n }>({\n open: false,\n event: undefined,\n });\n const [links, setLinks]: any[] = useState([]);\n const [isWatched, setWatched] = useState(seen);\n\n return (\n \n \n {\n setLoading(true);\n await startPlaying(showName, episode, season, episodeId);\n setLoading(false);\n }}\n className=\"show\"\n style={\n bgUrl !== null\n ? {\n \"--background\": `linear-gradient(rgba(0,0,0,${\n isWatched ? \"0.8\" : \"0.5\"\n }), rgba(0,0,0,${isWatched ? \"0.8\" : \"0.5\"})), url(${bgUrl})`,\n }\n : {}\n }\n >\n {isWatched ? (\n \n ) : (\n \"\"\n )}\n \n
\n

\n S{season}:E{episode}\n

\n

{truncate(episodeName, 35)}

\n
\n \n\n \n {\n e.persist();\n setShowPopover({ open: true, event: e.nativeEvent });\n }}\n >\n \n \n setShowPopover({ open: false, event: undefined })}\n >\n \n \n {\n setShowModal(true);\n const newLinks = await getLinksByShow(\n showName,\n episode,\n season\n );\n setLinks(newLinks);\n }}\n >\n Choose Source\n \n \n \n {isWatched ? (\n {\n (async () => {\n setWatched(false);\n setShowPopover({ open: false, event: undefined });\n await trakt.sync.history.remove({\n episodes: [\n {\n ids: {\n trakt: episodeId,\n },\n },\n ],\n });\n })();\n }}\n >\n Mark as unwatched\n \n ) : (\n {\n (async () => {\n setWatched(true);\n setShowPopover({ open: false, event: undefined });\n await trakt.sync.history.add({\n episodes: [\n {\n ids: {\n trakt: episodeId,\n },\n },\n ],\n });\n })();\n }}\n >\n Mark as watched\n \n )}\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { IonButton, IonProgressBar, IonIcon } from \"@ionic/react\";\nimport trakt from \"../util/api/trakt\";\nimport { chevronForward } from \"ionicons/icons\";\n\ninterface IProps {\n season: any;\n traktInfo: any;\n}\n\nexport default function SeasonProgress({ season, traktInfo }: IProps) {\n const [progress, setProgress] = useState(season.completed / season.aired);\n return (\n \n \n Season {season.number}\n {progress === 1 ? (\n {\n (async () => {\n setProgress(0);\n await trakt.sync.history.remove({\n shows: [\n {\n ids: {\n trakt: traktInfo.info.ids.trakt,\n },\n seasons: [\n {\n number: season.number,\n },\n ],\n },\n ],\n });\n })();\n }}\n style={{\n marginLeft: 20,\n position: \"relative\",\n zIndex: 400,\n }}\n color=\"dark\"\n fill=\"clear\"\n size=\"small\"\n >\n Mark as unwatched\n \n ) : (\n {\n (async () => {\n setProgress(1);\n await trakt.sync.history.add({\n shows: [\n {\n ids: {\n trakt: traktInfo.info.ids.trakt,\n },\n seasons: [\n {\n number: season.number,\n },\n ],\n },\n ],\n });\n })();\n }}\n style={{\n marginLeft: 20,\n position: \"relative\",\n zIndex: 400,\n }}\n color=\"dark\"\n fill=\"clear\"\n size=\"small\"\n >\n Mark as watched\n \n )}\n \n\n \n \n \n \n {season.completed} / {season.aired}\n

\n \n \n \n \n \n \n );\n}\n","import React, { useState, useCallback, useRef } from \"react\";\nimport useAsyncEffect from \"use-async-effect\";\nimport trakt from \"../util/api/trakt\";\nimport tmdb from \"../util/api/tmdb\";\nimport {\n IonButton,\n IonIcon,\n IonChip,\n IonLabel,\n IonPage,\n IonContent,\n IonSkeletonText,\n IonToast,\n} from \"@ionic/react\";\n\nimport { chevronBack, star } from \"ionicons/icons\";\nimport HorizScroll from \"../components/HorizScroll\";\nimport PlayableEpisodeCard from \"../components/PlayableEpisodeCard\";\nimport RefContext from \"../context\";\nimport SeasonProgress from \"../components/SeasonProgress\";\nimport dummyArray from \"../components/scrolls/dummyArray\";\n\nexport default function Show({ match }: any) {\n const pageRef = useRef(null);\n const [isInWatchlist, setIsInWatchlist] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n const [showToast, setShowToast] = useState(false);\n const [tmdbInfo, setTmdbInfo] = useState({\n info: {\n backdrop_path: null,\n },\n season: {\n episodes: [\n {\n still_path: null,\n name: \"\",\n },\n ],\n },\n });\n const [traktInfo, setTraktInfo] = useState({\n info: {\n ids: {\n trakt: 0,\n },\n title: \"\",\n year: 0,\n rating: 0,\n runtime: 0,\n genres: [],\n overview: \"\",\n },\n progress: {\n next_episode: {\n number: 1,\n season: 1,\n },\n seasons: [{ number: 0, aired: 0, completed: 0, episodes: [] }],\n },\n seasons: [\n {\n episodes: [\n {\n ids: {\n trakt: 0,\n },\n },\n ],\n },\n ],\n watchlist: [\n {\n show: {\n ids: {\n trakt: \"\",\n },\n },\n },\n ],\n });\n\n const epRef = useCallback((node) => {\n if (node !== null) {\n node.scrollIntoView({\n behavior: \"smooth\",\n // block: \"end\",\n block: \"nearest\",\n // inline: \"nearest\",\n });\n }\n }, []);\n\n useAsyncEffect(async () => {\n try {\n const promises = [];\n\n const id = match.params.id;\n\n promises.push(\n trakt.shows.summary({\n id,\n extended: \"full\",\n })\n );\n\n promises.push(\n trakt.shows.progress.watched({\n id,\n })\n );\n\n promises.push(\n trakt.seasons.summary({\n id,\n extended: \"episodes\",\n })\n );\n\n promises.push(trakt.sync.watchlist.get({ type: \"shows\" }));\n await Promise.all(promises).then(async (allRes) => {\n // If there is a season 0, remove it\n if (allRes[2][0].number === 0) {\n allRes[2].shift();\n }\n setTraktInfo({\n info: allRes[0],\n progress: allRes[1],\n seasons: allRes[2],\n watchlist: allRes[3],\n });\n const tmdbInfo = await tmdb(`/tv/${allRes[0].ids.tmdb}`);\n\n // The next_episode is null if they finished the show\n let seasonInfo: any = \"\";\n if (allRes[1].next_episode !== null) {\n seasonInfo = await tmdb(\n `/tv/${allRes[0].ids.tmdb}/season/${allRes[1].next_episode.season}`\n );\n } else {\n seasonInfo = null;\n }\n\n setTmdbInfo({\n info: tmdbInfo,\n season: seasonInfo,\n });\n });\n\n setLoaded(true);\n } catch (e) {\n console.error(\"Something went wrong\", e);\n setShowToast(true);\n }\n }, []);\n\n useAsyncEffect(async () => {\n if (\n traktInfo.watchlist.find(\n (show: any) => show.show.ids.trakt === traktInfo.info.ids.trakt\n ) !== undefined\n ) {\n setIsInWatchlist(true);\n }\n }, [traktInfo]);\n\n const seasons = traktInfo.progress.seasons.length;\n return (\n \n \n \n setShowToast(false)}\n message=\"An unknown error occured. Please try again\"\n />\n \n \n \n \n \n\n {isInWatchlist ? (\n {\n setIsInWatchlist(false);\n trakt.sync.watchlist.remove({\n shows: [\n {\n ids: {\n trakt: traktInfo.info.ids.trakt,\n },\n },\n ],\n });\n }}\n >\n Remove from watchlist\n \n ) : (\n {\n setIsInWatchlist(true);\n trakt.sync.watchlist.add({\n shows: [\n {\n ids: {\n trakt: traktInfo.info.ids.trakt,\n },\n },\n ],\n });\n }}\n >\n Add to watchlist\n \n )}\n \n\n \n {isLoaded ? (\n \n {traktInfo.info.title}\n \n ) : (\n \n )}\n\n {isLoaded ? (\n

\n {seasons} season{seasons !== 1 ? \"s\" : \"\"}{\" \"}\n \n •\n {\" \"}\n {traktInfo.info.runtime} mins per episode\n

\n ) : (\n \n )}\n\n {isLoaded ? (\n \n \n {traktInfo.info.rating.toPrecision(2)}\n\n {traktInfo.info.genres.map((genre, index) => (\n \n {genre}\n \n ))}\n

\n ) : (\n \n )}\n \n \n\n {isLoaded ? (\n \n {traktInfo.info.overview}\n \n ) : (\n <>\n \n \n \n \n )}\n\n {isLoaded ? (\n traktInfo.progress.next_episode !== null ? (\n <>\n

Next episode

\n \n {tmdbInfo.season.episodes.length > 1\n ? traktInfo.progress.seasons[\n traktInfo.progress.next_episode.season - 1\n ].episodes.map((episode: any, index) => {\n return (\n \n );\n })\n : \"\"}\n \n \n ) : (\n
\n

You're up to date!

\n

You've seen every episode of this show

\n
\n )\n ) : (\n <>\n

Next Episode

\n \n {dummyArray.map((x: number, index) => (\n \n ))}\n \n \n )}\n\n
\n

Seasons

\n
\n {isLoaded\n ? traktInfo.progress.seasons.map((season) => (\n \n ))\n : dummyArray.map((x: number, index) => (\n \n ))}\n
\n
\n
\n
\n
\n );\n}\n","import React, { useState } from \"react\";\nimport { IonPage, IonContent, IonIcon, IonButton } from \"@ionic/react\";\nimport useAsyncEffect from \"use-async-effect\";\nimport trakt from \"../util/api/trakt\";\nimport tmdb from \"../util/api/tmdb\";\nimport PlayableEpisodeCard from \"../components/PlayableEpisodeCard\";\nimport { star, chevronBack } from \"ionicons/icons\";\n\nexport default function Season({ match }: any) {\n const [tmdbInfo, setTmdbInfo] = useState({\n episodes: [\n {\n still_path: \"\",\n name: \"\",\n overview: \"\",\n air_date: \"\",\n vote_average: 0,\n vote_count: 0,\n },\n ],\n });\n const [showInfo, setShowInfo] = useState({\n title: \"\",\n year: 0,\n ids: { trakt: 0 },\n });\n const [seasonInfo, setSeasonsInfo] = useState({\n complted: 0,\n seasons: [\n {\n aired: 0,\n completed: 0,\n episodes: [\n {\n number: 1,\n completed: false,\n last_watched_at: null,\n ids: {\n trakt: 0,\n },\n },\n ],\n },\n ],\n });\n const [seasons, setSeasons] = useState([\n { episodes: [{ ids: { trakt: 0 } }] },\n ]);\n const id = match.params.id;\n const season = match.params.season;\n\n useAsyncEffect(async () => {\n const promises = [];\n\n promises.push(\n trakt.shows.progress.watched({\n id,\n specials: false,\n })\n );\n\n promises.push(\n trakt.shows.summary({\n id,\n })\n );\n\n promises.push(\n trakt.seasons.summary({\n id,\n extended: \"episodes\",\n })\n );\n\n Promise.all(promises).then(async (allRes) => {\n setSeasonsInfo(allRes[0]);\n setShowInfo(allRes[1]);\n\n // If there is a season 0, remove it\n if (allRes[2][0].number === 0) {\n setSeasons(allRes[2].shift());\n }\n\n setSeasons(allRes[2]);\n\n const res = await tmdb(`/tv/${allRes[1].ids.tmdb}/season/${season}`);\n setTmdbInfo(res);\n });\n }, []);\n return (\n \n \n \n \n \n \n \n

{showInfo.title}

\n \n

Season {season}

\n\n {seasonInfo.seasons[season - 1] &&\n seasonInfo.seasons[season - 1].episodes.length > 1 &&\n tmdbInfo.episodes.length > 1\n ? seasonInfo.seasons[season - 1].episodes.map(\n (episode: any, index) => {\n return (\n \n \n \n

{tmdbInfo.episodes[episode.number - 1].overview}

\n\n

\n \n {tmdbInfo.episodes[\n episode.number - 1\n ].vote_average.toPrecision(2)}{\" \"}\n \n •\n {\" \"}\n {tmdbInfo.episodes[episode.number - 1].air_date}\n

\n \n \n );\n }\n )\n : \"\"}\n \n
\n
\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport useAsyncEffect from \"use-async-effect\";\nimport trakt from \"../util/api/trakt\";\nimport tmdb from \"../util/api/tmdb\";\nimport Card from \"../components/Card\";\nimport {\n IonContent,\n IonPage,\n IonSearchbar,\n IonButton,\n IonIcon,\n} from \"@ionic/react\";\nimport { chevronBack } from \"ionicons/icons\";\n\ninterface IProps {\n initialTerm: string;\n type: \"show\" | \"movie\";\n history: any;\n}\n\nexport default function SearchResults({ initialTerm, type, history }: IProps) {\n const [shows, setShows]: any[] = useState([]);\n const searchRef = useRef(null);\n const [term, setTerm]: [string | undefined, any] = useState(initialTerm);\n\n function onChange(val: string) {\n if (val !== \"\") {\n setTerm(val);\n } else {\n setTerm(undefined);\n }\n }\n\n useEffect(() => {\n // Set the term since react likes to keep the previous val for the useState hook\n setTerm(initialTerm);\n }, [initialTerm]);\n\n useAsyncEffect(async () => {\n if (term === \"\") {\n return;\n }\n const showInfos = await trakt.search.text({\n type,\n query: term,\n });\n\n let showPromises = showInfos.map((ep: any) => {\n if (ep.show.ids.tmdb === null) {\n return null;\n }\n\n return tmdb(`/tv/${ep.show.ids.tmdb}`);\n });\n\n showPromises = showPromises.filter(\n (showPromise: Promise | null) => showPromise !== null\n );\n\n const showElements: any[] = [];\n const width = 342;\n\n await Promise.all(showPromises).then((shows: any[]) => {\n shows.forEach((show) => {\n const foundShow = showInfos.find(\n (ep: any) => ep.show.ids.tmdb === show.id\n );\n\n if (foundShow !== undefined) {\n showElements.push(\n \n );\n }\n });\n });\n\n setShows(showElements);\n }, [term]);\n\n if (searchRef !== null && searchRef.current !== null) {\n (searchRef.current as any).setFocus();\n }\n return (\n \n \n \n \n \n onChange(e.detail.value)}\n onIonClear={() => {\n history.push(\"/shows\");\n }}\n />\n\n {term !== undefined ? (\n <>\n \n {type === \"show\" ? \"Shows\" : \"Movies\"} matching \"{term}\"\n \n \n {shows}\n \n \n ) : (\n \n Start searching for {type === \"show\" ? \"shows\" : \"movies\"}\n \n )}\n \n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\nimport {\n IonApp,\n IonIcon,\n IonLabel,\n IonRouterOutlet,\n IonTabBar,\n IonTabButton,\n IonTabs,\n} from \"@ionic/react\";\nimport { IonReactRouter } from \"@ionic/react-router\";\nimport { tv, film, heart } from \"ionicons/icons\";\nimport Shows from \"./pages/Shows\";\nimport Movies from \"./pages/Movies\";\nimport Favorites from \"./pages/Favorites\";\nimport TraktCallback from \"./pages/callback/TraktCallback\";\n\n/* Core CSS required for Ionic components to work properly */\nimport \"@ionic/react/css/core.css\";\n\n/* Basic CSS for apps built with Ionic */\nimport \"@ionic/react/css/normalize.css\";\nimport \"@ionic/react/css/structure.css\";\nimport \"@ionic/react/css/typography.css\";\n\n/* Optional CSS utils that can be commented out */\nimport \"@ionic/react/css/padding.css\";\nimport \"@ionic/react/css/float-elements.css\";\nimport \"@ionic/react/css/text-alignment.css\";\nimport \"@ionic/react/css/text-transformation.css\";\nimport \"@ionic/react/css/flex-utils.css\";\nimport \"@ionic/react/css/display.css\";\n\n/* Theme variables */\nimport \"./theme/variables.css\";\n\n/* Custom CSS */\nimport \"./styles/main.css\";\nimport \"./styles/horiz.css\";\nimport \"./styles/loading.css\";\n\nimport Login from \"./pages/Login\";\nimport { Plugins } from \"@capacitor/core\";\nimport trakt from \"./util/api/trakt\";\nimport Show from \"./pages/Show\";\nimport Season from \"./pages/Season\";\nimport SearchResults from \"./pages/SeachResults\";\n\nconst { Storage } = Plugins;\n\nconst App: React.FC = () => {\n const [isAuthed, setAuthed] = useState(false);\n useEffect(() => {\n document.body.classList.toggle(\"dark\", true);\n (async () => {\n const { value } = await Storage.get({ key: \"token\" });\n\n if (value !== null) {\n await trakt.import_token(JSON.parse(value));\n setAuthed(true);\n }\n })();\n }, [isAuthed]);\n\n return (\n \n \n \n \n (\n \n )}\n />\n {\n return isAuthed ? : ;\n }}\n />\n \n isAuthed ? : \n }\n />\n (isAuthed ? : )}\n />\n (isAuthed ? : )}\n />\n (isAuthed ? : )}\n />\n (isAuthed ? : )}\n />\n \n isAuthed ? (\n \n ) : (\n \n )\n }\n />\n \n \n \n \n TV Shows\n \n \n \n Movies\n \n \n \n My Favorites\n \n \n \n \n \n );\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}