Emergency Update: Pineapple Express += 2 (1.1.2)
This commit is contained in:
parent
05f0eb0048
commit
1cdf5f8ab9
42
README.md
42
README.md
|
|
@ -1,4 +1,4 @@
|
||||||
fore.st - Pineapple Express++ (v1.1.1)
|
fore.st - Pineapple Express += 2 (v1.1.2)
|
||||||
======
|
======
|
||||||
|
|
||||||
fore.st is the server software for ourfore.st, a community based chat & synced video embedding site tailored to service
|
fore.st is the server software for ourfore.st, a community based chat & synced video embedding site tailored to service
|
||||||
|
|
@ -24,44 +24,8 @@ You can reach out by bugging rainbownapkin on the ttn discord or ourfore.st, you
|
||||||
- Thanks to calzoneman for making [cytube](https://github.com/calzoneman/sync), that saved our asses.
|
- Thanks to calzoneman for making [cytube](https://github.com/calzoneman/sync), that saved our asses.
|
||||||
- Thanks to the core TTN community and everyone else who's ever used it, I was only there for the last handful of years but it was an absolute fuckin' ride. You guys are the best, it isn't TTN but I hope this at least help fills the gap.
|
- Thanks to the core TTN community and everyone else who's ever used it, I was only there for the last handful of years but it was an absolute fuckin' ride. You guys are the best, it isn't TTN but I hope this at least help fills the gap.
|
||||||
|
|
||||||
## Pineapple Express++ 1.1.1 Release Notes
|
## Pineapple Express += 2 1.1.2 Release Notes
|
||||||
Abriged Patchnotes:
|
- Fixed busted video providers with YT-DLP integration (youtube/dailymotion)
|
||||||
- bugfixes/QoL tweaks
|
|
||||||
- remove duplicated blazem from tokefile
|
|
||||||
- fix playlist on submit channel for standard users
|
|
||||||
- only show nested menu on playlist if user rank is <= 2
|
|
||||||
- show "playlist" button for users rank 1 on r/submit channel
|
|
||||||
- stop tokebot from including full toke messages
|
|
||||||
- fully disconnect/kick unregistered users from channels connect
|
|
||||||
- limit words/link display text(DO NOT MODIFY LINK HREF) to 40 chars to prevent breaking chat width
|
|
||||||
- limit image embed width
|
|
||||||
- fix video/chat/autobump UI components not expanding after collapsing in chromium based browsers
|
|
||||||
- remove close playlist button when legacy playlist is disabled
|
|
||||||
- fix expand/shade playlist items button
|
|
||||||
- add end date to playlist items
|
|
||||||
- userlist collapse/expand persistent accross browser sessions
|
|
||||||
- cinema mode persistent accross browser sessions
|
|
||||||
- dissapearing server whispers/join messages
|
|
||||||
- fix input field lengths in quicksettings
|
|
||||||
- prevent temporary items on submit channel
|
|
||||||
- always block anonymous user (ignore channel setting)
|
|
||||||
- use regex for whitespace detection in commands
|
|
||||||
|
|
||||||
- client side commands
|
|
||||||
- process commands that start with "/" or "(whitespace)/" in the browser
|
|
||||||
- allow admins to trigger client side commands remotely
|
|
||||||
- show words that start with "/" as a link that chatsmacks command(similiar to behavior with words that start with !)
|
|
||||||
- /thunder
|
|
||||||
- Disable lightning (seizure prevention)
|
|
||||||
|
|
||||||
- update tab completion
|
|
||||||
- add non-toke server-side commands to tab completion(check perms for respective commands)
|
|
||||||
- add client-side commands to tab completion
|
|
||||||
- show autocomplete in text box
|
|
||||||
|
|
||||||
- kick users w/ old client
|
|
||||||
|
|
||||||
- spooktober themes
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Original fore.st code is provided under the Affero General Public License v3 in order to prevent fore.st being used in proprietary software.
|
Original fore.st code is provided under the Affero General Public License v3 in order to prevent fore.st being used in proprietary software.
|
||||||
|
|
|
||||||
2769
package-lock.json
generated
2769
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "fore.st",
|
"name": "fore.st",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"description": "fore.st: A fork of cytube tailored for the TTN Community",
|
"description": "fore.st: A fork of cytube tailored for the TTN Community",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-minify": "^1.0.0",
|
"express-minify": "^1.0.0",
|
||||||
"json-typecheck": "^0.1.3",
|
"json-typecheck": "^0.1.3",
|
||||||
"knex": "^0.95.2",
|
"knex": "^3.1.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
|
@ -38,7 +38,8 @@
|
||||||
"source-map-support": "^0.5.19",
|
"source-map-support": "^0.5.19",
|
||||||
"toml": "^3.0.0",
|
"toml": "^3.0.0",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"yamljs": "^0.2.8"
|
"yamljs": "^0.2.8",
|
||||||
|
"youtube-dl-exec": "^3.0.10"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build-server": "babel -D --source-maps --out-dir lib/ src/",
|
"build-server": "babel -D --source-maps --out-dir lib/ src/",
|
||||||
|
|
|
||||||
|
|
@ -1,60 +1,2 @@
|
||||||
dev goals for 1.1.1 pineapple express++:
|
dev goals for 1.1.2 pineapple Express += 2:
|
||||||
|
--Fix broken video providers (dailymotion/youtube)
|
||||||
- bugfixes/QoL tweaks
|
|
||||||
- remove duplicated blazem from tokefile
|
|
||||||
- fix playlist on submit channel for standard users
|
|
||||||
- only show nested menu on playlist if user rank is <= 2
|
|
||||||
- show "playlist" button for users rank 1 on r/submit channel
|
|
||||||
- stop tokebot from including full toke messages
|
|
||||||
- fully disconnect/kick unregistered users from channels connect
|
|
||||||
- limit words/link display text(DO NOT MODIFY LINK HREF) to 40 chars to prevent breaking chat width
|
|
||||||
- limit image embed width
|
|
||||||
- fix video/chat/autobump UI components not expanding after collapsing in chromium based browsers
|
|
||||||
- remove close playlist button when legacy playlist is disabled
|
|
||||||
- fix expand/shade playlist items button
|
|
||||||
- add end date to playlist items
|
|
||||||
- userlist collapse/expand persistent accross browser sessions
|
|
||||||
- cinema mode persistent accross browser sessions
|
|
||||||
- dissapearing server whispers/join messages
|
|
||||||
- fix input field lengths in quicksettings
|
|
||||||
- prevent temporary items on submit channel
|
|
||||||
- always block anonymous user (ignore channel setting)
|
|
||||||
- use regex for whitespace detection in commands
|
|
||||||
|
|
||||||
- client side commands
|
|
||||||
- process commands that start with "/" or "(whitespace)/" in the browser
|
|
||||||
- allow admins to trigger client side commands remotely
|
|
||||||
- remove / from client command when calling sendcmd if present
|
|
||||||
- do not send command as chat (unless it starts with whitespace, matching serverside command behavior)
|
|
||||||
- show words that start with "/" as a link that chatsmacks command(similiar to behavior with words that start with !)
|
|
||||||
- /thunder
|
|
||||||
- Disable lightning (seizure prevention)
|
|
||||||
|
|
||||||
- update tab completion
|
|
||||||
- add non-toke server-side commands to tab completion(check perms for respective commands)
|
|
||||||
- me
|
|
||||||
- announce
|
|
||||||
- af
|
|
||||||
- sp
|
|
||||||
- afk
|
|
||||||
- poll
|
|
||||||
- hpoll
|
|
||||||
- mute
|
|
||||||
- smute
|
|
||||||
- unmute
|
|
||||||
- kick
|
|
||||||
- ban
|
|
||||||
- ipban
|
|
||||||
- clear
|
|
||||||
- clean
|
|
||||||
- cleantitle
|
|
||||||
- sendcmd
|
|
||||||
- add client-side commands to tab completion
|
|
||||||
- show autocomplete in text box
|
|
||||||
|
|
||||||
- send clientside version on connect
|
|
||||||
- kick if version old/not received
|
|
||||||
|
|
||||||
- spooktober themes
|
|
||||||
- Candycorn
|
|
||||||
- Candycorn lite
|
|
||||||
|
|
@ -1289,12 +1289,17 @@ PlaylistModule.prototype.startPlayback = function (time) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(self.current.media.type == "yt"){//if its yt
|
if(self.current.media.type == "yt"){//if its yt
|
||||||
InfoGetter.getYTRaw(self.current.media.id,function(url){//get raw link from invidious api
|
InfoGetter.getRawCopy(self.current.media.id,function(url){//get raw link from invidious api
|
||||||
self.current.media.meta.rawLink = url;//set to meta
|
self.current.media.meta.rawLink = url;//set to meta
|
||||||
self.sendChangeMedia(self.channel.users);//fuggin SEND IT
|
self.sendChangeMedia(self.channel.users);//fuggin SEND IT
|
||||||
});
|
});
|
||||||
|
|
||||||
}else{
|
}else if(self.current.media.type == "dm"){
|
||||||
|
InfoGetter.getRawCopy(`https://dailymotion.com/video/${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
|
||||||
|
});
|
||||||
|
}else{
|
||||||
self.sendChangeMedia(self.channel.users);
|
self.sendChangeMedia(self.channel.users);
|
||||||
}
|
}
|
||||||
self.channel.notifyModules("onMediaChange", [self.current.media]);
|
self.channel.notifyModules("onMediaChange", [self.current.media]);
|
||||||
|
|
|
||||||
116
src/get-info.js
116
src/get-info.js
|
|
@ -49,6 +49,8 @@ const Vimeo = require("@cytube/mediaquery/lib/provider/vimeo");
|
||||||
const Streamable = require("@cytube/mediaquery/lib/provider/streamable");
|
const Streamable = require("@cytube/mediaquery/lib/provider/streamable");
|
||||||
const TwitchVOD = require("@cytube/mediaquery/lib/provider/twitch-vod");
|
const TwitchVOD = require("@cytube/mediaquery/lib/provider/twitch-vod");
|
||||||
const TwitchClip = require("@cytube/mediaquery/lib/provider/twitch-clip");
|
const TwitchClip = require("@cytube/mediaquery/lib/provider/twitch-clip");
|
||||||
|
const YTDLP = require('youtube-dl-exec');
|
||||||
|
|
||||||
import { Counter } from 'prom-client';
|
import { Counter } from 'prom-client';
|
||||||
import { lookup as lookupCustomMetadata } from './custom-media';
|
import { lookup as lookupCustomMetadata } from './custom-media';
|
||||||
|
|
||||||
|
|
@ -111,7 +113,7 @@ function getBlocked(reg){
|
||||||
|
|
||||||
var Getters = {
|
var Getters = {
|
||||||
/* youtube.com */
|
/* youtube.com */
|
||||||
yt: function (id, callback) {
|
yt: async function (id, callback) {
|
||||||
|
|
||||||
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
||||||
if (!Config.get("youtube-v3-key")) {
|
if (!Config.get("youtube-v3-key")) {
|
||||||
|
|
@ -134,8 +136,29 @@ var Getters = {
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
callback(err.message || err, null);
|
callback(err.message || err, null);
|
||||||
});
|
});
|
||||||
}else{//invidious api calls (google bad)
|
}else{
|
||||||
var options = {
|
//yt-dlp calls (google bad)
|
||||||
|
try{
|
||||||
|
var video = await YTDLP(id,{
|
||||||
|
dumpSingleJson: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
var meta = {
|
||||||
|
ytRating: video.like_count
|
||||||
|
}
|
||||||
|
|
||||||
|
var media = new Media(video.id, video.title, video.duration, "yt", meta);
|
||||||
|
|
||||||
|
|
||||||
|
callback(false, media);
|
||||||
|
}catch(err){
|
||||||
|
callback(err.message || err, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
//callback("test funciton, remove this call!" || err, null);
|
||||||
|
//invidious api calls (o7 Stream on, you magnificent bastard. We'll always remember you! <3 2018-2014)
|
||||||
|
/*var options = {
|
||||||
host: Config.get("invidious-source"),
|
host: Config.get("invidious-source"),
|
||||||
port: 443,
|
port: 443,
|
||||||
path: "/api/v1/videos/" + id,
|
path: "/api/v1/videos/" + id,
|
||||||
|
|
@ -161,13 +184,13 @@ var Getters = {
|
||||||
|
|
||||||
var media = new Media(vid.videoId, vid.title, vid.lengthSeconds, "yt", meta);
|
var media = new Media(vid.videoId, vid.title, vid.lengthSeconds, "yt", meta);
|
||||||
return callback(false, media);
|
return callback(false, media);
|
||||||
});
|
});*/
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* youtube.com playlists */
|
/* youtube.com playlists */
|
||||||
yp: function (id, callback) {
|
yp: async function (id, callback) {
|
||||||
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
||||||
if (!Config.get("youtube-v3-key")) {
|
if (!Config.get("youtube-v3-key")) {
|
||||||
return callback("The YouTube API now requires an API key. You could sign up for an API key, but you're a lot better off using the invidious backend!" +
|
return callback("The YouTube API now requires an API key. You could sign up for an API key, but you're a lot better off using the invidious backend!" +
|
||||||
|
|
@ -188,7 +211,34 @@ var Getters = {
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
callback(err.message || err, null);
|
callback(err.message || err, null);
|
||||||
});
|
});
|
||||||
}else{//invidious api calls (google bad)
|
}else{//yt-dlp wrapper calls (google bad)
|
||||||
|
try{
|
||||||
|
var list = await YTDLP(id,{
|
||||||
|
dumpSingleJson: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
var videos = new Array;
|
||||||
|
|
||||||
|
list.entries.forEach(function(video){
|
||||||
|
if(video != null){
|
||||||
|
var meta = {
|
||||||
|
ytRating: video.like_count
|
||||||
|
}
|
||||||
|
|
||||||
|
videos.push(new Media(video.id, video.title, video.duration, "yt", meta));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
console.log(videos);
|
||||||
|
callback(null, videos);
|
||||||
|
}catch(err){
|
||||||
|
callback(err.message || err, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*invidious api calls (o7 RIP 2018-2024)
|
||||||
var options = {
|
var options = {
|
||||||
host: Config.get("invidious-source"),
|
host: Config.get("invidious-source"),
|
||||||
port: 443,
|
port: 443,
|
||||||
|
|
@ -209,12 +259,12 @@ var Getters = {
|
||||||
});
|
});
|
||||||
|
|
||||||
return callback(null, vids);
|
return callback(null, vids);
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* youtube.com search */
|
/* youtube.com search */
|
||||||
ytSearch: function (query, callback) {
|
ytSearch: async function (query, callback) {
|
||||||
|
|
||||||
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
if(!Config.get("invidious-backend")){//legacy youtube backend (fucking yicky)
|
||||||
if (!Config.get("youtube-v3-key")) {
|
if (!Config.get("youtube-v3-key")) {
|
||||||
|
|
@ -239,7 +289,33 @@ var Getters = {
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
callback(err.message || err, null);
|
callback(err.message || err, null);
|
||||||
});
|
});
|
||||||
}else{//invidious api calls (google bad)
|
}else{
|
||||||
|
|
||||||
|
try{
|
||||||
|
var results = await YTDLP(`ytsearch8:${query}`,{
|
||||||
|
dumpSingleJson: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
var videos = new Array;
|
||||||
|
|
||||||
|
results.entries.forEach(function(result){
|
||||||
|
var meta = {
|
||||||
|
ytRating: result.like_count
|
||||||
|
}
|
||||||
|
|
||||||
|
var video = new Media(result.id, result.title, result.duration, "yt", meta);
|
||||||
|
video.thumb = {url: result.thumbnails[5].url};
|
||||||
|
|
||||||
|
videos.push(video);
|
||||||
|
});
|
||||||
|
|
||||||
|
callback(null, videos);
|
||||||
|
}catch(err){
|
||||||
|
callback(err.message || err, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*invidious api calls (o7 RIP 2018-2024)
|
||||||
var options = {
|
var options = {
|
||||||
host: Config.get("invidious-source"),
|
host: Config.get("invidious-source"),
|
||||||
port: 443,
|
port: 443,
|
||||||
|
|
@ -264,7 +340,7 @@ var Getters = {
|
||||||
});
|
});
|
||||||
|
|
||||||
return callback(null, vids.filter(rs => rs != null));
|
return callback(null, vids.filter(rs => rs != null));
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -287,6 +363,8 @@ var Getters = {
|
||||||
},
|
},
|
||||||
|
|
||||||
/* dailymotion.com */
|
/* dailymotion.com */
|
||||||
|
//The dailymotion player has been broken, however their basic API remains intact.
|
||||||
|
//This will stay *for now* but will be replaced by yt-dlp at the first sign of resistance.
|
||||||
dm: function (id, callback) {
|
dm: function (id, callback) {
|
||||||
var m = id.match(/([\w-]+)/);
|
var m = id.match(/([\w-]+)/);
|
||||||
if (m) {
|
if (m) {
|
||||||
|
|
@ -596,7 +674,18 @@ module.exports = {
|
||||||
callback("Unknown media type '" + type + "'", null);
|
callback("Unknown media type '" + type + "'", null);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getYTRaw: function (id, cb){
|
getRawCopy: async function (id, cb){
|
||||||
|
try{
|
||||||
|
var video = await YTDLP(id,{
|
||||||
|
dumpSingleJson: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
cb(video.requested_downloads[0].url);
|
||||||
|
}catch(err){
|
||||||
|
console.log(err.message);
|
||||||
|
}
|
||||||
|
/* Invidious Code (o7 RIP 2018-2024)
|
||||||
var options = {
|
var options = {
|
||||||
host: Config.get("invidious-source"),
|
host: Config.get("invidious-source"),
|
||||||
port: 443,
|
port: 443,
|
||||||
|
|
@ -606,6 +695,8 @@ module.exports = {
|
||||||
};
|
};
|
||||||
|
|
||||||
urlRetrieve(https, options, function (status, data) {
|
urlRetrieve(https, options, function (status, data) {
|
||||||
|
|
||||||
|
old invidious code (o7 2018 - 2024)
|
||||||
if(status !== 200) {
|
if(status !== 200) {
|
||||||
console.log("Invidious HTTPS error code: " + status);
|
console.log("Invidious HTTPS error code: " + status);
|
||||||
}
|
}
|
||||||
|
|
@ -615,6 +706,7 @@ module.exports = {
|
||||||
if(vid.formatStreams[0] != null){//TEMPORARY FOR FRONTEND DEV PURPOSES, PULL LINK AND SET AGAIN WHEN VIDEO QUEUED(shit expires)
|
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);
|
cb(vid.formatStreams[vid.formatStreams.length - 1].url);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
});*/
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -56,4 +56,4 @@ block content
|
||||||
| No spamming submit channel or chat
|
| No spamming submit channel or chat
|
||||||
p.
|
p.
|
||||||
Comments? Questions? Feature requests? DMCA Notices? <a href="mailto:ourforest@420blaze.it">Email us!</a>
|
Comments? Questions? Feature requests? DMCA Notices? <a href="mailto:ourforest@420blaze.it">Email us!</a>
|
||||||
h4 fore.st version: Pineapple Express++ (v1.1.1)
|
h4 fore.st version: Pineapple Express += 2 (v1.1.2)
|
||||||
|
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
extends layout.pug
|
|
||||||
|
|
||||||
block content
|
|
||||||
.col-md-8.col-md-offset-2
|
|
||||||
h1 Google Drive Userscript
|
|
||||||
h2 Disclaimer
|
|
||||||
.alert.alert-danger.messagebox
|
|
||||||
strong Unsupported
|
|
||||||
p.
|
|
||||||
This functionality is provided <strong>as-is</strong> for backwards
|
|
||||||
compatibility for existing users for whom it already is known to work.
|
|
||||||
There are many reasons, known and unknown, for which it may
|
|
||||||
<strong>not</strong> work for you; please note the staff in CyTube
|
|
||||||
support channels cannot provide any troubleshooting assistance and you
|
|
||||||
will be asked to simply use a different video provider.
|
|
||||||
p.
|
|
||||||
This functionality was originally added so that users could share their
|
|
||||||
own personal videos stored in their Drive. No support whatsoever will
|
|
||||||
be provided to users attempting to use it to circumvent copyright
|
|
||||||
restrictions on third-party video hosts.
|
|
||||||
h2 How It Works
|
|
||||||
p.
|
|
||||||
The userscript is a short script that you can install using a browser
|
|
||||||
extension such as Greasemonkey or Tampermonkey that runs on the page
|
|
||||||
and provides additional functionality needed to play Google Drive
|
|
||||||
videos.
|
|
||||||
h2 Installation
|
|
||||||
ul
|
|
||||||
li
|
|
||||||
strong Chrome
|
|
||||||
| —Install <a href="https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo" target="_blank">Tampermonkey</a>.
|
|
||||||
li
|
|
||||||
strong Firefox
|
|
||||||
| —Install <a href="https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/" target="_blank">Tampermonkey</a>
|
|
||||||
| or <a href="https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/" target="_blank">Greasemonkey</a>.
|
|
||||||
li
|
|
||||||
strong Other Browsers
|
|
||||||
| —Install the appropriate userscript plugin for your browser.
|
|
||||||
| Tampermonkey supports many browsers besides Chrome.
|
|
||||||
p.
|
|
||||||
Once you have installed the userscript manager addon for your browser,
|
|
||||||
you can <a href="/js/cytube-google-drive.user.js" target="_blank">
|
|
||||||
install the userscript</a>. If this link 404s, it means the administrator
|
|
||||||
of this server hasn't generated it yet.
|
|
||||||
p.
|
|
||||||
You can find a guide with screenshots of the installation process
|
|
||||||
<a href="https://github.com/calzoneman/sync/wiki/Google-Drive-Userscript-Installation-Guide" target="_blank">on GitHub</a>.
|
|
||||||
|
|
@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var CL_VERSION = "1.1.1";
|
var CL_VERSION = "1.1.2";
|
||||||
var GS_VERSION = 1.7; // Google Drive Userscript
|
var GS_VERSION = 1.7; // Google Drive Userscript
|
||||||
|
|
||||||
var CLIENT = {
|
var CLIENT = {
|
||||||
|
|
|
||||||
|
|
@ -1773,11 +1773,11 @@
|
||||||
e = error1;
|
e = error1;
|
||||||
return console.error(e);
|
return console.error(e);
|
||||||
}
|
}
|
||||||
} else if ((USEROPTS.yt_source !== "OFYT" && data.type == "yt")) {
|
} else if ((USEROPTS.yt_source !== "OFYT" && data.type == "yt") || data.type == "dm") {
|
||||||
data.ofyt = data.id;
|
data.ofyt = data.id;
|
||||||
data.id = data.meta.rawLink;//set link and spoof mov/h264
|
data.id = data.meta.rawLink;//set link and spoof mov/h264
|
||||||
data.type = "fi";
|
data.type = "fi";
|
||||||
data.meta.codec = "mov/h264";
|
data.meta.codec = "mov/h264";
|
||||||
try {
|
try {
|
||||||
return window.PLAYER = new FilePlayer(data);
|
return window.PLAYER = new FilePlayer(data);
|
||||||
} catch (error1) {
|
} catch (error1) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue