Skip to content

Commit

Permalink
add all
Browse files Browse the repository at this point in the history
  • Loading branch information
BigTeri committed Aug 27, 2016
0 parents commit 0cb1af2
Show file tree
Hide file tree
Showing 47 changed files with 3,053 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
npm-debug.log
.DS_Store
/json
5 changes: 5 additions & 0 deletions bin/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env node

"use strict";

require("../build/server/cli");
40 changes: 40 additions & 0 deletions build/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Item = exports.Playlist = exports.Storage = exports.Server = exports.Station = exports.Stream = undefined;

var _stream = require("./stream");

var _stream2 = _interopRequireDefault(_stream);

var _station = require("./station");

var _station2 = _interopRequireDefault(_station);

var _server = require("./server");

var _server2 = _interopRequireDefault(_server);

var _storage = require("./storage");

var _storage2 = _interopRequireDefault(_storage);

var _playlist = require("./playlist");

var _playlist2 = _interopRequireDefault(_playlist);

var _item = require("./item");

var _item2 = _interopRequireDefault(_item);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.Stream = _stream2.default;
exports.Station = _station2.default;
exports.Server = _server2.default;
exports.Storage = _storage2.default;
exports.Playlist = _playlist2.default;
exports.Item = _item2.default;
exports.default = _server2.default;
93 changes: 93 additions & 0 deletions build/item/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _shortid = require("shortid");

var _shortid2 = _interopRequireDefault(_shortid);

var _file = require("./types/file");

var _file2 = _interopRequireDefault(_file);

var _stream = require("./types/stream");

var _stream2 = _interopRequireDefault(_stream);

var _youtube = require("./types/youtube");

var _youtube2 = _interopRequireDefault(_youtube);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var typePluginMap = {};

var Item = function () {
function Item(options) {
_classCallCheck(this, Item);

this._id = _shortid2.default.generate();
this.type = options.type;
this.options = options.options;
this.typePlugin = Item.getType(this.type);
}

_createClass(Item, [{
key: "load",
value: function load(done) {
var _this = this;

this.typePlugin.getStream(this, function (err, stream) {
if (err) return done(err);
stream.once("error", function () {});

_this.typePlugin.getMetadata(_this, function (err, metadata) {
if (err) {
stream.destroy();
return done(err);
}

done(null, stream, metadata, {
streamNeedsPostProcessing: _this.typePlugin.streamNeedsPostProcessing
});
});
});
}
}, {
key: "toJSON",
value: function toJSON() {
return {
_id: this._id,
type: this.type,
options: this.options
};
}
}], [{
key: "registerType",
value: function registerType(type, typePlugin) {
typePluginMap[type] = typePlugin;
}
}, {
key: "getType",
value: function getType(type) {
var typePlugin = typePluginMap[type];
if (!typePlugin) throw new Error("Unknown item type");
return typePlugin;
}
}]);

return Item;
}();

exports.default = Item;


Item.registerType("File", new _file2.default());
Item.registerType("Stream", new _stream2.default());
Item.registerType("YouTube", new _youtube2.default());
45 changes: 45 additions & 0 deletions build/item/types/file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _fs = require("fs");

var _fs2 = _interopRequireDefault(_fs);

var _path = require("path");

var _path2 = _interopRequireDefault(_path);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var FileType = function () {
function FileType() {
_classCallCheck(this, FileType);

this.streamNeedsPostProcessing = true;
}

_createClass(FileType, [{
key: "getStream",
value: function getStream(item, done) {
done(null, _fs2.default.createReadStream(item.options.filename));
}
}, {
key: "getMetadata",
value: function getMetadata(item, done) {
done(null, {
StreamTitle: item.options.title || _path2.default.basename(item.options.filename, _path2.default.extname(item.options.filename))
});
}
}]);

return FileType;
}();

exports.default = FileType;
35 changes: 35 additions & 0 deletions build/item/types/stream.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var StreamType = function () {
function StreamType() {
_classCallCheck(this, StreamType);

this.streamNeedsPostProcessing = true;
}

_createClass(StreamType, [{
key: "getStream",
value: function getStream(item, done) {
done(null, item.options.stream);
}
}, {
key: "getMetadata",
value: function getMetadata(item, done) {
done(null, {
StreamTitle: item.options.title || ""
});
}
}]);

return StreamType;
}();

exports.default = StreamType;
44 changes: 44 additions & 0 deletions build/item/types/youtube.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _ytdlCore = require("ytdl-core");

var _ytdlCore2 = _interopRequireDefault(_ytdlCore);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var YouTubeType = function () {
function YouTubeType() {
_classCallCheck(this, YouTubeType);

this.streamNeedsPostProcessing = true;
}

_createClass(YouTubeType, [{
key: "getStream",
value: function getStream(item, done) {
done(null, (0, _ytdlCore2.default)(item.options.url));
}
}, {
key: "getMetadata",
value: function getMetadata(item, done) {
_ytdlCore2.default.getInfo(item.options.url, function (err, info) {
if (err) return done(err);
done(null, {
StreamTitle: info.author + " - " + info.title
});
});
}
}]);

return YouTubeType;
}();

exports.default = YouTubeType;
97 changes: 97 additions & 0 deletions build/playlist/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
"use strict";

Object.defineProperty(exports, "__esModule", {
value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _events = require("events");

var _shortid = require("shortid");

var _shortid2 = _interopRequireDefault(_shortid);

var _item = require("../item");

var _item2 = _interopRequireDefault(_item);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

var Playlist = function (_EventEmitter) {
_inherits(Playlist, _EventEmitter);

function Playlist(options) {
_classCallCheck(this, Playlist);

var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Playlist).call(this));

_this._id = options._id || _shortid2.default.generate();
_this.items = options.items || [];
_this.items = _this.items.map(function (options) {
return new _item2.default(options);
});
_this.index = typeof options.index === "number" ? options.index : -1;
return _this;
}

_createClass(Playlist, [{
key: "addItem",
value: function addItem(options) {
var item = new _item2.default(options);
this.items.push(item);
return item;
}
}, {
key: "playNext",
value: function playNext() {
return this.next("play");
}
}, {
key: "replaceNext",
value: function replaceNext() {
return this.next("replace");
}
}, {
key: "next",
value: function next(eventName) {
var _this2 = this;

this.setNextIndex();
var item = this.items[this.index];
if (!item) return false;
item.load(function (err, stream, metadata, options) {
_this2.emit(eventName, err, stream, metadata, item, options);
});
return true;
}
}, {
key: "setNextIndex",
value: function setNextIndex() {
if (this.index + 1 >= this.items.length) {
this.index = 0;
return this.index;
} else {
return ++this.index;
}
}
}, {
key: "toJSON",
value: function toJSON() {
return {
_id: this._id,
items: this.items
};
}
}]);

return Playlist;
}(_events.EventEmitter);

exports.default = Playlist;
Loading

0 comments on commit 0cb1af2

Please sign in to comment.