mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-21 04:43:19 +03:00
Twitch chat now supports subscriptions
- refactored code to be cleaner and more modularized Updated scrolling on twitch chat to actually scroll to the bottom with new messages Fast forwarding in videos with a twitch chat is now faster and provides a smoother transition
This commit is contained in:
@@ -1192,7 +1192,7 @@ async function downloadFileByURL_exec(url, type, options, sessionID = null) {
|
||||
&& config.getConfigItem('ytdl_use_twitch_api') && config.getConfigItem('ytdl_twitch_auto_download_chat')) {
|
||||
let vodId = url.split('twitch.tv/videos/')[1];
|
||||
vodId = vodId.split('?')[0];
|
||||
downloadTwitchChatByVODID(vodId, file_name, type, options.user);
|
||||
twitch_api.downloadTwitchChatByVODID(vodId, file_name, type, options.user);
|
||||
}
|
||||
|
||||
// renames file if necessary due to bug
|
||||
@@ -1768,42 +1768,6 @@ function removeFileExtension(filename) {
|
||||
return filename_parts.join('.');
|
||||
}
|
||||
|
||||
async function getTwitchChatByFileID(id, type, user_uid, uuid) {
|
||||
let file_path = null;
|
||||
|
||||
if (user_uid) {
|
||||
file_path = path.join('users', user_uid, type, id + '.twitch_chat.json');
|
||||
} else {
|
||||
file_path = path.join(type, id + '.twitch_chat.json');
|
||||
}
|
||||
|
||||
var chat_file = null;
|
||||
if (fs.existsSync(file_path)) {
|
||||
chat_file = fs.readJSONSync(file_path);
|
||||
}
|
||||
|
||||
return chat_file;
|
||||
}
|
||||
|
||||
async function downloadTwitchChatByVODID(vodId, id, type, user_uid) {
|
||||
const twitch_api_key = config_api.getConfigItem('ytdl_twitch_api_key');
|
||||
const chat = await twitch_api.getCommentsForVOD(twitch_api_key, vodId);
|
||||
|
||||
// save file if needec params are included
|
||||
if (id && type) {
|
||||
let file_path = null;
|
||||
if (user_uid) {
|
||||
file_path = path.join('users', user_uid, type, id + '.twitch_chat.json');
|
||||
} else {
|
||||
file_path = path.join(type, id + '.twitch_chat.json');
|
||||
}
|
||||
|
||||
if (chat) fs.writeJSONSync(file_path, chat);
|
||||
}
|
||||
|
||||
return chat;
|
||||
}
|
||||
|
||||
app.use(function(req, res, next) {
|
||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
|
||||
res.header("Access-Control-Allow-Origin", getOrigin());
|
||||
@@ -2038,7 +2002,7 @@ app.post('/api/getFile', optionalJwt, function (req, res) {
|
||||
}
|
||||
|
||||
// check if chat exists for twitch videos
|
||||
if (file['url'].includes('twitch.tv')) file['chat_exists'] = fs.existsSync(file['path'].substring(0, file['path'].length - 4) + '.twitch_chat.json');
|
||||
if (file && file['url'].includes('twitch.tv')) file['chat_exists'] = fs.existsSync(file['path'].substring(0, file['path'].length - 4) + '.twitch_chat.json');
|
||||
|
||||
if (file) {
|
||||
res.send({
|
||||
@@ -2109,11 +2073,12 @@ app.post('/api/getFullTwitchChat', optionalJwt, async (req, res) => {
|
||||
var id = req.body.id;
|
||||
var type = req.body.type;
|
||||
var uuid = req.body.uuid;
|
||||
var sub = req.body.sub;
|
||||
var user_uid = null;
|
||||
|
||||
if (req.isAuthenticated()) user_uid = req.user.uid;
|
||||
|
||||
const chat_file = await getTwitchChatByFileID(id, type, user_uid, uuid);
|
||||
const chat_file = await twitch_api.getTwitchChatByFileID(id, type, user_uid, uuid, sub);
|
||||
|
||||
res.send({
|
||||
chat: chat_file
|
||||
@@ -2125,28 +2090,19 @@ app.post('/api/downloadTwitchChatByVODID', optionalJwt, async (req, res) => {
|
||||
var type = req.body.type;
|
||||
var vodId = req.body.vodId;
|
||||
var uuid = req.body.uuid;
|
||||
var sub = req.body.sub;
|
||||
var user_uid = null;
|
||||
|
||||
if (req.isAuthenticated()) user_uid = req.user.uid;
|
||||
|
||||
// check if file already exists. if so, send that instead
|
||||
const file_exists_check = await getTwitchChatByFileID(id, type, user_uid, uuid);
|
||||
const file_exists_check = await twitch_api.getTwitchChatByFileID(id, type, user_uid, uuid, sub);
|
||||
if (file_exists_check) {
|
||||
res.send({chat: file_exists_check});
|
||||
return;
|
||||
}
|
||||
|
||||
const full_chat = await downloadTwitchChatByVODID(vodId);
|
||||
|
||||
let file_path = null;
|
||||
|
||||
if (user_uid) {
|
||||
file_path = path.join('users', req.user.uid, type, id + '.twitch_chat.json');
|
||||
} else {
|
||||
file_path = path.join(type, id + '.twitch_chat.json');
|
||||
}
|
||||
|
||||
if (full_chat) fs.writeJSONSync(file_path, full_chat);
|
||||
const full_chat = await twitch_api.downloadTwitchChatByVODID(vodId, id, type, user_uid, sub);
|
||||
|
||||
res.send({
|
||||
chat: full_chat
|
||||
@@ -2435,9 +2391,15 @@ app.post('/api/getSubscription', optionalJwt, async (req, res) => {
|
||||
var file_obj = new utils.File(id, title, thumbnail, isaudio, duration, url, uploader, size, file, upload_date);
|
||||
parsed_files.push(file_obj);
|
||||
}
|
||||
} else {
|
||||
// loop through files for extra processing
|
||||
for (let i = 0; i < parsed_files.length; i++) {
|
||||
const file = parsed_files[i];
|
||||
// check if chat exists for twitch videos
|
||||
if (file && file['url'].includes('twitch.tv')) file['chat_exists'] = fs.existsSync(file['path'].substring(0, file['path'].length - 4) + '.twitch_chat.json');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
res.send({
|
||||
subscription: subscription,
|
||||
files: parsed_files
|
||||
|
||||
Reference in New Issue
Block a user