Skip to content

Commit

Permalink
Merge branch 'release/v0.6.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
jammus committed Aug 7, 2011
2 parents fbb8da9 + e7b1cb6 commit 162689e
Show file tree
Hide file tree
Showing 31 changed files with 898 additions and 1,419 deletions.
25 changes: 16 additions & 9 deletions controllers/defaultcontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@ module.exports = function(config) {
return {
default: {
all: function(req, res, next) {
if (req.header("host").indexOf(config.host) != 0) {
var url = "http://" + config.host;
if (config.port && config.port != "80") {
url += ":" + config.port;
}
url += req.originalUrl;
res.redirect(url, 301);;
return;
if (isRequestForConfiguredHost(req)) {
return next();
}
next();
redirectToCorrectHost(req, res);
}
}
};

function isRequestForConfiguredHost(req) {
return req.header("host").indexOf(config.host) === 0;
}

function redirectToCorrectHost(req, res) {
var url = "http://" + config.host;
if (config.port && config.port != "80") {
url += ":" + config.port;
}
url += req.originalUrl;
res.redirect(url, 301);;
}
};
34 changes: 22 additions & 12 deletions controllers/errorcontroller.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,29 @@ var cutils = require("./cutils");
module.exports = function(lastfm, boxsocial, config) {
return {
error: function(err, req, res) {
if (err.message.indexOf("ENOENT") > -1)
res.render("404", {
status: 404,
title: cutils.title("Page not found", config.shortTitle),
guest: req.session ? req.session.guest : undefined
});
else
res.render("500", {
status: 500,
title: cutils.title("Error", config.shortTitle),
guest: req.session ? req.session.guest : undefined
});
if (err.message.indexOf("ENOENT") > -1) {
display404(req, res);
}
else {
display500(req, res);
}
}
};

function display404(req, res) {
displayError(req, res, 404, "Page not found");
}

function display500(req, res) {
displayError(req, res, 500, "Error");
}

function displayError(req, res, code, title) {
res.render(code, {
status: code,
title: cutils.title(title, config.shortTitle),
guest: req.session ? req.session.guest : undefined
});
}
};

16 changes: 7 additions & 9 deletions controllers/homecontroller.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var _ = require("underscore");
var cutils = require("./cutils");
var _ = require("underscore"),
cutils = require("./cutils");

module.exports = function(lastfm, boxsocial, config) {
function properCase(text) {
Expand All @@ -11,16 +11,13 @@ module.exports = function(lastfm, boxsocial, config) {
return {
index: {
get: function(req, res) {
var guest = req.session.guest;
var party = null;
if (guest) {
party = boxsocial.findParty({ guest: guest });
}
var guest = req.session.guest,
party = guest ? boxsocial.findParty({ guest: guest }) : null;

res.render("index", {
guest: req.session.guest,
currentParty: party,
parties: _(boxsocial.parties).first(5),
parties: boxsocial.getTopParties(5),
title: config.longTitle
});
}
Expand All @@ -30,7 +27,8 @@ module.exports = function(lastfm, boxsocial, config) {
get: function(req, res) {
res.render(req.params.page, {
guest: req.session ? req.session.guest : null,
title: cutils.title(properCase(req.params.page), config.shortTitle)
title: cutils.title(properCase(req.params.page),
config.shortTitle)
});
}
}
Expand Down
11 changes: 6 additions & 5 deletions controllers/logincontroller.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var querystring = require("querystring");
var Guest = require("../lib/guest").Guest;
var querystring = require("querystring"),
Guest = require("../lib/guest").Guest;

module.exports = function(lastfm, boxsocial, config) {
return {
Expand All @@ -19,8 +19,9 @@ module.exports = function(lastfm, boxsocial, config) {

callback: {
get: function(req, res) {
var token = req.param("token");
var fmsession = lastfm.session();
var token = req.param("token"),
fmsession = lastfm.session();

fmsession.authorise(token, {
handlers: {
authorised: function(session) {
Expand All @@ -42,7 +43,7 @@ module.exports = function(lastfm, boxsocial, config) {

logout: {
post: function(req, res) {
boxsocial.leave(req.session.guest);
boxsocial.leaveParty(req.session.guest);
req.session.destroy();
res.redirect("/");
}
Expand Down
8 changes: 4 additions & 4 deletions controllers/partycontroller.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
var cutils = require("./cutils");
var Guest = require("../lib/guest").Guest;
var cutils = require("./cutils"),
Guest = require("../lib/guest").Guest;

module.exports = function(lastfm, boxsocial, config) {
return {
index: {
get: function(req, res) {
var parties = boxsocial.parties;
var parties = boxsocial.getTopParties(100);
res.render("parties", {
guest: req.session.guest,
parties: parties
Expand Down Expand Up @@ -83,7 +83,7 @@ module.exports = function(lastfm, boxsocial, config) {
get: function(req, res) {
var guest = req.session.guest;
if (guest) {
boxsocial.leave(guest);
boxsocial.leaveParty(guest);
}
res.redirect("/");
}
Expand Down
143 changes: 70 additions & 73 deletions lib/boxsocial.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,59 +6,97 @@ var EventEmitter = require("events").EventEmitter,
var BoxSocial = exports.BoxSocial = function(lastfm, partyTimeout) {
EventEmitter.call(this);

this.lastfm = lastfm;
this.parties = [];
this.partyTimeout = partyTimeout;
};
var that = this,
parties = [];

BoxSocial.prototype = Object.create(EventEmitter.prototype);
this.getTopParties = function(maxParties) {
return _(parties).first(maxParties);
};

BoxSocial.prototype.attend = function (host, guest) {
var that = this;
var party;
this.partyCount = function() {
return parties.length;
};

if (isJoiningOwnParty(host, guest)) {
party = findPartyByUser(host)
return party;
}
this.attend = function(host, guest) {
return attend(host, guest);
};

this.findParty = function(options) {
return findParty(options);
};

this.leaveParty = function(guest) {
leaveParty(guest);
};

function attend(host, guest) {
if (isJoiningOwnParty(host, guest)) {
return findPartyByHost(host)
}

if (isHostingAParty(guest)) {
return findPartyByHost(guest.session.user)
}

var party = findPartyByHost(host) ||
findPartyByGuest(host) ||
createParty(host);

if (!party.hasGuest(guest)) {
leaveParty(guest);
party.addGuest(guest);
}

if (isGuestAHost(guest)) {
party = findPartyByUser(guest)
return party;
}

party = findPartyByUser(host);
if (!party) {
party = createParty(host);
function isJoiningOwnParty(host, guest) {
return host.toLowerCase() == guest.session.user.toLowerCase();
}

if (!party.hasGuest(guest)) {
this.leave(guest);
party.addGuest(guest);
function isHostingAParty(guest) {
var party = findPartyByHost(guest.session.user);
return party && party.host == guest.session.user;
}

return party;
function findParty(options) {
if (options.host) {
return findPartyByHost(options.host);
}
if (options.guest) {
return findPartyByGuest(options.guest);
}
}

function isJoiningOwnParty(host, guest) {
return host.toLowerCase() == guest.session.user.toLowerCase();
function findPartyByHost(host) {
return _(parties).detect(function(p) {
return p.host.toLowerCase() == host.toLowerCase();
});
}

function isGuestAHost(guest) {
var party = findPartyByUser(guest);
return party && party.host == guest.session.user;
function findPartyByGuest(guest) {
return _(parties).detect(function(p) {
return p.hasGuest(guest);
});
}

function leaveParty(guest) {
var party = findPartyByGuest(guest);
if (party) {
party.removeGuest(guest);
}
}

function removeParty(party) {
that.parties = _(that.parties).reject(function(p) {
parties = _(parties).reject(function(p) {
return p.host == party.host;
});
that.emit("partyFinished", party);
}

function createParty(host) {
var stream = that.lastfm.stream(host);
var party = new Party(that.lastfm, stream);
var monitor = new PartyMonitor(party, that.partyTimeout);
var party = new Party(lastfm, host);
var monitor = new PartyMonitor(party, partyTimeout);

party.on("finished", removeParty);

Expand All @@ -78,53 +116,12 @@ BoxSocial.prototype.attend = function (host, guest) {
that.emit("error", error);
});

that.parties.push(party);
parties.unshift(party);

that.emit("newParty", party);

return party;
}

function findPartyByUser(user) {
var type = typeof(user);
var username = (type == "string") ? username = user : user.session.user;

var party = that.findParty({ host: username });
if (!party) {
party = that.findParty({ guest: {
session: {
user: username,
key: ""
}
}});
}
return party;
}
};

BoxSocial.prototype.partyCount = function() {
return this.parties.length;
};

BoxSocial.prototype.findParty = function(options) {
var that = this;

if (options.host) {
return _(that.parties).detect(function(p) {
return p.host.toLowerCase() == options.host.toLowerCase();
});
}
if (options.guest) {
return _(that.parties).detect(function(p) {
return p.hasGuest(options.guest);
});
}
return null;
};

BoxSocial.prototype.leave = function(guest) {
var party = this.findParty({guest: guest});
if (party) {
party.removeGuest(guest);
}
};
BoxSocial.prototype = Object.create(EventEmitter.prototype);
Loading

0 comments on commit 162689e

Please sign in to comment.