Initial mixer implementation

This commit is contained in:
Calvin Montgomery 2018-08-26 22:02:36 -07:00
parent f19efdb859
commit db48104b80
9 changed files with 76 additions and 16 deletions

View file

@ -241,7 +241,11 @@ PlaylistModule.prototype.packInfo = function (data, isAdmin) {
if (this.current) {
data.mediatitle = this.current.media.title;
if (isAdmin) {
data.mediaLink = util.formatLink(this.current.media.id, this.current.media.type);
data.mediaLink = util.formatLink(
this.current.media.id,
this.current.media.type,
this.current.media.meta
);
}
} else {
data.mediatitle = "(Nothing Playing)";
@ -407,7 +411,7 @@ PlaylistModule.prototype.handleQueue = function (user, data) {
data.title = false;
}
var link = util.formatLink(id, type);
var link = util.formatLink(id, type, null);
var perms = this.channel.modules.permissions;
if (!perms.canAddVideo(user, data)) {

View file

@ -381,6 +381,16 @@ function preprocessConfig(cfg) {
"for more information on registering a client ID");
}
if (cfg["mixer-client-id"]) {
require("cytube-mediaquery/lib/provider/mixer").setClientID(
cfg["mixer-client-id"]
);
} else {
LOGGER.warn("No Mixer Client ID set. Mixer.com links will " +
"not work. See mixer-client-id in config.template.yaml " +
"for more information on registering a client ID");
}
// Remove calzoneman from contact config (old default)
cfg.contacts = cfg.contacts.filter(contact => {
return contact.name !== 'calzoneman';

View file

@ -1,15 +1,16 @@
var http = require("http");
var https = require("https");
var Media = require("./media");
var CustomEmbedFilter = require("./customembed").filter;
var Config = require("./config");
var ffmpeg = require("./ffmpeg");
var mediaquery = require("cytube-mediaquery");
var YouTube = require("cytube-mediaquery/lib/provider/youtube");
var Vimeo = require("cytube-mediaquery/lib/provider/vimeo");
var Streamable = require("cytube-mediaquery/lib/provider/streamable");
var TwitchVOD = require("cytube-mediaquery/lib/provider/twitch-vod");
var TwitchClip = require("cytube-mediaquery/lib/provider/twitch-clip");
const http = require("http");
const https = require("https");
const Media = require("./media");
const CustomEmbedFilter = require("./customembed").filter;
const Config = require("./config");
const ffmpeg = require("./ffmpeg");
const mediaquery = require("cytube-mediaquery");
const YouTube = require("cytube-mediaquery/lib/provider/youtube");
const Vimeo = require("cytube-mediaquery/lib/provider/vimeo");
const Streamable = require("cytube-mediaquery/lib/provider/streamable");
const TwitchVOD = require("cytube-mediaquery/lib/provider/twitch-vod");
const TwitchClip = require("cytube-mediaquery/lib/provider/twitch-clip");
const Mixer = require("cytube-mediaquery/lib/provider/mixer");
import { Counter } from 'prom-client';
import { lookup as lookupCustomMetadata } from './custom-media';
@ -544,6 +545,27 @@ var Getters = {
} catch (error) {
process.nextTick(callback, error.message);
}
},
/* mixer.com */
mx: function (id, callback) {
let m = id.match(/^[\w-]+$/);
if (!m) {
process.nextTick(callback, "Invalid mixer.com ID");
return;
}
Mixer.lookup(id).then(stream => {
process.nextTick(callback, null, new Media(
stream.id,
stream.title,
"--:--",
"mx",
stream.meta
));
}).catch(error => {
process.nextTick(callback, error.message || error, null);
});
}
};

View file

@ -38,7 +38,8 @@ Media.prototype = {
scuri: this.meta.scuri,
embed: this.meta.embed,
gdrive_subtitles: this.meta.gdrive_subtitles,
textTracks: this.meta.textTracks
textTracks: this.meta.textTracks,
mixer: this.meta.mixer
}
};

View file

@ -177,7 +177,7 @@
};
},
root.formatLink = function (id, type) {
root.formatLink = function (id, type, meta) {
switch (type) {
case "yt":
return "https://youtu.be/" + id;
@ -211,6 +211,12 @@
return "https://clips.twitch.tv/" + id;
case "cm":
return id;
case "mx":
if (meta !== null) {
return `https://mixer.com/${meta.mixer.channelToken}`;
} else {
return `https://mixer.com/${id}`;
}
default:
return "";
}
@ -226,6 +232,7 @@
case "im":
case "hb":
case "hl":
case "mx":
return true;
default:
return false;