mirror of https://github.com/calzoneman/sync.git
Begin working on playlists
This commit is contained in:
parent
63e6cf3803
commit
28a960285c
97
database.js
97
database.js
|
@ -125,6 +125,18 @@ function init() {
|
||||||
if(!results) {
|
if(!results) {
|
||||||
Logger.errlog.log("! Failed to create password reset table");
|
Logger.errlog.log("! Failed to create password reset table");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create user playlist table
|
||||||
|
query = ["CREATE TABLE IF NOT EXISTS `user_playlists` (",
|
||||||
|
"`user` VARCHAR(20) NOT NULL,",
|
||||||
|
"`name` VARCHAR(255) NOT NULL,",
|
||||||
|
"`contents` MEDIUMTEXT NOT NULL,",
|
||||||
|
"PRIMARY KEY (`name`))",
|
||||||
|
"ENGINE = MyISAM;"].join("");
|
||||||
|
results = db.querySync(query);
|
||||||
|
if(!results) {
|
||||||
|
Logger.errlog.log("! Failed to create playlist table");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* REGION Global Bans */
|
/* REGION Global Bans */
|
||||||
|
@ -733,6 +745,88 @@ function resetPassword(name) {
|
||||||
return pw;
|
return pw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* REGION User Playlists */
|
||||||
|
function getUserPlaylists(user) {
|
||||||
|
var db = getConnection();
|
||||||
|
if(!db) {
|
||||||
|
[];
|
||||||
|
}
|
||||||
|
|
||||||
|
var query = createQuery(
|
||||||
|
"SELECT name FROM user_playlists WHERE user=?",
|
||||||
|
[user]
|
||||||
|
);
|
||||||
|
|
||||||
|
var results = db.querySync(query);
|
||||||
|
if(!results) {
|
||||||
|
Logger.errlog.log("! Failed to query user playlists");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return results.fetchAllSync();
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadUserPlaylist(user, name) {
|
||||||
|
var db = getConnection();
|
||||||
|
if(!db) {
|
||||||
|
[];
|
||||||
|
}
|
||||||
|
|
||||||
|
var query = createQuery(
|
||||||
|
"SELECT contents FROM user_playlists WHERE user=? AND name=?",
|
||||||
|
[user, name]
|
||||||
|
);
|
||||||
|
|
||||||
|
var results = db.querySync(query);
|
||||||
|
if(!results) {
|
||||||
|
Logger.errlog.log("! Failed to query playlists");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
var row = results.fetchAllSync()[0];
|
||||||
|
var pl;
|
||||||
|
try {
|
||||||
|
pl = JSON.parse(row.contents);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
Logger.errlog.log("! Failed to load playlist "+user+"."+name);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return pl;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveUserPlaylist(pl, user, name) {
|
||||||
|
var db = getConnection();
|
||||||
|
if(!db) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip out unnecessary data
|
||||||
|
var pl2 = [];
|
||||||
|
for(var i = 0; i < pl.length; i++) {
|
||||||
|
var e = {
|
||||||
|
id: pl[i].id,
|
||||||
|
type: pl[i].type
|
||||||
|
};
|
||||||
|
pl2.push(e);
|
||||||
|
}
|
||||||
|
var plstr = JSON.stringify(pl2);
|
||||||
|
|
||||||
|
var query = createQuery(
|
||||||
|
"INSERT INTO user_playlists VALUES (?, ?, ?)",
|
||||||
|
[user, name, plstr]
|
||||||
|
);
|
||||||
|
|
||||||
|
var results = db.querySync(query);
|
||||||
|
if(!results) {
|
||||||
|
Logger.errlog.log("! Failed to insert into playlists");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
exports.setup = setup;
|
exports.setup = setup;
|
||||||
exports.getConnection = getConnection;
|
exports.getConnection = getConnection;
|
||||||
exports.createQuery = createQuery;
|
exports.createQuery = createQuery;
|
||||||
|
@ -758,3 +852,6 @@ exports.setUserEmail = setUserEmail;
|
||||||
exports.generatePasswordReset = generatePasswordReset;
|
exports.generatePasswordReset = generatePasswordReset;
|
||||||
exports.recoverPassword = recoverPassword;
|
exports.recoverPassword = recoverPassword;
|
||||||
exports.resetPassword = resetPassword;
|
exports.resetPassword = resetPassword;
|
||||||
|
exports.getUserPlaylists = getUserPlaylists;
|
||||||
|
exports.loadUserPlaylist = loadUserPlaylist;
|
||||||
|
exports.saveUserPlaylist = saveUserPlaylist;
|
||||||
|
|
44
user.js
44
user.js
|
@ -414,6 +414,50 @@ User.prototype.initCallbacks = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
this.socket.on("listPlaylists", function(data) {
|
||||||
|
if(this.name == "" || this.rank < 1) {
|
||||||
|
socket.emit("listPlaylists", {
|
||||||
|
pllist: [],
|
||||||
|
error: "You must be logged in to manage playlists"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var list = Database.getUserPlaylists(this.name);
|
||||||
|
socket.emit("listPlaylists", {
|
||||||
|
pllist: list,
|
||||||
|
});
|
||||||
|
}.bind(this));
|
||||||
|
|
||||||
|
this.socket.on("savePlaylist", function(data) {
|
||||||
|
if(this.rank < 1) {
|
||||||
|
socket.emit("savePlaylist", {
|
||||||
|
success: false,
|
||||||
|
error: "You must be logged in to manage playlists"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.channel == null) {
|
||||||
|
socket.emit("savePlaylist", {
|
||||||
|
success: false,
|
||||||
|
error: "Not in a channel"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(typeof data.name != "string") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pl = this.channel.queue;
|
||||||
|
var result = Database.saveUserPlaylist(pl, this.name, data.name);
|
||||||
|
this.socket.emit("savePlaylist", {
|
||||||
|
success: result,
|
||||||
|
error: result ? false : "Unknown"
|
||||||
|
});
|
||||||
|
}.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle administration
|
// Handle administration
|
||||||
|
|
|
@ -573,7 +573,8 @@ Callbacks = {
|
||||||
},
|
},
|
||||||
|
|
||||||
queueFail: function() {
|
queueFail: function() {
|
||||||
alert("Queue failed. Double check your link to make sure the video exists.");
|
makeAlert("Error", "Queue failed. Check your link to make sure it is valid.", "alert-error")
|
||||||
|
.insertAfter($("#playlist_controls"));
|
||||||
},
|
},
|
||||||
|
|
||||||
setTemp: function(data) {
|
setTemp: function(data) {
|
||||||
|
@ -738,7 +739,17 @@ Callbacks = {
|
||||||
closePoll: function() {
|
closePoll: function() {
|
||||||
// Not recursive
|
// Not recursive
|
||||||
closePoll();
|
closePoll();
|
||||||
}
|
},
|
||||||
|
|
||||||
|
savePlaylist: function(data) {
|
||||||
|
if(data.success) {
|
||||||
|
makeAlert("Success", "Playlist saved.", "alert-success");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert("DBG error " + data.error);
|
||||||
|
makeAlert("Error", data.error, "alert-error");
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
$.getScript(IO_URL+"/socket.io/socket.io.js", function() {
|
$.getScript(IO_URL+"/socket.io/socket.io.js", function() {
|
||||||
|
|
|
@ -1316,3 +1316,23 @@ function hasPermission(key) {
|
||||||
}
|
}
|
||||||
return RANK >= v;
|
return RANK >= v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function makeAlert(title, text, klass) {
|
||||||
|
if(!klass) {
|
||||||
|
klass = "alert-info";
|
||||||
|
}
|
||||||
|
|
||||||
|
var al = $("<div/>").addClass("alert")
|
||||||
|
.addClass(klass)
|
||||||
|
.text(text);
|
||||||
|
$("<br/>").prependTo(al);
|
||||||
|
$("<strong/>").text(title).prependTo(al);
|
||||||
|
$("<button/>").addClass("close pull-right").html("×")
|
||||||
|
.click(function() {
|
||||||
|
al.hide("blind", function() {
|
||||||
|
al.remove();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.prependTo(al);
|
||||||
|
return al;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue