Files
zoff/server/handlers/frontpage.js
2019-11-17 00:01:53 +01:00

172 lines
3.8 KiB
JavaScript

import {
handlersPath,
VERSION
} from "../settings/globals";
let db = require(handlersPath + "/db.js");
let Functions = require(handlersPath + "/functions.js");
function frontpage_lists(msg, socket) {
if (
msg == undefined ||
!msg.hasOwnProperty("version") ||
msg.version != VERSION ||
msg.version == undefined
) {
const result = {
version: {
expected: VERSION,
got: msg.hasOwnProperty("version") ? msg.version : undefined
}
};
socket.emit("update_required", result);
return;
}
db.collection("frontpage_lists").find({
frontpage: true
}, function (
err,
docs
) {
db.collection("connected_users").find({
_id: "total_users"
}, function (
err,
tot
) {
socket
.compress(true)
.emit("playlists", {
channels: docs,
viewers: tot[0].total_users.length
});
});
});
}
function get_frontpage_lists(callback) {
const project_object = {
_id: 1,
count: 1,
frontpage: 1,
id: 1,
title: 1,
viewers: 1,
accessed: 1,
pinned: {
$ifNull: ["$pinned", 0]
},
description: {
$ifNull: [{
$cond: {
if: {
$or: [{
$eq: ["$description", ""]
},
{
$eq: ["$description", null]
},
{
$eq: ["$description", undefined]
}
]
},
then: "This list has no description",
else: "$description"
}
},
"This list has no description"
]
},
thumbnail: {
$ifNull: [{
$cond: {
if: {
$or: [{
$eq: ["$thumbnail", ""]
},
{
$eq: ["$thumbnail", null]
},
{
$eq: ["$thumbnail", undefined]
}
]
},
then: {
$concat: ["https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]
},
else: "$thumbnail"
}
},
{
$concat: ["https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]
}
]
}
};
db.collection("frontpage_lists").aggregate(
[{
$match: {
frontpage: true,
count: {
$gt: 3
}
}
},
{
$project: project_object
},
{
$sort: {
pinned: -1,
viewers: -1,
accessed: -1,
count: -1,
title: 1
}
}
],
callback
);
}
function update_frontpage(coll, id, title, thumbnail, source, callback) {
db.collection("frontpage_lists").find({
_id: coll
}, function (e, doc) {
const updateObject = {
id,
title,
accessed: Functions.get_time()
};
if (
doc.length > 0 &&
((doc[0].thumbnail != "" &&
doc[0].thumbnail != undefined &&
(doc[0].thumbnail.indexOf("https://i1.sndcdn.com") > -1 ||
doc[0].thumbnail.indexOf("https://w1.sndcdn.com") > -1 ||
doc[0].thumbnail.indexOf("https://img.youtube.com") > -1)) ||
(doc[0].thumbnail == "" || doc[0].thumbnail == undefined))
) {
updateObject.thumbnail = thumbnail;
if (thumbnail == undefined) updateObject.thumbnail = "";
}
db.collection("frontpage_lists").update({
_id: coll
}, {
$set: updateObject
}, {
upsert: true
},
function (err, returnDocs) {
if (typeof callback == "function") callback();
}
);
});
}
module.exports.get_frontpage_lists = get_frontpage_lists;
module.exports.frontpage_lists = frontpage_lists;
module.exports.update_frontpage = update_frontpage;