|
@@ -111,7 +111,11 @@ if (Meteor.isClient) {
|
|
|
},
|
|
|
"click #croom_create": function() {
|
|
|
Meteor.call("createRoom", $("#croom").val(), function (err, res) {
|
|
|
- console.log(err, res);
|
|
|
+ if (err) {
|
|
|
+ alert("Error " + err.error + ": " + err.reason);
|
|
|
+ } else {
|
|
|
+ window.location = "/" + $("#croom").val();
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
});
|
|
@@ -189,6 +193,12 @@ if (Meteor.isClient) {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ Template.admin.helpers({
|
|
|
+ rooms: function() {
|
|
|
+ return Rooms.find({});
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
Template.playlist.helpers({
|
|
|
playlist_songs: function() {
|
|
|
var data = Playlists.find({type: type}).fetch();
|
|
@@ -200,6 +210,8 @@ if (Meteor.isClient) {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ Meteor.subscribe("rooms");
|
|
|
+
|
|
|
Template.room.onCreated(function () {
|
|
|
var tag = document.createElement("script");
|
|
|
tag.src = "https://www.youtube.com/iframe_api";
|
|
@@ -334,6 +346,7 @@ if (Meteor.isClient) {
|
|
|
|
|
|
Meteor.subscribe("history");
|
|
|
Meteor.subscribe("playlists");
|
|
|
+ Session.set("loaded", true);
|
|
|
Meteor.subscribe("rooms", function() {
|
|
|
Session.set("loaded", false);
|
|
|
console.log(Rooms.find({type: type}).fetch().length);
|
|
@@ -427,49 +440,63 @@ if (Meteor.isServer) {
|
|
|
//var room_types = ["edm", "nightcore"];
|
|
|
var songsArr = [];
|
|
|
|
|
|
+ function getSongsByType(type) {
|
|
|
+ if (type === "edm") {
|
|
|
+ return [
|
|
|
+ {id: "aE2GCa-_nyU", title: "Radioactive - Lindsey Stirling and Pentatonix", duration: getSongDuration("Radioactive - Lindsey Stirling and Pentatonix"), albumart: getSongAlbumArt("Radioactive - Lindsey Stirling and Pentatonix"), type: "youtube"},
|
|
|
+ {id: "aHjpOzsQ9YI", title: "Crystallize", artist: "Linsdey Stirling", duration: getSongDuration("Crystallize"), albumart: getSongAlbumArt("Crystallize"), type: "youtube"}
|
|
|
+ ];
|
|
|
+ } else if (type === "nightcore") {
|
|
|
+ return [{id: "f7RKOP87tt4", title: "Monster (DotEXE Remix)", duration: getSongDuration("Monster (DotEXE Remix)"), albumart: getSongAlbumArt("Monster (DotEXE Remix)"), type: "youtube"}];
|
|
|
+ } else {
|
|
|
+ return [{id: "dQw4w9WgXcQ", title: "Never Gonna Give You Up", duration: getSongDuration("Never Gonna Give You Up"), albumart: getSongAlbumArt("Never Gonna Give You Up"), type: "youtube"}];
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
Rooms.find({}).fetch().forEach(function(room) {
|
|
|
var type = room.type;
|
|
|
- if (Playlists.find({type: type}).fetch().length === 0) {
|
|
|
+ if (Playlists.find({type: type}).count() === 0) {
|
|
|
if (type === "edm") {
|
|
|
- Playlists.insert({type: type, songs: [
|
|
|
- {id: "aE2GCa-_nyU", title: "Radioactive - Lindsey Stirling and Pentatonix", duration: getSongDuration("Radioactive - Lindsey Stirling and Pentatonix"), albumart: getSongAlbumArt("Radioactive - Lindsey Stirling and Pentatonix"), type: "youtube"},
|
|
|
- {id: "aHjpOzsQ9YI", title: "Crystallize", artist: "Linsdey Stirling", duration: getSongDuration("Crystallize"), albumart: getSongAlbumArt("Crystallize"), type: "youtube"}
|
|
|
- ]});
|
|
|
+ Playlists.insert({type: type, songs: getSongsByType(type)});
|
|
|
} else if (type === "nightcore") {
|
|
|
- Playlists.insert({type: type, songs: [{id: "f7RKOP87tt4", title: "Monster (DotEXE Remix)", duration: getSongDuration("Monster (DotEXE Remix)"), albumart: getSongAlbumArt("Monster (DotEXE Remix)"), type: "youtube"}]});
|
|
|
+ Playlists.insert({type: type, songs: getSongsByType(type)});
|
|
|
+ } else {
|
|
|
+ Playlists.insert({type: type, songs: getSongsByType(type)});
|
|
|
}
|
|
|
}
|
|
|
- if (History.find({type: type}).fetch().length === 0) {
|
|
|
+ if (History.find({type: type}).count() === 0) {
|
|
|
History.insert({type: type, history: []});
|
|
|
}
|
|
|
+ if (Playlists.find({type: type}).fetch()[0].songs.length === 0) {
|
|
|
+ // Add a global video to Playlist so it can proceed
|
|
|
+ } else {
|
|
|
+ var startedAt = Date.now();
|
|
|
+ var songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
+ var currentSong = 0;
|
|
|
+ addToHistory(songs[currentSong], startedAt);
|
|
|
|
|
|
- var startedAt = Date.now();
|
|
|
- var songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
- var currentSong = 0;
|
|
|
- addToHistory(songs[currentSong], startedAt);
|
|
|
+ function addToHistory(song, startedAt) {
|
|
|
+ History.update({type: type}, {$push: {history: {song: song, started: startedAt}}});
|
|
|
+ }
|
|
|
|
|
|
- function addToHistory(song, startedAt) {
|
|
|
- History.update({type: type}, {$push: {history: {song: song, started: startedAt}}});
|
|
|
- }
|
|
|
+ function skipSong() {
|
|
|
+ songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
+ if (currentSong < (songs.length - 1)) {
|
|
|
+ currentSong++;
|
|
|
+ } else currentSong = 0;
|
|
|
+ songTimer();
|
|
|
+ addToHistory(songs[currentSong], startedAt);
|
|
|
+ }
|
|
|
|
|
|
- function skipSong() {
|
|
|
- songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
- if (currentSong < (songs.length - 1)) {
|
|
|
- currentSong++;
|
|
|
- } else currentSong = 0;
|
|
|
- songTimer();
|
|
|
- addToHistory(songs[currentSong], startedAt);
|
|
|
- }
|
|
|
+ function songTimer() {
|
|
|
+ startedAt = Date.now();
|
|
|
+ Meteor.setTimeout(function() {
|
|
|
+ skipSong();
|
|
|
+ }, songs[currentSong].duration * 1000);
|
|
|
+ }
|
|
|
|
|
|
- function songTimer() {
|
|
|
- startedAt = Date.now();
|
|
|
- Meteor.setTimeout(function() {
|
|
|
- skipSong();
|
|
|
- }, songs[currentSong].duration * 1000);
|
|
|
+ songTimer();
|
|
|
}
|
|
|
-
|
|
|
- songTimer();
|
|
|
});
|
|
|
|
|
|
|
|
@@ -535,6 +562,81 @@ if (Meteor.isServer) {
|
|
|
} else {
|
|
|
throw new Meteor.error(403, "Invalid genre.");
|
|
|
}
|
|
|
+ },
|
|
|
+ createRoom: function(type) {
|
|
|
+ if (Rooms.find({type: type}).count() === 0) {
|
|
|
+ Rooms.insert({type: type}, function(err) {
|
|
|
+ if (err) {
|
|
|
+ throw err;
|
|
|
+ } else {
|
|
|
+ if (Playlists.find({type: type}).count() === 1) {
|
|
|
+ if (History.find({type: type}).count() === 0) {
|
|
|
+ History.insert({type: type, history: []}, function(err3) {
|
|
|
+ if (err3) {
|
|
|
+ throw err3;
|
|
|
+ } else {
|
|
|
+ startStation();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ startStation();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Playlists.insert({type: type, songs: getSongsByType(type)}, function (err2) {
|
|
|
+ if (err2) {
|
|
|
+ throw err2;
|
|
|
+ } else {
|
|
|
+ if (History.find({type: type}).count() === 0) {
|
|
|
+ History.insert({type: type, history: []}, function(err3) {
|
|
|
+ if (err3) {
|
|
|
+ throw err3;
|
|
|
+ } else {
|
|
|
+ startStation();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ startStation();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ throw "Room already exists";
|
|
|
+ }
|
|
|
+ function startStation() {
|
|
|
+ var startedAt = Date.now();
|
|
|
+ var songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
+ var currentSong = 0;
|
|
|
+ addToHistory(songs[currentSong], startedAt);
|
|
|
+
|
|
|
+ function addToHistory(song, startedAt) {
|
|
|
+ History.update({type: type}, {$push: {history: {song: song, started: startedAt}}});
|
|
|
+ }
|
|
|
+
|
|
|
+ function skipSong() {
|
|
|
+ songs = Playlists.find({type: type}).fetch()[0].songs;
|
|
|
+ if (currentSong < (songs.length - 1)) {
|
|
|
+ currentSong++;
|
|
|
+ } else currentSong = 0;
|
|
|
+ songTimer();
|
|
|
+ addToHistory(songs[currentSong], startedAt);
|
|
|
+ }
|
|
|
+
|
|
|
+ function songTimer() {
|
|
|
+ startedAt = Date.now();
|
|
|
+ Meteor.setTimeout(function() {
|
|
|
+ skipSong();
|
|
|
+ }, songs[currentSong].duration * 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ songTimer();
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
}
|