Skip to content

Commit

Permalink
fix(auto-play): fix issue with prevent auto-play (no buffering) not w…
Browse files Browse the repository at this point in the history
…orking.

Add FlagsParser to parse the `fflags`.
YePpHa committed Feb 2, 2018
1 parent 40e7b49 commit 235f44a
Showing 3 changed files with 65 additions and 1 deletion.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "project-maia",
"version": "0.1.14",
"version": "0.1.15",
"description": "Enhances the user experience on YouTube by providing useful features.",
"keywords": [
"YouTube",
56 changes: 56 additions & 0 deletions src/app/youtube/FlagsParser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
export class FlagsParser {
private _flags: {[key: string]: string};

constructor(flags: string|undefined) {
this._flags = FlagsParser.stringToFlags(flags);
}

setValue(name: string, value: string): void {
this._flags[name] = value;
}

getValue(name: string): string|undefined {
if (this._flags.hasOwnProperty(name)) {
return this._flags[name];
}
return undefined;
}

toString() {
return FlagsParser.flagsToString(this._flags);
}

private static _encodeComponent(value: string): string {
return encodeURIComponent(value.replace(/\+/g, " "));
}

private static _decodeComponent(value: string): string {
return decodeURIComponent(value).replace(/\+/g, " ");
}

private static flagsToString(flags: {[key: string]: string}): string {
const tokens: string[] = [];
for (let key in flags) {
if (flags.hasOwnProperty(key)) {
tokens.push(FlagsParser._encodeComponent(key) + "=" + FlagsParser._encodeComponent(flags[key]));
}
}

return tokens.join("&");
}

private static stringToFlags(raw: string|undefined): {[key: string]: string} {
if (!raw) return {};

const flags: {[key: string]: string} = {};

let tokens = raw.split("&");
for (let i = 0; i < tokens.length; i++) {
const [key, value] = tokens[i].split("=");

flags[this._decodeComponent(key || "")] = this._decodeComponent(value || "");
}

return flags;
}
}
8 changes: 8 additions & 0 deletions src/modules/autoplay/index.ts
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import { EventType } from '../../app/youtube/EventType';
import { ISettingsReact } from "../../settings/ISettings";
import { Settings as SettingsReact } from './settings';
import { Api, AutoPlayMode } from "./api";
import { FlagsParser } from "../../app/youtube/FlagsParser";
const logger = new Logger("AutoPlayModule");

export class AutoPlayModule extends Module implements onPlayerCreated, onPlayerData, onSettingsReactRegister, onPlayerApiCall {
@@ -50,7 +51,14 @@ export class AutoPlayModule extends Module implements onPlayerCreated, onPlayerD
onPlayerData(player: Player, data: PlayerData): PlayerData {
const api = this.getApi();

// Make the YouTube player respect the autoplay variable.
data.suppress_autoplay_on_watch = false;

// Prevent the YouTube player from ignoring `suppress_autoplay_on_watch`.
const flagsParser = new FlagsParser(data.fflags);
flagsParser.setValue("html5_new_autoplay_redux", "false");
data.fflags = flagsParser.toString();

if (api.isEnabled() && player.isDetailPage()) {
if (api.getMode() === AutoPlayMode.STOP) {
data.suppress_autoplay_on_watch = true;

0 comments on commit 235f44a

Please sign in to comment.