diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js
index d3102aa15..42fc7a2aa 100644
--- a/src/routes/Player/Player.js
+++ b/src/routes/Player/Player.js
@@ -6,7 +6,8 @@ const classnames = require('classnames');
const debounce = require('lodash.debounce');
const { useRouteFocused } = require('stremio-router');
const { useServices } = require('stremio/services');
-const { HorizontalNavBar, useDeepEqualEffect, useFullscreen, useBinaryState, useToast, useStreamingServer } = require('stremio/common');
+const { HorizontalNavBar, Button, useDeepEqualEffect, useFullscreen, useBinaryState, useToast, useStreamingServer } = require('stremio/common');
+const Icon = require('@stremio/stremio-icons/dom');
const BufferingLoader = require('./BufferingLoader');
const ControlBar = require('./ControlBar');
const InfoMenu = require('./InfoMenu');
@@ -63,6 +64,18 @@ const Player = ({ urlParams, queryParams }) => {
videoRef.current.dispatch(args);
}
}, []);
+ const playlist = React.useMemo(() => {
+ if (player.selected === null || typeof player.selected.stream.url !== 'string') {
+ return null;
+ }
+
+ const m3u = `#EXTM3U\n\n#EXTINF:0,${encodeURIComponent(player.title)}\n${encodeURI(player.selected.stream.url)}`;
+ const base64File = `data:application/octet-stream;charset=utf-8;base64,${window.btoa(m3u)}`;
+ return {
+ name: `${player.title}.m3u`,
+ file: base64File
+ };
+ }, [player]);
const onImplementationChanged = React.useCallback((manifest) => {
manifest.props.forEach((propName) => {
dispatch({ type: 'observeProp', propName });
@@ -415,18 +428,32 @@ const Player = ({ urlParams, queryParams }) => {
videoState.buffering ?