diff --git a/src/channel/playlist.js b/src/channel/playlist.js index c3248445..e012939f 100644 --- a/src/channel/playlist.js +++ b/src/channel/playlist.js @@ -1238,7 +1238,7 @@ PlaylistModule.prototype.startPlayback = function (time) { } /* Lead-in time of 3 seconds to allow clients to buffer */ - time = time || (media.seconds > 0 ? -3 : 0); + time = time || (media.seconds > 0 ? (media.type == "yt" ? -6 : -3) : 0); //if its a yt vid make it 6 for the link pull media.paused = time < 0; media.currentTime = time; @@ -1258,8 +1258,16 @@ PlaylistModule.prototype.startPlayback = function (time) { if (!self.current || !self.current.media) { return; } + + if(self.current.media.type == "yt"){//if its yt + InfoGetter.getYTRaw(self.current.media.id,function(url){//get raw link from invidious api + self.current.media.meta.rawLink = url;//set to meta + self.sendChangeMedia(self.channel.users);//fuggin SEND IT + }); - self.sendChangeMedia(self.channel.users); + }else{ + self.sendChangeMedia(self.channel.users); + } self.channel.notifyModules("onMediaChange", [self.current.media]); /* Only start the timer if the media item is not live, i.e. has a duration */ diff --git a/src/get-info.js b/src/get-info.js index bcd4b8e0..eabab281 100644 --- a/src/get-info.js +++ b/src/get-info.js @@ -594,5 +594,26 @@ module.exports = { } else { callback("Unknown media type '" + type + "'", null); } - } + }, + getYTRaw: function (id, cb){ + var options = { + host: Config.get("invidious-source"), + port: 443, + path: "/api/v1/videos/" + id, + method: "GET", + timeout: 1000 + }; + + urlRetrieve(https, options, function (status, data) { + if(status !== 200) { + console.log("Invidious HTTPS error code: " + status); + } + + var vid = JSON.parse(data); + + if(vid.formatStreams[0] != null){//TEMPORARY FOR FRONTEND DEV PURPOSES, PULL LINK AND SET AGAIN WHEN VIDEO QUEUED(shit expires) + cb(vid.formatStreams[vid.formatStreams.length - 1].url); + } + }); + } }; diff --git a/src/media.js b/src/media.js index bd1818b1..bcf7f830 100644 --- a/src/media.js +++ b/src/media.js @@ -41,7 +41,8 @@ Media.prototype = { embed: this.meta.embed, gdrive_subtitles: this.meta.gdrive_subtitles, textTracks: this.meta.textTracks, - mixer: this.meta.mixer + mixer: this.meta.mixer, + rawLink: this.meta.rawLink } }; diff --git a/templates/useroptions.pug b/templates/useroptions.pug index 28c6ca0e..9f6ed902 100644 --- a/templates/useroptions.pug +++ b/templates/useroptions.pug @@ -5,12 +5,12 @@ mixin lcheckbox(id, label) .checkbox input(type="checkbox", id=id) -mixin rcheckbox(id, label) +mixin rcheckbox(id, label, title) .form-group .col-sm-8.col-sm-offset-4 .checkbox - label(for=id) - input(type="checkbox", id=id) + label(for=id, title=title) + input(type="checkbox", id=id,title=title) = label mixin textbox(id, label, placeholder) @@ -33,7 +33,6 @@ mixin us-general option(value="/css/themes/fore.st.css") fore.st .col-sm-4 .col-sm-8 - p.text-danger Changing layouts may require refreshing to take effect. +rcheckbox("us-no-channelcss", "Ignore Channel CSS") +rcheckbox("us-no-channeljs", "Ignore Channel Javascript") .clear @@ -55,19 +54,21 @@ mixin us-playback form.form-horizontal(action="javascript:void(0)") +rcheckbox("us-synch", "Synchronize video playback") +textbox("us-synch-accuracy", "Synch threshold (seconds)", "2") - +rcheckbox("us-wmode-transparent", "Set wmode=transparent") - .form-group - .col-sm-4 - .col-sm-8 - p.text-info Setting wmode=transparent allows objects to be displayed above the video player, but may cause performance issues on some systems. + +rcheckbox("us-wmode-transparent", "Set wmode=transparent", "Allows elements to be placed over the video. May cause a bit of lag on toasters.") +rcheckbox("us-hidevideo", "Remove the video player") +rcheckbox("us-playlistbuttons", "Hide playlist buttons by default") +rcheckbox("us-oldbtns", "Compact playlist buttons") +rcheckbox("us-video-orientation", "Show video orientation buttons above player") .form-group - label.control-label.col-sm-4(for="#us-default-quality") Quality Preference + label.control-label.col-sm-4(for="#us-default-quality",title="Will not work automagically on official YT embeds because google are dicks.") Quality Preference .col-sm-8 - select#us-default-quality.form-control + select#us-yt-source.form-control(title="YT Embed may not work with all site features.") + option(value="vid.puffyan.us") Raw File Link(720p) + option(value="OFYT") Official YT Embed + .form-group + label.control-label.col-sm-4(for="#us-default-quality",title="Will not work automagically on official YT embeds because google are dicks.") Quality Preference + .col-sm-8 + select#us-default-quality.form-control(title="Will not work automagically on officialy YT embeds because google are dicks.") option(value="auto") Auto option(value="240") 240p option(value="360") 360p @@ -75,10 +76,6 @@ mixin us-playback option(value="720") 720p option(value="1080") 1080p option(value="best") Highest Available - .form-group - .col-sm-4 - .col-sm-8 - p.text-info Due to technical changes on YouTube's side, the CyTube quality preference can no longer be automatically applied on YouTube videos. See this GitHub issue for details. mixin us-chat #us-chat.tab-pane @@ -89,27 +86,24 @@ mixin us-chat +rcheckbox("us-sort-rank", "Sort userlist by rank") +rcheckbox("us-sort-afk", "Sort AFKers to bottom") +rcheckbox("us-legacy-emote", "Use legacy Cytube emote menu") - .col-sm-4 - .col-sm-8 - p.text-info The following 3 options apply to how and when you will be notified if a new chat message is received while CyTube is not the active window. .form-group - label.control-label.col-sm-4(for="#us-blink-title") Blink page title on new messages + label.control-label.col-sm-4(for="#us-blink-title",title="Only applies when not active window/tab.") Blink page title on new messages .col-sm-8 - select#us-blink-title.form-control + select#us-blink-title.form-control(title="Only applies when not active window/tab.") option(value="never") Never option(value="onlyping") Only when I am mentioned or PMed option(value="always") Always .form-group - label.control-label.col-sm-4(for="#us-ping-sound") Notification sound on new messages + label.control-label.col-sm-4(for="#us-ping-sound",title="Only applies when not active window/tab.") Notification sound on new messages .col-sm-8 - select#us-ping-sound.form-control + select#us-ping-sound.form-control(title="Only applies when not active window/tab.") option(value="never") Never option(value="onlyping") Only when I am mentioned or PMed option(value="always") Always .form-group - label.control-label.col-sm-4(for="#us-notifications") Desktop notifications on new messages + label.control-label.col-sm-4(for="#us-notifications",title="Only applies when not active window/tab.") Desktop notifications on new messages .col-sm-8 - select#us-notifications.form-control + select#us-notifications.form-control(title="Only applies when not active window/tab.") option(value="never") Never option(value="onlyping") Only when I am mentioned or PMed option(value="always") Always diff --git a/www/js/callbacks.js b/www/js/callbacks.js index d412bbdb..886289a8 100644 --- a/www/js/callbacks.js +++ b/www/js/callbacks.js @@ -859,7 +859,6 @@ Callbacks = { if (isNaN(VOLUME) || VOLUME > 1 || VOLUME < 0) { VOLUME = 1; } - function loadNext() { if(PLAYER){ PLAYER.latch(); diff --git a/www/js/data.js b/www/js/data.js index 03102f0c..ecc2ac45 100644 --- a/www/js/data.js +++ b/www/js/data.js @@ -170,6 +170,7 @@ var USEROPTS = { sort_rank : getOrDefault("sort_rank", true), sort_afk : getOrDefault("sort_afk", false), legacy_emote : getOrDefault("legacy_emote", false), + yt_source : getOrDefault("yt_source", "vid.puffyan.us"), show_seconds : getOrDefault("show_seconds", false), default_quality : getOrDefault("default_quality", "auto"), boop : getOrDefault("boop", "never"), diff --git a/www/js/fpanel.js b/www/js/fpanel.js index c33db493..fb530a46 100644 --- a/www/js/fpanel.js +++ b/www/js/fpanel.js @@ -250,7 +250,10 @@ fpset.ocall = function(){ $("
").append( $("