mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
intermediary
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
function end(obj, coll, guid, offline, socket) {
|
||||
async function end(obj, coll, guid, offline, socket) {
|
||||
var socketid = socket.zoff_id;
|
||||
if (typeof obj !== "object") {
|
||||
return;
|
||||
@@ -38,67 +38,69 @@ function end(obj, coll, guid, offline, socket) {
|
||||
}
|
||||
}
|
||||
};
|
||||
db.collection(coll + "_settings").find(function(err, docs) {
|
||||
var authentication_needed = false;
|
||||
if (
|
||||
docs.length > 0 &&
|
||||
(docs[0].userpass != undefined && docs[0].userpass != "")
|
||||
var docs = await find(coll + "_settings");
|
||||
var authentication_needed = false;
|
||||
|
||||
if (
|
||||
docs.length > 0 &&
|
||||
(docs[0].userpass != undefined && docs[0].userpass != "")
|
||||
) {
|
||||
callback_function = Functions.getSessionAdminUser;
|
||||
authentication_needed = true;
|
||||
var sessionAdminUser = await Functions.getSessionAdminUser(Functions.getSession(socket), coll);
|
||||
obj.userpass = sessionAdminUser.userpass;
|
||||
}
|
||||
|
||||
if (userpass != "" || obj.pass == undefined) {
|
||||
obj.pass = userpass;
|
||||
} else {
|
||||
obj.pass = crypto
|
||||
.createHash("sha256")
|
||||
.update(Functions.decrypt_string(obj.pass))
|
||||
.digest("base64");
|
||||
}
|
||||
if (
|
||||
!authentication_needed ||
|
||||
(authentication_needed &&
|
||||
obj.hasOwnProperty("pass") &&
|
||||
docs[0].userpass == obj.pass)
|
||||
) {
|
||||
callback_function = Functions.getSessionAdminUser;
|
||||
authentication_needed = true;
|
||||
}
|
||||
callback_function(Functions.getSession(socket), coll, function(userpass) {
|
||||
if (userpass != "" || obj.pass == undefined) {
|
||||
obj.pass = userpass;
|
||||
} else {
|
||||
obj.pass = crypto
|
||||
.createHash("sha256")
|
||||
.update(Functions.decrypt_string(obj.pass))
|
||||
.digest("base64");
|
||||
}
|
||||
Functions.check_inlist(
|
||||
coll,
|
||||
guid,
|
||||
socket,
|
||||
offline,
|
||||
undefined,
|
||||
"place 13"
|
||||
);
|
||||
var np = await find(coll, { now_playing: true });
|
||||
if (err !== null) console.log(err);
|
||||
if (
|
||||
!authentication_needed ||
|
||||
(authentication_needed &&
|
||||
obj.hasOwnProperty("pass") &&
|
||||
docs[0].userpass == obj.pass)
|
||||
np !== null &&
|
||||
np !== undefined &&
|
||||
np.length == 1 &&
|
||||
np[0].id == id
|
||||
) {
|
||||
Functions.check_inlist(
|
||||
coll,
|
||||
guid,
|
||||
socket,
|
||||
offline,
|
||||
undefined,
|
||||
"place 13"
|
||||
);
|
||||
db.collection(coll).find({ now_playing: true }, function(err, np) {
|
||||
if (err !== null) console.log(err);
|
||||
if (
|
||||
np !== null &&
|
||||
np !== undefined &&
|
||||
np.length == 1 &&
|
||||
np[0].id == id
|
||||
) {
|
||||
var startTime = docs[0].startTime;
|
||||
if (
|
||||
startTime + parseInt(np[0].duration) <=
|
||||
Functions.get_time() + 5
|
||||
) {
|
||||
change_song(coll, false, id, docs);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
socket.emit("auth_required");
|
||||
var startTime = docs[0].startTime;
|
||||
if (
|
||||
startTime + parseInt(np[0].duration) <=
|
||||
Functions.get_time() + 5
|
||||
) {
|
||||
changeSong(coll, false, id, docs);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
var result = {
|
||||
msg: {
|
||||
expected: "object",
|
||||
got: typeof obj
|
||||
} else {
|
||||
socket.emit("auth_required");
|
||||
}
|
||||
};
|
||||
socket.emit("update_required", result);
|
||||
} else {
|
||||
var result = {
|
||||
msg: {
|
||||
expected: "object",
|
||||
got: typeof obj
|
||||
}
|
||||
};
|
||||
socket.emit("update_required", result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.end = end;
|
||||
|
||||
@@ -3,7 +3,7 @@ var mongojs = require("mongojs");
|
||||
var db = require(pathThumbnails + "/handlers/db.js");
|
||||
var update = require(pathThumbnails + "/handlers/dbFunctions/update.js");
|
||||
|
||||
function incrementList(collection, way) {
|
||||
async function incrementList(collection, way) {
|
||||
return update(
|
||||
collection,
|
||||
{ _id: coll, count: { $gt: 0 } },
|
||||
|
||||
@@ -4,126 +4,125 @@ var db = require(pathThumbnails + "/handlers/db.js");
|
||||
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
|
||||
|
||||
async function getNowPlaying(list, socket) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (typeof list !== "string" || typeof fn !== "function") {
|
||||
socket.emit("update_required");
|
||||
return;
|
||||
}
|
||||
var docs = await find(list, { now_playing: true });
|
||||
if (docs.length === 0) {
|
||||
resolve("No song currently playing");
|
||||
return;
|
||||
}
|
||||
var title = docs[0].title;
|
||||
if (title === undefined) resolve("No song currently playing");
|
||||
else resolve(title);
|
||||
});
|
||||
}
|
||||
|
||||
function send_play(coll, socket, broadcast) {
|
||||
//coll = coll.replace(/ /g,'');
|
||||
db.collection(coll).find({ now_playing: true }, function(err, np) {
|
||||
db.collection(coll + "_settings").find(function(err, conf) {
|
||||
if (err !== null) console.log(err);
|
||||
try {
|
||||
if (Functions.get_time() - conf[0].startTime > np[0].duration) {
|
||||
change_song(coll, false, np[0].id, conf);
|
||||
} else if (conf !== null && conf !== undefined && conf.length !== 0) {
|
||||
if (conf[0].adminpass !== "") conf[0].adminpass = true;
|
||||
if (conf[0].hasOwnProperty("userpass") && conf[0].userpass != "")
|
||||
conf[0].userpass = true;
|
||||
else conf[0].userpass = false;
|
||||
if (!np.hasOwnProperty("start")) np.start = 0;
|
||||
if (!np.hasOwnProperty("end")) np.end = np.duration;
|
||||
toSend = { np: np, conf: conf, time: Functions.get_time() };
|
||||
if (socket === undefined) {
|
||||
io.to(coll).emit("np", toSend);
|
||||
//
|
||||
getNextSong(coll, undefined);
|
||||
var url =
|
||||
"https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
|
||||
if (np[0].source == "soundcloud") url = np[0].thumbnail;
|
||||
sendColor(coll, false, url);
|
||||
} else {
|
||||
var url =
|
||||
"https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
|
||||
if (np[0].source == "soundcloud") url = np[0].thumbnail;
|
||||
sendColor(coll, socket, url);
|
||||
if (broadcast) {
|
||||
socket.to(coll).emit("np", toSend);
|
||||
return;
|
||||
}
|
||||
socket.emit("np", toSend);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (socket) {
|
||||
if (broadcast) {
|
||||
socket.to(coll).emit("np", {});
|
||||
return new Promise((resolve, reject) => {
|
||||
if (typeof list !== "string" || typeof fn !== "function") {
|
||||
socket.emit("update_required");
|
||||
return;
|
||||
}
|
||||
socket.emit("np", {});
|
||||
} else {
|
||||
io.to(coll).emit("np", {});
|
||||
}
|
||||
}
|
||||
var docs = await find(list, { now_playing: true });
|
||||
if (docs.length === 0) {
|
||||
resolve("No song currently playing");
|
||||
return;
|
||||
}
|
||||
var title = docs[0].title;
|
||||
if (title === undefined) resolve("No song currently playing");
|
||||
else resolve(title);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getNextSong(coll, socket, callback) {
|
||||
//coll = coll.replace(/ /g,'');
|
||||
db.collection(coll).aggregate(
|
||||
[
|
||||
{
|
||||
$match: {
|
||||
views: {
|
||||
$exists: false
|
||||
},
|
||||
type: {
|
||||
$ne: "suggested"
|
||||
}
|
||||
async function sendPlay(coll, socket, broadcast) {
|
||||
//coll = coll.replace(/ /g,'');
|
||||
var np = await find(coll, { now_playing: true });
|
||||
var conf = await find(coll + "_settings");
|
||||
if (err !== null) console.log(err);
|
||||
try {
|
||||
if (Functions.get_time() - conf[0].startTime > np[0].duration) {
|
||||
changeSong(coll, false, np[0].id, conf);
|
||||
} else if (conf !== null && conf !== undefined && conf.length !== 0) {
|
||||
if (conf[0].adminpass !== "") conf[0].adminpass = true;
|
||||
if (conf[0].hasOwnProperty("userpass") && conf[0].userpass != "")
|
||||
conf[0].userpass = true;
|
||||
else conf[0].userpass = false;
|
||||
if (!np.hasOwnProperty("start")) np.start = 0;
|
||||
if (!np.hasOwnProperty("end")) np.end = np.duration;
|
||||
toSend = { np: np, conf: conf, time: Functions.get_time() };
|
||||
if (socket === undefined) {
|
||||
io.to(coll).emit("np", toSend);
|
||||
//
|
||||
getNextSong(coll, undefined);
|
||||
var url =
|
||||
"https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
|
||||
if (np[0].source == "soundcloud") url = np[0].thumbnail;
|
||||
sendColor(coll, false, url);
|
||||
} else {
|
||||
var url =
|
||||
"https://img.youtube.com/vi/" + np[0].id + "/mqdefault.jpg";
|
||||
if (np[0].source == "soundcloud") url = np[0].thumbnail;
|
||||
sendColor(coll, socket, url);
|
||||
if (broadcast) {
|
||||
socket.to(coll).emit("np", toSend);
|
||||
return;
|
||||
}
|
||||
socket.emit("np", toSend);
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
now_playing: 1,
|
||||
votes: -1,
|
||||
added: 1,
|
||||
title: 1
|
||||
}
|
||||
},
|
||||
{
|
||||
$limit: 1
|
||||
}
|
||||
],
|
||||
function(err, doc) {
|
||||
if (doc.length == 1) {
|
||||
var thumbnail = "";
|
||||
var source = "youtube";
|
||||
if (doc[0].source && doc[0].source == "soundcloud") {
|
||||
source = "soundcloud";
|
||||
thumbnail = doc[0].thumbnail;
|
||||
}
|
||||
if (socket != undefined) {
|
||||
socket.emit("next_song", {
|
||||
videoId: doc[0].id,
|
||||
title: doc[0].title,
|
||||
source: source,
|
||||
thumbnail: thumbnail
|
||||
});
|
||||
} catch (e) {
|
||||
if (socket) {
|
||||
if (broadcast) {
|
||||
socket.to(coll).emit("np", {});
|
||||
return;
|
||||
}
|
||||
socket.emit("np", {});
|
||||
} else {
|
||||
io.to(coll).emit("next_song", {
|
||||
videoId: doc[0].id,
|
||||
title: doc[0].title,
|
||||
source: source,
|
||||
thumbnail: thumbnail
|
||||
});
|
||||
io.to(coll).emit("np", {});
|
||||
}
|
||||
}
|
||||
if (typeof callback == "function") callback();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.getNowPlaying = getNowPlaying;
|
||||
async function getNextSong(coll, socket) {
|
||||
//coll = coll.replace(/ /g,'');
|
||||
return new Promise((resolve, reject) => {
|
||||
var docs = await aggregate(coll,
|
||||
[
|
||||
{
|
||||
$match: {
|
||||
views: {
|
||||
$exists: false
|
||||
},
|
||||
type: {
|
||||
$ne: "suggested"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$sort: {
|
||||
now_playing: 1,
|
||||
votes: -1,
|
||||
added: 1,
|
||||
title: 1
|
||||
}
|
||||
},
|
||||
{
|
||||
$limit: 1
|
||||
}
|
||||
]);
|
||||
if (doc.length == 1) {
|
||||
var thumbnail = "";
|
||||
var source = "youtube";
|
||||
if (doc[0].source && doc[0].source == "soundcloud") {
|
||||
source = "soundcloud";
|
||||
thumbnail = doc[0].thumbnail;
|
||||
}
|
||||
if (socket != undefined) {
|
||||
socket.emit("next_song", {
|
||||
videoId: doc[0].id,
|
||||
title: doc[0].title,
|
||||
source: source,
|
||||
thumbnail: thumbnail
|
||||
});
|
||||
} else {
|
||||
io.to(coll).emit("next_song", {
|
||||
videoId: doc[0].id,
|
||||
title: doc[0].title,
|
||||
source: source,
|
||||
thumbnail: thumbnail
|
||||
});
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.getNowPlaying = getNowPlaying;
|
||||
module.exports.getNextSong = getNextSong;
|
||||
module.exports.sendPlay = sendPlay;
|
||||
|
||||
@@ -42,7 +42,7 @@ async function sendList(coll, socket, send, list_send, configs, shuffled) {
|
||||
userpass: ""
|
||||
};
|
||||
await update(coll + "_settings", { id: "config" }, conf, { upsert: true });
|
||||
send_list(coll, socket, send, list_send, configs, shuffled);
|
||||
sendList(coll, socket, send, list_send, configs, shuffled);
|
||||
} else {
|
||||
var docs = await aggregate(coll, [
|
||||
{
|
||||
@@ -134,11 +134,11 @@ async function sendList(coll, socket, send, list_send, configs, shuffled) {
|
||||
{ $set: { now_playing: false } },
|
||||
{ multi: true }
|
||||
);
|
||||
send_list(coll, socket, send, list_send, configs, shuffled);
|
||||
sendList(coll, socket, send, list_send, configs, shuffled);
|
||||
} else {
|
||||
if (Functions.get_time() - conf[0].startTime > np_docs[0].duration) {
|
||||
await changeSong(coll, false, np_docs[0].id, conf, socket);
|
||||
send_list(coll, socket, send, list_send, configs, shuffled);
|
||||
sendList(coll, socket, send, list_send, configs, shuffled);
|
||||
} else {
|
||||
if (list_send) {
|
||||
io.to(coll).emit("channel", {
|
||||
@@ -154,9 +154,9 @@ async function sendList(coll, socket, send, list_send, configs, shuffled) {
|
||||
});
|
||||
}
|
||||
if (socket === undefined && send) {
|
||||
send_play(coll);
|
||||
sendPlay(coll);
|
||||
} else if (send) {
|
||||
send_play(coll, socket);
|
||||
sendPlay(coll, socket);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -175,9 +175,9 @@ async function sendList(coll, socket, send, list_send, configs, shuffled) {
|
||||
});
|
||||
}
|
||||
if (socket === undefined && send) {
|
||||
send_play(coll);
|
||||
sendPlay(coll);
|
||||
} else if (send) {
|
||||
send_play(coll, socket);
|
||||
sendPlay(coll, socket);
|
||||
}
|
||||
}
|
||||
if (configs) {
|
||||
|
||||
66
server/handlers/dbFunctions/advancedFunctions/timeout.js
Normal file
66
server/handlers/dbFunctions/advancedFunctions/timeout.js
Normal file
@@ -0,0 +1,66 @@
|
||||
var path = require("path");
|
||||
var mongojs = require("mongojs");
|
||||
var db = require(pathThumbnails + "/handlers/db.js");
|
||||
var find = require(pathThumbnails + "/handlers/dbFunctions/find.js");
|
||||
var create = require(pathThumbnails + "/handlers/dbFunctions/create.js");
|
||||
var insert = require(pathThumbnails + "/handlers/dbFunctions/insert.js");
|
||||
|
||||
function checkTimeout(
|
||||
type,
|
||||
timeout,
|
||||
channel,
|
||||
guid,
|
||||
conf_pass,
|
||||
this_pass,
|
||||
socket,
|
||||
error_message
|
||||
) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (conf_pass != "" && conf_pass == this_pass) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
var docs = await find("timeout_api",
|
||||
{
|
||||
type: type,
|
||||
guid: guid
|
||||
});
|
||||
if (docs.length > 0) {
|
||||
var date = new Date(docs[0].createdAt);
|
||||
date.setSeconds(date.getSeconds() + timeout);
|
||||
var now = new Date();
|
||||
|
||||
var retry_in = (date.getTime() - now.getTime()) / 1000;
|
||||
if (retry_in > 0) {
|
||||
if (typeof error_callback == "function") {
|
||||
reject();
|
||||
return;
|
||||
} else if (error_message) {
|
||||
var sOrNot =
|
||||
Math.ceil(retry_in) > 1 || Math.ceil(retry_in) == 0 ? "s" : "";
|
||||
socket.emit(
|
||||
"toast",
|
||||
error_message + Math.ceil(retry_in) + " second" + sOrNot + "."
|
||||
);
|
||||
} else {
|
||||
socket.emit("toast", "wait_longer");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
var now_date = new Date();
|
||||
await update("timeout_api",
|
||||
{ type: type, guid: guid },
|
||||
{
|
||||
$set: {
|
||||
createdAt: now_date,
|
||||
type: type,
|
||||
guid: guid
|
||||
}
|
||||
},
|
||||
{ upsert: true });
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.checkTimeout = checkTimeout;
|
||||
@@ -15,6 +15,7 @@ var filter = new Filter({ placeHolder: "x" });
|
||||
var request = require("request");
|
||||
var db = require(pathThumbnails + "/handlers/db.js");
|
||||
|
||||
// done
|
||||
function now_playing(list, fn, socket) {
|
||||
if (typeof list !== "string" || typeof fn !== "function") {
|
||||
socket.emit("update_required");
|
||||
|
||||
Reference in New Issue
Block a user