Skip to content

Commit 88f8448

Browse files
authored
v1.3.0 (#555)
* Add @amilajack/react-plyr for caption support * Add initial support for subtitles * bump g++ version (#418) * chore(deps): update dependency concurrently to v4.0.1 * chore(deps): update dependency electron-builder to ^20.36.2 * chore(deps): update dependency eslint-config-prettier to ^3.3.0 * chore(deps): update dependency eslint-plugin-promise to v4.0.1 * chore(deps): update dependency testcafe to ^0.23.2 * chore(deps): update dependency url-loader to v1.1.2 * fix(deps): update dependency @amilajack/react-plyr to ^2.1.2 * fix(deps): update dependency vlc-command to v1.1.2 * fix(deps): update dependency react-router-redux to v5.0.0-alpha.8 * fix(deps): update dependency yargs to v12.0.4 * fix(deps): update react monorepo to v16.6.3 * fix(deps): update dependency electron-window-state to v5 (#443) * chore(deps): update dependency why-did-you-update to v1 (#442) * chore(deps): update dependency spectron to v5 (#439) * chore(deps): update dependency sinon to v7 (#438) * chore(deps): update dependency lint-staged to v8 (#437) * chore(deps): update dependency husky to v1 (#435) * chore(deps): update dependency fbjs-scripts to v1 (#434) * chore(deps): update dependency eslint-plugin-jest to v22 (#433) * chore(deps): update dependency concurrently to v4.1.0 * chore(deps): update dependency detect-port to ^1.3.0 * chore(deps): update dependency electron to v2.0.14 * chore(deps): update dependency husky to ^1.2.0 * chore(deps): update dependency lint-staged to ^8.1.0 * chore(deps): update dependency lru-cache to v4.1.4 * fix(deps): update dependency yargs to v12.0.5 * chore(deps): update dependency eslint-plugin-jest to v22.1.0 * chore(deps): update dependency flow-bin to ^0.87.0 * chore(deps): update dependency lru-cache to v4.1.5 * chore(deps): update dependency prettier to ^1.15.3 * chore(deps): update dependency stylelint to ^9.9.0 * chore(deps): update dependency testcafe-react-selectors to ^3.0.2 * fix(deps): update dependency electron-window-state to ^5.0.3 * fix(deps): update dependency popper.js to ^1.14.6 * chore(deps): update dependency autoprefixer to ^9.4.2 * chore(deps): update dependency dotenv to v6.2.0 * chore(deps): update dependency enzyme-to-json to ^3.3.5 * chore(deps): update dependency eslint-plugin-jest to v22.1.2 * chore(deps): update dependency eslint to ^5.10.0 * chore(deps): update dependency electron-builder to ^20.38.3 * chore(deps): update dependency electron to v2.0.15 * chore(deps): update dependency enzyme to ^3.8.0 * chore(deps): update dependency flow-bin to ^0.89.0 * chore(deps): update dependency husky to ^1.2.1 * chore(deps): update dependency node-sass to v4.11.0 * chore(deps): update dependency sinon to ^7.2.2 * chore(deps): update dependency testcafe-browser-provider-electron to ^0.0.7 * chore(deps): update dependency webpack-merge to v4.1.5 * fix(deps): update dependency react-hot-loader to v4.6.0 * fix(deps): update dependency react-transition-group to ^2.5.1 * chore(deps): update dependency autoprefixer to ^9.4.3 * chore(deps): update dependency electron to v2.0.16 * chore(deps): update dependency testcafe to ^0.23.3 * chore(deps): update dependency electron-builder to ^20.38.4 * chore(deps): update dependency webpack-dev-server to ^3.1.11 * chore(deps): update dependency testcafe-browser-provider-electron to ^0.0.8 * fix(deps): update dependency bootstrap to v4.2.1 * fix(deps): update dependency get-port to ^4.1.0 * fix(deps): update dependency react-hot-loader to v4.6.3 * fix(deps): update dependency react-transition-group to ^2.5.2 * fix(deps): update react monorepo to v16.7.0 * chore(deps): update dependency webpack-dev-server to ^3.1.12 * chore(deps): update dependency webpack-dev-server to ^3.1.13 * chore(deps): update dependency husky to ^1.3.1 * chore(deps): update dependency webpack-dev-server to ^3.1.14 * chore(deps): update dependency eslint-plugin-react to ^7.12.1 * chore(deps): update dependency eslint to ^5.12.0 * chore(deps): update dependency autoprefixer to ^9.4.4 * chore(deps): update dependency eslint-plugin-react to ^7.12.3 * chore(deps): update dependency webpack-merge to v4.2.1 * chore(deps): update dependency chalk to ^2.4.2 * chore(deps): update dependency webpack-cli to ^3.2.1 * chore(deps): update dependency webpack-dev-middleware to ^3.5.0 * chore(deps): update dependency eslint-plugin-jest to v22.1.3 * chore(deps): update dependency flow-bin to ^0.90.0 * chore(deps): update dependency autoprefixer to ^9.4.5 * chore(deps): update dependency babel-plugin-flow-runtime to v0.18.0 * chore(deps): update dependency electron-builder to ^20.38.5 * chore(deps): update dependency eslint to ^5.12.1 * chore(deps): update dependency eslint-config-prettier to ^3.5.0 * chore(deps): update dependency eslint-plugin-react to ^7.12.4 * chore(deps): update dependency flow-bin to ^0.91.0 * chore(deps): update dependency node-libs-browser to v2.2.0 * chore(deps): update dependency stylelint to ^9.10.0 * chore(deps): update dependency testcafe-react-selectors to ^3.0.3 * chore(deps): update dependency webpack-dev-middleware to ^3.5.1 * fix(deps): update dependency react-transition-group to ^2.5.3 * chore(deps): update dependency stylelint to ^9.10.1 * chore(deps): update dependency eslint-config-prettier to ^3.6.0 * chore(deps): update dependency autoprefixer to ^9.4.7 * chore(deps): update dependency electron to v2.0.17 * chore(deps): update dependency sinon to ^7.2.6 * chore(deps): update dependency autoprefixer to ^9.4.9 * chore(deps): update dependency source-map-support to ^0.5.10 * chore(deps): update dependency electron-rebuild to ^1.8.4 * fix movie images issues * fix(deps): update dependency bootstrap to v4.3.1 [security] * update webpack renderer dev config * fix bug causing item page to not open * add auto update support
1 parent a832a73 commit 88f8448

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+6813
-6548
lines changed

.babelrc

Lines changed: 0 additions & 54 deletions
This file was deleted.

.env.example

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,9 @@ CONFIG_MAX_CONNECTIONS=20
7272

7373
# English subtitles support
7474
#
75-
# This flag allows subtitles in torrents to be played along with the movie. Be
76-
# careful, since this is a very early stage experiment! Currently this only
77-
# allows English subtitles. Support for subtitles of multiple languages is
78-
# planned for a future release.
75+
# This flag allows subtitles in torrents to be played along with the movie
7976

80-
FLAG_SUBTITLES=false
77+
FLAG_SUBTITLES=true
8178

8279

8380

.eslintrc

Lines changed: 0 additions & 25 deletions
This file was deleted.

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ flow-typed/npm/*
3939
release
4040
app/main.prod.js
4141
app/main.prod.js.map
42-
app/bundle.js
43-
app/bundle.js.map
4442
app/style.css
4543
app/style.css.map
4644
dist

.travis.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,19 @@ matrix:
77
language: node_js
88
node_js:
99
- node
10-
- 9
1110
env:
1211
- ELECTRON_CACHE=$HOME/.cache/electron
1312
- ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder
1413
- os: linux
1514
language: node_js
1615
node_js:
1716
- node
18-
- 9
1917
addons:
2018
apt:
2119
sources:
2220
- ubuntu-toolchain-r-test
2321
packages:
24-
- g++-4.8
22+
- g++-8
2523
- icnsutils
2624
- graphicsmagick
2725
- xz-utils
@@ -49,7 +47,7 @@ cache:
4947
- "$HOME/docker"
5048

5149
install:
52-
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CXX="g++-4.8"; fi
50+
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export CXX="g++-8"; fi
5351
- yarn
5452
- |
5553
if [ "$TRAVIS_OS_NAME" == "linux" ]; then

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,22 @@
2424
</a>
2525
</div>
2626

27+
<div>
28+
<img src="https://raw.github.com/amilajack/popcorn-time-desktop-design/master/Desktop.jpg" width="500px"/>
29+
</div>
30+
2731
<br />
2832

29-
## Features:
3033

31-
**Modern**: This client was started from scratch and was designed to be performant and customizable
34+
## Features:
3235

33-
**Performance**: Significantly faster than other clients. Everything from scrolling perf to playing movies is buttery smooth
36+
***Modern**: This client was started from scratch and was designed to be performant and customizable
3437

35-
**Faster Torrents**: New API optimized for fast torrents by querying the from multiple endpoints
38+
***Performance**: Significantly faster than other clients. Everything from scrolling perf to playing movies is buttery smooth
3639

37-
**Modern Stack**: Electron, React, Redux, Webpack, ES8, Flow, and others
40+
* 💨**Faster Torrents**: New API optimized for fast torrents by querying the from multiple endpoints
3841

39-
**Cross Platform**: Works on Mac, Windows, and Linux
42+
***Cross Platform**: Works on Mac, Windows, and Linux
4043

4144
## Getting started:
4245

@@ -60,7 +63,7 @@ cd popcorn-time-desktop
6063
# 💡 For casting support, you will need to satisfy mdns's requirements:
6164
# For windows install bonjour: https://support.apple.com/downloads/bonjour_for_windows
6265
# For linux, make sure you have these dependencies installed with apt-get:
63-
# https://github.com/amilajack/popcorn-time-desktop/blob/v1.2.0/.travis.yml#L24-L35
66+
# https://github.com/amilajack/popcorn-time-desktop/blob/v1.3.0/.travis.yml#L24-L35
6467

6568
# Install dependencies
6669
# Have a cup of coffee ☕️ this might take a while

app/api/Player.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import vlcCommand from 'vlc-command';
77
import ChromecastPlayerProvider from './players/ChromecastPlayerProvider';
88
import type { metadataType } from './players/PlayerProviderInterface';
99

10+
export type subtitleType = { kind: string, src: string, srclang: string };
11+
1012
const { powerSaveBlocker } = remote;
1113

1214
export default class Player {
@@ -62,11 +64,12 @@ export default class Player {
6264
async initCast(
6365
provider: ChromecastPlayerProvider,
6466
streamingUrl: string,
65-
metadata: metadataType
67+
metadata: metadataType,
68+
subtitles: Array<subtitleType>
6669
) {
6770
this.powerSaveBlockerId = powerSaveBlocker.start('prevent-app-suspension');
6871
const addr = streamingUrl.replace('localhost', network());
69-
return provider.play(addr, metadata);
72+
return provider.play(addr, metadata, subtitles);
7073
}
7174

7275
initYouTube() {

app/api/Subtitle.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ export default class SubtitleServer {
3131

3232
// Start the static file server for the subtitle files
3333
const server = express();
34+
// Enable CORS
35+
// https://github.com/thibauts/node-castv2-client/wiki/How-to-use-subtitles-with-the-DefaultMediaReceiver-app#subtitles
36+
server.use((req, res, next) => {
37+
if (req.headers.origin) {
38+
res.headers['Access-Control-Allow-Origin'] = req.headers.origin;
39+
}
40+
next();
41+
});
3442
server.use(express.static(this.basePath));
3543
this.server = server.listen(this.port);
3644

app/api/Torrent.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,13 @@ export default class Torrent {
6565
magnetURI: string,
6666
metadata: metadataType,
6767
supportedFormats: Array<string>,
68-
cb
68+
cb: (
69+
servingUrl: string,
70+
file: { name: string },
71+
files: string,
72+
torrent: string,
73+
subtitle: { name: string } | boolean
74+
) => void
6975
) {
7076
if (this.inProgress) {
7177
console.log('Torrent already in progress');
@@ -159,7 +165,8 @@ export default class Torrent {
159165
file,
160166
files,
161167
torrent,
162-
selectSubtitleFile(files, activeMode, metadata)
168+
false
169+
// selectSubtitleFile(files, activeMode, metadata)
163170
);
164171

165172
this.clearIntervals();

app/api/players/ChromecastPlayerProvider.js

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
// @flow
22
import { Client, DefaultMediaReceiver } from 'castv2-client';
33
import mdns from 'mdns';
4+
import network from 'network-address';
45
import type {
56
PlayerProviderInterface,
67
deviceType,
7-
metadataType
8+
metadataType,
9+
subtitleType
810
} from './PlayerProviderInterface';
911

1012
type castv2DeviceType = {
@@ -81,13 +83,28 @@ class ChromecastPlayerProvider implements PlayerProviderInterface {
8183
return selectedDevice;
8284
}
8385

84-
play(contentUrl: string, metadata: metadataType) {
86+
play(
87+
contentUrl: string,
88+
metadata: metadataType,
89+
subtitles: Array<subtitleType>
90+
) {
8591
const client = new Client();
8692

8793
if (!this.selectDevice) {
8894
throw new Error('No device selected');
8995
}
9096

97+
const networkAddress = network();
98+
const tracks = subtitles.map((subtitle, index) => ({
99+
trackId: index, // This is an unique ID, used to reference the track
100+
type: 'TEXT', // Default Media Receiver currently only supports TEXT
101+
trackContentId: subtitle.src.replace('localhost', networkAddress), // the URL of the VTT (enabled CORS and the correct ContentType are required)
102+
trackContentType: 'text/vtt', // Currently only VTT is supported
103+
name: subtitle.srclang, // a Name for humans
104+
language: subtitle.srclang, // the language
105+
subtype: 'SUBTITLES' // should be SUBTITLES
106+
}));
107+
91108
return new Promise((resolve, reject) => {
92109
client.connect(
93110
this.selectedDevice.address,
@@ -101,6 +118,8 @@ class ChromecastPlayerProvider implements PlayerProviderInterface {
101118
contentType: 'video/mp4',
102119
streamType: 'BUFFERED', // or LIVE
103120

121+
tracks,
122+
104123
// Title and cover displayed while buffering
105124
metadata: {
106125
type: 0,
@@ -117,10 +136,14 @@ class ChromecastPlayerProvider implements PlayerProviderInterface {
117136
}
118137
};
119138

120-
player.load(media, { autoplay: true }, _err => {
121-
if (_err) reject(_err);
122-
resolve();
123-
});
139+
player.load(
140+
media,
141+
{ autoplay: true, activeTrackIds: tracks.map(e => e.trackId) },
142+
_err => {
143+
if (_err) reject(_err);
144+
resolve();
145+
}
146+
);
124147
});
125148
}
126149
);

0 commit comments

Comments
 (0)