made slightly more efficient in response to comments

This commit is contained in:
Nick Bensema 2013-09-03 21:28:12 -07:00
parent c6c6e8e55b
commit bf95be812c
2 changed files with 15 additions and 27 deletions

View file

@ -257,26 +257,21 @@ function handleClean(chan, user, target) {
// you can use regexps, in case someone tries
// to fool you with cyrillic or something.
target = new RegExp(target);
var uid = false; // to skip first chan.sendAll()
// local variables for deleteNext() callback
var pl = chan.playlist;
var count = 0;
var matches = pl.items.findAll(function(item) {
return target.test(item.queueby);
});
console.log(matches);
var deleteNext;
// this callback will search for matching items,
// and if one is found, call the remove method
// with itself as the callback to execute after
// the remove is finished.
deleteNext = function() {
// notify channel that this is deleted
if (uid !== false) {
if (count < matches.length) {
var uid=matches[count].uid;
count += 1
chan.sendAll("delete", {
uid: uid
});
}
// find next match
uid = pl.items.findSubmitter(target);
if (uid !== false) {
// remove, and restart callback when removed.
pl.remove(uid, deleteNext);
} else {
// refresh playlist only once, at the end

View file

@ -181,21 +181,14 @@ ULList.prototype.findVideoId = function (id) {
return false;
};
/**
returns the UID of the first item in the queue that
was submitted by a user matching the target regexp.
*/
ULList.prototype.findSubmitter = function(target) {
var item = this.first;
while(item !== null) {
if(item.queueby && target.test(item.queueby)) {
console.log("found", item.uid, target, item.queueby);
return item.uid;
}
item = item.next;
}
return false;
ULList.prototype.findAll = function(fn) {
var result = [];
this.forEach(function(item) {
if( fn(item) ) {
result.push(item);
}
});
return result;
}
exports.ULList = ULList;