Created playlist queue schema.

This commit is contained in:
rainbow napkin 2025-02-15 18:33:07 -05:00
parent 8a273d8055
commit cb09c139c7
6 changed files with 43 additions and 5 deletions

View file

@ -644,8 +644,8 @@ module.exports = class{
//Get our channel //Get our channel
const chanDB = await channelModel.findOne({name: this.channel.name}); const chanDB = await channelModel.findOne({name: this.channel.name});
//If nowPlaying isn't null //If nowPlaying isn't null and isn't what we're about to throw on
if(chanDB.media.nowPlaying != null){ if(chanDB.media.nowPlaying != null && chanDB.media.nowPlaying.uuid.toString != mediaObj.uuid){
//Archive whats already in there since we're about to clobber the fuck out of it //Archive whats already in there since we're about to clobber the fuck out of it
chanDB.media.archived.push(chanDB.media.nowPlaying); chanDB.media.archived.push(chanDB.media.nowPlaying);
} }
@ -935,7 +935,7 @@ module.exports = class{
//If the media hasn't ended yet //If the media hasn't ended yet
if(wasPlaying.getEndTime() > now){ if(wasPlaying.getEndTime() > now){
//Re-Schedule it in RAM //Re-Schedule it in RAM
await this.scheduleMedia(wasPlaying, null, chanDB, true, true); await this.scheduleMedia(wasPlaying, null, chanDB, true, true, true);
//Otherwise, if it has //Otherwise, if it has
}else{ }else{
//Null out nowPlaying //Null out nowPlaying

View file

@ -26,7 +26,7 @@ module.exports = class extends media{
//Set the media start time stamp //Set the media start time stamp
this.startTimeStamp = startTimeStamp; this.startTimeStamp = startTimeStamp;
//Create empty variable to hold early end if media is stopped early //Create empty variable to hold early end if media is stopped early
this.earlyEnd = null; this.earlyEnd = earlyEnd;
//Set status for discriminator key //Set status for discriminator key
this.status = 'queued'; this.status = 'queued';

View file

@ -30,6 +30,7 @@ const emoteModel = require('../emoteSchema');
const channelPermissionSchema = require('./channelPermissionSchema'); const channelPermissionSchema = require('./channelPermissionSchema');
const channelBanSchema = require('./channelBanSchema'); const channelBanSchema = require('./channelBanSchema');
const queuedMediaSchema = require('./media/queuedMediaSchema'); const queuedMediaSchema = require('./media/queuedMediaSchema');
const playlistSchema = require('./media/playlistSchema');
//Utils //Utils
const { exceptionHandler, errorHandler } = require('../../utils/loggerUtils'); const { exceptionHandler, errorHandler } = require('../../utils/loggerUtils');
@ -102,7 +103,9 @@ const channelSchema = new mongoose.Schema({
media: { media: {
nowPlaying: queuedMediaSchema, nowPlaying: queuedMediaSchema,
scheduled: [queuedMediaSchema], scheduled: [queuedMediaSchema],
//We should consider moving archived media and channel playlists to their own collections/models for preformance sake
archived: [queuedMediaSchema], archived: [queuedMediaSchema],
playlists: [playlistSchema]
}, },
//Thankfully we don't have to keep track of alts, ips, or deleted users so this should be a lot easier than site-wide bans :P //Thankfully we don't have to keep track of alts, ips, or deleted users so this should be a lot easier than site-wide bans :P
banList: [channelBanSchema] banList: [channelBanSchema]

View file

@ -0,0 +1,34 @@
/*Canopy - The next generation of stoner streaming software
Copyright (C) 2024-2025 Rainbownapkin and the TTN Community
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.*/
//NPM Imports
const {mongoose} = require('mongoose');
//Local Imports
const mediaSchema = require('./mediaSchema');
module.exports = new mongoose.Schema({
name: {
type: mongoose.SchemaTypes.String,
required: true,
},
media: [mediaSchema],
defaultTitles:[{
type: mongoose.SchemaTypes.String,
required: true,
default: []
}]
});

View file

@ -37,6 +37,7 @@ const queuedProperties = new mongoose.Schema({
uuid: { uuid: {
type: mongoose.SchemaTypes.UUID, type: mongoose.SchemaTypes.UUID,
required: true, required: true,
unique: true
} }
}, },
{ {

View file

@ -535,7 +535,7 @@ div.now-playing{
text-shadow: var(--focus-glow0); text-shadow: var(--focus-glow0);
} }
div.archived{ div.archived p{
color: var(--bg2-alt1); color: var(--bg2-alt1);
} }