From 198754222df8345b17f9d4b61417d6e8be865817 Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:14:01 +0100 Subject: [PATCH 1/7] Added functionality to list pads on this server. --- src/node/db/API.js | 6 ++++ src/node/db/Pad.js | 3 +- src/node/db/PadManager.js | 55 +++++++++++++++++++++++++++++++++- src/node/handler/APIHandler.js | 36 ++++++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index ea58d859..9bcb4eb5 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -42,6 +42,12 @@ exports.deleteGroup = groupManager.deleteGroup; exports.listPads = groupManager.listPads; exports.createGroupPad = groupManager.createGroupPad; +/**********************/ +/**PADLIST FUNCTION****/ +/**********************/ + +exports.listAllPads = padManager.getPads; + /**********************/ /**AUTHOR FUNCTIONS****/ /**********************/ diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js index dba791fd..a420c8f9 100644 --- a/src/node/db/Pad.js +++ b/src/node/db/Pad.js @@ -473,8 +473,7 @@ Pad.prototype.remove = function remove(callback) { //delete the pad entry and delete pad from padManager function(callback) { - db.remove("pad:"+padID); - padManager.unloadPad(padID); + padManager.removePad(padID); hooks.callAll("padRemove", {'padID':padID}); callback(); } diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 5f08b1b1..79a41ddc 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -34,10 +34,52 @@ var db = require("./DB").db; */ var globalPads = { get: function (name) { return this[':'+name]; }, - set: function (name, value) { this[':'+name] = value; }, + set: function (name, value) + { + this[':'+name] = value; + padList.addPad(name); + }, remove: function (name) { delete this[':'+name]; } }; +var padList = { + list: [], + init: function() + { + db.get("pads", function(err, dbData) + { + if(ERR(err)) return; + if(dbData != null){ + dbData.forEach(function(val){ + padList.addPad(val,false); + }); + } + }); + return this; + }, + getPads: function(){ + return this.list; + }, + addPad: function(name,immediateSave) + { + if(this.list.indexOf(name) == -1){ + this.list.push(name); + if(immediateSave == undefined || immediateSave == true){ + db.set("pads", this.list); + } + } + }, + removePad: function(name) + { + var index=this.list.indexOf(name); + if(index>-1){ + this.list.splice(index,1); + db.set("pads", this.list); + } + } +}; +padList.init(); + /** * An array of padId transformations. These represent changes in pad name policy over * time, and allow us to "play back" these changes so legacy padIds can be found. @@ -109,6 +151,11 @@ exports.getPad = function(id, text, callback) } } +exports.getPads = function(callback) +{ + callback(null,padList.getPads()); +} + //checks if a pad exists exports.doesPadExists = function(padId, callback) { @@ -163,6 +210,12 @@ exports.isValidPadId = function(padId) return /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId); } +exports.removePad = function(padId){ + db.remove("pad:"+padId); + exports.unloadPad(padId); + padList.removePad(padId); +} + //removes a pad from the array exports.unloadPad = function(padId) { diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index 0bcd5f0c..ae93e933 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -138,6 +138,42 @@ var version = , "listAllGroups" : [] , "checkToken" : [] } +, "1.2.1": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getRevisionsCount" : ["padID"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "getReadOnlyID" : ["padID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + } }; /** From 8c3263a6ea6105ad1f2c6e2c5b09a5f88c120fb1 Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:19:10 +0100 Subject: [PATCH 2/7] Added comments --- src/node/db/PadManager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 79a41ddc..fc273c56 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -210,6 +210,9 @@ exports.isValidPadId = function(padId) return /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId); } +/** + * Removes the pad from database and unloads it. + */ exports.removePad = function(padId){ db.remove("pad:"+padId); exports.unloadPad(padId); From 7a49c82e16d11604d45c84844db2bad4d6251cef Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:21:14 +0100 Subject: [PATCH 3/7] Added comments --- src/node/db/PadManager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index fc273c56..891f6595 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -78,6 +78,7 @@ var padList = { } } }; +//initialises the allknowing data structure padList.init(); /** From c9f137b2e581339b46522bf6ce70ce9b0eb5612d Mon Sep 17 00:00:00 2001 From: Swen Date: Wed, 9 Jan 2013 20:45:39 +0100 Subject: [PATCH 4/7] Added functionality to use spcsser/ueberDB findKey functionality. --- src/node/db/PadManager.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 891f6595..32119038 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -46,12 +46,12 @@ var padList = { list: [], init: function() { - db.get("pads", function(err, dbData) + db.findKeys("pad:*", "*:*:*", function(err, dbData) { if(ERR(err)) return; if(dbData != null){ dbData.forEach(function(val){ - padList.addPad(val,false); + padList.addPad(val.replace(/pad:/,""),false); }); } }); @@ -60,13 +60,10 @@ var padList = { getPads: function(){ return this.list; }, - addPad: function(name,immediateSave) + addPad: function(name) { if(this.list.indexOf(name) == -1){ this.list.push(name); - if(immediateSave == undefined || immediateSave == true){ - db.set("pads", this.list); - } } }, removePad: function(name) @@ -74,7 +71,6 @@ var padList = { var index=this.list.indexOf(name); if(index>-1){ this.list.splice(index,1); - db.set("pads", this.list); } } }; From e9726890a4aa4c80bebac2c8e6c3af29522495a5 Mon Sep 17 00:00:00 2001 From: Swen Date: Fri, 11 Jan 2013 04:43:59 +0100 Subject: [PATCH 5/7] Edited getPads function to be able to work without callback --- src/node/db/PadManager.js | 6 +++++- src/package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 32119038..82bc27d0 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -150,7 +150,11 @@ exports.getPad = function(id, text, callback) exports.getPads = function(callback) { - callback(null,padList.getPads()); + if(callback != null){ + callback(null,padList.getPads()); + }else{ + return padList.getPads(); + } } //checks if a pad exists diff --git a/src/package.json b/src/package.json index 67acd126..826db97b 100644 --- a/src/package.json +++ b/src/package.json @@ -46,5 +46,5 @@ "engines" : { "node" : ">=0.6.0", "npm" : ">=1.0" }, - "version" : "1.2.3" + "version" : "1.2.4" } From 062dbff738ac0c4a302946aaaa91537f53cf6a18 Mon Sep 17 00:00:00 2001 From: spcsser Date: Fri, 11 Jan 2013 12:59:02 +0100 Subject: [PATCH 6/7] Added listAllPads api docu --- doc/api/http_api.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 61daeaa3..65309dbc 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -419,3 +419,13 @@ returns ok when api token is valid *Example returns:* * `{"code":0,"message":"ok","data":null}` * `{"code":4,"message":"no or wrong API Key","data":null}` + +### Pads + +#### listAllPads() + * API >= 1.2.1 + +lists all pads on this epl instance + +*Example returns:* + * `{code: 0, message:"ok", data: ["testPad", "thePadsOfTheOthers"]}` \ No newline at end of file From 9687ecbb829721ff6272cfbc7d4a8e3eba9a4892 Mon Sep 17 00:00:00 2001 From: spcsser Date: Fri, 11 Jan 2013 18:31:53 +0100 Subject: [PATCH 7/7] Modified pad list manager to return an ordered list. --- src/node/db/PadManager.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 82bc27d0..8cd69a83 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -44,6 +44,7 @@ var globalPads = { var padList = { list: [], + sorted : false, init: function() { db.findKeys("pad:*", "*:*:*", function(err, dbData) @@ -57,13 +58,21 @@ var padList = { }); return this; }, + /** + * Returns all pads in alphabetical order as array. + */ getPads: function(){ + if(!this.sorted){ + this.list=this.list.sort(); + this.sorted=true; + } return this.list; }, addPad: function(name) { if(this.list.indexOf(name) == -1){ this.list.push(name); + this.sorted=false; } }, removePad: function(name) @@ -71,6 +80,7 @@ var padList = { var index=this.list.indexOf(name); if(index>-1){ this.list.splice(index,1); + this.sorted=false; } } };