Shuo/src/helper.js

77 lines
1.7 KiB
JavaScript
Raw Normal View History

2014-10-04 23:22:23 +00:00
var path = require("path");
var fs = require('fs');
2014-10-04 23:22:23 +00:00
2014-10-03 23:33:44 +00:00
module.exports = {
HOME: (process.env.HOME || process.env.USERPROFILE) + "/.shout",
getConfig: getConfig,
getLines: getLines,
countLines: countLines
};
2014-10-03 23:33:44 +00:00
function getConfig() {
2014-10-04 23:22:23 +00:00
return require(path.resolve(this.HOME) + "/config");
2014-10-03 23:33:44 +00:00
};
function getLines(filename, from, to, callback) {
var stream = fs.createReadStream(filename, {
flags: 'r',
encoding: 'utf-8',
fd: null,
mode: 0666,
bufferSize: 1024
});
function endReached(){
callback(null, lines.slice(0, lines.length-1));
}
var lines = [];
var count = -1;
2015-04-04 13:20:00 +00:00
var last = "";
stream.on("data", function(data){
2015-04-04 13:20:00 +00:00
data = (last+data).split("\n");
last = data.pop();
var next = count + data.length;
var gtn = next >= from;
var gtm = next >= to;
if (gtn) lines = lines.concat(data.slice(lines.length ? 0 : from - count - 1));
if (gtm) {
stream.removeListener("end", endReached);
2015-04-04 13:23:57 +00:00
stream.close();
return callback(null, lines.slice(0, to - from));
}
count = next;
});
stream.on("error", function(err){
callback(err);
});
stream.on("end", endReached);
}
function countLines(filename, callback) {
var stream = fs.createReadStream(filename, {
flags: 'r',
encoding: 'utf-8',
fd: null,
mode: 0666,
bufferSize: 1024
});
var count = -1;
stream.on("data", function(data){
count += data.split("\n").length;
});
stream.on("error", function(err){
callback(err);
});
stream.on("end", function(){
callback(null, count);
});
}