diff --git a/.gitignore b/.gitignore
index 3c3629e6..241a7964 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
node_modules
+temp
\ No newline at end of file
diff --git a/helpers/lbryApi.js b/helpers/lbryApi.js
index 0e732bfb..25351e5f 100644
--- a/helpers/lbryApi.js
+++ b/helpers/lbryApi.js
@@ -70,25 +70,31 @@ function findAllClaims(name, resolve, reject){
module.exports = {
- publishClaim: function(publishObject){
- axios.post('http://localhost:5279/lbryapi', publishObject)
- .then(function (response) {
- // receive resonse from LBRY
- // if successfull, (1) delete file (2) send response to the client
- console.log(">> 'publish' success...");
- console.log(">> 'publish' response.data:", response.data);
- console.log(" [x] Done");
- // return the claim we got
- //res.status(200).send(JSON.stringify({msg: "you succsessfully published!", txData: response.data}));
- return;
- }).catch(function(error){
- // receive response from LBRY
- // if not successfull, (1) delete file and (2) send response to the client
- console.log(">> 'publish' error.response.data:", error.response.data);
- console.log(" [x] Done");
- //res.status(500).send(JSON.stringify({msg: "your file was not published", err: error.response.data.error.message}));
- return;
+ publishClaim: function(publishParams){
+ console.log(publishParams);
+ var deferred = new Promise(function(resolve, reject){
+ axios.post('http://localhost:5279/lbryapi', {
+ "method": "publish",
+ "params": publishParams
+ })
+ .then(function (response) {
+ // receive resonse from LBRY
+ console.log(">> 'publish' success");
+ // return the claim we got
+ resolve(response.data);
+ return;
+ }).catch(function(error){
+ // receive response from LBRY
+ console.log(">> 'publish' error");
+ if (error.response.data.error){
+ reject(error.response.data.error);
+ } else {
+ reject(error);
+ }
+ return;
+ })
})
+ return deferred;
},
getClaimBasedOnNameOnly: function(claimName){
@@ -119,10 +125,10 @@ module.exports = {
return;
}
// order the claims
- var orderedPublcClaims = orderTopClaims(freePublicClaims);
+ var orderedPublicClaims = orderTopClaims(freePublicClaims);
// create the uri for the first (selected) claim
console.log(">> ordered free public claims");
- var freePublicClaimUri = "lbry://" + orderedPublcClaims[0].name + "#" + orderedPublcClaims[0].claim_id;
+ var freePublicClaimUri = "lbry://" + orderedPublicClaims[0].name + "#" + orderedPublicClaims[0].claim_id;
console.log(">> your free public claim URI:", freePublicClaimUri);
// fetch the image to display
getClaimWithUri(freePublicClaimUri, resolve, reject);
@@ -187,7 +193,7 @@ module.exports = {
return;
}
// order the claims
- var orderedPublcClaims = orderTopClaims(freePublicClaims);
+ var orderedPublicClaims = orderTopClaims(freePublicClaims);
// serve the response
/*
to do: rather than returning json, serve a page of all these claims
diff --git a/package.json b/package.json
index 38ad5ab0..a3ef74fd 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
"connect-multiparty": "^2.0.0",
"express": "^4.15.2",
"nodemon": "^1.11.0",
- "socket.io": "^2.0.1"
+ "socket.io": "^2.0.1",
+ "socketio-file-upload": "^0.6.0"
}
}
diff --git a/public/index.html b/public/index.html
index 1035030b..30ce073a 100644
--- a/public/index.html
+++ b/public/index.html
@@ -12,7 +12,7 @@
Examples:
+
diff --git a/routes/sockets-routes.js b/routes/sockets-routes.js
index 2b82417f..cc7b6b97 100644
--- a/routes/sockets-routes.js
+++ b/routes/sockets-routes.js
@@ -4,96 +4,71 @@ module.exports = function(app) {
var fs = require('fs');
var path = require('path');
var lbryApi = require('../helpers/lbryApi.js');
- var files = {}; // for the socket uploader
+ var queueApi = require('../helpers/queueApi.js');
+ var siofu = require("socketio-file-upload");
+ var rootDirectory = "C:\\Users\\Bones\\development\\Lbry\\spee.ch\\";
// functions to create a publishing object
- function createPublishObject(fileInfo, filePath){
- var publishObject = {
- "method":"publish",
- "params": {
- "name": fileInfo.name,
- "file_path": filePath,
- "bid": 0.1,
- "metadata": {
- "description": fileInfo.description,
- "title": fileInfo.title,
- "author": fileInfo.author,
- "language": fileInfo.language,
- "license": fileInfo.license,
- "nsfw": (fileInfo.nsfw.toLowerCase() === "true")
- }
+ function createPublishParams(name, filepath, license, nsfw){
+ var publishParams = {
+ "name": name,
+ "file_path": rootDirectory + filepath,
+ "bid": 0.1,
+ "metadata": {
+ "description": name + "published via spee.ch",
+ "title": name,
+ "author": "spee.ch",
+ "language": "en",
+ "license": license,
+ "nsfw": (nsfw.toLowerCase() === "true")
}
};
- return publishObject;
+ return publishParams;
}
// publish an image to lbry
- function publish(data, filePath){
- // 1. receive the file
-
- // 2. create the publish object
- var publishObject = createPublishObject(data, filePath);
- // 3. post the task to the que
- queueApi.addNewTaskToQueue(JSON.stringify({
- type: 'publish',
- data: publishObject
- }));
-
-
+ function publish(name, filepath, license, nsfw, socket){
+ // update the client
+ socket.emit("publish-status", "starting publishing...");
+ // create the publish object
+ var publishParams = createPublishParams(name, filepath, license, nsfw);
+ // get a promise to publish
+ var promise = lbryApi.publishClaim(publishParams);
+ // handle promise
+ promise.then(function(data){
+ console.log("publish promise success. Tx info:", data)
+ socket.emit("publish-complete", data);
+ /*
+ note: remember to delete the local file
+ */
+ })
+ .catch(function(error){
+ console.log("error:", error);
+ socket.emit("publish-status", "publish failed");
+ /*
+ note: remember to delete the local file
+ */
+ });
};
io.on('connection', function(socket){
console.log('a user connected');
- console.log("files", files)
- // socket listener for starting an upload
- socket.on('upload-start', function(data){ // data contains the variables that we passed from the client
- console.log("upload-start");
- console.log("files", files)
- var name = data['name'];
- files[name] = { // create a new entry in the files object
- fileSize: data['size'],
- data: '',
- downloaded: 0
- }
- var place = 0;
- try { // if its a file we already tried
- var stat = fs.statSync('Temp/' + name);
- if (stat.isFile()) {
- files[name]['downloaded'] = stat.size;
- place = stat.size / 524288;
- };
- } catch(er) {}; // if it's a new file
- fs.open("Temp/" + name, "a", 0755, function(err, fd){
- if (err) {
- console.log("err:", err);
- } else {
- files[name]['handler'] = fd; // store the handler so we can write to it later
- socket.emit('moreData', {'place': place, percent: 0 });
- };
- });
+ // listener for uploader
+ var uploader = new siofu();
+ uploader.dir = "./temp";
+ uploader.listen(socket);
+ // attach upload listeners
+ uploader.on("error", function(event){
+ console.log("an error occured while uploading", event.error);
+ socket.emit("publish-status", event.error)
})
-
- socket.on('upload', function(data){
- console.log("upload");
- console.log("files", files)
- var name = data['name'];
- files[name]['downloaded'] += data['data'].length;
- files[name]['data'] += data['data'];
- if (files[name]['downloaded'] == files[name]['fileSize']) {
- fs.write(files[name]['handler'], files[name]['data'], null, 'binary', function(err, writen){
- // get thumnail here
- });
- } else if (files[name]['data'].length > 10485760) { // if data buffer reaches 10mb
- fs.write(files[name]['handler'], files[name]['data'], null, 'Binary', function(err, writen){
- files[name]['data'] = "" // reset the buffer
- var place = files[name]['donwladed'] / 524288;
- var percent = (files[name]['downloaded'] / files[Name]['fileSize']) * 100;
- socket.emit('moreData', {'place': place, 'percent': percent});
- })
+ uploader.on("saved", function(event){
+ console.log("saved " + event.file.name);
+ if (event.file.success){
+ socket.emit("publish-status", "file upload successfully completed");
+ publish(event.file.meta.name, event.file.pathName, event.file.meta.license,event.file.meta.nsfw, socket)
} else {
- var place = file[name]['downloaded'] / 524288;
- var percent = (files[name]['downloaded'] / files[name]['fileSize']) * 100;
- socket.emit('moreData', {'place': place, 'percent': percent});
- }
+ socket.emit("publish-status", "file saved, but with errors")
+ };
});
// handle disconnect
diff --git a/server.js b/server.js
index 5872b342..abf98fba 100644
--- a/server.js
+++ b/server.js
@@ -2,6 +2,7 @@
var express = require('express');
var bodyParser = require('body-parser');
var path = require('path');
+var siofu = require("socketio-file-upload");
// set port
var PORT = 3000;
@@ -15,6 +16,7 @@ app.use(express.static(__dirname + '/public'));
// configure express app
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
+app.use(siofu.router);
// require express routes
require("./routes/api-routes.js")(app);